上次講了Linux進程描述符(http://www.linuxidc.com/Linux/2012-02/53702.htm),這次我們在講講內存描述符,Linux的內存描述符也用一個結構體來表示,具體是mm_struct結構體,在linux/mm_types.h裡定義。Linux操作系統就是用這個結構體實現內存的管理,我們先看一下具體的字段情況。
- struct mm_struct {
- //擁有該結構體的進程的虛擬地址空間的大小
- unsigned long task_size;
- /* if non-zero, the largest hole below free_area_cache */
- unsigned long cached_hole_size;
-
- /* first hole of size cached_hole_size or larger */
- unsigned long free_area_cache;
-
- //在用戶空間下有多少用戶使用該內存
-
- atomic_t mm_users; /* How many users with user space? */
-
- //該結構體的引用計數值
- atomic_t mm_count;
-
-
- /*又出現了list_head,詳情請參考,簡單來講,list_head和list_for_each、list_entry共同實現了其“包含體”的鏈表。*/
-
- struct list_head mmlist;
-
-
- /*以下是關於代碼段、數據段,棧、環境變量、參數的起始地址或結束地址等*/
- unsigned long total_vm, locked_vm, shared_vm, exec_vm;
- unsigned long stack_vm, reserved_vm, def_flags, nr_ptes;
- 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;
- /*
- * Last value of global fault stamp as seen by this process.
- * In other words, this value gives an indication of how long
- * it has been since this task got the token.
- * Look at mm/thrash.c
- */
- unsigned int faultstamp;
- unsigned int token_priority;
- unsigned int last_interval;
-
- };
該結構體可以通過進程描述符來得到,比如current是當前進程的描述符,則current->mm是指向內存的指針。mm是指向struct mm_struct的指針。若還想對Linux的進程描述符有一定了解,可以參考task_struct。見 http://www.linuxidc.com/Linux/2012-02/53702.htm