前言:
操作系统的作用主要有三个:
一是方便性,一个未配置操作系统的计算机是极难使用的。
二是有效性,CPU的高速和外部设备的相对低速是计算机硬件无法逾越的基本矛盾,如果没有操作系统的管理,CPU和外部设备就会经常处于空闲状态。
三是提供应用软件的运行环境,操作系统位于应用软件和硬件之间,应用软件不能脱离操作系统而独立运行。
操作系统的是负责管理计算机的软硬件资源、提高计算机资源的使用效率、方便用户使用的程序集合。
-----------------------------以上源自百度知道
直观感受:有了操作系统,计算机可以并发执行多任务,才显得’智能‘和’易用‘,提升了人与计算机交互的体验。而没有操作系统,计算机单个功能实现,只能做大号计算器一样的工作
以北大教授传授之课程为基础,学习操作系统
--------------------------------------------------------------------------------------------------------------------------------
目录:
一、虚拟存储技术
二、地址转换过程及TLB引入
三、页错误(页故障)
四、置换算法
五、置换算法之工作集算法
---------------------------------------------------------------------------------------------------------------------------------
一、虚拟存储技术
虚存空间受到计算机寻址能力的限制,比如32位计算机寻址4GB(2的32次方Byte)
存储保护:确保进程有独立的地址空间,防止越权访问(有基地址寄存器和界限寄存器,判断操作的地址在范围之内,否则会陷入操作系统)
确保进程操作合法(比如读操作不能写)
基本思想:根据需要动态装入页面
核心:资源转换技术
二、页表及页表项的设计
注意:页表项通常是硬件设计的
关于页表:页表项是存储数据的最小单位(32位为4B),页面大小是已经规定好的(4K),
一个进程空间在32位系统中,最多有2的20次方张的页表。页表页对页表进行寻址
对于64位:页表数等于2的64次方除以4K(2的12次方),等于2的52次方(32000T)
数字太大,由此引入了页目录的概念
-----------------------------------------------------------------------------------------------------------------------------
虚拟地址内容:页目录偏移,页表偏移,页内偏移。
页目录地址是页目录表的首地址,通过页目录偏移找到页表地址,页表偏移找到页框号(物理地址1),页内偏移 (物理地址2),物理地址=物理地址1+物理地址2。
寻址说明:页目录偏移和页表偏移寻址2的10次方个地址,页内偏移寻址2的12次方个地址。
/******************************以下内容不正确,可以做思考
关于32位寻址空间和寻址32位数据个数说明:
1个32位的地址,其寻址空间能力4GB,寻址个数2的27次方 。原因是每次需要32位,即4个字节长度的数字来组成一个新的32位数,所以寻址个数2的32次方除以2的5次方,等于2的27次方。
引申:32位数据每次向上拓展一个维度,建立一个32位长度的数组,寻址个数乘以2的27次方。
下面的二级页表可以表示4G的虚拟地址空间,是因为它有32位的缘故 ***************************/
--------------------------------------------------------------------------------------------------------------------------------
同理,CORE I7结构寻址空间2的48次方,因为它有48位
实现过程:一级一级往下传递地址,最终取得一个地址(36位),得到页框号。加上12位页内地址偏移,共有48位情况。
---------------------------------------------------------------------------------------------------------------------------------
前面使用页表项寻址,有一个问题,页表数目太多
说明:下面说每个进程一张页表,上面每个进程对应一张页目录。
--------------------------------------------------------------------------------------------------------------------------------
二、地址转换过程及TLB引入
------如果上一节没有很清楚,从这里开始看也可
地址转换过程:虚拟地址→查页表→物理地址
地址转换由内存管理单元MMU完成
地址转换的完整映射(上图补充),
同时它是一个二级页表结构,页目录→页表→页框号→物理地址
--------------------------------------------------------------------------------------------------------------------------------
CPU指令速度(快),内存指令访问速度(慢),二者不匹配 ,引入快表
快表是什么?高速缓存(Cache)中的一个缓冲区(数据结构),
工作过程:地址转换时CPU首先在快表中查找页框号,如果找到(TLB hit),则直接拼接成物理地址。如果没有找到(TLB miss),再到页表中去查找页框号,------图中是单级页表
Page Fault:如果没有在页表中,则进入存储区把相关内容调入内存
-------------------------------------------------------------------------------------------------------------------
三、页错误(页故障)
以缺页异常为例说明解决方法:
当发生缺页异常时,操作系统将页调入内存,而调入所缺页的同时把相关页框号也调入内存---windows解决方案
--------------------------------------------------------------------------------------------------------------------------------
驻留集:内存中的一块区域,内存中给进程留出的页框部分
给进程分配多少页框合适?下图中w处
置换范围:只在在缺页进程的驻留集中选择,称为局部置换策略
在内存中所有未锁定的页框中选择,包括了缺页进程或者其他进程的驻留集中选择,称为全局置换策略。
置换策略
基于过去的行为预测将来的行为来决定置换策略
约束条件:不能置换被锁定的页框
-----------------------------------------------------------------------------------------------------------------------------
页框锁定 ------做法:给每一个页框增加一个锁定位。
部分代码或者数据,其内存页面,阻止被置换出内存 ,避免产生交换过程带来的不确定延迟。
-------------------------------------------------------------------------------------------------------------------------------
清除策略:
起因:缺页异常时,系统中有大量的空闲页框,比起缺页时再去置换要好。所以在系统中保存一定数目的空闲页框是比置换更好的策略。系统设计了一个分页守护进程来做这件事,定期检查内存状态,如果空闲页框过少,则开始置换页框。并且分页守护进程保证写进空闲页框,又写回磁盘时是干净的。
页缓冲技术:
被置换出的页面暂时不丢弃,放进两个表中---空闲页链表和修改页链表,一旦被置换回的页又重新启用,则可以迅速加入进程
--------------------------------------------------------------------------------------------------------------------------------
四、置换算法
1.最佳页面置换算法
------作为其他算法的参照来理解
2.先进先出算法(FIFO)
------缺点:如果超市中有些驻留时间最长的页,是常用页,则不应该被置换,而简单由驻留时间长短置换就不合适了。
--------------------------------------------------------------------------------------------------------------------------------
3.第二次机会算法(SCR)
------访问位检查
4.时钟算法 :第二次机会算法的升级,use=1保留,use=0时置换
--------------------------------------------------------------------------------------------------------------------------------
5.最近未使用算法(NRU)
------设置两个位,标识出访问位,和修改位(是否被访问,是否被修改),并以此分出4类页。
从编号最小的非空类(数字越小被置换的优先级越高,0类最高)中选择一页置换
6.时钟算法实现
------最近未使用算法的时钟算法实现,加上了指针当前位置开始扫描的过程。
------扫描页框缓冲区,
如果找到第0类的第一个页框进行置换;如果没找到第0类,则找第1类的第一个页框进行置换;
如果第0类和第1类都没有,则重新扫描并把使用位(访问位)置位0,那么第3类就成了第0类,如果还找不到,说明只有第4类,当重复进行第2步,必然会找到了。
--------------------------------------------------------------------------------------------------------------------------------
7.最近最少使用算法(LRU)
-----------------操作系统中最常见使用算法之一 ,因其最接近于最佳页面置换算法
----------------问题:有一个开销比较大的过程,需要时间戳或着维护一个访问页的栈
LRU算法的一种硬件实现: ------看后面的例子就明白了
方法如下:数字0,那么第0行都设置为1,第0列设置为0。以此类推,Page 0。
图中有4个页面,于是用4*4的矩阵。到最后一个矩阵后,把数值最小的那一行置换掉。本例中经过一个时间段之后(10张表后),被置换掉的是Page d,Page e,Page f其中之一。
而开销大就在这里,如果有100张页,就需要用100*100的矩阵
8.最不经常使用算法(NFU)
实现原理:给每个页面用一个软件计数器计数,当发生缺页中断时,选择计数器值最小一页置换
算法7用矩阵表示页面框出现频率的大小,
算法8用计数器计算频率,频率小的页框置换掉
9.老化算法(AGING)
------老化算法是LRU算法的升级,也可以看作NFU算法计数版本的升级,tick作为一个时间段,分作tick 0,tick1到tick4。每个时间段根据是否被访问记作0或者1,过了一定时间段之后,本例中经过了5个时间段,看哪个页面的值小,则置换哪个页面。
--------------------------------------------------------------------------------------------------------------------------------
页面置换算法举例
BELADY现象:
采用FIFO页面置换算法时,分配给进程的物理页面数增加时,缺页次数反而增加。
--------------------------------------------------------------------------------------------------------------------------------
五、置换算法之工作集算法
影响缺页次数的因素 :
页面本身越大,分配给进程的页框数量越多,缺页次数下降。
页面尺寸问题:分页大小4k或者4M,有的操作系统采用了多种页面大小可选
考虑情况:页面越大,设计越复杂,碎片越多;
页面越小,页表项少,而页表框数目会越多
辅存的物理特性:比如簇大小,磁盘大小,也是考虑因素。
程序编制方法对缺页次数的影响:
如下图所示,按行遍历和按列遍历,次数不一样。组织页面的时候,一行代表一个页面
那么按行遍历页框,共128次;按列遍历页框,共128*128次
分配给进程的页框数与缺页率的关系 ------寻求一个最佳的比例
页框数越多,缺页率越小,但占内存越多,可以把页框全部进入内存但不符合驻留集的初衷
--------------------------------------------------------------------------------------------------------------------------------
工作集模型
------活跃页面概念
工作集算法
各种算法小结
其中NRU、CLOCK、NFU、Aging、Working set算法是常见所用的