您好,欢迎访问这里是深圳市硕远科技有限公司!
戴尔服务器价格_IBM联想配置_浪潮代理-深圳市硕远科技有限公司
联系我们
戴尔服务器价格_IBM联想配置_浪潮代理-深圳市硕远科技有限公司
邮箱:2324898850@qq.com
电话:400-080-6079
地址:深圳市龙华区河背工业区108创业园A301
当前位置:主页 > 新闻动态 > 企业新闻 >

企业新闻

操作系统 第四章 非连续式内存分配

发布时间:2022-08-31 03:03:08浏览次数:

> 清华大学 陈渝老师 操作系统教程

为什么需要非连续内存分配
  • 连续内存分配的缺点
    • 分配给一个程序的物理内存是连续的
    • 内存利用率较低
    • 有外碎片、内碎片的问题
  • 非连续分配的优点
    • 一个程序的物理地址空间是非连续的
    • 更好的内存利用和管理
    • 允许共享代码与数据(共享库……)
    • 支持动态加载和动态链接
非连续内存分配的缺点
  • 如何建立虚拟地址和物理地址之间的转换
    • 软件方案
    • 硬件方案
      • 分段(Segmentation):更好的分离和共享
        • 程序的分段地址空间


        • 分段寻址方案
          • 段访问机制
            • 一个段:一个内存“块”
              • 一个逻辑地址空间
            • 程序访问内存地址需要
              • 一个二维的二元组
                • 段号
                • 段内偏移
            • 实现方案
              • 段寄存器+地址寄存器
              • 单地址

      • 分页(Paging)
        • 划分物理内存至固定大小的帧
          • 大小是2的幂
        • 划分逻辑地址空间至相同大小的页
          • 大小是2的幂
        • 建立方案:转换逻辑地址为物理地址(pages to frames)
          • 页表
          • MMU(内存管理单元,CPU重要组成部分)/TLB(块表,对页表的缓存)
        • 页帧
          • 物理内存被分割为大小相等的帧
          • 一个内存物理地址是一个二元组(f,o)
            • f——帧号(F位,共2的F次方个帧)
            • o——帧内偏移(S位,每帧有2的S次方字节)

          • 一个程序的逻辑地址空间被划分为大小相等的页
            • 页内偏移的大小 = 帧内偏移的大小
            • 页号大小<>帧号大小
          • 一个逻辑地址是一个二元组(p,o)
            • p——页号(P位,2的P个页)
            • o——页内偏移(S位,每页有2的S次方字节)

        • 页表是由操作系统创建的
        • 页寻址机制
          • 页映射到帧
          • 页是连续的虚拟内存
          • 帧是非连续的物理内存
          • 不是所有的页都有对应的帧
页表(Page Table)
  • 页表概述
    • 页表结构
      • 每个运行的程序都有一个页表
        • 属于程序运行状态,会动态变化
        • PTBR:页表基址寄存器
      • 页表项的内容
        • Flags(标志位)
          • dirty bit
          • resident bit
            • 0
              • 页帧在内存中不存在,没有这个映射关系
            • 1
          • clock/reference bit
        • 帧号
    • 地址转换实例
    • 分页机制的性能问题
      • 访问一个内存单元需要2次内存访问
        • 一次用于获取页表项
        • 一次用于访问数据
      • 页表可能非常大
        • 64位机器如果每页1024字节,那么一个页表的大小会是多少?
      • 解决方法
        • 缓存(Caching)
        • 间接(Indirection)访问
  • 转换后备缓冲区(TLB)
  • 解决页表的时间问题
    • 缓存近期访问的页帧转换表项
      • TLB使用associative memory(关联内存)实现,具备快速访问性能
      • 如果TLB命中,物理页号可以很快被获取
      • 如果TLB未命中,对应的表项被更新到TLB中
        • TLB缺失不会很大
        • 写程序时注意使程序具有局部性,把平时的访问集中在一个区域可以减少TLB的缺失
  • 二级/多级 页表
    • 二级页表
    • 多级页表
      • 通过把页号分为k各部分来实现多级间接页表
  • 反向页表
    • 大地址空间问题
      • 有大地址空间(64-bits),前向映射页表变得繁琐
        • eg.5级页表
      • 不是让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对应
        • 逻辑(虚拟)地址空间增长速度快于物理地址空间
    • 基于页寄存器(Page Registers)的方案

      • 每一个帧和寄存器关联,寄存器内容包括
        • Residence bit:此帧是否被占用
        • Occupier:对应的页号p
        • Protection bits:保护位
      • 利弊
          • 转换表的大小相对于物理内存来说很小
          • 转换表的大小跟逻辑地址空间的大小无关
          • 需要的信息对调了,即根据帧号可找到页号
          • 如何转换回来?即根据页号找到帧号
          • 需要在反向页表中搜索想要的页号
    • 基于关联内存(associative memory)的方案
      • 在反向页表中搜索一个页对应的帧号
        • 如果帧数较少,页寄存器可以被放置在关联内存中
        • 在关联内存中查找逻辑页号
          • 成功:帧号被提取
          • 失败:页错误异常(page fault)
        • 限制因素
          • 大量关联内存非常昂贵
            • 难以在半个时钟周期内完成
            • 耗电
    • 基于哈希(hash)查找的方案
      • 子主题 1
        • 在反向页表中通过哈希算法来搜索一个页对应的帧号
          • 对页号做哈希计算,为了在“帧表”(每帧拥有一个表项)中获取对应的帧号
          • 页i被放置在表中f(i)位置,其中f是设定的哈希函数
          • 为了查找页i,执行下列操作
            • 计算哈希函数f(i)并且使用它作为页寄存器表的索引
            • 获取对应的页寄存器
            • 检查寄存器标签是否包含i,如果包含,则代表成功
            • 否则失败
400-080-6079