操作系统03-内存管理

操作系统

第三章: 内存管理

存储器的层次结构

CPU寄存器

  • 寄存器

主存

  • 高速缓存

  • 主存储器

  • 磁盘缓存

辅存

  • 固定磁盘
  • 可移动存储介质

装入和链接

  • 装入

  • 绝对装入

    • 目标模块采用绝对地址
      • 逻辑地址和实际地址完全相同
      • 适用于单道环境
  • 可重定位装入

    • 在程序装入的时候装入
      • 存在地址变换,但是是直接找的当前合适的内存位置
      • 程序需要连续空间
      • 不存在在程序执行的过程中在内存移动
  • 动态运行时装入

    • 地址转换在程序需要真正执行时才进行
      • 可以在内存之中移动
      • 可以实现虚拟存储
  • 链接

  • 静态链接

    • 在程序运行之前,将各目标模块以及它们需要的库函数链接成一个完整的转入模块
  • 装入时动态链接

    • 在装入的时候边装入边链接
      • 便于修改和更新
      • 便于实现目标模块的共享
  • 运行时动态链接

    • 当程序需要的时候采取链接
      • 节约内存空间、加快装入过程

连续分配方式

  • 单一连续分配

  • 固定分区分配

    • 分区使用表

    • 内存利用与回收

    • 缺点

      • 规定了分区大小,大程序无法装入
      • 限制了活跃进程的最大数
      • 碎片过多
      • 扩充和贡献困难
  • 动态分区分配

    • 算法

      • 首次适应算法
  • 每一次从头开始 导致空闲区间分配不均

  • 循环首次适应算法
    - 从上次找到的空闲分区的下一个空闲分区开始查找

    • 可能会有小的程序占据大的空闲分区,会缺乏大的空闲分区

      • 最佳适应算法
  • 以分区的容量大小 寻找第一个符合要求的
    - 会导致更多的小空间

      - **最坏适应算法**
      - 和上面的算法让容量递减
    
    • 会导致大的空闲空间不足
  • 管理空闲分区

      - 空闲分区表
    
    • 空闲分区链
  • 分区回收

      - 要回收的分区上或下存在空闲分区,则合并
    
    • 上下都有是则分区数减一,将下面的空闲分区从空闲表或链表中删掉

      • 上或者下有(只有一个)则不变
    • 不存在则自己新建为新 空闲分区数加一

    • 分区分配

      • 存在一个最小不可再分割的大小
    • 没有程序数目和大小的限制但是会产生过多的碎片

  • 动态重定位分配

    • 重定位寄存器
    • 地址变换机构
    • 目标程序
  • 伙伴系统

    • 伙伴算法
    • 内存分配
    • 内存回收
    • 在进程释放存储空间时,寻找伙伴合并,
      可以做到类似递归进行,知道找不到可以合并的伙伴为止
  • 交换

    • 以进程为单位
    • 以页或段为单位

基本分页存储管理方式

  • 存储空间

    • 主存中为块
    • 进程的逻辑结构中为页
  • 页面与页表

    • 页表存放

      • 页表
      • 为记录页面在内存中对应的物理块
      • AcmKiY
    • 页表

    • 逻辑地址构成

      • 页号

        • 即在第几页
      • 页内位移

        • 即距离页面里面第一个地址的距离
        • 总的大小为页面大小,如1KB的页面,会有2的10次方的地址
      • 逻辑地址从0开始

  • 为解决连续分配方式存在的碎片

  • 地址变换机构

    • 分页逻辑地址

      • 页号和页内位移
        二进制:
        逻辑地址大小2m 页面大小2n
        则前m-n位表示页号 后n位表示页内位移
        十进制:
        记A为逻辑地址,L为页面大小,则:
        页号:P=int(A/L); 页内地址:d=A mod L
    • 映射

      • 页号得到物理地址的基地址

        • 基地址:页号对应的物理块号乘以页面大小即(块大小)
      • 基地址加上页内位移即实际物理地址

    • 快表

      • 设置的一个认为常用的页面集合

        • 因为:访问页表要访问2次以上主存
      • 局部性原理:所有的存储单元都趋于聚集在一个较小的连续区域

      • 增设一个具有并行查找能力的高速缓冲存储器

      • 存储频繁访问的页表项

    • 两级和多级页表

      • 每多一次页表会多一次对主存的访问

      • 将原来一张大的页表分为多个页表

      • 将地址组成部分的页表号分为多个部分

        • 每多一个部分表示多出一个页表对其进行记录,
          就相当于形成了多表结构
      • 实现可非连续存储页表

      • 级别增多会导致访问次数的增多

  • 信息共享

  • 可重入代码

基本分段存储管理方式

  • 逻辑地址结构

  • 段表

  • 与分页的区别

  • 信息共享

  • 大小

    • 逻辑地址结构

      • 段号

        • 通过段号可以知道最多允许有多少分段
      • 段内地址

        • 可以知道每段的最大长度
        • 不定

段页式存储管理方式

  • 逻辑地址结构

  • 先分段再分段

    • 所以会先访问段表再访问页表
    • 最后访问信息
  • 段表和页表

程序局部性原理

局部性原理是指CPU访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。

  • 程序运行时,无需全部装入内存,装载部分即可
  • 如果访问页不在内存,则发出缺页中断,发起页面置换
  • 从用户层面看,程序拥有很大的空间,即是虚拟内存

