歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux內存描述符mm_struct初窺

Linux內存描述符mm_struct初窺

日期:2017/2/28 15:57:14   编辑:Linux教程

上次講了Linux進程描述符(http://www.linuxidc.com/Linux/2012-02/53702.htm),這次我們在講講內存描述符,Linux的內存描述符也用一個結構體來表示,具體是mm_struct結構體,在linux/mm_types.h裡定義。Linux操作系統就是用這個結構體實現內存的管理,我們先看一下具體的字段情況。

  1. struct mm_struct {
  2. //擁有該結構體的進程的虛擬地址空間的大小
  3. unsigned long task_size;
  4. /* if non-zero, the largest hole below free_area_cache */
  5. unsigned long cached_hole_size;
  6. /* first hole of size cached_hole_size or larger */
  7. unsigned long free_area_cache;
  8. //在用戶空間下有多少用戶使用該內存
  9. atomic_t mm_users; /* How many users with user space? */
  10. //該結構體的引用計數值
  11. atomic_t mm_count;
  12. /*又出現了list_head,詳情請參考,簡單來講,list_head和list_for_each、list_entry共同實現了其“包含體”的鏈表。*/
  13. struct list_head mmlist;
  14. /*以下是關於代碼段、數據段,棧、環境變量、參數的起始地址或結束地址等*/
  15. unsigned long total_vm, locked_vm, shared_vm, exec_vm;
  16. unsigned long stack_vm, reserved_vm, def_flags, nr_ptes;
  17. unsigned long start_code, end_code, start_data, end_data;
  18. unsigned long start_brk, brk, start_stack;
  19. unsigned long arg_start, arg_end, env_start, env_end;
  20. /*
  21. * Last value of global fault stamp as seen by this process.
  22. * In other words, this value gives an indication of how long
  23. * it has been since this task got the token.
  24. * Look at mm/thrash.c
  25. */
  26. unsigned int faultstamp;
  27. unsigned int token_priority;
  28. unsigned int last_interval;
  29. };

該結構體可以通過進程描述符來得到,比如current是當前進程的描述符,則current->mm是指向內存的指針。mm是指向struct mm_struct的指針。若還想對Linux的進程描述符有一定了解,可以參考task_struct。見 http://www.linuxidc.com/Linux/2012-02/53702.htm

Copyright © Linux教程網 All Rights Reserved