操作系统5----虚拟内存

                                                              虚拟内存

1.虚拟内存需求背景

2.覆盖和交换

2.1覆盖技术

2.2交换技术

2.3覆盖技术和交换技术比较

3.虚拟内存

3.1局部性原理principle of locality

3.2虚拟存储概念

3.3虚拟存储基本特征

3.4虚拟页式存储

3.5虚拟页式存储页表项结构

3.6缺页中断


1.虚拟内存需求背景

计算机系统时常出现内存空间不够用

程序规模的增长速度远远大于存储器容量的增长速度

实际中的存储器具有层次结构

用来解决系统内存不够用的常见方式有覆盖,交换和虚拟存储

覆盖(overlay)      应用程序手动把需要的指令和数据保存在内存中

交换(swapping) 操作系统自动把暂时不能执行的程序保存到外存中

虚拟存储                  在有限容量的内存中,以页为单位自动装入更多更大的程序 


2.覆盖和交换

2.1覆盖技术

在较小的可用内存中运行较大的程序

依据程序逻辑结构,将程序划分为若干功能相对独立的模块;将不会同时执行的模块共享同一块内存区域。

必要部分(常用功能)的代码和数据常驻内存

可选部分(不常用功能)放在其他程序模块中,只在需要用到时装入内存

不存在调用关系的模块可相互覆盖,共用同一块内存区域

假定程序调用结构如下所示,可以发现B,C以及 D,E,F是可以并行运行的;如果程序全部加载到内存中需要190K,采用覆盖技术A位于常常驻区执行,覆盖区0依次执行B,C,覆盖区1依次执行D,E,F,则总共需要110K内存即可。

覆盖技术不足:

增加编程困难  需程序员划分功能模块,并确定模块间的覆盖关系;增加了编程的复杂度;

增加执行时间  从外存装入覆盖模块 时间换空间;

2.2交换技术

增加正在运行或需要运行的程序的内存

整个进程的地址空间为换入换出的基本单位,将暂时不能运行的程序放到外存

换出  将一个进程整个地址空间保存到外存

换入  将外存中某进程的地址空间读入到内存

只当内存空间不够或有不够的可能时换出  

存放所有用户进程的所有内存映像的拷贝

程序换入时采用动态地址映射来进行重定位

2.3覆盖技术和交换技术比较

覆盖技术

只能发生在没有调用关系的模块间

程序员须给出模块间的逻辑覆盖结构

发生在程序的内部模块间

交换技术

以进程为单位

不需要模块间的逻辑覆盖结构

发生在内存进程间


3.虚拟内存

3.1局部性原理principle of locality

程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域

时间局部性 一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内

空间局部性  当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内

分支局部性  一条跳转指令的两次执行,很可能跳到相同的内存位置

不同程序编写方法的局部性特征

页面大小为4K,分配给每个进程的物理页面数为1。在一个进程中,定义了如下的二维数组int A[1024][1024],该数组按行存放在内存,每一行放在一个页面中

初始化给数组,方法1采用按列访问,方法2采用按行访问

方法1发生的缺页中断:012,………102301,………,共1024组  共发生了1024×1024次缺页中断

方法2发生的缺页中断:00,……… 1,1,………,2,2,………,3,3,…….  共发生了1024次缺页中断 

3.2虚拟存储概念

只把部分程序放到内存中,运行远比物理内存大的程序,该过程由操作系统自动完成;

实现进程在内存和外存之间的交换,从而获得更多的空闲内存空间,交换的基本单位为进程的一部分;

将不常用的部分内存块暂存到外存

装载程序时 只将当前指令执行需要的部分页面或段装入内存

指令执行中需要的指令或数据不在内存(称为缺页或缺段)时  处理器通知操作系统将相应的页面或段调入内存

操作系统将内存中暂时不用的页面或段保存到外存

假定当前系统内存只有32G,可以运行64G的程序,将暂时不使用的页面或段保存在外存中;装载程序时,只将当前指令执行需要部分装入内存;指令执行过程中需要的数据不在内存中时,操作系统将相应的页面调入内存。

