[Linux] MAIl-SEMINER IV

---------

New Message Reply About this list Date view Thread view Subject view Author view

From: Murat Koc (murat.koc@frontsite.de)
Date: Sat 06 Jul 2002 - 16:12:16 EEST


        
Selam,

Sevgili Enver yazdiklarimin okunamadigindan bahsetti cok birbirine
girmis yazmisim. tek paragrafta filan kusura bakmayin oyle kaptirip
yaziyorum sekle semale dikkat etmiyorum fazla ee bir de hepsini gecenin
korunde attim :)

O.k biraz daha ayirip duzgun yazmaya calisayim.

En son swap alaninda kalmistik oradan anlatmaya devam edelim.

------------------

Her swap alaninin slotlardan olustugundan bahsetmistim ve bunlarin
herbirinin bir page boyutunda oldugundan, yani 4096byte oldugundan.

Bu slotlardan ilki bu bu swap alani hakkinda bilgiyi tutar ve formati da
swap_header adli union da iki tane structure in birlesimi ile
tanimlanmistir. Bunlar info ve magic dir.

---------------------------------------------------------------------------
/*
 * Magic header for a swap area. The first part of the union is
 * what the swap magic looks like for the old (limited to 128MB)
 * swap area format, the second part of the union adds - in the
 * old reserved area - some extra information. Note that the first
 * kilobyte is reserved for boot loader or disk label stuff...
 *
 * Having the magic at the end of the PAGE_SIZE makes detecting swap
 * areas somewhat tricky on machines that support multiple page sizes.
 * For 2.5 we'll probably want to move the magic to just beyond the
 * bootbits...
 */
union swap_header {
        struct
        {
                char reserved[PAGE_SIZE - 10];
                char magic[10]; /* SWAP-SPACE or
SWAPSPACE2 */
        } magic;
        struct
        {
                char bootbits[1024]; /* Space for disklabel
etc. */
                unsigned int version;
                unsigned int last_page;
                unsigned int nr_badpages;
                unsigned int padding[125];
                unsigned int badpages[1];
        } info;
};

------------------------------------------------------------------------------

gerci buradan da gorulebilecegi gibi burada aciklamalari var ama yine de
ben aciklama yapmaya devam edeyim.

Bu magic structure i magic.magic ile o alanin swap alani oldugunu
belirtir. yukarida da gordugunuz gibi 10 karakterlik bir magic string
dir bu. buradaki o 10 karakterlik string ise swapping algoritmasinin
versionuna gore degisebilir. Bunu yukarda da zaten gorebilirsiniz. Bu
bolum daima ilk slot un sonunda bulunur.

Ikinci bolumumuz ise info bolumu. simdi buradakilere biraz daha detayli
bakacak olursak.

info.bootbits[1024]:
--------------
Yukarda da yazdigi gibi aslinda bu swapping algrotimasi tarafindan
kullanilmiyor. Bu bolum bildiginiz partition bilgisi, disk labellar
filan gibi bilgileri tutan bolum.

info.version:
--------------
tahmin edebileceginiz gibi swapping algoritmasinin versionu

info.last_page:
----------------
bu ise kullanilabilecek olan son page slot u.

info.nr_badpages:
-----------------

sanirim son derece acik. bozuk page slot sayisi

info.padding[125]:
------------------

padding byte lar.

info.badpages[1]:
-----------------
bu bozuk slotlarin yerlerini belirler

Iste hani sizin swap alani yaratirken kullandiginiz mkswap komutu da
butun bunlara uygun olarak yaratir. Bu arada bozuk olan slotlarda
belirlenir ve yerleri de tanimlanir. Sonra tabii ki sadece mkswap yapmak
bir isinize yaramiyor bildiginiz gibi bunu bir de swapon yapmak
gerekiyor. Bunu da yeri gelince anlatacagiz. Nasil inactive durumdan
active duruma geciriliyor diye.

Simdi biraz daha bu swap alani hakkinda devam edelim.

Her active swap alani nin memory de kendine ayri bir swap_info_struct i
vardir. Siumdi nasildir dersek. Iste boyle:

-------------------------------------------------------------------------
/*
 * The in-memory structure used to track swap areas.
 */
struct swap_info_struct {
        unsigned int flags;
        kdev_t swap_device;
        spinlock_t sdev_lock;
        struct dentry * swap_file;
        struct vfsmount *swap_vfsmnt;
        unsigned short * swap_map;
        unsigned int lowest_bit;
        unsigned int highest_bit;
        unsigned int cluster_next;
        unsigned int cluster_nr;
        int prio; /* swap priority */
        int pages;
        unsigned long max;
        int next; /* next entry on swap list */
};

