非连续内存分配

第4章:非连续内存分配

标签(空格分隔): 操作系统


4.1 非连续内存分配:分段

(一)为什么需要非连续内存分配

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

  • 段访问机制:一个段,一个内存“块”,一个逻辑地址空间

  • 程序访问需要:
    • 一个二维的二元组(s, addr) s:段号,addr:段内偏移
    • 段寄存器+地址寄存器实现方案
    • 单地址实现方案

4.2 非连续内存分配:分页

(一)分页

  • 分页地址空间
  • 页寻址方案
    • 划分物理内存至固定大小的帧(frames),大小是2的幂,512,4196……
    • 划分逻辑地址空间至相同大小的页,大小是2的幂,512,4196……
    • 建立方案,转换逻辑地址为物理地址(page to frames)
      • 页表
      • MMU/TLB

帧(Frame)

  • 物理内存被分割为大小相等的帧
  • 一个内存物理地址是一个二元组(f, o)
    • f:帧号(F位,共有2^F个帧)
    • o:帧内偏移(S位,每帧有2^S个字节)
  • 物理地址:2^S * f + o

  • 16bit 的地址空间,9bit(512bytes)大小的页帧,物理地址=(3,6)
  • 物理地址:2^9*3+6=512*3+6=1536+6=1542

页(page)

  • 一个程序的逻辑地址空间被划分为大小相等的页
  • 页内偏移大小 = 帧内偏移的大小
  • 页号大小 帧号大小 (页表)
  • 一个逻辑地址是一个二元组(p,o)
    • p:页号(P位,2^P个页)
    • o:页内偏移(S位,每页有2^S个字节)
  • 虚拟地址:2^S * p + o

页寻址机制

  • 页映射到帧
  • 页是连续的虚拟内存
  • 帧是非连续的物理内存
  • 不是所有的页都有对应的帧

4.3 非连续内存分配:页表 - 概述、TLB

  • 页表概述
  • 转换后备缓冲区(TLB)
  • 二级/多级 页表
  • 反向页表

(一)分页机制的性能问题

  • 问题:访问一个内存单元需要2次内存访问
    • 一次用于获取页表项
    • 一次用于访问数据
  • 页表可能非常大

(二)Translation Look-aside Buffer (TLB) 快表

  • 缓存近期访问的页帧转换表项
    • TLB使用associate memory(关联内存)实现,具备快速访问性能
    • 如果TLB命中,物理页号可以很快被获取
    • 如果TLB未命中,对应的表项被更新到TLB中

4.4 非连续内存分配:页表 - 二级/多级 页表

多级页表

  • 通过把页号分为k个部分,来实现多级间接页表
  • 建立页表“树”,以时间换空间

4.5 非连续内存分配:页表 - 反向页表

(一)大地址空间

  • 有大地址空间(64bits),前向映射表变得繁琐
  • 不是让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对应
    • 逻辑(虚拟)地址空间增长速度快于物理地址空间

基于寄存器(Page Registers)的方案

  • 每个帧和一个寄存器关联,寄存器内容包括:
    • Residence bit:此帧号是否已被占用
    • Occupier:对应的页号P
    • Protection bits:保护位
  • 页寄存器:一个例子
    • 物理内存大小:4096*4096=4kB*4kB=16MB
    • 页面大小:4096Bytes
    • 页帧数:4096=4k
    • 页寄存器使用的空间(假设8 Bytes/register):8*4096=32kBytes
    • 页寄存器带来的额外开销:32K/16M = 0.2%(大约)
    • 虚拟内存的大小:任意
  • 页寄存器方案的权衡
    • 利:
      • 转换表的大小相对于物理内存来说很小
      • 转换表的大小跟逻辑地址空间的大小无关
    • 弊:
      • 需要的信息对调了,即根据帧号找到页号
      • 如何转换回来?即根据页号找到帧号
      • 需要在反向页表中搜索想要的页号

基于关联内存(associate memory)的方案

基于哈希(hash)查找的方案

猜你喜欢

转载自blog.csdn.net/weixin_42061048/article/details/80226821