网站大量收购闲置独家精品文档,联系QQ:2885784924

北航linux课件——LINUX存储管理.ppt

  1. 1、本文档共40页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
LINUX存储管理 地址空间 地址空间(address space)是一段表示内存位置的地址范围。地址空间有两种: 物理地址空间 逻辑地址空间,也被称为虚拟地址空间 在逻辑地址和物理地址之间相互转换的工作是由内核和硬件内存管理单元(MMU—memory management unit)共同完成的。MMU是被集成进现代的CPU里的,它们都是同一块CPU芯片内的一个部分。内核告诉MMU如何为每个进程把某逻辑页面映射到某特定物理页面,而MMU在进程提出内存请求时完成实际的转换工作。 LINUX的虚拟地址划分 每一个用户进程都可以访问4GB的线性虚拟内存空间。 从0到3GB的虚拟内存地址是用户空间,用户进程可以直接对其进行访问。 从3GB到4GB的虚拟内存地址为核心态空间,存放仅供核心态访问的代码和数据,用户态进程不可访问。 所有进程从3GB到4GB的虚拟空间都是一样的,有同样的页目录项,同样的页表,对应到同样的物理内存段。LINUX以此方式让内核态进程共享代码段和数据段。 内核态虚拟空间从3GB到3GB+4M的一段(也就是进程页目录第768项所管辖的范围),被映射到物理空间0到4M段。因此,进程处于核心态时,只要通过访问虚拟空间3GB到3GB+4M段,偏移地址0到4M,即访问了物理空间0到4M段。 虚拟地址转换 虚拟地址转换 转换后备缓存(Translation Lookaside Buffers:TLBs) 如果简单的执行从逻辑地址到物理地址的转换过程,在跟踪指针链时将会需要几个内存引用。RAM虽然不像磁盘那么慢,但是仍然比CPU要慢的多,这样就容易形成性能的瓶颈。为了减少这种开销,最近被执行过的地址转换结果将被存储在MMU的转换后备缓存(translation lookaside buffers:TLBs)内。 虚存段(VMA)的组织和管理 VMA:vitual memory area 一个vma段是某个进程的一段连续的虚存空间;在这段虚存里的所有单元拥有相同的特征。例如:属于同一进程,相同的访问权限,同时被锁定(locked),同时受保护(protected),等等。 进程通常占用几个vma段,分别用于代码段、数据段、堆栈段等。属于同一进程的vma段通过vm_next指针连接,组成链表。对于一个给定的进程,两个VMAs决不会重叠,一个地址最多被一个VMA所覆盖;进程从未访问过的的一个地址将不会在任何一个VMA中。 struct mm_struct结构的成员struct vm_area_struct * mmap 表示进程的vma链表的表头。 虚存段(VMA)的组织和管理 当一个进程有多于avl_min_map_count数目的VMA时,内核也会创建一个AVL树来存储它们,此时仍然是使用VMAs自己的指针对该树进行管理。AVL树是一个平衡二叉树结构,因此这种方法在VMA数量巨大时查找效率十分高。 AVL树 PCB对内存的控制 物理空间管理 物理空间的组织 空闲物理内存管理 空闲内存的组织 分配 回收 物理空间的组织 (include/linux/fs.h,struct page) 物理内存以页帧(page frame)为单位,页帧的长度固定,等于页长,对INTEL CPU缺省为4K字节。 LINUX对物理内存的管理通过mem_map表描述(mm/memory.c)。 mem_map在系统初始化时由free_area_init()函数创建(mm/page_alloc.c)。 它本身是关于struct page mem_map_t (linux/mm.h)的数组,每项mem_map_t对应一个关于核心态、用户态代码和数据等的页帧。 mem_map在物理空间的位置 struct page 134 typedef struct page { 135 struct list_head list; 136 struct address_space *mapping; 137 unsigned long index; /* 若该页帧的内容是文件,则index指出文件的inode和偏移位置 */ 138 struct page *next_hash; 139 atomic_t count; /* 指明目前使用该页面的用户数。count==0意味着此页空闲 */ 140 unsigned long flags; /* atomic flags, some possibly updated asynchronously */ 141

文档评论(0)

junjun37473 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档