52页式存储管理1.分页基本方法分页(paging)内存管理方案允许进程.doc

52页式存储管理1.分页基本方法分页(paging)内存管理方案允许进程.doc

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
52页式存储管理1.分页基本方法分页(paging)内存管理方案允许进程.doc

5.2 页式存储管理 1. 分页基本方法 分页 (paging) 内存管理方案允许进程的物理地址空间可以是非连续的。分页避免了将不同大小的内存块匹配到交换空间上这样的麻烦。当位于内存中的代码或数据需要换出时,必须先在备份区上找到空间,这时间题就产生了。备份区也有前面所述与内存相关的碎片问题,只不过访问更慢,因此不适宜采用合并。所以各种形式的分页由于其优越性,通常为绝大多数操作系统都采用。传统上,分页支持一直是由硬件来处理的。然而,最近的设计是通过将硬件和操作系统相配合来实现分页(尤其是在64位微处理器上)。 实现分页的基本方法涉及将进程逻辑地址空间分成大小相等的区,每个分区称为页(page),页从0开始依次编号。同时把主存物理地址空间也分成大小相等的区,每个区是一个帧(frame,也叫物理块或页框)。帧大小与页大小相等。运行一个有n页大小的程序,需要找到n个空闲帧来存放程序。 与此对应分页存储器的逻辑地址由两部分组成:页号和页偏移。逻辑地址是连续的,用户在编制程序时仍使用相对地址,不必考虑如何分页,由硬件地址转换机制和操作系统的管理需要来决定页尺寸,从而确定主存的分块大小。进程在主存中的每个帧内的地址是连续的,但帧之间的地址可以不连续。 页的大小通常为2的幂次,根据计算机结构的不同,其每页大小从512B ~ 16MB不等。在Linux x86中一个帧和一个页的大小为4K。选择页的大小为2的幂可以方便地将逻辑地址转换为页号和页偏移。如果逻辑地址空间为2m,且页大小为2n 单元(字节或字),那么逻辑地址的高m-n位表示页号,而低n位表示页偏移。 页表是操作系统为进程建立的,是进程的逻辑页和主存对应物理帧的对照表。页表包含每页所在物理内存的基地址,其每一栏指明进程中的一个页和分得的帧之间的对应关系。通过页表可以把逻辑地址转化成物理地址,送交物理单元。内存的分页模型如图5.11所示。 图5.11逻辑内存和物理内存的分页模型 值得注意的是,分页其实也是一种动态重定位。每个逻辑地址绑定为一定的物理地址。采用分页类似于使用一组重定位寄存器,每个基地址对应着一个内存帧。 所以分页的重要特点是用户视角的内存和实际的物理内存的分离。用户程序将内存作为一整块来处理,而且它只包括这一个进程。事实上,一个用户程序与其他程序一起,分布在物理内存上。用户视角的内存和实际的物理内存的差异是通过地址转换协调的。逻辑地址转变成物理地址。这种映射是用户所不知道的,但是受操作系统所控制。注意用户进程根据定义是不能访问非它所占用的内存的。它无法访问其页表所规定之外的内存,页表只包括进程所拥有的那些页。 由于操作系统管理物理内存,它必须知道物理内存的分配细节:哪些帧己占用,哪些帧可用,总共有多少帧,等等。这些信息通常保存在称为帧表的数据结构中。在帧表(frame table) 中,每个条目对应着一个帧,以表示该帧是空闲还是己占用,如果占用,是被哪个(或哪些)进程的哪个页所占用。 另外,操作系统必须意识到用户进程是在用户空间内执行,且所有逻辑地址必须映射到物理地址。如果用户执行一个系统调用(例如进行I/O) ,并提供地址作为参数(如一个缓冲) ,那么这个地址必须映射成物理地址。操作系统为每个进程维护一个页表的副本,就如同它需要维护指令计数器和寄存器的内容一样。当操作系统必须手工将逻辑地址映射成物理地址时,这个副本可用来将逻辑地址转换为物理地址。当一个进程可分配到CPU,CPU调度程序可以根据该副本来定义页表。因此,分页增加了切换时间。 另外,采用分页技术的一个好处是不会产生外部碎片:每个帧都可以分配给需要它的进程。不过,分页有内部碎片。注意分配是以帧为单元进行的。如果进程所要求的内存并不是页的整数倍,那么最后一个帧就可能用不完。例如,如果页的大小为2048 B,一个大小为72776 B的进程需要 35个页和1086 B。进程会得到36 个帧,因此有 2048-1086=962B的内部碎片。在最坏情况下,一个需n页再加 1B的进程,需要分配n+1个帧,这样几乎产生一个整个帧的内部碎片。 如果进程大小与页大小无关,那么可以推测平均每个进程可能有半页的内部碎片。这一结果意味着小一点的页可能好些。不过,由于页表中的每项也有一定的开销,该开销随着页的增大而降低。而且,磁盘I/ O 操作随着传输量的增大会更为有效。一般来说,随着时间的推移,页的大小也随着进程、数据和内存的不断增大而增大。现在,页大小通常为4~8 KB,有的系统可能支持更大的页。有的CPU 内核可能支持多种页大小。例如,Solaris 根据页所存储的数据,可使用8KB或4MB 的大小的页。 2. 地址映射机制 由CPU 生成的每个地址分为两个部分:页号(p)和页偏移(d)。如果逻辑地址空间为2m,且页大小为2

文档评论(0)

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

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

1亿VIP精品文档

相关文档