操作系统——内存管理(详细)

💾物理内存管理(主存)

🔧连续内存分配

内存碎片问题

——空闲内存不能被利用

  • 外部碎片:在分配单元间的未使用内存
  • 内部碎片:在分配单元中的未使用内存
分区的动态分配
原理优势劣势
第一适配从低地址开始寻找一个合适的分区,重分配需要检查自由分区是否可合并简单,易于产生更大的空闲块产生外部碎片
最优适配寻找最适合分配请求的分区,重分配需要检查自由分区是否可合并简单,适合小尺寸分配产生外部碎片,小的空闲块难以分配
最差适配寻找最不适合分配请求的分区,重分配需要检查自由分区是否可合并适合中等尺寸分配产生外部碎片,易于破碎大的空闲块以致大分区无法被分配
压缩式碎片整理

在这里插入图片描述

压缩从而获得连续的内存块

交换式碎片整理

在这里插入图片描述

🪛非连续内存分配

连续内存分配的缺点:

  • 内存利用率低
  • 有外碎片、内碎片的问题

故使用非连续内存分配来改善问题

优点缺点
连续内存分配1. 内存利用率低
2.有外碎片、内碎片的问题
非连续内存分配1.更好的内存利用和管理
2.运行共享代码与数据
3.支持动态加载和动态链接
软件方案:开销大
硬件方案:分段、分页
📒分段Segmentation

在这里插入图片描述

在这里插入图片描述

分段寻址方案:

在这里插入图片描述

硬件实现方案:

在这里插入图片描述

段表由操作系统建立

📃分页Paging

帧:非连续的物理内存

在这里插入图片描述

页:连续的虚拟内存

在这里插入图片描述

分页寻址方案:

在这里插入图片描述

页表由操作系统建立

硬件实现方案:
页表Page Table

在这里插入图片描述

页表空间和时间问题的解决:
  1. 缓存Cache

    常用的页表项放入CPU中的快表TLB,不需要多次访问内存

  2. 间接访问

    二级、多级页表

    在这里插入图片描述

  3. 方向页表

    使得页表只与物理地址大小有关,而与逻辑地址大小无关

    • 基于页寄存器的方案
    • 基于关联内存的方案
    • 基于哈希查找的方案

💽虚拟内存管理

起因:

让更多程序跑在有限的内存中

在这里插入图片描述

覆盖技术:跑比较大的程序,发生在程序内部

