概述
虚拟存储的需求背景
存储层次结构
理想中的存储器
容量更大、速度更快、价格更便宜的非易失性存储器
实际中的存储器
操作系统的存储抽象
虚拟存储需求
计算机系统时常出现内存空间不够用
解决办法:
口覆盖(overlay)
应用程序手动把需要的指令和数据保存在内存中
口交换(swapping)
操作系统自动把暂时不能执行的程序保存到外存中
虚拟存储
在有限容量的内存中,以页为单位自动装入更多更大的程序
覆盖技术
目标
口在较小的可用内存中运行较大的程序
方法
依据程序逻辑结构,将程序划分为若干功能相对独立的模块;将不会同时执行的模块共享同一块内存区域
口必要部分(常用功能)的代码和数据常驻内存
口可选部分(不常用功能)放在其他程序模块中,只在需要用到时装入内存
口不存在调用关系的模块可相互覆盖,共用同一块内存区域
覆盖技术的不足
■增加编程困难
口需程序员划分功能模块,并确定模块间的覆盖关系
口增加了编程的复杂度;
■t加执iВ j
口从外存装入覆盖模块
О时间换j
交换技术
目标
■增加正在运行或需要运行的程序的内存
实现方法
■可将暂时不能运行的程序放到外存
■换入换出的基本单位
口整个进程的地址空间
■换出(swap out)
口把一个进程的整个地址空间保存到外有
■换入(swap in)
口将外存中某进程的地址空间读入到内存
交换技术面临的问题
■交换时机:何时需要发生交换?
口只当内存空间不够或有不够的可能时换出
■交换区大小
口存放所有用户进程的所有内存映像的拷贝
■程序换入时的重定位:换出后再换入时要放在原处吗?
口采用动态地址映射的方法
覆盖与交换的比较
■覆盖
口只能发生在没有调用关系的模块间
口程序员须给出模块间的逻辑覆盖结构
口发生在运行程序的内部模块间
■交换
口以进程为单位
口不需要模块间的逻辑覆盖结构
口发生在内存进程间
局部性原理
虚拟存储技术的目标
只把部分程序放到内存中,从而运行比物理内存大的程序
口由操作系统自动完成,无需程序员的干涉实现进程在内存与外存之间的交换,从而获得更多的空闲内存空间
口在内存和外存之间只交换进程的部分内容
局部性原理(principle of locality)
程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域
■时间局部性
口一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期内
■空间局部性
口当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小区域内
■ 分支局部性
口一条跳转指令的两次执行,很可能跳到相同的内存位置
局部性原理的意义
从理论上来说,虚拟存储技术是能够实现的,而且可取得满意的效果
虚拟存储概念
思路
口将不常用的部分内存块暂存到外存
原理
- 装载程序时
口只将当前指令执行需要的部分页面或段装入内存 - 指令执行中需要的指令或数据不在内存(称为缺页或缺段)时
口处理器通知操作系统将相应的页面或段调入内存 - 操作系统将内存中暂时不用的页面或段保存到外存
实现方式
虚拟页式存储
虚拟段式存储
虚拟存储的基本特征
不连续性
物理内存分配非连续
虚拟地址空间使用非连续
大用户空间
口提供给用户的虚拟内存可大于实际的物理内存
部分交换
口虚拟存储只对部分虚拟地址空间进行调入和调出
虚拟存储的支持技术
■硬件
口页式或短时存储中的地址转换机制
■操作系统
口管理内存和外存间页面或段的换入和换出
虚拟页式存储
■在页式存储管理的基础上,增加请求调页和页面置换
■思路
口当用户程序要装载到内存运行时,只装入部分页面,就启动程序运行
口进程在运行中发现有需要的代码或数据不在内存时,则向系统发出缺页异常请求
口操作系统在处理缺页异常时,将外存中相应的页面调入内存,使得进程能继续运行
虚拟页式存储中的地址转
虚拟页式存储中的页表项结构
驻留位:表示该页是否在内存
修改位:表示在内存中的该页是否被修改过口回收该物理页面时,据此判断是否要把它的内容写回外存
访问位:表i面是否被访问过(读或5)
口用于页面置换算法
保护位:表示该页的允许访问方式
口只读、可读写、可执行等
缺页异常
缺页异常(缺页中断)的处理流程
虚拟页式存储中的外存管理
■在何处保存未被映射的页?
口应能方便地找到在外存中的页面内容
口交换空间(磁盘或者文件)
口采用特殊格式存储未被映射的页面
■虚拟页式存储中的外存选择
口代码段:可执行二进制文件
口动态加载的共享库程序段:动态调用的的库文件
口其它段:交换空间