操作系统之存储管理

1.绝对地址与相对地址的存储方式

2.空闲内存管理方式:位图存储管理    链表存储管理   (内存池的实现)

链表存储管理分配算法:首次适配算法(遍历链表找到第一个比要分配内存大的内存块)    最佳适配算法(遍历链表找到与要分配内存最匹配的内存块,容易产生内存碎片)  快速适配算法(为常用大小的空闲区维护单独的链表,其实是二级链表,linux STL的内存分配就是如此) 最差适配算法(总是分配最大的内存块,保证分配之后切割下的新内存块足够大)

3.虚拟内存:每个程序拥有自己的地址空间,这个空间被分割成多个块,每一块称为一个页面,通常一个页的大小为4KB

虚拟地址通过MMU(内存管理单元)将相对地址转换为绝对地址,完成到物理内存的映射。

虚拟地址到物理地址的映射:虚拟地址被分成虚拟页号和偏移量,通过页表项查询以虚拟页号为索引的物理地址页框号(内存中分配的页),将页框号拼接成偏移量的高位端,形成送往内存的物理地址

页表项的结构:保护位(RWX)高速缓存位 修改位 访问位 在/不在位

通过TLB(转换检测缓冲区 硬件TLB与软件TLB)这个中间存储单元来加速分页机制,得出的解决方案建立于这样的现象:大多数程序总是对少量的页面进行多次访问。

将一个虚拟地址放入MMU进行转换时,首先通过将虚拟页号与TLB中的表项同时进行匹配,如果发现了一个有效匹配并且访问操作不违反保护位,则直接从TLB取出页框号而不需要访问页表(硬失效与软失效)

4.大内存的页表

多级页表,一般在32位系统中实行,二级页表形式已足够使用

倒排页表,64位系统实行 通过页框号来索引虚拟页面,用虚拟地址生成散列键值,所有具有相同散列值的虚拟页面形成一个链表,加上TLB的运用 进行快速访问

5.页面置换算法(没有空闲页框的情况下)

最优页面置换算法:基本不可能实现,需要知道某个页面在多少条指令之后才会被访问,置换最大的那一个页面

最近未使用页面置换算法(NRU):当页面被访问时设置R位为1,当页面被修改时设置M位为1,当启动一个进程时,它所有的页面的RM被操作系统设置为0,R定期的被清零,以区别是否最近没有被访问的页面,当缺页中断发生时,操作系统检查所有的页面的R、M值,并将其分为四类:第0类 没有被访问,没有被修改(基本不可能)第1类 没有被访问,已被修改 第2类 已被访问,没有修改 第3类 已被访问,已被修改。随机的从类编号最小的非空类中挑选一个页面淘汰之。

先进先出页面置换算法(FIFO 粗暴式):操作系统维护所有的页面的链表,最新进入的页面放在表尾,最久进入的放在表头,发生缺页中断淘汰表头的页面并将新页面放入表尾

第二次机会页面置换算法:与FIFO类似,但是会检测是否被访问,如果有访问,则将R清零放入表尾,否则淘汰之,将新页面放入表尾

时钟页面置换算法:与FIFO类似,形成了一个闭环链表,一个指针指向最老的页面,如果有被访问,则R清零,指针移向下一个老页面,否则直接淘汰之,并在该位置插入新页面,指针移向下一位

最近最少使用页面置换算法(LRU):硬件实现(64位计数器,每条指令执行时加1,每次访问内存后,将当前的值保存到被访问的页面页表项中,缺页中断就检测该值,找出最小的替换之)(使用处置为0的N*N的矩阵,当访问页框k时(k<N),硬件首先把k行的位设置为1,k列的位设置为0,二进制数最小的行就是最近最少使用的 浏览器的页面缓存算法可以使用之)

软件模拟LRU:NFU算法,每个时钟中断系统扫描内存中的所有页面,将页面的R值加到页面所关联的软件计数器上,缺页中断时置换计数器数值最小的页面,问题在于如果某段时间某个页面频繁使用,会导致该关联的计数器相对比较大,导致很长时间都不会将其置换出去。老化算法,在关联的软件计数器上,将其右移一位,然后高位放入R值,置换最小值的页面。问题在于不能确定哪个是最近最少使用的

工作集置换算法:以进程工作的页面在某个时间段的集合为基础,当缺页中断时,淘汰不在工作集的页面,通过将上次使用时间写进页表项内进行判断。

工作集时钟页面置换算法:已闭环链表的形式,将指针指向当前工作集生存时间最大的一个

6.分段与分表

一个进程中指令段跟数据段是分开的,每个段以页做单位进行访问,实现进程间共享指令区域和共享库

7.缺页中断处理总结

(1)硬件陷入内核,在堆栈保存程序计数器

(2)启动汇编代码保存寄存器和其他信息

(3)缺页中断时尝试发现虚拟页面

(4)获得虚拟地址后检测有效性和保护位是否冲突,并选择适当操作处理页面置换

(5)选择的页框脏了,则写入磁盘,发生上下文切换,让其他进程运行直至磁盘读写结束

(6)页框干净后则操作系统查找页面在磁盘的地址通过磁盘操作将其装入,产生缺页中断的进程仍然挂起

(7)当磁盘中断发生时,表明该页已经装入,页表更新,页框正常

(8)恢复发生缺页中断的指令状态

(9)调度引发缺页中断的进程,返回调用她的汇编语言例程

(10)恢复寄存器及其他信息,返回用户空间继续执行,就好像缺页中断没有发生一样

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值