实现方式主要有虚拟页式存储和虚拟段式存储

3.3虚拟存储基本特征

不连续性  物理内存分配非连续  虚拟地址空间使用非连续

大用户空间  提供给用户的虚拟内存可大于实际的物理内存

部分交换  虚拟存储只对部分虚拟地址空间进行调入和调出

虚拟存储的实现需要硬件和操作系统的支持:

硬件:页式或段式存储中的地址转换机制

操作系统:管理内存和外存间页面或段的换入换出

3.4虚拟页式存储

在页式存储管理的基础上,增加请求调页和页面置换

当用户程序要装载到内存运行时,只装入部分页面,就启动程序运行;

进程在运行中发现有需要的代码或数据不在内存时,则向系统发出缺页异常请求;

操作系统在处理缺页异常时,将外存中相应的页面调入内存,使得进程能继续运行;

虚拟页式存储地址转换

通过页表项来标识虚拟页是否处于内存中,逻辑地址由页表号p,页内偏移o;由页号p和PTBR相加得到该页表中的对应项,页表中含有是否存在标志位,如果待访问的页帧存在于内存中,则利用帧号f,帧内偏移o来计算最终的物理地址;如果带访问的页帧不存在于内存中,则会发生缺页中断,将相应的物理页帧加载到内存中,并在页表中记录对应的映射关系。

3.5虚拟页式存储页表项结构

页表项  逻辑页号,物理页帧号,修改位,访问位,保护位以及驻留位

驻留位:表示该页是否在内存 

1表示该页位于内存中,该页表项是有效的,可以使用 0表示该页当前在外存中,访问该页表项将导致缺页异常

修改位:表示在内存中的该页是否被修改过

回收该物理页面时,据此判断是否要把它的内容写回外存

访问位:表示该页面是否被访问过(读或写)

用于页面置换算法

保护位:表示该页的允许访问方式

只读、可读写、可执行等

虚拟页式存储示例

假定逻辑地址16位,则逻辑地址空间大小为64K,而物理地址空间只有32K,每一页大小为4K,则逻辑地址空间共有16页,物理地址空间共有8页,即逻辑地址空间中只有8页是存在于内存的,其余页存储在外存中。

MOV  REG,  8192  访问8192,即8K,页号=2,对应帧号为6

MOV  REG,  32780  访问32780  页号=8,对应帧号不在内存中会发生缺页异常

X86页表结构

x86中页表采用二级页表,其逻辑地址由Dir,Table和Offset组成。

由CR3作为一级页表基地址和Dir相加得到一级页表对应项;

由一级页表中对应得到二级页表序号PPN,给出二级页表基地址;

由PPN和Table相加,得到二级页表对应项,即物理页帧号PPN;

由物理页帧号和页内偏移地址来计算最终的物理地址

X86页表项结构

3.6缺页中断

在虚拟存储中,如果待访问的页不在内存中,则会发生缺页中断,相应处理过程如下所示

发生缺页中断时,如果当前内存中有空闲页面,则直接将需要访问的页帧加载到内存中即可;如果当前内存已满,则需要执行页面置换算法,将内存中某一页换出,将待访问的页换入,并修改相应的标志位。

A.在内存中有空闲物理页面时,分配一物理页帧f,转第E步;

B.依据页面置换算法选择将被替换的物理页帧f,对应逻辑页q;

C.如q被修改过,则把它写回外存;

D.修改q的页表项中驻留位置为0;

E.将需要访问的页p装入到物理页面f;

F.修改p的页表项驻留位为1,物理页帧号为f;

G.重新执行产生缺页的指令;

虚拟页式存储中的外存管理

虚拟页式存储中的外存选择

代码段:可执行二进制文件

动态加载的共享库程序段:动态调用的库文件

其它段:交换空间

虚拟页式存储管理的性能

有效存储访问时间(effective memory access time EAT)

EAT = 访存时间 * (1-p) + 缺页异常处理时间 * 缺页率p

参考:清华大学 操作系统  陈渝  http://os.cs.tsinghua.edu.cn/oscourse/OS2015/

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值