现在的位置: 首页 > 综合 > 正文

段页式虚拟存储器

2019年01月02日 ⁄ 综合 ⁄ 共 1090字 ⁄ 字号 评论关闭

段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。

     首先,实存被等分成页。在段页式虚拟存储器中,把程序按逻辑结构分段以后,再把每段按照实存的页大小分页,程序按页进行调入和调出操作,但它又可按段实现共享和保护。因此,它可以兼有页式和段式系统的优点。它的缺点是在地址映像过程中需要多次查表,虚拟地址转换成物理地址是通过一个段表和一组页表来进行定位的。段表中的每个表目对应一个段,每个表目有一个指向该段的页表的起始地址(页号)及该段的控制保护信息。由页表指明该段各页在主存中的位置以及是否已装入、已修改等标志。

      如果有多个用户在机器上运行,称为多道程序,多道程序的每一道(每个用户)需要一个基号(用户标志号),可由它指明该道程序的段表起点(存放在基址寄存器中)。一个虚拟地址应包括基号B、段号S、段内逻辑页号P、页内地址D。格式如下:

 

基号B

段号S

段内逻辑页号P

页内地址D

 

      [例3.9]  假设有三道程序,基号用A、B和C表示,其基址寄存器的内容分别为SA、SB和SC。程序A由4个段构成,程序C由3个段构成。段页式虚拟存储系统的逻辑地址到物理地址的变换过程如图3.35所示。

图3.35  段页式虚拟存储器虚实地址变换过程

     在主存中,每道程序都有一张段表,A程序有4段,C程序有3段,每段应有一张页表,段表的每行就表示相应页表的起始位置,而页表内的每行即为相应的物理页号。请说明虚实地址变换过程。

      解:地址变换过程如下:

     (1由存储管理部件根据基号C找到段表基址寄存器表第c个表项,获得程序C的段表基址SC。再根据段号S(=1)找到程序C段表的第S个表项,得到段S的页表起始地址b。

     2)根据段内逻辑页号P(=2)检索页表,得到物理页号(图中物理页号为10)。

     3)物理页号与页内地址偏移量拼接即得物理地址。

      假如计算机系统中只有一个基址寄存器,则基号可不要。多道程序切换时,由操作系统修改基址寄存器内容。

      实际上,上述每个段表和页表的表项中都应设置一个有效位。只有在有效位为1时才按照上述流程操作,否则需中断当前操作先进行建表或调页。



Linux 和 Windows 在 i386 CPU 上执行的时候,虽然既分段也分页,但跟教科书上讲的“段页式”是不同的性质。实际的操作系统往往把分段作为一个摆设,分页做得很细致,段也还是分的,但各个段往往重合到一起(即一个段?),也就是我们平常说的 flat memory
model。

分段是必需的,分页是可选的

但是现代操作系统对分段的使用都是敷衍性质。。。。。。。

抱歉!评论已关闭.