第五章 虚拟内存

本文深入探讨了虚拟内存的起源、覆盖技术如何通过模块间覆盖节省空间、交换技术在内存管理中的作用,以及虚存技术如何结合程序局部性原理实现高效内存访问。讨论了虚拟页式内存管理的细节,包括页表、缺页中断处理和后备存储的映射。
摘要由CSDN通过智能技术生成

一、虚拟内存的起因

1. 迅速增长的存储需求

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

2. 存储层次结构

寄存器 ==> 高速缓存 ==> 内存 ==> 磁盘 ==> 磁带

3. 操作系统的存储抽象

地址空间

4. 虚拟内存需求

  • 覆盖(overlaping):应用程序手动把需要的指令和数据保存在内存中。
  • 交换(swapping):操作系统自动把暂时不执行的程序保存在外存中。
  • 虚拟存储:在有限容量的内存中,以页为单位自动装入更多、更大的程序。

二、覆盖技术

1. 目标

在较小的可用内存中运行较大的程序。常用于多道程序系统,与分区存储管理配合使用。

2. 原理

把程序按照其自身逻辑结构,划分为若干个功能上相对独立的程序模块,那些不会同时执行的模块共享同一块内存区域,按时间先后来运行。

  • 必要部分(常用)的代码和数据常驻内存;
  • 可选部分(不常用)的其他程序模块中实现,平时存放在外存中,在需要用到时才装入内存;
  • 不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖。

3. 缺点

  • 由程序员把一个大的程序划分为若干小的功能模块,并确定各个模块之间的覆盖关系,费时费力,增加了编程的复杂度;
  • 覆盖模块从外存装入内存,实际上是以时间延长来换取空间节省。

三、交换技术

1. 目标

多道程序在内存中时,让正在运行的程序或需要运行的程序获得更多的内存资源。

2. 方法

  • 可以将暂时不能运行的程序送到外存中,从而获得空闲内存空间;
  • 操作系统把一个进程的整个地址空间的内容保存到外存中(换出swap out),而将外存中的某个进程的地址空间读入到内存中(换入swap in)。换入换出内容的大小为整个程序的地址空间。

3. 实现

实现过程中需要考虑的问题

  • 交换时机的确定:只有当内存空间不够或有不够的危险时换出;
  • 交换区的大小:必须足够大以存放所有用户进程的所有内存映像的拷贝;必须能对这些内存映像进行直接存取;
  • 程序换入时的重定位:采用动态地址映射的方法。

覆盖与交换的比较

  • 覆盖只能发生在那些相互之间没有调用关系的程序模块之间;
  • 交换是以在内存中的程序大小为单位来进行的,发生在内存中程序和管理程序或操作系统之间。

四、虚存技术

1. 目标

  • 不是把程序的所有内容都放在内存中,由操作系统自动完成;
  • 能够实现进程在内存与外存之间的交换,而且只对进程的部分内容进行交换。

2. 程序的局部性原理

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

  • 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内;
  • 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小的区域内。

3. 基本概念

  • 只在内存中装入程序当前需要执行的部分页面或段;
  • 在程序执行过程中,如果需执行的指令或访问的数据尚未在内存中(缺页或缺段),则由处理器通知操作系统将相应的页面或段调入到内存,然后继续执行程序;
  • 操作系统将内存中暂时不使用的页面或段调出保存在外存中。

4. 基本特征

  • 用户空间大,把物理内存与外存相结合;
  • 部分交换;
  • 不连续性:物理内存分配的不连续,虚拟地址空间的不连续。

5. 虚拟页式内存管理

基本思路

  • 当一个用户程序要调入内存执行时,不是该程序的所有页面都装入内存,而是只装入部分的页面,就可以启动程序运行;
  • 在运行的过程中,如果发现要运行的程序或要访问数据不在内存,则向系统发出缺页中断,系统在处理这个中断时,将外存中相应的页面调入内存,使得该程序能够继续执行。

页表表项

  • 驻留位:表示该页是在内存(1)还是在外存(0);
  • 保护位:表示允许对该页做何种类型的访问;
  • 修改位:表明此页在内存中是否被修改过;
  • 访问位:如果该页面被访问过,则设置此位。

缺页中断的处理过程

  1. 如果在内存中有空闲的物理页面,则分配一个物理页,然后转第4步,否则转第2步;
  2. 采用某种页面置换算法,选择一个将被替换的物理页帧 f,它所对应的逻辑页为 q。如果该页在内存期间被修改过,则需要把它写回外存;
  3. 对 q 所对应的页表项进行修改,把驻留位置为 0;
  4. 将需要访问的页 p 装入到物理页面 f 当中;
  5. 修改 p 所对应的页表项的内容,把驻留位置为 1,把物理页帧号置为 f;
  6. 重新运行被中断的指令。

后备存储

  • 一个虚拟地址空间的页面可以被映射到一个文件(在二级存储中)中的位置;
  • 代码段:映射到可执行二进制文件;
  • 动态加载的共享库程序段:映射到动态调用的库文件
  • 其他段:可能被映射到交换文件。

6. 虚拟内存性能

E A T ( e f f i c t i v e   m e m o r y   a c c e s s   t i m e ) = 访存时间 × 页表命中几率 + p a g e   f a u l t 处理时间 × p a g e   f a u l t 几率 EAT(effictive\ memory\ access\ time) = 访存时间 × 页表命中几率 + page\ fault 处理时间 × page\ fault几率 EAT(effictive memory access time)=访存时间×页表命中几率+page fault处理时间×page fault几率

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值