​ 只把需要的指令和数据保存到内存中(分时占用内存

粒度:程序功能模块

在这里插入图片描述

在这里插入图片描述

缺点:程序员需要将程序划分为不同功能模块,负担大

交换技术:跑比较多的程序,发生在程序间

​ 把暂时不能执行的程序送到外存中

粒度:一个程序

在这里插入图片描述

在这里插入图片描述

缺点:把进程的整个地址空间都换进换出,开销大

虚存技术:跑更大更多的程序

​ 以更小的页粒度为单位进行导出导入

粒度:页或段

在这里插入图片描述

目标:
  1. 像覆盖技术一样,不是把程序的所有内容都放在内存中
  2. 像交换技术一样,能够实验进程在内存与外存之间的交换

程序局部性原理:

​ 程序在执行过程中一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域,提高访问效率

  1. 时间局部性:一条指令的一次执行和下次执行,一个数据的一次访问和下次访问都集中在一个较短时期
  2. 空间局部性:当前指令和邻近的几条指令,当前访问的数据和邻近的几个数据都集中在一个较小的区域

在这里插入图片描述

基本概念 :

页式存储管理的基础上,添加请求调页页面置换功能

基本特征:
  1. 大的用户空间:提供给用户的虚拟内存空间通常大于实际的物理内存(虚拟内存=物理内存+外存)
  2. 部分交换:虚拟存储的调入和调出是对部分虚拟地址空间进行的
  3. 不连续性:物理内存分配的不连续
虚拟页式内存管理:
页式内存管理:

在这里插入图片描述

请求调页:

​ 当发生缺页异常时,会请求调页

页面置换:

​ 将不常用的数据放到外存中,常用的数据放到内存中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

页面置换算法

功能与目标:

功能:当缺页中断发生,需要调入新的页面而内存已满时,选择内存当中的哪个物理页面被置换

目标:尽可能地减少页面的换进换出次数(即缺页中断次数)

页面锁定:用于描述必须常驻内存的操作系统的关键部分或时间关键的应用进程。实现方法:在页表中添加锁定标志位lock bit

局部页面置换算法:

针对一个正在运行的程序而言

  • 最优页面置换算法(OPT,optimal)

    基本思路:计算逻辑页面下次访问之前,还需等待多长时间,选择下次访问等待时间最长的作为置换页面

    缺点:这是一个理想情况,只作为最佳评价标准。

  • 先进先出算法(FIFO,First In First Out)

    基本思路:选择在内存中驻留时间最长的页面作为置换页面

    实现:链表,队列

    缺点:性能比较差,调出的页面有可能是经常要访问的页面,并且有Belady现象

  • 最近最久未使用算法(LRU,Least Rectenly Used)

    基本思路:当一个缺页中断发生时,选择最久未使用的页面作为置换页面

    实现:链表,队列

    缺点:开销大,需要查找链表中是否存在与访问页面相同的页号,若有则抽出。

    满足栈算法,不会出现Belady现象

  • 时钟页面置换算法(Clock)LRU算法的近似

    基本思路:

    1. 将各个页面组织成环形链表(类似于时钟表面),把指针指向最老的页面(最先写入的页面)

    2. 当发生缺页中断时,考察指针指向的最老页面

      • 若访问位为0,作为置换页面,然后指针下移一个格

      • 若访问位为1,把该位置为0,指针往下移动一格,直到找到置换页面,然后指针下移一个格

      访问页面存在指针不移动,缺页时指针才移动

    缺点:有可能将可写的页换出,增加了磁盘读取的次数

  • 二次机会法

    基本思路:Clock算法的优化,除利用used bit外,还利用dirty bit来减少磁盘读取次数

    选择used bit和dirty bit都为0的页面作为置换页面,然后指针下移一个格(优先将只读的页换出去,减少可写的页被换出)

    在这里插入图片描述

  • 最不常用算法(LFU,Least Frequently Used)

    基本思路:当一个缺页中断发生时,选择访问次数最少的页面作为置换页面

    缺点:需要查找访问计数器,开销大

    LRU和LFU的区别:

    LRU:考察的是多久未访问,时间越短越好

    LFU:考察的是访问的次数或频度,访问次数越多越好

    问题:一个页面在进程开始时使用得很多,但以后就不使用了

    解决方法:定时把次数寄存器右移一位

  • Belady现象:在采用FIFO算法时,有时会出现分配的物理页面数增加,缺页率反而提高的异常现象

  • LRU、FIFO、Clock的比较

    在这里插入图片描述

    在这里插入图片描述

全局页面置换算法:

针对多个正在运行的程序而言,根据程序不同运行阶段动态分配、调节物理页帧的大小

  • 工作集模式

    在这里插入图片描述

    工作集类似于一个滑动窗口

    工作集:一个进程当前正在使用的逻辑页面集合

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

    使工作集尽量包含于常驻集,从而减少缺页中断

  • 工作集页面置换算法

    基本思路:选择不在工作集中的页面作为置换页面

  • 缺页率页面置换算法

    基本思路:根据缺页率动态调整常驻集、工作集

    ​ 当缺页率高的时候,增加工作集——将缺失页添加到工作集

    ​ 当缺页率低的时候,减少工作集——从工作集中移除没有在[t1,t2]被引用的页面

    ​ t1:第一次缺页中断的时间

    ​ t2:第二次缺页中断的时间

抖动问题:随着驻留内存的进程数目增加,分配给每个进程的物理页面数不断减小,缺页率不断上升

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值