--------------------------------------------------------------------------------

Buradakileri de aciklayalim.

unsigned int flags:
-------------------
swap alaninin flagleri

kdev_t swap_device:
-------------------
swap in oldugu aygitin device numarasi

spinlock_t sdev_lock:
---------------------
spinlock umuz. bu onceden swap_lockmap seklinde idi.

struct dentry * swap_file:
--------------------------
dosyanin veya device dosyasinin dentry si.

struct vfsmount *swap_vfsmnt:
-----------------------------
klasik vfsmount struct da bir swap_vfsmnt. simdi burada diyeceksiniz ki
alla alla swap alani mount mu ediliyor ki bu boyle vfsmount filan var
yok mount edilmiyor fakat sonucta burada bir filesystem olusturuluyor ve
swap_on() da filan sonucta swap alani dosya olabiliyor ki bu durumda da
dosya bazinda bakildiginda olaya nameidata giriyor ee burada da mount
bilgisi filan olmasi lazim. sanirim uygunouk olsun diye koyulmus bu
cunku swapon() ve swapoff() da filan bakildiginda degeri hep NULL olarak
gozukuyor.

unsigned short * swap_map:
---------------------------
iste bu bizim her page slot u icin bir counter dizisinin pointer i

unsigned int lowest_bit:
------------------------
free bir page slot aranmaya baslanacagi zaman ilk baslanan page slot.

unsigned int highest_bit:
-------------------------
free bir page slot aranmaya baslanacagi zaman son aranan page slot

unsigned int cluster_next:
--------------------------
free bir page slot aranirken aranacak olan sonraki slot

unsigned int cluster_nr:
------------------------
bastan tekrar baslamadan onceki free olan page slot sayisi

int prio:
---------
swap alaninin onceligi

int pages:
----------
kullanilabilir page slot sayisi

unsigned long max:
------------------
page olarak swap alaninin boyutu

int next:
---------
sonrasi swap alani tanimlayicisi

 
Evet bir sonrakinde de bu alanlari biraz daha detayli taniriz.

-- 
IYI CALISMALAR

MURAT KOC

-- Attached file included as plaintext by Ecartis -- -- File: signature.asc -- Desc: This is a digitally signed message part

-----BEGIN PGP SIGNATURE----- Version: GnuPG v1.0.7 (GNU/Linux)

iQIXAwUAPSbsrr6uWt8ry/OwFAI8QQf/WLk8JUua08vKTyvF52j/zNhEqkhWFdy7 RpbckMETD85wITK+9Uh3+LS/YJW1P081G1T9i9Q1OF7AZoxHmkUVFM9bK7mOXL+V Iu4c9YOtxpTye0yhKLWeHN1eEOvy8VKc1GUHMZitTrlBsdJ5OlzTGIpKSoY8X3Es XOY0loSN+4qzVht200pjOEPWmC641Z1TE+40Myhw+dR5ckm4VdkMoeEyfat4xEin LWCQGTm7L7eUtmiaTo5ElHxIraLG67WXxWhMhyshUohhYGj2y+hPqo5+jsvM0op4 IunHfuss4wA0m+Yb4hwmSF7o3XlJy250YlJlLIUMo00l821QcGKvAgf+JDjclNav fiM5gJ3MDK2E3PrJjI4IWjI0NdRRFnSK6be2zt0tT/26eeTD9PYxUM2MTHcyo3ad FWsXSC8O6iy/5T30LUVf5MRC6XiRVFsLNWTYQvevpMJER3uBuUCHL7ePZghVQcZC 8ZkKN42i4e1dzyVAa3CreOakhI6iYC4Imi3m8Gi3MleLmW6kbGFpszT/hvsdnj3X YiXGz+e7ZXw+gT2zLIfjwNggPImt+WbB25hWSVoXeESOIP0RcppylV+7YLSHyfUX qMO7FN2LbtgSrFRj2ZMwpo0CYtgT2Tw/g7rPCAmkOt09HZXNDbRHffqW5E8jA96w j5tY0+dVZWIidw== =deNo -----END PGP SIGNATURE-----

----------------------------------------------------------------------- Liste üyeliğiniz ile ilgili her türlü işlem için http://liste.linux.org.tr adresindeki web arayüzünü kullanabilirsiniz. Listeden çıkmak için: 'linux-request@linux.org.tr' adresine, "Konu" kısmında "unsubscribe" yazan bir e-posta gönderiniz. -----------------------------------------------------------------------


New Message Reply About this list Date view Thread view Subject view Author view

---------

Bu arsiv hypermail 2b29 tarafindan uretilmistir.