虚拟存储器

  • 原理

    • 概念

      • 在一开始放入部分内存就开始执行
      • 请求调入和置换
      • 时间上表现为一个对象会在一个较短时间内执行
      • 空间上表现为当前执行的指令在一个较小的范围
    • 请求调入

      • 所访问的信息不在内存的时候
    • 置换

      • 操作系统将内存中暂时不使用的内容换出到外存
    • 局部性原理

      • 概念

        • 局部性原理是指程序在执行过程中一个较短时间内
          ,程序所执行的指令地址和操作数地址分别局限于一定区域内
      • 程序中少量分支和过程调用大都是顺序执行

      • 过程调用深度有限,

      • 存在着许多循环

      • 数组等数据结构

      • 体现

        • 时间局部性
        • 空间局部性
  • 物质基础

    • 相当数量的外存
    • 一定容量的内存
    • 地址变换机构
  • 内存分配和分配算法

    • 进程需要的最小物理块数

      • 执行一条指令所涉及的页面数确定

      • 单地址指令

        • 直接寻址
        • 间接寻址
        • 功能较强时
    • 进程的物理块数是固定还是可变

      • 固定分配局部置换
      • 可变分配全局置换
      • 可变分配局部置换
    • 按什么原则为进程分配物理块数

      • 平均分配算法
      • 按比例分配算法
      • 按优先级分配算法
      • 实现方案
    • 局部范围内

      • 页面置换算法

        • 最佳置换算法

          • 将来最长时间不会使用

          • 仅具有理论意义

      • 先进先出算法

          - 选择调入主存时间最长的页面予以淘汰
        
      • 最近最久未使用置换算法

        • 选择最近一段时间内最长时间没有被访问过的页面予以淘汰

          • 实现

          • 基于寄存器的方法

            • 配置一个n位寄存器,在进程访问页面的时候最左置1
              • 每过一段时间则计数器右移1位
            • 最小数值的寄存器即最近最久未使用的页面
          • 基于栈的方法

              - 栈顶存放最近使用过的页面
            
        • 时钟置换算法

        • 将页面设置成循环队列

          • 首次调入内存,置访问位置1
          • 被访问置访问位置1
        • 缺页中断的时候

          • 访问为0则淘汰

            • 不为0则置为0
            • 接上次判定界面位置
          • 改进:访问位和修改位分开考虑

          • 有四种情况

            • 先寻找访问位和修改位都为0的页面淘汰
            • 没有则再寻找访问页为0,修改位为1的淘汰,并将访问位设置为0
            • 没有重复一操作
        • 其他置换算法

  • 性能分析

    • 有效访问时间

      • 访问存储器所需时间的平均值
      • 在快表中,则需要访问一次主存
    • 不在内存,则要缺页中断时间

      • 缺页中断时间

        • 缺页中断时间
        • 界面传送时间
        • 进程重新执行时间
        • 仅考虑页面传送时间
      • 影响缺页率的因素

        • 分配给进程的物理块数
        • 页面本身大小
        • 程序编制方法
        • 页面置换算法
    • 抖动现象

      - 全局抖动
      - 局部抖动
      
      • 产生原因

          - 进程分配物理块太少
          - 置换算法选择不当
        
        • 全局置换使抖动传播
      • 预防与解除

          - 采用局部置换策略
          - 增加分配给相应进程的物理块
        
        • 挂起进程
    • 页面大小的选择

      - 有个最佳界面大小可以选择
      - 每个页表项需e个字节
      - 内存大小为m
      - 进程的平均长度为s
      - 计算开销  碎片项和页表项的总和(pm/2s + me/p)求最小值
      - p=2es的算术平方根
      
  • 实现方法

    • 请求分页存储管理方式

      • 调页策略

        • 何时

          • 预调页策略
          • 请求调页策略
        • 何处

          • 文件区

            • 存放文件
            • 离散分配
          • 对换区

            • 存放对换页面
            • 连续分配
            • 磁盘I/O较高
        • 情况

          • 对换区空间足够

          • 对换区空间不够

            • 将进程中可能被修改的调入对换区
          • UNIX方式

            • 全部存放在文件区
            • 运行过调出的放于对换区
            • 存在页面共享
      • 支持机构

        • 页表

          • 扩充的页表
        • 缺页中断机构

          • 缺页中断
          • 中断过程
        • 地址变换机构

          • 类似于分页存储管理
          • 进行缺页中断处理
    • 请求分段存储管理方式

      • 请求调段

      • 分段置换

      • 支持结构

        • 段表

        • 缺段中断机构

          • 类似缺页中断

          • 内存管理

          • 段的置换

            • 有空间则直接调入
            • 没有就检查空闲区之后是否满足
            • 再不符合则淘汰若干段
        • 地址变换机构

          • 动态地址变换
      • 分段共享

        • 实现

          • 为了实现分段共享,可在系统中设置一张共享段表,所有共享分段都在其中占有一表项
          • 增加共享进程计数
          • 存取控制字段
          • 共享段在不同进程中有不同的段号
      • 分配

        • 对于第一个请求使用该段的进程,系统为该共享段分配一个内存区,在将共享段调入
        • 同时将该区的始地址填入请求进程的段表
        • 在共享段表中增加一项,填写有关数据将count置1
        • 填入相关的数据结构
      • 回收

        • 释放该进程段,将count减一
        • 如果变为0则需要系统回收共享段的物理内存及有关表项
    • 分段保护

      • 越界保护

          - 用段表长度与逻辑地址中的段号比较
        
        • 段长与逻辑地址中的段内位移比较
      • 存取方式检查

        • 本段的访问方式
      • 环保护结构

          - 低编号环具有高优先权
        
        • 原则

            - 一个程序可以访问在相同的环或者较低环中的数据
            - 一个程序可以调用驻留在相同环或较高环中的服务
          
  • 特征

    • 多次性
    • 对换性
    • 虚拟性

posted @ 2020-08-04 20:51  孙中明  阅读(170)  评论(0编辑  收藏  举报