zoukankan      html  css  js  c++  java
  • Linux内核虚拟内存的管理结构说明

      1 一块虚拟内存空间用该结构来表示,然后所有的虚拟地址空间块构成了一个链表。并且形成了一个AVL树。便于查找。
      2 
      3 
      4 Vm_area_struct 结构。
      5 
      6 Typedef struct  tag_vm_area_struct
      7 
      8 {
      9 
     10 Struct mm_struct* mm;
     11 
     12 
     13 //决定了一个虚拟地址空间的Start和End
     14 
     15      Unsigned long    vm_start;
     16 
     17  Unsigned long    vm_end;
     18 
     19 
     20 //该块空间的访问属性和其他属性
     21 
     22  Pgprot_t vm_page_prot;
     23 
     24  Unsigned long  vm_flags;
     25 
     26 
     27 //虚拟地址空间块的链表
     28 
     29 Struct vm_area_struct *  vm_next;
     30 
     31 
     32 //虚拟地址空间块的AVL树
     33 
     34 Short vm_avl_height;
     35 
     36 Struct vm_area_struct *  vm_avl_left;
     37 
     38 Struct vm_area_struct *  vm_avl_right;
     39 
     40 
     41 Struct vm_operational_struct * vm_ops;
     42 
     43 
     44 
     45 Struct vm_area_struct *  vm_next_share;
     46 
     47 Struct vm_area_struct *  vm_pprev_share;
     48 
     49 
     50 
     51 Unsigned long      vm_pgoff;
     52 
     53 
     54 Struct file *   vm_file;
     55 
     56 
     57 Unsigned long    vm_raend;
     58 
     59 
     60 Void * vm_private_data;
     61 
     62 
     63 }vm_area_struct;
     64 
     65 
     66 
     67 
     68 Mm_struct 结构
     69 
     70 
     71 是进程整个用户空间的抽象。
     72 
     73 
     74 Struct mm_struct 
     75 
     76 {
     77 
     78 Struct vm_area_struct *   mmap;   //vm区域的链表头
     79 
     80 Struct vm_area_struct *   mmap_avl;   //vm的avl树
     81 
     82 Struct vm_area_struct *   mmap_cache;   //vm区域缓冲cache
     83 
     84 
     85 Pgd_t  * pgd;       //页面目录表
     86 
     87 
     88 Atomic_t    mm_users; 
     89 
     90 Atomic_t    mm_count;
     91 
     92 
     93 
     94 //vm的个数
     95 
     96 Int          mapcount;
     97 
     98 
     99 Struct semaphore mmap_sem;
    100 
    101 
    102 Spinlock_t    page_table_lock;
    103 
    104 
    105 Stuct list_head    mmlist;
    106 
    107 
    108 Unsigned long  start_code, end_code, start_data, end_data;
    109 
    110 
    111 Unsigned long  start_brk, brk, start_stack;
    112 
    113 
    114 Unsigned long   arg_start, arg_end, env_start, env_end;
    115 
    116 
    117 Unsigned long   rss, total_vm, locked_vm;
    118 
    119 Unsigned long   def_flags;
    120 
    121 Unsigned long   cpu_vm_mask;
    122 
    123 Unsigned long   swap_cnt;
    124 
    125 Unsigned long   swap_address;
    126 
    127 Mm_context_t   context;
    128 
    129 };
    130 
  • 相关阅读:
    Ubuntu打开终端的方法三种
    javascript 获取随机数
    HTML5中类jQuery选择器querySelector的使用
    PHP stream_context_create()作用和用法分析
    一些常用的api接口、
    怎么样学好C++
    指针访问与数组访问的效率分析
    架构师
    Java 之 StringTokenizer
    类型转换操作符static_cast、const_cast、dynamic_cast、reinterpret_cast
  • 原文地址:https://www.cnblogs.com/herso/p/1729736.html
Copyright © 2011-2022 走看看