Linux操作系统存储器管理..docVIP

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux操作系统存储器管理.

Linux是一种自由和开放源码的类Unix操作系统。目前存在着许多不同的Linux,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,从手机、平板电脑、路由器和视频游戏控制台,到台式计算机、大型机和超级计算机。Linux 操作系统的诞生1981 年IBM 公司推出享誉全球的微型计算机IBM PC。Linux实现了基于虚拟页式存储管理的虚拟存储,在i386结构的机器上,每个用户任务的虚拟地址空间都可达到4GB。 ??Linux的存储管理使用了三层页表来处理逻辑地址到物理地址的转换,分别是PGD(页表目录)、PMD(中间页表目录)和PT(页表)。 ??Linux将存储管理分为物理内存管理、内核内存管理、虚拟内存管理、内核虚拟内存管理和用户级内存管理。物理内存管理以页为单位,记录、分配和回收物理内存,物理内存管理使用Buddy(伙伴)算法。 (2)物理页的分配 所有物理内存的分配和释放必须针对连续的物理内存。因此,Buddy酸法将内存划分成2的i次方页大小的连续的页块,每一组有相同的i值。并且将同一组的空闲页块链接成一个双向链表然后将所有链表的头节点组成一个数组。 分配空间时,首先要在页块大小相应的空闲页块链中找到一块空间来返回给调用者,如果在这个链里没有找到合适的空间分配,则到free_area数组中的下一个元素的空闲链中去查找,直至找到能够分配的空间。 (3)物理页的释放 内存管理系统,在分配空间时将大页块都划分成了小页块,这使得系统中的页块都越变越小,这对于分配大块内存是不利的。为了避免产生大量的内存碎片,内存管理系统在物理页释放时,应该斤可能地将小页块合并成大页块。 (4)物理内存管理评价 为了内存对齐,Buddy算法往往会分配一些多余的内存空间给用户,这对提供内存利用率是不利的;但是Buddy算法避免了内存碎片的产生,避免了内存紧抽的开销,效率很高。 2内核内存管理:内核内存管理主要负责为各种内核数据结构分配空间,其大小一般较小。如果使用以页为单位的物理内存管理则浪费较大,为此Linux专门提供了使用Slab算法的内核内存管理。虚拟内存管理在物理内存管理的基础上,使用请求调页机制和交换机制,为系统中的每个进程都提供高达4GB(i386平台)的虚拟内存空间。页表的管理 一个页表入口标识一个物理页,它包含了物理页的大量信息,如该页是否有效、该页的读写权限等。最重要的是页表入口给出了物理页的页框号,根据这个物理页框号就可以找到这个物理页的实际起始物理地址。 ??为了操作系统的可移植性,Linux使用三级页表来存储虚拟地址转换为物理地址映射关系。一级页表只占用一个页,其中存放了二级页表的入口指针,记为PGD;二级页表中存放了三级页表的入口的指针,记为pmd;在三级页表中每个项都是一个页表入口。在Linux的X86版本中,只使用了两极页表,即第一级和第三级,在Intel系列CPU中,一个物理页面大小是4KB,而每个页表项大小是4字节。因此,每个物理页面可以包含1024个页表项,则在X86平台上,每个进程的地址空间为1024*1024*4KB=4GB大小。 虚拟存储空间的管理在Linux系统中,主要使用了3个层次的数据结构page、mm_struct和vm_area_struct来表示进程的虚拟地址空间。最底层的page结构描述了一个物理页桢及其页内消息的相关属性和链接指针,包括标志位、引用技术等。vm_area_struct结构是中间层次,它描述了一个虚拟内存区域(即一段连续的虚拟地址空间)的属性。其中,包括虚拟内存区域的开始、结束地址、访问权限、页目录、映射文件和链接指针。其定义参考linux\linux-2.4.x\include\linux\mm.h. ??mm_struct是描述进程虚拟地址空间的最高层的数据结构,一个mm_struct就代表一个独立进程的虚拟内存空间。该结构中记录了实现任务管理的进程模型所需要的内存管理相关的全部信息,如: 进程的也目录的位置 进程的代码、数据、堆栈、堆、环境变量、入口参数等在虚拟地址空间中的存储位置 进程占用的物理页桢树木、进程的LDT(局部描述符表)、引用计数 进程的虚拟地址空间的虚拟内存区域链表的链接信息和一些统计信息 虚拟地址空间的创建进程虚拟地址空间的创建实际上可以分为两个步骤。首先,复制父进程的地址空间;然后,根据可执行映像的要求,创建新的内存地址空间。虚拟地址空间的复制完全复制父进程的地址空间,需要将父进程的内存管理结构、mm_struct、vm_area_struct页目录表、页表以及对应物理页桢的内容都复制到子进程中。显然,开销太大。针对这个问题,Linux对于fork调用,Linux使用了COW技术,同

文档评论(0)

sa1fs5g1xc1I + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档