第七节 虚拟存储器
7.1 虚拟存储器的基本概念
1.什么是虚拟存储器虚拟存储器只是一个容量非常大的存储器的逻辑模型,
不是任何实际的物理存储器。
它借助于磁盘等辅助存储器来扩大主存容量,使之为更大或更多的程序所使用。
它指的是主存 -外存层次。以透明的方式给用户提供了一个比实际主存空间大得多的程序地址空间。
注意,
物理地址 由 CPU地址引脚送出,用于访问主存的地址。
虚拟地址 由编译程序生成的,是程序的逻辑地址,其地址空间的大小受到辅助存储器容量的限制。
主存 -外存层次 和 cache-主存层次 用的地址变换映射方法和替换策略是相同的,都基于 程序局部性原理 。
主存 -外存层次和 cache-主存层次用的地址变换映射方法和替换策略它们遵循的原则是:
①把程序中最近常用的部分驻留在高速的存储器中。
②一旦这部分变得不常用了,把它们送回到低速的存储器中。
③ 这种换入换出是由硬件或操作系统完成的,对用户是透明的。
④ 力图使存储系统的性能接近高速存储器,价格接近低速存储器。
2,主存 -外存层次的基本信息传送单位段、页或段页。
段,按照程序的逻辑结构划分成的多个相对独立部分,作为独立的逻辑单位。
优点 是段的逻辑独立性使它易于编译、管理、修改和保护,也便于多道程序共享;某些类型的段具有动态可变长度,允许自由调度以便有效利用主存空间。
缺点 是因为段的长度各不相同,起点和终点不定,给主存空间分配带来麻烦,而且容易在段间留下许多空余的零碎存储空间,造成浪费。
页,主存物理空间中划分出来的等长的固定区域。
优点 是页面的起点和终点地址是固定的,方便造页表,新页调入主存也很容易掌握,比段式空间浪费小。
缺点 是处理、保护和共享都不及段式来得方便。
段页式管理,采用分段和分页结合的方法。
程序按模块分段,段内再分页,进入主存以页为基本信息传送单位,用段表和页表进行两级定位管理。
7.2 页式虚拟存储器页式虚拟存储系统中,虚拟空间分成页,称为 逻辑页 ;
主存空间也分成同样大小的页,称为 物理页 。
虚存地址分为两个字段,高字段为逻辑页号,
低字段为页内行地址。
实存地址也分两个字段,高字段为物理页号,低字段为页内行地址。
页表中每一个虚存逻辑页号有一个表目录,表目录内容包含该逻辑页所在的主存页面地址 (物理页号 ),用它作为实存地址的高字段,与虚存地址的页内行地址字段相拼接,产生完整的实主存地址,据此来访问主存。
快表,为了避免页表已保存或已调入主存储器时对主存访问次数的增多,把页表的最活跃部分存放在高速存储器中组成 快表 。
快表由硬件组成,比页表小得多,查表时,由逻辑页号同时去查快表和慢表,当在快表中有此逻辑页号时,就能很快地找到对应的物理页号送入实主存地址寄存器,从而做到虽采用虚拟存储器但访主存速度几乎没有下降。
快表与慢表实现内部地址变换的方式演示
7.3,段式虚拟存储器在段式虚拟存储系统中,段是按照程序的逻辑结构划分的,各个段的长度因程序而异。
虚拟地址由段号和段内地址组成,为了把虚拟地址变换成实主存地址,需要一个段表。
段表也是一个段,可以存在外存中,但一般是驻留在主存中虚存地址向实存地址的变换过程演示
7.4 段页式虚拟存储器段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。
它把程序按逻辑单位分段以后,再把每段分成固定大小的页。
程序对主存的调入调出是按页面进行的,但它又可以按段实现共享和保护,兼备页式和段式的优点。
缺点 是在映象过程中需要多次查表。
在段页式虚拟存储系统中,每道程序是通过一个段表和一组页表来进行定位的。段表中的每个表目录对应一个段,每个表目录有一个指向该段的页表起始地址及该段的控制保护信息。由页表指明该段各页在主存中的位置以及是否已装入、已修改等状态信息。
如果有多个用户在机器上运行,多道程序的每一道需要一个基号,由它指明该道程序的段表起始地址。
虚拟地址格式如下:
基号 段号 页号 页内地址
【 例 】 假设有三道程序 (用户标志号为 A,B,C),其基址寄存器内容分别为 SA,SB,SC,逻辑地址到物理地址的变换过程在主存中,每道程序都有一张段表,A程序有 4段,C程序有 3段。每段应有一张页表,段表的每行就表示相应页表的起始位置,而页表内的每行即为相应的物理页号。请说明虚实地址变换过程。
【 解 】
【 解 】
①根据基号 C执行 SC加 1(段号)操作,得到段表相应行地址,其内容为页表的起始地址b。
②执行 b+2(页号),得到物理页号的地址,
其内容即为物理页 10。
③物理页号与页内地址拼接即得物理地址。
如计算机只有一个基址寄存器,基号可不要,多道程序切换时,操作系统修改基址寄存器内容。
可以看出,段页式虚拟存储系统由虚拟地址向主存地址的变换至少需要查两次表。
7.5 替换算法虚拟存储器中的页面替换策略和 cache中的行替换策略有很多相似之处,但有三点显著不同:
(1)缺页至少要涉及前一次磁盘存取,读取所缺的页,
缺页使系统蒙受的损失要比 cache未命中大得多。
(2)页面替换是由操作系统软件实现的。
(3)页面替换的选择余地很大,属于一个进程的页面都可替换。
虚拟存储器中的替换策略一般采用 LRU算法、
LFU算法 FIFO算法,或将两种算法结合起来使用。
对于将被替换出去的页面,假如该页调入主存后没有被修改,就不必进行处理,否则就把该页重新写入外存,以保证外存中数据的正确性。为此,在页表的每一行应设置一修改位。
【 例 】 假设主存只有 a,b,c三个页框,组成 a进 c出的
FIFO队列,进程访问页面的序列是 0,1,2,4,2,
3,0,2,1,3,2号。
若采用① FIFO算法,
② FIFO算法 +LRU算法,
用列表法分别求两种替换策略情况下的命中率。
页面访问序列 0 1 2 4 2 3 0 2 1 3 2
命中率
FIF
O
算法
a 0 1 2 4 4 3 0 2 1 3 3 2/11
=
18.2
%
b 0 1 2 2 4 3 0 2 1 1
c 0 1 1 2 4 3 0 2 2
命中命中
FIF
O+
LRU
算法
a 0 1 2 4 2 3 0 2 1 3 2 3/11
=
27.3
%
b 0 1 2 4 2 3 0 2 1 3
c 0 1 1 4 2 3 0 2 1
命中命中命中
7.6 虚拟存储器实例
1.奔腾 PC的虚地址模式分段不分页模式,虚拟地址由一个 16位的段参照和一个 32位的偏移组成。分段部件 SU将二维的分段虚拟地址转换成一维的 32位线性地址。优点是无需访问页目录和页表,地址转换速度快。对段提供的一些保护定义可以一直贯通到段的单个字节级。
分段分页模式,在分段基础上增加分页存储管理的模式。
即将 SU部件转换后的 32位线性地址看成由页目录、页表、页内偏移三个字段组成,再由 PU部件完成两级页表的查找,将其转换成 32位物理地址。兼顾了分段和分不分段分页模式,这种模式下 SU不工作,只是分页部件 PU工作。程序也不提供段参照,寄存器提供的
32位地址被看成是由页目录、页表、页内偏移三个字段组成。由 PU完成虚拟地址到物理地址的转换。这种模式减少了虚拟空间,但能提供保护机制,比分段模式具有更大的灵活性。
2.保护模式的分页地址转换页面 (页框 )大小为 4MB的分页方式 使用单级页表,
只进行一次主存访问,地址转换过程加快了。
在此方式下,32位线性地址分为高 10位的页面和低 22位的页内偏移两个字段 。页表项的 I位指示页面大小,P位为出现位,A位为访问过位,D位为修改过位,RW位用于读 /
写控制,US位用于用户 /监督控制,PCD位用于页 cache
禁止的控制,PWT位用于页全写法的控制。
7.7 存储保护
1 存储区域保护当多个用户共享主存时,应防止由于一个用户程序出错而破坏其他用户的程序和系统软件,以及一个用户程序不合法地访问不是分配给它的主存区域。
在虚拟存储系统中,通常采用 页表保护,段表保护和 键式保护 方法。
页表保护和段表保护每个程序的段表和页表本身都有自己的保护功能。每个程序的虚页号是固定的,经过虚地址向实地址变换后的实存页号也就固定了。那么不论虚地址如何出错,也只能影响到相对的几个主存页面。不会侵犯其他程序空间。段表和页表的保护功能相同,但段表中除包括段表起点外,还包括段长。
键保护方式这种方法是为主存的每一页配一个键,称为存储键,每个用户的实存页面的键都相同。为了打开这个锁,必须有钥匙,称为访问键。访问键赋予每道程序,并保存在该道程序的状态寄存器中。
当数据要写入主存的某一页时,访问键要与存储键相比较。若两键相符,则允许访问该页,否则拒绝访问。
环保护方式环保护方式可以做到对正在执行的程序本身的核心部分或关键部分进行保护。它是按系统程序和用户程序的重要性及对整个系统的正常运行的影响程度进行分层,每一层叫做一个环。在现行程序运行前由操作系统定好程序各页的环号,并置入页表中。然后把该道程序的开始环号送入
CPU的现行环号寄存器。程序可以访问任何外层空间;访问内层空间则需由操作系统的环控例行程序判断这个向内访问是否合法。
7.1 虚拟存储器的基本概念
1.什么是虚拟存储器虚拟存储器只是一个容量非常大的存储器的逻辑模型,
不是任何实际的物理存储器。
它借助于磁盘等辅助存储器来扩大主存容量,使之为更大或更多的程序所使用。
它指的是主存 -外存层次。以透明的方式给用户提供了一个比实际主存空间大得多的程序地址空间。
注意,
物理地址 由 CPU地址引脚送出,用于访问主存的地址。
虚拟地址 由编译程序生成的,是程序的逻辑地址,其地址空间的大小受到辅助存储器容量的限制。
主存 -外存层次 和 cache-主存层次 用的地址变换映射方法和替换策略是相同的,都基于 程序局部性原理 。
主存 -外存层次和 cache-主存层次用的地址变换映射方法和替换策略它们遵循的原则是:
①把程序中最近常用的部分驻留在高速的存储器中。
②一旦这部分变得不常用了,把它们送回到低速的存储器中。
③ 这种换入换出是由硬件或操作系统完成的,对用户是透明的。
④ 力图使存储系统的性能接近高速存储器,价格接近低速存储器。
2,主存 -外存层次的基本信息传送单位段、页或段页。
段,按照程序的逻辑结构划分成的多个相对独立部分,作为独立的逻辑单位。
优点 是段的逻辑独立性使它易于编译、管理、修改和保护,也便于多道程序共享;某些类型的段具有动态可变长度,允许自由调度以便有效利用主存空间。
缺点 是因为段的长度各不相同,起点和终点不定,给主存空间分配带来麻烦,而且容易在段间留下许多空余的零碎存储空间,造成浪费。
页,主存物理空间中划分出来的等长的固定区域。
优点 是页面的起点和终点地址是固定的,方便造页表,新页调入主存也很容易掌握,比段式空间浪费小。
缺点 是处理、保护和共享都不及段式来得方便。
段页式管理,采用分段和分页结合的方法。
程序按模块分段,段内再分页,进入主存以页为基本信息传送单位,用段表和页表进行两级定位管理。
7.2 页式虚拟存储器页式虚拟存储系统中,虚拟空间分成页,称为 逻辑页 ;
主存空间也分成同样大小的页,称为 物理页 。
虚存地址分为两个字段,高字段为逻辑页号,
低字段为页内行地址。
实存地址也分两个字段,高字段为物理页号,低字段为页内行地址。
页表中每一个虚存逻辑页号有一个表目录,表目录内容包含该逻辑页所在的主存页面地址 (物理页号 ),用它作为实存地址的高字段,与虚存地址的页内行地址字段相拼接,产生完整的实主存地址,据此来访问主存。
快表,为了避免页表已保存或已调入主存储器时对主存访问次数的增多,把页表的最活跃部分存放在高速存储器中组成 快表 。
快表由硬件组成,比页表小得多,查表时,由逻辑页号同时去查快表和慢表,当在快表中有此逻辑页号时,就能很快地找到对应的物理页号送入实主存地址寄存器,从而做到虽采用虚拟存储器但访主存速度几乎没有下降。
快表与慢表实现内部地址变换的方式演示
7.3,段式虚拟存储器在段式虚拟存储系统中,段是按照程序的逻辑结构划分的,各个段的长度因程序而异。
虚拟地址由段号和段内地址组成,为了把虚拟地址变换成实主存地址,需要一个段表。
段表也是一个段,可以存在外存中,但一般是驻留在主存中虚存地址向实存地址的变换过程演示
7.4 段页式虚拟存储器段页式虚拟存储器是段式虚拟存储器和页式虚拟存储器的结合。
它把程序按逻辑单位分段以后,再把每段分成固定大小的页。
程序对主存的调入调出是按页面进行的,但它又可以按段实现共享和保护,兼备页式和段式的优点。
缺点 是在映象过程中需要多次查表。
在段页式虚拟存储系统中,每道程序是通过一个段表和一组页表来进行定位的。段表中的每个表目录对应一个段,每个表目录有一个指向该段的页表起始地址及该段的控制保护信息。由页表指明该段各页在主存中的位置以及是否已装入、已修改等状态信息。
如果有多个用户在机器上运行,多道程序的每一道需要一个基号,由它指明该道程序的段表起始地址。
虚拟地址格式如下:
基号 段号 页号 页内地址
【 例 】 假设有三道程序 (用户标志号为 A,B,C),其基址寄存器内容分别为 SA,SB,SC,逻辑地址到物理地址的变换过程在主存中,每道程序都有一张段表,A程序有 4段,C程序有 3段。每段应有一张页表,段表的每行就表示相应页表的起始位置,而页表内的每行即为相应的物理页号。请说明虚实地址变换过程。
【 解 】
【 解 】
①根据基号 C执行 SC加 1(段号)操作,得到段表相应行地址,其内容为页表的起始地址b。
②执行 b+2(页号),得到物理页号的地址,
其内容即为物理页 10。
③物理页号与页内地址拼接即得物理地址。
如计算机只有一个基址寄存器,基号可不要,多道程序切换时,操作系统修改基址寄存器内容。
可以看出,段页式虚拟存储系统由虚拟地址向主存地址的变换至少需要查两次表。
7.5 替换算法虚拟存储器中的页面替换策略和 cache中的行替换策略有很多相似之处,但有三点显著不同:
(1)缺页至少要涉及前一次磁盘存取,读取所缺的页,
缺页使系统蒙受的损失要比 cache未命中大得多。
(2)页面替换是由操作系统软件实现的。
(3)页面替换的选择余地很大,属于一个进程的页面都可替换。
虚拟存储器中的替换策略一般采用 LRU算法、
LFU算法 FIFO算法,或将两种算法结合起来使用。
对于将被替换出去的页面,假如该页调入主存后没有被修改,就不必进行处理,否则就把该页重新写入外存,以保证外存中数据的正确性。为此,在页表的每一行应设置一修改位。
【 例 】 假设主存只有 a,b,c三个页框,组成 a进 c出的
FIFO队列,进程访问页面的序列是 0,1,2,4,2,
3,0,2,1,3,2号。
若采用① FIFO算法,
② FIFO算法 +LRU算法,
用列表法分别求两种替换策略情况下的命中率。
页面访问序列 0 1 2 4 2 3 0 2 1 3 2
命中率
FIF
O
算法
a 0 1 2 4 4 3 0 2 1 3 3 2/11
=
18.2
%
b 0 1 2 2 4 3 0 2 1 1
c 0 1 1 2 4 3 0 2 2
命中命中
FIF
O+
LRU
算法
a 0 1 2 4 2 3 0 2 1 3 2 3/11
=
27.3
%
b 0 1 2 4 2 3 0 2 1 3
c 0 1 1 4 2 3 0 2 1
命中命中命中
7.6 虚拟存储器实例
1.奔腾 PC的虚地址模式分段不分页模式,虚拟地址由一个 16位的段参照和一个 32位的偏移组成。分段部件 SU将二维的分段虚拟地址转换成一维的 32位线性地址。优点是无需访问页目录和页表,地址转换速度快。对段提供的一些保护定义可以一直贯通到段的单个字节级。
分段分页模式,在分段基础上增加分页存储管理的模式。
即将 SU部件转换后的 32位线性地址看成由页目录、页表、页内偏移三个字段组成,再由 PU部件完成两级页表的查找,将其转换成 32位物理地址。兼顾了分段和分不分段分页模式,这种模式下 SU不工作,只是分页部件 PU工作。程序也不提供段参照,寄存器提供的
32位地址被看成是由页目录、页表、页内偏移三个字段组成。由 PU完成虚拟地址到物理地址的转换。这种模式减少了虚拟空间,但能提供保护机制,比分段模式具有更大的灵活性。
2.保护模式的分页地址转换页面 (页框 )大小为 4MB的分页方式 使用单级页表,
只进行一次主存访问,地址转换过程加快了。
在此方式下,32位线性地址分为高 10位的页面和低 22位的页内偏移两个字段 。页表项的 I位指示页面大小,P位为出现位,A位为访问过位,D位为修改过位,RW位用于读 /
写控制,US位用于用户 /监督控制,PCD位用于页 cache
禁止的控制,PWT位用于页全写法的控制。
7.7 存储保护
1 存储区域保护当多个用户共享主存时,应防止由于一个用户程序出错而破坏其他用户的程序和系统软件,以及一个用户程序不合法地访问不是分配给它的主存区域。
在虚拟存储系统中,通常采用 页表保护,段表保护和 键式保护 方法。
页表保护和段表保护每个程序的段表和页表本身都有自己的保护功能。每个程序的虚页号是固定的,经过虚地址向实地址变换后的实存页号也就固定了。那么不论虚地址如何出错,也只能影响到相对的几个主存页面。不会侵犯其他程序空间。段表和页表的保护功能相同,但段表中除包括段表起点外,还包括段长。
键保护方式这种方法是为主存的每一页配一个键,称为存储键,每个用户的实存页面的键都相同。为了打开这个锁,必须有钥匙,称为访问键。访问键赋予每道程序,并保存在该道程序的状态寄存器中。
当数据要写入主存的某一页时,访问键要与存储键相比较。若两键相符,则允许访问该页,否则拒绝访问。
环保护方式环保护方式可以做到对正在执行的程序本身的核心部分或关键部分进行保护。它是按系统程序和用户程序的重要性及对整个系统的正常运行的影响程度进行分层,每一层叫做一个环。在现行程序运行前由操作系统定好程序各页的环号,并置入页表中。然后把该道程序的开始环号送入
CPU的现行环号寄存器。程序可以访问任何外层空间;访问内层空间则需由操作系统的环控例行程序判断这个向内访问是否合法。