next up previous contents
Next: 1.3 Regiony pamięci Up: 1 Obsługa wirtualnej przestrzeni Previous: 1.1 Przestrzeń adresowa procesu   Spis rzeczy

1.2 Deskryptor pamięci

Cała przestrzeń adresowa procesu jest określona przez jego deskryptor pamięci będący strukturą wskazywaną przez pole mm deskryptora procesu.

Typ deskryptora pamięci:

struct  mm_struct {
        struct vm_area_struct * mmap, * mmap_avl, * mmap_cache;
        pgd_t * pgd;
        atomic_t mm_users, mm_count;
        int map_count;
        struct semaphore mmap_sem;
        spinlock_t page_table_lock;
        unsigned long context;
        unsigned long start_code, end_code, start_data, end_data;
        unsigned long start_brk, brk, start_stack;
        unsigned long arg_start, arg_end, env_start, env_end;
        unsigned long rss, total_vm, locked_vm;
        unsigned long def_flags;
        unsigned long cpu_vm_mask;
        unsigned long swap_cnt;
        unsigned long swap_address;
        void * segments;
};

Aktualnie najważniejszymi polami deskryptora pamięci procesu są:

pgd i segments
Wskazuje odpowiednio na Globalny Katalog Stron i Lokalną Tablice Deskryptorów procesu.
rss
Liczba przyporządkowanych procesowi bloków stronicowych.
locked_vm
Liczba stron, których nie można wymienić.
count
Liczba procesów współdzielących ten sam deskryptor pamięci. Jeżeli większa od zera to mamy doczynienia z wątkiem.
mm_count
Liczba regionów pamięci posiadanych przez proces (<= MAX_MAM_COUNT).

Do stworzenia nowego deskryptora pamięci sluży funkcja mm_alloc(), która alokuje nowy obiekt w pamięci podręcznej alokatora płytowego.



2001-11-25