一、页式虚拟存储管理:把进程空间(虚拟)和内存空间都划分为等大小的小片(1k,2k,4k,……)
进程的小片(页,虚拟页或页面) 内存的小片(页框,物理页)
1.虚拟内存管理实现思路:
在程序运行时,只把当前必要的很小一部分代码和数据装入内存中,以节省内存需要。其余代码和数据需要时再装入,不再需要和运行的代码及时从内存中删除。
2.进程装入和使用内存的原则:
内存以页框为单位分配使用;
进程以页为单位装入内存:
只把程序部分页装入内存便可运行; 页在内存中占用的页框不必相邻;
需要新页时,按需从硬盘调入内存; 不再运行的页及时删除,腾出空间;
3. 虚拟地址如何组织或表达:页式地址
虚拟地址(VA)可分为页号(P)和页内偏移(W);
页号:VA所处的页的编号=VA/页的大小; 页内偏移 :VA所处页中偏移=VA%页的大小
4. 虚拟地址如何转化成物理地址:页表、地址映射过程
页面映射表:记录页与页框之间的对应关系,也叫页表;
页表结构:页号,登记程序地址的页号;
页框号,登记页所在的物理页号;
页面其他特性,登记含存取权限在内的其他特性;
页式地址映射:将虚拟地址映射为物理地址;
过程:从VA中分离出P和W;查页表,以P为索引查页框号P'
计算物理地址MA=P'*页大小+W;
5.防止越界访问页面:防止越界访问其他进程
检查访问的目的页号X是否在进程内:检查标准,0<=X<虚拟页数;若越界,则产生越界中断
页式地址映射:系统设置一个页表寄存器PTR,存放页表在内存中的始址和页表长度
页面存取权限特性:存取权限、是否被访问过、是否被修改过
页面的存取权限:防止越权访问某些页面(在页表中记录每个页面的读写执行等权限,访问页面时先检查该次访问是否越权)
防止越界访问其他进程(检查访问目的页号X是否在进程内)
6.快表机制:分级存储体系(CACHE+内存+辅存)
页表放在CACHE中:快表 页表放在内存中:慢表
快表特点:访问速度快,成本高,容量小,具有并行查寻能力;
快表是慢表的部分内容复制;
地址映射时优先访问快表
若在快表中找到所需数据,称为“命中”;
没有命中时,需要访问慢表,同时更新快表;
7.页面共享:
根据页式地址转换过程:如果不同进程的页表中填上相同的页框号,就能访问相同的内存空间,从而实现页面共享
共享页面在内存中只有一份真实存储,节省内存。
代码共享的例子————文本编辑器
8.页表的建立:操作系统为每个进程建立一个页表(页表长度和首址存放在进程控制块中);
当前运行的进程的页表驻留内存(页表的长度和首址由页表长度寄存器和页表首址寄存器指示)
页面的大小选择:
过大:浪费内存,极限是分区存储
过小:页面增多,页表长度增加,浪费内存;换页频繁,系统效率低;
常用大小:2的整次幂
9.页表扩充:
扩充有中断位和辅存地址的页表
中断位l:l=1,不再内存;l=0,在内存;
辅存地址:该页在辅存上的位置
带有访问位和修改位的页表:
访问位:0,最近没有被访问 ; 1,最近已被访问
修改位 :0,该页未被修改; 1,该页已被修改
10.缺页中断:在地址映射过程中,当所要访问的目的页不在内存中,则系统产生异常中断——缺页中断
缺页中断处理程序:中断处理程序把所缺页从页表中指出的辅存地址调入内存的某个页框中,并更新页表中该页所对应的页框号以及修改中断位(1变为0)
缺页率=缺页次数/访问页面总次数
缺页中断与普通中断:
相同:处理过程(保护现场、中断处理、恢复现场)
不同:响应时机(普通中断发生在指令完成后,缺页中断发生在指令执行过程中)
发生频率(一条指令执行时可能产生多个缺页中断)
二、二级页表:
1.概念:把超大的页表(4M)以页为单位分成若干个小页表,存入离散的若干个页框中
为了对小页表进行管理和查找,另外设置个页目录的表,记录每个小页表的存放位置
页目录:一级页表或外部页表 小页表:二级目录
2.淘汰策略:选择淘汰哪一页的规则
页面抖动:页面在内存和辅存之间频繁交换的现象,会导致系统效率下降
3.常用淘汰算法:
最佳算法(OPT):淘汰以后不再需要的或最远的将来才会使用到的页面
特点:理论上最佳,实践中该算法无法实现;
先进先出淘汰算法(FIFO):淘汰内存中停留时间最长的页面
优点:实现简单(页面按进入内存时间排序,淘汰队头页面)
缺点:进程只有按照顺序访问地址空间时页面命中率才最理想
异常现象(对于一些特定的访问序列,随分配页框数增多,缺页率反而上升)
最久未使用淘汰算法(LRU):淘汰最长时间没有使用的页面
实现方法(硬件):页面设置一个移位寄存器R,每当页面被访问时,则将其置1;
周期性地将所有页面的R左移一位;
需要淘汰时,选择R值最大的页
最不经常用算法(LFU):
算法原则:选择到当前时间为止被访问次数最少的页面;
每页设置访问计数器,当页面被访问时,计数器加1;
发生缺页中断时,淘汰计数值最小的页面,并将所有技术清零;
4.影响缺页次数的因素:
淘汰算法;
分配给进程的页框数(框数越少,越容易缺页);
页本身大小(页面越小,越容易缺页);
程序编制方法(局部性越好,越不容易缺页;跳转和分支越多越容易缺页)
页式系统不足:页面划分五逻辑含义;页面共享不灵活;页内碎片
三、段式存储管理:
1.进程分段:把进程按逻辑意义分为多个段,每段有段名,长度不定;进程由多个段组成
2.段式内存管理系统的内存分配:
以段为单位装入,每段分配连续的内存;但是段和段不要求相连
段式虚拟地址VA包含段号S和段内偏移W
段号S:段的编号; 段长L:段的长度; 基地址B:该段在内存中的首地址
映射过程:由VA分离出S,W;检索S,查询B和L;MA=B+W;
3.段表的扩充:
基本字段:段号、长度、基址;
扩展字段:中断位、访问位、修改位、R/W/X
段的共享:共享段在内存中只有一份存储;被进程映射到自己的空间(写入段表);
需要共享的模块都可以设置为单独地段;
4.段式系统缺点:段需要连续的存储空间;段的最大尺度受到内存大小的限制;
在辅存中管理可变尺寸的段比较困难;
四、段页式存储管理
在段式存储管理中结合页式存储管理技术(在段中划分页面)
段号、页号、页内位移;内存按页划分,按页装入
映射机构:系统为每个进程建立一个段表;
系统为每个段建立一个页表;
段表给出每段页表基址及页表长度;
页表给出每页对应页框。
VA(S,W')————>(S,P,W)—————>MA