操作系统:虚拟内存
课本P214-P243
前言
提示:这里可以添加本文要记录的大概内容:
要有效地使用处理器和I/O设备,就需要在内存中保留尽可能多的进程。此外,还需要解除程序在开发时对程序使用内存大小的限制。
而解决这两个问题的途径就是虚拟内存技术。(虚拟内存允许进程执行时只将部分 程序放入内存,因此程序可以比物理内存大)
采用虚拟内存技术时,所有地址访问都是逻辑访问,并在运行时转换为实地址。
支持虚拟内存技术的两种基本方法就是分页和分段。
虚拟内存管理方案要求硬件和软件的支持
提示:以下是本篇文章正文内容,下面案例可供参考
虚拟内存的基本概念
1.传统存储管理方式的特征和缺点
(1)一次性:作业数据必须一次性全部调入内存
(2)驻留性作业数据在整个运行期间都会常驻内存
2.局部性原理
局部性原理描述了一个进程中程序和数据引用的集簇倾向。
局部性原理用于避免系统抖动(系统抖动:当操作系统读取一块时,它必须把另一块换出 。若一块正好在将要用到之前换出,则操作系统就不得不很快地把它取回)
局部性原理表明虚拟内存方案是可行的
(1)时间局部性:现在访问的指令、数据在不久后很可能被再次访问
(2)空间局部性:现在访问的内存单元周围的内存空间,很可能在不久后内访问
(3)高速缓存技术:使用频繁的数据放到更高速的存储器中
3.虚拟内存的定义和特征
定义
(1)虚拟内存:用辅助存储器(一般指磁盘)作为内存的补充。 虚拟内存的大小受计算机寻址机制和可用的辅助存储器
容量限制,而不受内存容量的限制。
程序不需全部装入即可运行,运行时根据需要动态调入数据,若内存不够,还需换出一些数据。
(2)虚拟地址:即逻辑地址。虚拟内存中某字节的地址,仿 佛该字节在内存中(其实可能位于磁盘,但这对用户透明)。
(3)虚拟地址空间:分配给某进程(程序)的虚拟地址范围。
(4)实地址:即物理地址。物理内存中某字节的地址。
(5)驻留集:进程运行时装入内存的部分。
(6)缺页中断/缺段中断:当访问一个不在内存的逻辑地址时;OS阻塞该进程;启动磁盘I/O;装入所 需的页/段后,将阻塞进程置为就绪态。
特征
(1)多次性:无需在作业运行时一次性全部装入内存,而是允许被分成多次调入内存
(2)对换性:无需在作业运行时一直常驻内存,而是允许被分成在作业运行过程中,将作业换入、换出。
(3)虚拟性:从逻辑上扩充了内存的容量,使用户看到的内存容量,远大于实际的容量
一、硬件和控制结构(硬件支持)
虚拟内存的硬件支持:内存管理单元MMU(集成在CPU 中,或作为一个协处理器)
1.硬件特征
(1)MMU的功能:分解逻辑地址;逻辑地址到物理地址的转换;查找/更新快表TLB;进程切换时清空TLB;发出缺页中 断或越界中断;设置和检查页表中各个特征位等。
2.供硬件使用的必要控制结构
2.1分页
2.1.1页表结构
2.1.2地址转换
虚拟地址<页号, 页内偏移>实地址<页框号, 页内偏移>
步骤:(具体可参考第七章的地址转换的内容)
(但这里的步骤没有考虑到缺页中断)
(1)在页表寄存器找到页表
(2)查找页号
(3)通过上面两步在页表得到页框号
(4)加上逻辑地址的页内偏移量得到内存地址(即物理地址)
2.1.3缺页中断(页错误)
(1)在一条指令执行期间,当要访问的页不在内存时, 产生和处理缺页中断,然后重新执行该指令。
(2)一条指令的执行过程中可能会产生多次缺页中断
(3)在指令的执行期间,而非执行完成之后产生和处理中断,属于内中断
存在多级页表和倒排页表的原因:解决页表项占用过多内存的问题,具体分析如下
问题出现的原因:
在启动分页机制时需要用到页表,页表保存的是虚拟页号与物理页框之间的映射关系,其中页表项与虚拟内存页有一一对应的关系,当虚拟内存地址空间过大时(在现代计算机系统中通常允许一个进程的逻辑地址空间非常大,因此就有很多页表项,从而占用很多的内存空间)页表项会占用过多内存(即使采用大页面,该问题也不能得到缓解)。
具体来说就是:若虚拟地址空间为64位,页面大小为4KB,页表项大小为4Bytes,物理内存大小为512MB
如果采用单层页表计算可以得到页表项的数量为2^{64-12}
页表项占用的内存大小为2^{54}Byte
显然上述情况下单层页表的实现方式是不现实的,采用多级页表和倒排页表可以解决页表项占用过多内存的问题
单级页表存在的问题:
(1)页表必须连续存放,因此当页表很大时,需要占用多个连续的页框
(2)没必要让