操作系统 -- 虚拟内存

本文介绍了覆盖技术和交换技术在处理内存不足时的角色,以及它们的局限性。随着虚拟内存的出现,这些问题得到了解决。虚拟内存利用局部性原理,通过页表管理逻辑地址与物理地址的映射。文章详细讨论了不同页面置换算法,如OPT、LRU、FIFO等,并解释了工作集模型和缺页率算法。此外,还提到了因物理页帧分配不当导致的抖动问题以及如何平衡并发水平与缺页率。
摘要由CSDN通过智能技术生成

覆盖技术

覆盖技术的主要功能即是 : 在内存空间较小的情况下, 运行需要更大内存的进程

在运行过程中, 将需要的程序换入到内存中, 将不需要执行的程序换出内存

在这里插入图片描述
使用了30k大小的内存, 执行了52k内存的程序

缺点 : 需要程序员自己清楚哪些程序是相关的, 哪些是无关的, 然后进行内存的分配, 增加的编程难度

覆盖技术已经过时

交换技术

交换技术 : 如果一台计算机上运行两个进程, 进程A, 进程B, 此时进程A在内存中, 但是处于阻塞状态. 进程B的运行需要更大的内存空间, 因此可以把进程A换出内存, 将空间交给进程B来使用

存在的一些问题 :

  • 交换区的大小 : 必须保证有足够大的存放所有用户进程的所有内存映像的拷贝
  • 重定位 : 换出后在换入的内存位置一定要在原来的位置上吗? 最好采用动态地址映射方法
  • 以进程为交换的单位, 需要把进程的整个地址空间都换进换出, 增加了处理器的开销

交换技术/ 覆盖技术对比

  1. 覆盖是发生在同一个进程之间, 交换发生在多个进程之间

虚拟内存

由于覆盖技术和交换技术的一些弊端, 为了更好的管理多个进程在运行过程中对内存的分配问题, 因此提出了虚拟内存

虚拟内存使得进程认为他拥有连续可用的内存, 实际上它通常是被分割成多个物理内存碎片, 还有部分暂时存储在外部磁盘上, 当发生缺页中断时会被换入到内存中, 而操作系统只需要处理好虚拟地址到物理地址的映射即可, 可以采用分页存储技术

页表

页表被分为大小相等的一个个页表项 , 页表项中处理用户地址空间中的逻辑地址映射为内存空间中的物理地址的作用的页号和物理块号两个字段外,还增加了四个字段,用于满足页面换进换出的需求

在这里插入图片描述
时钟算法中就用到了这些字段

局部性原理

时间局部性 : 程序中的某指令一旦执行, 不久后就可能再次执行, 某些数据被访问过, 不久后可能再次被访问, 如循环操作

空间局部性 : 一旦程序访问某存储单元, 不久后, 其附近的存储单元也将被访问, 即程序在一段时间内所访问的地址, 可能集中在一定的范围内, 因为指令和数据是顺序存放的

虚拟内存技术实际上建立了 “内存-外存” 的两级存储器结构,利用局部性原理实现高速缓存。

局部页面置换算法

OPT算法(最佳算法)

LRU算法(最近最久未使用算法)

FIFO算法(先入先出算法)

简单时钟算法

时钟算法改进

参考 : https://blog.csdn.net/weixin_50340097/article/details/124283102

全局页面置换算法

局部页面置换算法是对一个进程的内存使用的管理, 从理论上来说, 如果给一个进程分配更多的页帧, 那么这个进程在运行的过程中将会发生更少的缺页中断 (但也会有belady现象), 因此 页帧的多少会影响一个进程的执行, 为了让多个程序更好的执行, 当一个进程有过多的页帧的时候就需要释放, 拥有更少的页帧就需要添加, 全局页面置换算法就是来完成这一操作的

工作集模型

前面介绍的各种页面置换算法, 都是基于一个前提, 即程序的局部性原理, 如果此原理不成立, 那么各种页面的置换算法也没有什么分别, 如何证明局部性原理是成立的呢? 就需要使用工作集模型

在这里插入图片描述

t1时刻的局部性没有t2时刻好, t1时刻访问了5个页面, t2只访问了2个

常驻集

是指在当前时刻, 进程实际驻留在内存当中的页面集合

常驻集取决于系统分配给进程的物理页面数目, 以及所采用的页面置换算法

如果一个进程的整个工作集都在内存中, 即常驻集包含工作集, 那么进程将很顺利的运行, 而不会造成太多的缺页中断

当进程常驻集的大小达到某个数目后, 再给他分配更多的物理页面, 缺页率也不会明显下降

工作集页面置换算法在这里插入图片描述

规定工作集的大小为4 , 可以看到, 在5时刻, page4被移除进程所在的内存, 因为已经超过了工作集的长度

缺页率页面置换算法

在工作集页面置换算法中, 工作集的大小是固定得, 不会改变, 在本算法中, 根据缺页率来动态修改工作集的大小, 来对上面的算法进行优化

缺页率 = 缺页次数 / 总访问次数

缺页率高的时候增加工作集的长度, 缺页率低的时候来减小工作集的长度

原理 :
当缺失发生时, 从上次页缺失起计算, t1是上次页缺失的时间, t2是这次页缺失时间
如果发生页缺失之间的时间大于阈值T, 则减小工作集长度
t2 - t1 > T , 之后从内存中移除所有在[t1,t2]时间内的, 没有被引用的页
如果发生页缺失的时间小于T, 之后则增加工作集
t2 - t1 < T, 之后增加缺失页到工作集中

在这里插入图片描述
第1时刻发生缺页, 第4时候发生缺页, 4 - 1 > 2, 则将a,e 移出工作集
第6时刻发生缺页 , 6 - 4 <= 2, 则将e加入工作集

抖动问题

如果给一个进程的物理页太少, 不能包含整个的工作集, 即常驻集小于工作集, 那么进程将会造成很多的缺页中断, 需要频繁的在内存与外存之间替换页面, 从而使进程的运行速度变的很慢, 这种就是抖动

随着驻留内存的进程数目增加, 分配给每个进程的物理页面数不断减少, 缺页率不断上升, 所以os要选择一个适当的进程数目和进程需要的帧数, 以便在并发水平和缺页率之间达到一个平衡

内存的换入,换出很浪费性能, 影响程序的执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值