zoukankan      html  css  js  c++  java
  • OS-虚拟存储器

    第五章虚拟存储器

    虚拟存储器在逻辑上实现了对内存容量的扩充

    概述

    常规存储管理方式的特征

    • 一次性:作业必须一次性的全部装入内存后方能开始运行
    • 驻留性:作业被装入内存后,将一直驻留到作业运行结束

    局部性原理

    • 程序运行时存在局部性现象,由于大多是顺序执行,循环结构,以及对数据结构的处理也是局限于一个小范围
    • 局限性分为两个方面
      • 时间局限性
        • 若某指令被执行,则不久可能再被执行
        • 若某数据被访问,则不久可能再被访问
      • 空间局限性
        • 程序在一定时间所访问的地址可能集中在一定的范围之内

    虚拟存储器的工作情况

    • 由于局部性原理,程序在运行时没必要一次性装入内存,只需要当前运行的少数页面或段先装入即可
    • 当访问的页/段未调入内存,称为缺页/缺段,便发出中断请求,利用调页/调段功能调入内存
    • 若内存已满,则需要置换暂时不用的页/段,腾出空间

    定义

    • 虚拟存储器是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器
    • 其逻辑容量由内存容量和外存容量之和决定

    特征

    • 多次性:一个作业中的程序和数据允许被分为多次调入
    • 对换性:一个作业中的程序和数据无须一直驻留,允许进行换出换入
    • 虚拟性:能够从逻辑上扩充内存容量,虚拟存储器最重要的特征

    实现方法

    二者分别是在分页/分段系统基础上添加了请求调页和页面置换功能所形成的页式/段式虚拟存储系统

    • 分页请求系统
    • 请求分段系统

    请求分页存储管理方式

    硬件支持

    • 请求页表机制

      • 请求分页系统中需要的主要数据结构是请求页表

      • 每个页表需含有

        NIVwwR.png

      • 状态位:指示该页是否已调入内存

      • 访问字段:用于记录本页在一段时间被访问的此时或多久未被访问,提供于置换算法参考

      • 修改位:标识调入内存后是否被修改,供置换时参考

    • 缺页中断机构

      • CPU通常在一条指令执行完后才检查是否有中断请求到达;而缺页中断是在指令执行期间,若发现访问的指令或数据步在内存,则立即产生和处理缺页中断信号
      • 一条指令在执行期间可能产生多次缺页中断,机构应保存多次中断时的状态,确保中断恢复顺利
    • 地址变换机构

      • 地址变换过程

      NIZ5DJ.png

    内存分配

    最小物理块数的决定

    • 最小物理块数是指能保证进程正常运行所需的最小物理块数
    • 取决于指令格式,功能,寻址方式
    • 如单地址指令且直接寻址,则最少2块,一块存放指令页面,一块存放数据页面

    内存分配策略

    • 固定分配局部置换
      • 固定分配,即位每个进分配一组固定数目的物理块,运行期间不再改变
      • 局部置换,即若运行中发现缺页,则只能从分配给该进程的n个页面中选出一页换出,再调入一页,确保分配的内存空间不变
    • 可变分配全局置换
      • 可变分配,即先为每个进程分配一定数目的物理块,在运行期间,根据情况适当增加或减少
      • 全局置换,即如果进程运行中发现缺页,则将OS所保留的空闲物理块取出一块分配给该进程,或者以所有进程的全部物理块为标的,选择一块换出,调入所缺之页
    • 可变分配局部置换

    物理块分配算法

    • 平均分配算法
      • 将系统中所有可供分配的物理块平均分配给各个进程
    • 按比例分配算法
      • 根据进程大小按比例分配物理块
    • 考虑优先权的分配算法
      • 把内存中可供分配的所有物理块分成两部分
        • 一部分按比例分配
        • 一部分按优先权分配

    页面调入策略

    • 何时调入页面

      • 预调页策略
        • 以预测为基础的策略,将预计会不久被访问的页面预先调入内存
        • 第一次调入可由程序员指定哪些页先调入
        • 在采用工作集的系统。每个进程有个表,表中记录运行时的工作集。每当程序被调度运行,就把工作集中所有页调入
      • 请求调页策略
        • 当进程运行时发现所需页面不在内存,则立即提出请求
    • 何处调入页面

      请求分页系统的外存分为两部分

      存放文件的文件区,离散分配,存取速度慢

      存放对换页面的对换区,连续分配,存取速度块

      有三种情况

      • 系统拥有足够对换区空间,此时可全部从对换区调入所需页面
      • 系统缺少足够对换区空间,凡是不会被修改的文件,都从文件区调入;对于可能被修改的部分,换出时调到对换区
      • UNIX方式,凡是为运行过的页面,都从文件区调入
    • 调入页面过程

      • 发出缺页中断请求
      • 中断处理程序保留CPU环境,分析原因
      • 缺页中断处理程序查找页表,得到该页在外存的物理块
        • 若内存可容纳新页,直接调入内存,修改页表
        • 若内存已满,采用置换算法,选择一页换出
          • 若该页未被修改,则不必写回硬盘
          • 若该页已被修改,则须写回硬盘
          • 调入所缺页
    • 缺页率

      • 假设进程逻辑空间为n页,系统分配内存物理块数位m,若运行过程中,访问页面成功(该页面在内存中)的次数S,访问失败次数为F,则总访问次数A=S+F

        [缺页率f=frac{F}{A}=frac{F}{F+S}=frac{访问成功次数}{总访问次数} ]

    • 页面大小,页面越大,缺页率越低

    • 进程所分配的物理块数,越多缺页率越低

    • 页面置换算法

    • 程序固有特性

    • 假设被置换的页面被修改改了为b,缺页中断处理时间为Ta,被置换页面没有被修改的缺页中断事件为Tb,

      [缺页中断处理时间t=b imes{Ta}+(1-b) imes{Tb} ]

    页面置换算法

    当一个进程运行中的大部分时间花在页面置换工作上,称该进程发生了抖动,不适当的页面置换算法会导致抖动

    最佳置换算法

    • 所选择的被淘汰的页面将是以后永不使用,或最长时间内不再被访问的页面
    • 可保证最低缺页率,但无法实现该算法
    • 序号列为引用顺序,7,0,1先装入内存,当还要访问页面2时,将选择页面7淘汰,因为7比0和1更晚被再次访问,以此类推
    • 在该序列号共发生了六次页面置换

    NIGMgs.png

    先进先出置换算法FIFO

    • 总是淘汰最先进入内存的页面,即选择驻留时间最久的页面淘汰
    • 实现方式:把一个进程已经调入内存的页面按先后次序链接成队列,并设置替换指针,总是指向最老的页面
    • 同样的引用顺序序列号,发生了12次页面置换

    NIGXxs.png

    最近最久未使用置换算法LRU

    • 选择最近最久未使用的页面予以淘汰

    • 实现方式:赋予每个页面一个访问字段,用于记录一个页面自上次被访问以来所经历的时间t,每次需要淘汰页面时,选择t最大的

      NIayVI.png

    • 硬件支持

      • 寄存器,记录某进程在内存中各页的使用情况,设置了一个移位寄存器
      • 栈,每当进程访问某页面,则压入栈顶,栈顶始终未最新访问页面编号,栈底是最近最久未使用页面

    NIBL79.png

    最少使用置换算法LFU

    • 每个页面设置一个移位寄存器,用于记录该页面被访问的频率,每访问某页,便将最高位置1,再每隔一定时间右移一次
    • 该算法选择最佳时期使用最少的页面作为淘汰页

    Clock置换算法

    简单的Clock置换算法(NRU,Not Recently Used)

    • 实现方式:每页设置一位访问位,内存中所有页面通过链接指针链接成一个循环队列,当某页被访问时,其访问位置1
    • 执行过程:选择淘汰页时,只需检查页的访问位,若为0,则换出,若为1,则置0;若检查到最后一个页面访问位仍为1,则再返回队首重新检查

    改进型Clock置换算法

    • 对于修改过的页面,换出时所付出的开销比未修改的大,又称置换代价
    • 由访问位A和修改位M可用组成四种页面,分别为1,2,3,4类
      • A=0,M=0:该页最近既未被访问,又为被修改,最佳淘汰页
      • A=0,M=1:该页最近未被访问,但已被修改
      • A=1,M=0:该页最近已被访问,但未被修改,可能再被访问
      • A=1,M=1:该页最近已被访问,也已被修改,可能再被访问
    • 执行过程:
      • 先寻找第一类页面,将所遇到的第一个页面作为淘汰页,第一次扫描不改变访问位
      • 若第一步失败,第二轮扫描第二类页面,将所遇到的第一个页面作为淘汰页,将所有扫描过的页面访问位置0
      • 若第二步失败,重复循环第1,2步,但将所有扫描过的页面访问位置0

    页面缓冲算法

    页面换出换进所付出的开销对系统性能影响重大

    影响页面换出换进效率的因素

    • 页面置换算法
    • 写回磁盘的频率
    • 读入内存的频率

    页面缓冲算法PBA

    • 系统为每个进程分配一定数目的物理块,自己保留一部分空闲物理块,为了显著降低页面换进换出频率,在内存中设置两个链表
      • 空闲页面链表
        • 实际上是空闲物理块链表,用于分配给频繁缺页的进程
        • 当这样的进程需要读入一个页面时,便将空闲物理块链表中第一个物理块装入该页
        • 当有一个未被修改的页要换出时,把它们所在的物理块挂在空闲链表末尾,而不是换出
      • 修改页面链表
        • 当有一个已被修改的页要换出时,把它们所在的物理块挂在修改页面链表末尾,而不是换出

    访问内存的有效时间EAT

    • 被访问页在内存,对应的页表项在快表中
      • EAT=查找快表时间+访问实际物理地址所需时间
    • 被访问页在内存,对应的页表项不在快表中
      • 需两次访问内存,一次读取页表,一次读取数据,还要修改快表
      • EAT=(查找快表时间+访问实际物理地址所需时间)x2
    • 被访问页不在内存
      • 访问实际物理地址所需时间a,缺页率f,缺页中断处理时间b
      • EAT=a+f x (a+b)+(1-f) x t

    抖动与工作集

    NTI6nH.png

    人们希望在系统中运行更多的进程,来提高处理机的利用率。但实际上,处理机利用率随横轴多道程序的数量有如上图变化情况

    N3后面利用率趋于0了,这是因为系统发生了抖动

    发生抖动的根本原因:

    • 系统中同时运行的进程太多,分配给每个进程的物理块太少,不能满足其基本需要,导致运行时频繁出现缺页。

    • 每个进程的大部分实际用于页面换出换入,这时的进程称为处于抖动状态,由此引入了工作集

    工作集

    基本概念

    • NTTkLQ.png

    • 程序在运行时由于局部性原理,存在某一段时间仅访问某些页面,这些页面称为活跃页面,人们系统能预知程序在某段时间要访问哪些页面,并调入内存,提高处理机利用率

    • 工作集是指:某段时间间隔内,进程实际所要访问页面的集合

    • 把进程在时间t的工作集记作w(t,△),△为工作集的窗口尺寸,图为进程中窗口大小分别为3,4,5的工作集

      NT7cB4.png

    抖动的预防方法

    • 采取局部置换策略
    • 把工作集算法融入处理机调度中
      • 调入时,首先为缺页率居高的作业增加新的物理块
    • 利用L=S准则调节缺页率
      • L是缺页之间的平均时间,S是平均缺页服务时间
      • L=S时,处理机和磁盘利用率最大
    • 选择暂停的进程

    请求分段存储管理方式

    硬件支持

    • 请求段表机制

      • 段表项

      NTHOLF.png

      • 访问字段,修改位,存在位,都和页表项类似
      • 增补位:表示本段运行过程中是否做过动态增长
    • 缺段中断机构

      NTbImD.png

    • 地址变化机构

    NTbvX8.png

    分段的共享和保护

    共享段表

    • 共享进程计数count
    • 存取控制字段
    • 段号

    NTqKAJ.png

    共享段的分配

    除了第一次请求使用该共享段时,系统为该共享段分配一物理区,再调入共享段外,后面再申请只需将count+1,

    所有申请都需要在共享段表增加表项,填写信息

    共享段的回收

    若共享该段的某进程不再需要此段,则撤销在进程段表中共享段所对应表项,执行count=count-1

    若count为0,则所有共享该段的进程全部不再需要,此时由系统回收该段所占内存区

    分段保护

    • 越界检查
    • 存取控制检查
    • 环保护机构
      • 低编号的环具有高优先权
      • 访问和调用遵循规则:
        • 可以访问驻留在相同环或较低特权环的数据
        • 可以调用驻留在相同环或较高特权环的服务
  • 相关阅读:
    Linux 下 的 Oracle,如何安装 tnsname
    checkpoint process vs writer process vs wal writer process
    PostgreSQL的checkpoint能否并行
    PostgreSQL参数学习:wal_keep_segments
    PostgreSQL参数学习:vacuum_defer_clean_age
    PostgreSQL参数学习:max_wal_senders
    对PostgreSQL数据库的hstore类型建立GisT索引的实验
    PostgreSQL的hstore初步学习
    乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级
    Android 6.0 超级简单的权限申请2 (Permission)
  • 原文地址:https://www.cnblogs.com/AMzz/p/13339876.html
Copyright © 2011-2022 走看看