7.3 虚拟内存管理
7.3.1 页式虚拟内存管理概念
7.3.2 页表和页式地址映射
7.3.3 快表技术和页面共享技术
7.3.4 缺页中断
7.3.5 页面淘汰策略
7.3.6 缺页因素与页式系统缺点
7.3.7 段式和段页式虚拟存储
7.3.1 页式虚拟内存管理概念
目的:
使得大的程序能在较小的内存中运行;
使得多个程序能在较小的内存中运行(/能容纳下);
使得多个程序并发运行时地址不冲突(/方便,高效);
使得内存利用效率高:无碎片,共享方便
实现思路:在程序运行时,只把当前必要的很小一部分代码和数据装入内存.其余代码和数据需要时再装入.不再运行的代码和数据及时从内存删除.
进程分为若干虚拟页;
内存分割为若干物理页;
内存以页框为单位分配使用
进程以页为单位装入内存
7.3.2 页表和页式地址映射
虚拟地址可以分解成页号P和页内偏移W
VA所处页的编号=VA/页的大小;
VA所处页中的偏移=VA%页的大小
假设页的大小:2^n个单元;
P=VA>>n;
W=VA&(2^n-1);
- 页面映射表:
记录页与页框之间的对应关系.也叫页表.
页号:登记程序地址的页号
页框号:登记页所在的物理页号.
页面其他特性:等级含存取权限在内的其他特性.
页式地址映射:
功能:虚拟地址—>物理地址
得到P查页表得P’
MA(物理地址)=页框号P’*页面大小+W;
7.3.3 快表技术和页面共享技术(Cache)
慢表:页表放在内存中
快表:页表放在Cache中
快表的特点:容量小,访问快,成本高.
快表是慢表的部分内容的复制
地址映射时优先访问快表.
(若在快表中找到所需要的数据,则称为"命中")
(没有"命中"时,需要访问慢表,同时更新快表)
现在技术,快表命中率达到95%以上
页表(软件比对);快表(硬件比对,速度快)
页面共享原理:
1.在不同进程的页表中填上相同的页框号,多个进程能互相访问相同的内存空间,从而实现页面共享.
2.共享页面在内存中只有一份真实存储,节省内存.
7.3.4 缺页中断
页表扩充—带中断位的页表
扩充有中断位和辅存地址的页表.
-
页表扩充—带访问位和修改位的页表.
-
缺页中断定义:在地址映射过程中,当所要访问的目的页不在内存时,则系统产生异常中断—缺页中断
-
缺页中断处理程序:把所缺的页从页表指出的辅存地址调入内存的某个页框中,并更新页表中该页对应的页框号以及修改中断位I为0;
缺页(中断)率f=缺页次数/访问页面总次数 ;
命中率=1-f;
7.3.5 页面淘汰策略
-
页面抖动:
页面在内存和辅存之间频繁交换的现象;
"抖动"会导致系统效率下降. -
好的淘汰策略:
具有较低的缺页率
页面抖动较少 -
最佳算法[OPT算法]Optimal
淘汰以后不再需要或最远的将来才会用到的页面.
(理论上最佳,实践中该算法无法实现) -
先进先出淘汰算法[FIFO算法]
淘汰在内存中停留时间最长的页面
异常现象:对于一些特定的访问序列,随着分配的也框增多缺页率反而增加. -
最久未使用淘汰算法[LRU算法]Least Recently Used
淘汰最长时间未被使用的页面.
LRU的实现(硬件方法)
页面设置一个移位寄存器R.每当页面被访问则将其重置1.
周期性地(周期很短)将所有页面的R左移1位(右边补0); -
最不经常使用算法[LFU算法]Least Frequently Used
选择到当前时间为止被访问次数最少的页面
每页设置访问计数器,每当页面被访问时,该页面的访问计数器加1
发生缺页中断时,淘汰计数值最小的页面,并将所有计数清零.
7.3.6 缺页因素与页式系统缺点
缺页的因素:
1.淘汰算法
2.页本身的大小
页面的大小选择:
页面太大:浪费内存,极限是分区存储;
页面太小:页面增多,页面长度增加,浪费内存;换页频繁,系统效率低;容易缺页
页面的常见大小:1KB,2KB,4KB
3.分配给进程的页框数
页框越少,越容易缺页
4.程序的编制方法
局部性越好,越不容易缺;
跳转或分支越多越容易缺页.
页式系统的不足:
页面划分无逻辑含义;
页的共享不灵活
页内碎片
7.3.7 段式和段页式虚拟存储
- 进程分段;
把进程按逻辑意义划分为多个段,每段有段名,长度不定.进程由多段组成.
eg:一个具有代码段,数据段,堆栈段的进程.
-
段式内存管理系统的内存分配
以段位单位装入,每段分配连续的内存;
但是段和段不要求相邻; -
段式系统的虚拟地址
段式虚拟地址VA包含段号和段内偏移W
VA:(S,W); -
段式地址映射过程
1.由逻辑地址VA分离出(S,W);
2.查询段表
检索段号S,查询该段基地址B和长度L;
3.物理地址MA=B+W; -
段的共享
1.共享段在内存中只有一份存储;
2.共享段被多个进程映射到各自段表;
3.需要共享的模块都可以设置为单独的段; -
段式系统的缺点
1.段需要连续的存储空间;
2.段的最大尺寸受到内存大小的限制;
3.在辅存中管理可变尺寸的段比较困难;