图5-19 存储器的分段和分页 分段将处理器的可寻址存储器空间(叫做线性地址空间)分成叫做段的较小的保护地址空间,段可用来存放程序的代码、数据以及堆栈数据,或者存放系统数据,如果处理器上有不止一个程序或任务在运行,各个程序或任务可以拥有自己的段集。处理器通过在段与段之间分界,来保证程序或任务之间不会互相干扰。分段机制还将段分类,这样可以对某些特殊类型的段操作进行限制。 系统内的所有段的地址都包括在处理器的线性地址空间中,要在一个指定的段内定位一个字节,必须给出逻辑地址。逻辑地址包括段选择符和偏移量。段选择符是段描述符的识别标志。每个段都有一个段描述符,它指示着段的基址、段的大小、段的类型、段的访问权限和特权级。段基址加上偏移量应形成线性地址,该线性地址指出了线性地址空间中段内的一个字节。 如果不使用分页,处理器的线性地址空间就直接射到物理地址空间。物理地址空间定义在处理器的地址总线所能覆盖的地址范围。 在多任务系统中定义的线性地址空间通常要比实际的物理存储空间大,因此,利用“虚拟”线性地址空间的方法,这种线性地址空间的虚拟化就是通过处理器的分页机制来实现的。 分页支持“虚拟存储器”环境,使得用少量的物理存储器(RAM 与ROM)就能访问很大的影射到磁盘存储器的线性地址空间。在使用分页时,每个段分成若干个页面,这些页面既可以放在物理存储器中,也可放在磁盘上,操作系统或监控程序保留有一个页目录与一套页表,使用这些页映射信息,可以找到页面。当程序(或任务)试图访问线性地址空间中的地址单元时,处理器使用页目录和页表将线性地址转换成物理地址,找到指定的存储单元。如果要访问的页目前不在物理存储器中,处理器就通过产生页面错误异常中断程序的执行,然后操作系统或监控程序从磁盘上将该页面读到物理存储器中,并继续执行被中断的程序。 |