一、页式虚拟内存管理概念
目标:
- 使得大的程序能在较小的内存中运行
- 使得多个程序能在较小的内存中运行(能容纳)
- 使得多个程序并发运行时地址不冲突(方便,高效)
- 使得内存利用效率高:无碎片,共享方便
实现思路
在数据运行中,只把当前必要的很小一部分代码和数据装入内存。其余代码和数据需要时再装入。不再运行的代码和数据及时从内存删除。
程序运行的局部性
- 程序在一个有限的时间段内访问的代码和数据往往集中在有限的地址范围内
- 把程序一部分装入内存在较大概率上也足够让其运行一小段时间
页式虚拟内存管理概念
- 把进程空间(虚拟)和内存空间划分成等大小的小片
进程的小片——页(虚拟页和页面)
内存的小片——页框(物理页)
进程装入和使用内存原则
内存以页框为单位分配使用
进程以页为单位装入内存
- 只把程序部分页装入内存便可使用
- 页在内存中占用的页框不必相邻
- 需要新页时,按需从硬盘调入内存
- 不再运行的页及时删除,腾出空间
二、页表和页式地址映射
页式系统中的地址
虚拟地址(VA)可以分解成页号P和页内偏移W
计算方式:
页的大小:2^n单元
页号P=VA>>n
页内偏移W=低n位=VA&&(2^n-1)
页面映射表
记录页与页框之间的对应关系。也叫页表
- 页号:登记程序地址的页号
- 页框号:登记页所在物理页号
- 页面其他特性:登记含存取限权在内的其他特性
页式地址映射
功能:虚拟地址(页式地址)->物理地址
过程
- 从VA分离页号P和页内偏移W
- 查页表:以P为索引查页框号p‘
- 计算物理地址MA MA=p’x页大小+W
三、快表技术和页面共享技术
快表机制(Cache)
概念:
- 慢表:页表放在内存中
- 快表:页表放在Cache中
特点
- 容量小,访问快,成本高
- 快表是慢表的部分内容的复制
- 地址映射时优先访问快表
- 合理的页面调度策略能使快表具有较高命中率
页面共享
原理:
- 在不同进程的页表中填上相同的页框号,多个进程能访问相同的内存空间从而实现页面共享
- 共享页面在内存只有一份真实存储,节省内存
四、缺页中断
页表扩充
- 带中断位的页表
- 扩充有访问位和修改位的页表
缺页中断
定义:在地址映射过程中,当所要访问的目的页不在内存时,则系统产生异常中断。
处理程序:
中断处理程序把缺页从页表指出的辅存地址调入内存的某个页框中,并更新页表中该页对应的页框号以及修改中断位I为0
缺页(中断)率
缺页率f=缺页次数/访问页面总次数
命中率=1-f
五、页面淘汰
淘汰策略
- 选择淘汰哪一页的规则
页面抖动
- 页面在内存和辅存间频繁交换的现象
- 抖动会导致系统效率下降
好的淘汰策略
- 具有较低的缺页率(高命中率)
- 页面抖动较少
常用淘汰策略
最佳算法(OPT)
思想:淘汰以后不再需要或最远的将来才能用到的页面
特点:理论上最佳,实践中该算法无法实现
先进先出淘汰算法(FIFO)
思想:淘汰在内存中停留时间最长的页面
优点:
- 实现简单:页面按进入内存的时间排序,淘汰队头页面
缺点:
- 进程只有按顺序访问地址空间时页面命中率才最理想
- 异常现象:对于一些特定的访问序列,随分配的页框增多,缺页率反而增加
最久未使用淘汰算法(LRU)
思想:淘汰最长时间未被使用的页面
实现(硬件方法)
- 页面设置一个移位寄存器R,每当页面被访问则将其重置1
- 周期性地将所有页面的R左移
- 当需要淘汰页面时选择R值最大的页
- R的位数越多且移位周期越小就越精确,但硬件成本高
- 若R位数太少,可能出现多个为0的页面,难以比较
软件方法
- 利用页表访问位,页被访问其值由硬件置1
- 软件周期性将所有访问位置0
- 当淘汰页面时根据该页访问位来判断是否淘汰
缺点:周期T难定
最不常使用算法(LFU)
原则:
- 选择到当前时间为止被访问次数最少的页面
- 每页设置访问计数器,被访问时计数器加1
- 发生缺页中断时,淘汰计数值最小的页面,并将所有计数器清零
六、缺页因素与页式系统缺点
缺页因素
- 淘汰算法
- 分配给进程的页框数
- 页本身的大小(常见2的次幂)
- 程序的编制方法
页式系统的不足
- 页面划分无逻辑含义
- 页的共享不灵活
- 页内碎片
七、段式和段页式虚拟存储
段式存储管理
进程分段
- 把进程按逻辑意义划分为多个段,每个段有段名,长度不定
段式内存管理系统的内存分配
- 以段为单位装入,每段分配连续内存
- 但是段和段不要求相邻
段式系统的虚拟地址
- 段式虚拟地址VA包含段号S和段内偏移W
- VA:(S,W)
段式地址的映射机制
段表(SMT)
- 记录每段在内存中映射的位置
- 段号S、段长L、基地址B
过程
- 由逻辑地址VA分离出(S,W)
- 查询段表
- 物理地址MA=B+W
段表扩充
基本字段:段号、长度、基地址
扩充字段:中断位,访问位,修改位,R/W/X
段的共享
- 共享段在内存中只有一份存储
- 共线段被多个进程映射到各自段表
- 需要共享的模块都可以设置为单独的段
段式系统的缺点
- 段需要连续的存储空间
- 段的最大尺寸受到内存大小的限制
- 在辅存中管理可变尺寸的段比较困难
段式与页式系统的区别
- 地址空间:页 一维地址空间;段 二维地址空间
- 段长可变;页面大小固定
- 段的划分有意义;页面无意义
- 段方便共享;页面不方便共享
- 段用户可见;页面用户不可见
- 段偏移有溢出;页面偏移无溢出
段页式存储管理
- 在段式存储管理中结合页面存储管理技术
- 在段中划分页面
段页式地址构成:段号,页号,页内偏移
逻辑地址:段号S,页号P,页内位移W
映射机制
同时采用段表和页表实现地址映射