Professional Documents
Culture Documents
虚拟存储器
虚拟存储器
以解决物理地址空间大小有限和多道程序如何安
全共享内存的问题
存储器管理部件(MMU):将逻辑地址转化为物理
地址的元件
在地址转换过程中,通过硬件检查是否发生了访
问地址不在主存、地址越界或者访问越权的情况
如果访问信息不在主存,则由操作系统将数据从
虚拟存储器的基本概念
硬盘读到主存
如果发生了地址越界或者访问越权的现象,则由
操作系统进行相应的异常处理
虚拟存储机制由硬件与操作系统共同协作实现
进程:一个具有一定独立功能的程序关于某个数
据集合的一次运行活动
进程有自己的地址空间,包括只读区、可读可写
数据去、动态堆区和栈区
虚拟地址空间:高级语言源程序经过编译、汇
编、链接等处理生成可执行二进制机器目标代码
时,被映射到地址空间,是主存和硬盘存储器的
抽象
存放操作系统内核代码和数据
内核空间
内核代码和数据区在每个进程的地址空间中都相
同,用户程序没有权限访问
用来存放进程的代码和数据
用户栈:用来存放程序运行时过程调用的参数,
返回地址,过程局部变量等,随着程序的执行用
户栈不断的从高地址向低地址增长或者反方向减
退
共享库:存放公共的共享函数库代码
可读写数据区:存放进程中的静态全局变量,堆
区从该区域的结尾处开始向高地址增长
只读数据和代码区:存放进程中的代码和只读数
据
将区域映射在虚拟地址空间两端的技术有利于存
储保护和存储管理
所有进程虚拟空间大小一致简化了链接器的设计
与实现,也简化了程序的加载过程
每个进程的虚拟地址空间一致,方便管理
把主存看成是硬盘存储器的一个缓存,在主存中
仅保存当前活动的程序段和数据区,根据需要在
虚拟地址空间的好处
硬盘和主存之间进行数据交换,有效利用有限的
主存空间
每个进程虚拟地址空间是私有的独立的,保证了
进程的独立运行
虚拟存储系统中,生成可执行文件时,会通过可
执行文件中的程序头表,将可执行文件中具有相
同访问属性的代码和数据段映射到虚拟地址空间
中
虚拟地址空间被划分成大小相等的页面
硬盘和主存之间按页面为单位交换信息
虚拟页:虚拟地址空间中的页,也称为逻辑页或
者虚页
页框:主存空间被划分成同样大小的页框,有时
也称为页帧、物理页或者实体页
请求分页:每次访问指令或数据,仅将当前需要
的页面从硬盘调入主存中,而进程中其他不活跃
的页则保留在硬盘上
缺页异常:访问的信息所在的页不在主存中,此
时,将硬盘缺失页面装入主存
未分配页:虚拟地址空间中没有内容的页,例如
栈和共享库映射区之间的区域
已分配页:代码和数据等有内容的区域所关联的
页面,已调入主存缓存在DRAM中的页面称为缓
存页,未调入主存而存在于硬盘上的页称为未缓
存页
页是内存和磁盘信息交换的单位,大小比块大很
多,也确实导致的磁盘访问代价也很大,为了提
高命中率,主存和虚拟页之间采用全相联映射的
方式,同时在处理写操作时,使用回写的策略
页表是用于描述虚拟页和主存页框号或者磁盘存
储位置之间关系的数据结构
页表项:进程中每个虚拟页在页表中对应的表
项,内容包括存放位置、装入位、修改位、使用
位、访问权限位和禁止缓存位
装入位:表示对应页面是否在主存,也称为有效
位或者存在位,装入位为1表示虚拟页已从外存调
入主存,此时页表的存放位置字段指向主存物理
页号,装入位为0表示没有被调入主存,此时如
果存放位置字段为null说明虚拟页是未分配的,
否则存放位置字段给出虚拟页在磁盘上的起始地
页表
址
修改位:说明页是否被修改过,用于判断是否需
要写回磁盘
使用位:说明页的使用情况,用来确定换出的
页,也称为替换控制位
访问权限位:说明页的访问权限,例如可读可
写、只读还是只可执行等,用于存储保护
禁止缓存位:说明页是否能够装入cache,用于
保证磁盘主存和cache中数据的一致性
根据表项的存放位置字段,从磁盘中将所缺失的
页面读出,找一个空闲的页框存放该页信息
如果没有空闲的页框,使用页替换策略,选择一
个页面进行淘汰
缺页异常处理程序的工作过程
淘汰页面时,需要根据修改位确定是否需要将页
信息写回硬盘
最后对页表项进行相应的更新,然后程序回到原
来发生缺页的地方继续执行
分页式虚拟存储器
系统中每个进程都有一个页表,操作系统加载程
序时,根据可执行文件中的程序头表,确定每个
可分配段所在的虚拟页号,及其磁盘存放位置,
在主存生成一个初始页表,初始页表中对应的装
入位都是0
虚拟存储器
页表属于进程控制信息,位于虚拟地址空间的内
核空间,页表在主存的首地址记录在页表基址寄
存器中
CPU执行指令时,首先要将虚拟地址转换为主存
物理地址,才能取到主存的指令和数据
存储器管理部件:CPU中用于地址转换的部件
虚拟地址:两个字段,高字段是虚拟页号,低字
段是页内偏移地址
主存物理地址:两个字段,高字段是物理页号,
地址转换
低字段是页内偏移地址
虚拟存储器的实现
因为虚拟页和物理页的大小是一样的,所以偏移
地址字段长度相同
首先根据页表基址寄存器的内容,找到主存中对
应页表的起始位置
然后以虚拟地址高位的字段的虚拟页号作为索
引,找到对应的页表项
地址转换的过程
若装入位为1,则取出物理页号并和虚拟地址中的
页内偏移地址进行拼接,形成访问主存时实际的
物理地址
若装入位为0,说明缺页,由操作系统进行缺页
处理
快表(TLB):为了减少访存次数,把页表中最活跃
的几个页表项复制到高速缓存中,快表是高速缓
存中页表项组成的页表,也称为后备转换缓冲
器,相应的主存中的页表称为慢表
快表比页表小的多,为提高命中率,快表通常具
快表
有较高的关联度
TLB中的表项通过页表中的表项加一个TLB标记字
段组成,用来表示该表项取自哪个虚拟页表对应
的表项,在全相联方式下TLB标记字段就是虚拟
页号,组相联方式下就是虚拟页号的高位部分,
虚拟页号的低位部分作为TLB组索引用于选择TLB
组
CPU访存的过程存在三种缺失的情况
TLB缺失:要访问的虚拟页不在TLB中
cache缺失:要访问的主存块不在cache中 CPU访存过程
缺页:要访问的虚拟页不在主存中
这三种缺失一共有八种组合的情况,其中只有五
种是可能发生的
TLB缺失异常处理程序:操作系统处理TLB缺失异
常的程序
实现简单,开销少
分页式存储的特点
对于不采用对齐方式存储的计算机,可能出现指
令或者数据跨页,不方便数据的处理、管理、保
护和共享
段:根据程序模块化特征将程序的逻辑结构划分
成多个相对独立的部分,例如过程、数据表、数
据阵列,段的结构通常包括了段名、段起点、段
长
段名:可用用户名、数据结构名或段号标识,以
便程序编写、编译器优化和操作系统的调度管理
段表项:用来指明对应段在主存中的位置、段
长、访问权限、使用和装入情况等
分段式虚拟存储器中,虚拟地址由段号和段内地
址组成
段表基址寄存器:存放每个进程的段表在内存的
分段式虚拟存储器
首地址
缺段:段不存在,即装入位=0
地址越界:偏移量超出最大段长 段表项对应的异常
访问越权:操作方式与指定的访问权限不符
段本身是程序逻辑结构决定的一些独立的部分,
分段对程序员不透明,而分页方式对编译器透明
段的逻辑独立性使程序容易编译、管理、修改和
保护,便于多道程序共享
某些类型的段具有动态可变的长度,允许自由调
分段式存储的特点
度以便有效利用主存空间
由于段的长度不同,段的起点和终点不同,给主
存空间分配带来麻烦,而且容易留下零碎的空间
段页式虚拟存储器中,程序按模块分段,段内再
分页,用段表和页表进行两级定位管理
段表中每个表项包括一个指向该段页表起始位置
的指针,以及该段其他的控制和存储保护信息,
段页式虚拟存储器
由页表指明该段各页在主存中的位置以及是否装
入、修改等状态信息
段页式的优点是程序调入调出按页进行,但是又
可以按段实现共享和保护,兼有分段和分页的优
点,缺点是地址映像过程需要多次查表
避免主存中多道程序相互干扰,防止因为某进程
出错破坏其他程序正确性,或者不合法地访问其
他进程的代码区或数据区,需要对每个进行进行
存储保护
使部分CPU状态只能由操作系统内核程序写,用
户程序只能读不能写,例如页表首地址,TLB内
容等
管理模式:执行内核程序时处理器所处的模式,
也称为内核模式、超级用户模式或管理程序状
态,简称管态、管理态、内核态或者核心态
为了对操作系统存储保护提供支持,硬件需要提
至少支持两种特权模式
供三种基本功能
用户模式:执行用户程序时处理器所处的模式,
也称为用户状态或者目标程序状态,简称目态或
者用户态
系统调用:如果用户进程需要内核的代码和数
据,那么必须通过系统调用接口间接访问
提供让CPU在内核态和用户态之间相互转换的机
制
返回指令:异常和中断处理后使CPU从内核态转 存储保护
移到用户态的指令
硬件通过提供相应的专用寄存器、专门的指令、
专门的状态/控制位,与操作系统一起实现以上三
个功能
检查是否发生了访问越权
访问权限保护
通过在段表或者页表中设置访问权限位来实现
检查是否发生了地址越界
每个程序或者程序段都记录有起始地址和终止地
加界重定位
址
操作系统为主存的每一个页框分配一个存储键,
为每个用户进程设置一个程序键
键保护 存储区域保护
只有当存储键和程序键匹配的时候进程才可以访
问页框
主存中各进程按照重要性分成多个保护级,各级
别构成同心环
环保护
最内环的进程保护级别最高,向外逐次降低,内
层可以访问外层地址空间但是外层无法访问内层