内存管理与保护模式.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
内存管理与保护模式 本实验讨论x86采用的内存管理模式:从分段实模式到分段保护模式,再到分页虚拟内存管理,并介绍进入保护模式、启动分页机制、以及获取内存大小的基本方法。 1 x86的内存管理 内存的分段(segmentation)管理符合程序的逻辑结构,利于程序的保护和动态控制。分页(paging)则最适合虚拟内存的管理需要。目前主流操作系统的内存管理采用的是分页方法(如类Unix),也有采用段页式的(如Wiondows)。 Intel 8086支持不带保护功能的分段内存管理,80286开始引入带保护功能的分段内存管理,80386又引入了支持虚拟内存的分页内存管理,但其分页是建立在分段基础上的。IA-32和x64处理器,都支持段页式内存管理。 1.1 实模式 Intel的16位处理器8086,采用的是分段内存管理,CPU中有CS、DS、SS和ES四个16位段寄存器,作为基地址,分别用于生成代码、数据、堆栈和其他段的物理地址: 20位物理地址 = 16位段寄存器值*16(或左移4位) + 16位偏移量 寻址空间只有(220=)1MB,最大段长为(216=)64KB。 因为这样的CPU只能生成和访问真实的物理内存地址,所以被称为实地址模式(real-address mode),简称为实模式(real mode)。 不过这种分段方法并不是现代的分段技术,没有提供任何内存保护功能,不能阻止内存的越界访问。而且8086 CPU也没有提供任何特权分级,谁都可以任意改变CS、DS和SS寄存器中的值,从而可以执行/访问内存任何地址的指令/数据,完全没有安全可言。因此在8086 CPU上,是不可能构建现代操作系统的。 1.2 保护模式 1982年推出的16位的80286处理器,在x86体系中首次引入了(分段式的)内存保护机制,称之为保护模式(protected mode)。不过80286的保护模式只支持24位的地址空间(最多只能访问16MB内存)和16位的界限大小(最大段长为216=64KB或216+8=224=16MB),且只能从实模式进入保护模式,而不能从保护模式返回实模式。 1985年推出的32位的80386处理器,其保护模式支持32位的地址空间,寻址空间达到(232=)4GB。但是为了与分段式的8086兼容,80386并没有使用简单的线性地址空间,而是采用了基于分段的分页内存管理方法(其中的分页管理是80386新增加的)。这里的分段是必须的,分页则是可选的。 1.分段 分段将处理器可寻址的内存空间(称为线性地址空间)划分为较小的受保护的地址空间(称为段),段可用于容纳程序的代码、数据和堆栈,或系统的数据结构(如TSS或LDT)。可以为每个运行的程序指派各自的段集。分段机制还允许将段分类,从而可限制在某个特定段类上能够执行的操作。 为了定位特定段中的字节,必须提供一个逻辑地址(也称为远指针),它包含一个段选择符和一个偏移量。段选择符是段唯一的标识符,它提供段描述符在描述符表中的偏移量。段描述符指定段的大小、访问权限和特权级、段类型、段在线性地址空间中的起始地址(基址)。段的基址+偏移量=处理器线性地址空间中的线性地址。 2.分页 如果不使用分页,则IA-32处理器的线性地址空间直接映射到处理器的物理地址空间,不支持虚拟内存管理。对IA-32处理器,只有分页机制才支持虚拟内存,使处理器的线性地址空间可以大于内存的物理地址空间。 但是IA-32处理器的分页是建立在分段的基础之上的,即IA-32处理器采用的是段页式内存管理方法。在使用分页管理时,每个段被分成若干等长的页(对IA-32处理器,典型的页帧大小是4KB),这些页可以存放在内存中,也可以存放在磁盘上(即支持虚拟内存)。 当程序或任务试图访问线性地址空间中的地址位置时,处理器利用页目录和页表,将线性地址转换为物理地址。 为了节省内存空间,IA-32处理器采用的是两级分页方式。如果采用单级分页,对4KB(=212)页帧大小和4GB地址空间,需要1M(=220)个表项,每个表项4B则整个页表就需要4MB空间。由于一般的进程并不需要使用整个4GB的空间,所以大多数表项都空着的,非常浪费。如果采用二级分页,一级为页目录(Page Directory,PD),有(210=)1024个页目录项(Page Directory Entry,PDE)。每个页目录项指向一个二级页表(Page Table,PT),它也有(210=)1024个页表项(Page Table Entry,PTE),总共也是(1024*1024=220=)1M个页。但对空页目录项,不必创建其对应的页表,可以节省空间。 31 22 21 12 11 0 页目录项序号dir 页表项序号table 页帧内偏移量offset 4KB分页

文档评论(0)

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

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

1亿VIP精品文档

相关文档