• OS:3-存储管理


    第3章 存储管理

    3.1 存储管理的主要模式

    • 逻辑地址
      • 又称相对地址,即用户编 程所使用的地址空间
      • 一维逻辑地址(地址)
      • 二维逻辑地址(段号:段内地址)
    • 段式程序设计
      • 把一个程序设计成多个段
      • 代码段、数据段、堆栈段等
    • 物理地址:绝对地址
    • 主存复用
      • 按照分区
        • 主存划分为多个固定/可变尺寸的分区
        • 一个程序/程序段占用一个分区
      • 按照页框
        • 主存划分成多个固定大小的页架
        • 一个程序/程序段占用多个页架

    存储管理的基本模式

    • 单连续存储管理:一维逻辑地址空间的程序占用一个主存固定分区或可变分区
    • 段式存储管理:段式二维逻辑地址空间的程序占用多个主存可变分区
    • 页式存储管理:一维逻辑地址空间的程序占用多个主存页架区
    • 段页式存储管理:段式二维逻辑地址空间的程序占用多个主存页架区

    image-20210105191254414

    3.2 存储管理的功能

    地址转换

    把逻辑地址转换成绝对地址

    存储分配

    • 分配
    • 去配

    存储共享

    • 多个进程共享主存储器资源
      • 多道程 序设计技术使若干个程序同时进入主 存储器,各自占用一定数量的存储空 间,共同使用一个主存储器
    • 多个进程共享主存储器的某些区域
      • 若干个协作进程有共同的主存程序块 或者主存数据块

    存储保护

    • 为避免主存中的多个进程相互干扰,必须对主存中的程序和数据进行保护
    • 软硬件协同完成
      • CPU检查是否允许访问,不允许则产生地址保护异常
      • 由OS进行相应处理

    存储扩容

    • 对换技术:把部分不运行的进程调出
    • 虚拟技术:只调入进程的部分内容

    3.3 虚拟存储器的概念

    想法:把物理内存扩大到大容量磁盘上,把磁盘空间当作内存的一部分,进程的程序和数据痛楚部分放在内存中、部分放在磁盘上

    • 程序执行的指令或访问的数据在内存中,可以顺利执行
    • 在磁盘上,部分装入
    • 如果没用足够的空闲内存空间,部分替换
    image-20210105192703558
    • 需要建立与自动管理两个地址空间
      • (辅存)虚拟地址空间:容纳进程装入
      • (主存)实际地址空间:承载进程执行
    • 对于用户,计算机系统具有一个容量大得多的主存空间,即虚拟存储器

    3.4 存储管理的硬件支撑

    image-20210105192928059

    image-20210105193001337

    限长寄存器、基址寄存器存的是当前正在运行的线程/进程的

    3.5 单连续分区存储管理

    每个进程占用一个物理上完全连续的存储空间(区域)

    单用户连续分区存储管理

    • 划分为系统区、用户区
      • 设置一个栅栏寄存器划分、保护
    • 采用静态重定位进行地址转换
      • 在装入一个作业时,把该作业中程序的指令地址和数据地址全部转换成绝对地址
    image-20210105193331594

    固定分区存储管理

    image-20210105193546603
    • 静态分区
    • 内存空间被划分成数目固定不变的分区,各分区大小不等,每个分区只转入一个作业
    • 若多个分区都装有作业,可并发执行
    • 可用静态重定位
    • 需要一个主存分配表
    image-20210105193556193

    硬件实现+动态重定位的地址转换如下:

    image-20210105193710415

    缺点:不够灵活,既不适应大尺寸程序,又存在内存内零头,有浪费

    3.6 可变分区存储管理

    image-20210105194032584
    • 系统初始,整个用户区是一个大的空闲分区,随着作业的装入和撤离,内存空间被分为许多分区,有的被占用,有的空闲
    • 创建一个进程时,根据进程所需主存量查看主存中是否有足够的空闲空间
      • 有,按需要量分割分区
      • 无,进程等待主存资源
    • 分区大小按照进程实际需要量来确定,因此分区个数是随机变化的
    • 缺点:可变分区方式也会随着进程的内存分配 产生一些小的不可用的内存分区,称为内存外零头

    主存分配表

    使用链表

    image-20210105194111466

    分配算法

    • 最先适应分配算法(first fit)
      • 顺序查找未分配区表或链表,找到第一个长度满足的空闲区
    • 邻近适应分配算法(next fit)
      • 总是从未分配区上一次扫描结束处顺序扫描,找到第一个长度满足的空闲区
    • 最优适应分配算法(best fit)
      • 挑选一个能满足用户进程要求的最小的的空闲分区来分割
    • 最坏适应分配算法(worst fit)
      • 挑选一个最大的空闲分区来分割
    • 快速适应算法(quick fit)
      • 为经常用到的长度的空闲区设立单独的空闲区链表

    快速适应算法查找快速,但归还和合并复杂

    最先适应算法简单、快速,用的多,其次是邻近适应和最优适应

    地址转换

    image-20210105194714328

    移动技术

    • 解决内存外零头
    • 需要动态重定位支撑
    image-20210105194838323

    3.7 页式存储管理的基本原理

    • 分页存储器将主存划分成多个大小相等的页架

    • 受页架尺寸限制,程序的逻辑地址也自然分成页

    • 页表用于维系进程的主存完整性

    • 逻辑地址:image-20210105195033071

    • 物理地址:image-20210105195050461

    地址转换

    image-20210105195206705

    分配去配

    • 位示图
    • 链表

    image-20210105195431092

    页的共享

    • 数据共享:不同进程可以使用不同页号共享数据页
    • 程序共享:不同进程必须使用相同页号共享代码页
      • 共享代码页中的(JMP <页内地址>)指令,使用不同页号是做不到

    3.8 页式存储管理的地址转换

    • 页表放在主存: 每次地址转换必须访问两次主存
    1. 按页号读出页表中的相应页架号

    2. 按计算出来的绝对地址进行读写

    • 存在问题:降低了存取速度

    • 解决办法:利用Cache存放部分页表

    • 快表:存放在高速存储器中的页表部分

    假定主存访问时间为200毫微秒,快表访问时间为40毫微秒,查快表的命中率 是90%,平均地址转换代价为 (200+40) *90%+(200+200)*10%=256毫微秒

    快表转换流程

    • 若该页已在快表中,则由页架号和单元号形成绝对地址
    • 若该页不在快表中,则再查主存页表形成绝对地址,同时将该页登记到快表中
    • 当快表填满后,又要登记新页时,则需在快表中按一定策略淘汰一个旧登记项

    多道程序下的进程表

    • 登记了每个进程的页表
    image-20210105200607346
    • 地址转换过程

    image-20210105200648976

    3.9 页式虚拟存储管理

    基本思想

    把进程全部页面装入虚拟存储器,执行时先把部分页面装入实际内存,然后根据执行行为,动态调入不在主存的页,同时进行必要的页面调出

    • 首次只把进程第一页信息装入主存,称为请求页式存储管理

    扩充页表项

    每页的虚拟地址、实际地址、主存驻留标志、写回标志、保护标志、 引用标志、可移动标志

    image-20210105200943350

    地址转换

    • CPU处理地址
      • 若页驻留,则获得块号形成绝对地址
      • 若页不在内存,则CPU发出缺页中断
    • OS处理缺页中断
      • 若有空闲页架,则根据辅存地址调入页,更新页表与快表等
      • 若无空闲页架,则决定淘汰页,调出已修改页,调入页,更新页表与快表
    image-20210105201138031 image-20210105201152862

    3.10 页面调度

    当主存空间已满而又需要装入新页时, 页式虚拟存储管理必须按照一定的算法把已在主存的一些页调出去

    • 选择淘汰页的工作称为页面调度
    • 选择淘汰页的算法称为页面调度算法

    抖动/颠簸:页面调度算法设计不当,会出现刚被淘汰的页面立即又要调入,并如此反复

    缺页中断率

    假定进程P共n页,系统分配页架数m个,P运行中成功访问次数为S,不成功访问次数为F,总访问次数A=S+F

    缺页中断率定义为:f=F/A

    • 可用页框数越多,缺页中断率越低
    • 页面尺寸越大,缺页中断率越低

    调度算法

    • OPT/最佳/Belady调度算法

      • 当要调入新页面时,首先淘汰以后不再访问的页,然后选择距现在最长时间后再访问的页
    • FIFO

      • 总是淘汰最先调入主存的那一页,或者说主存驻留时间最长的那一页

      • 可能出现belady异常

        使用4个页框时的缺页次数比3个页框时的缺页多,因此这种奇怪的情况称为Belady异常

    • LRU

      • 淘汰最近一段时间较久未被访问的那一页
      • 模拟了程序执行的局部属性,既考虑了循环性又兼顾了顺序性
    • LFU

      • 淘汰最近一段时间内访问次数较少的页面,对OPT的模拟性比LRU更好
    • CLOCK

      • 页面调入主存时,其引用标志位置1
      • 访问主存页面时,其引用标志位置1
      • 淘汰页面时,从指针当前指向的页面开始扫循环队列
        • 把所遇到的引用标志位是1的页面的引用标志位清0,并跳过
        • 把所遇到的引用标志位是0的页面淘汰,指针推进一步

    3.11 反置页表

    • MMU:CPU管理虚拟/物理存储器的控制线路,把虚拟地址映射为物理地址,并提供存储保护,必要时 确定淘汰页面
    • 反置页表IPT:MMU用的数据结构
    • 优点:只需为所有进程维护一张表

    设计思想

    • 针对内存中的每个页架建立一个页表
    • 表项包含:正在访问该页框的进程标识、页号及特征位,和哈希链指针等

    地址转换

    1. MMU通过哈希表把进程标识和虚页号转换成一个哈希值,指向IPT的一个表目
    2. MMU遍历哈希链找到所需进程的虚页号, 该项的索引就是页架号
    3. 若遍历整个反置页表中未能找到匹配页 表项,说明该页不在内存,产生缺页中断,请求操作系统调入

    image-20210105203555963

    3.12 段式存储管理

    • 页式存储的缺点:页面与源程序并不存在逻辑关系,难以源程序以模块为单元进行分配、共享和保护
    • 段式存储:每个程序可由若干段组成,如主程序段、子程序段、数据段、工作区段,每一段都可以从“0”开始编址,段内的地址是 连续的

    image-20210105203932749

    基本思想

    • 基于可变分区存储管理实现, 一个进程要占用多个分区
    • 硬件需要增加一组用户可见的段地址寄存器(代码段、数据段、堆栈段,附加段),供地址转换使用

    image-20210105204148631

    段的共享

    • 通过不同进程段表中的项指向同一个段基址来实现
    • 对共享段的信息必须进行保护,如规 定只能读出不能写入,不满足保护条 件则产生保护中断

    3.13 段式虚拟存储管理

    把进程的所有分段都存放在辅存中,进程运行时先把当前需要的一段或几段装 入主存,在执行过程中访问到不在主存 的段时再把它们动态装入

    • OS实现,对用户透明

    扩充段表

    image-20210105204516741

    地址转换

    image-20210105204552811

    3.14 段页式存储管理

    image-20210105204711371

    image-20210105204753521

    image-20210105204800993

    补充

    伙伴系统

    伙伴系统(Knuth,1973),又称buddy算法,是一种固定分区和可变分区折中的主存管理算法,基本原理 是:任何尺寸为2i的空闲块都可被分为两个尺寸为2i-1 的空闲块,这两个空闲块称作伙伴,它们可以被合并 成尺寸为2i的原先空闲块

    image-20210105213215398

    寻址计算

    • 从0开始

    分段

    image-20210105213416534

    分页:

    image-20210105213511919

    多级页表

    image-20210105213606733

    反置页表

    不论由多少进程、支持多少虚拟页,页表都只需要实存中的一个固定部分

    页面大小

    image-20210105214613088

    局部最佳页面替换算法

    如果该 页面在时间间隔(t, t+τ)内未被再次引用,那么就移出;否则,该页被保留在进程驻留集中

    image-20210105224855497

    工作集置换算法

    工作集模型用来对局部最佳页面替换算法进行模拟实现,不向前查看页面引用串,而是基于程序局部性原理向后看

    W(t,Δ)表示在时刻t-Δ到时刻t之间( (t-Δ,t))所访问的页面集合,进程在时刻t的工作集

    image-20210105224954776

    PFF替换算法

    规则:如果本次缺页与前次缺页之间的时间超过临界值τ,那么,所有在这个时间间隔内没有引用的页面都被移出工作集

    image-20210105224738884
  • 相关阅读:
    C#进程操作(使用cmd启动和停止.exe)
    NCHW 与NHWC 的区别
    对于openeuler x_86_64,openeuler aarch_64的安装以及yum换源
    读西瓜书笔记
    修改SpringBoot启动Logo
    SpringBoot集成Redis
    SpringBoot集成Dubbo
    那些Java架构师必知必会的技术
    CompletableFuture 入门学习
    使用 VirtualBox+Vagrant 快速搭建 Linux 虚拟机环境
  • 原文地址:https://www.cnblogs.com/cpaulyz/p/14238540.html
Copyright © 2020-2023  润新知