【操作系统笔记】OS_内存管理_非连续内存分配(04)

Page content

这一篇整理了操作系统的内存管理_非连续内存分配相关的内容。

1.非连续内存的分配方式

  • 分段(Segmentation)
  • 分页(Paging)
  • 分表(Page Table)

2.使用非连续内存分配的原因

2.1 连续分配的缺点

  • 分配给程序的物理内存必须连续
  • 内存利用率较低
  • 有外碎片,内碎片的问题

2.2 非连续分配的优点

  • 一个程序的物理地址空间是非连续的
  • 更好的内存利用和管理
  • 允许共享代码与数据(共享库等…)
  • 支持动态加载和动态链接

2.3 非连续分配的缺点

  • 如何建立虚拟地址和物理地址之间的转换:软件方案和硬件方案

2.4 两种硬件方案

  • 分段
  • 分页

3.分段

为了更好的分离和共享

  • 程序的分段地址空间
  • 分段寻址方案

段访问机制

一个段表示一个内存“快”:一个逻辑地址空间
段访问:逻辑地址由二元组(s,addr)表示

  • s – 段号
  • addr – 段内偏移

图片备用地址
os_04_00

图片备用地址
os_04_01

4.分页

页帧(帧,物理页面,Frame, Page Frame)

把物理地址空间划分为大小相同的基本分配单位
大小是2的n次方, 如512,4096, 8192

页面(页,逻辑页面,Page)

把逻辑地址空间也划分为相同大小的基本分配单位
大小是2的n次方, 如512,4096, 8192
帧和页的大小必须是相同的

页面到叶帧

逻辑地址到物理地址的转换

  • 页表
  • MMU/TLB

4.1 帧(Frame)

  • 物理内存被划分成大小相同的帧内存物理地址的表示:二元组(f,o)
  • f – 帧号(F位,共有2^f个帧)
  • o – 帧内偏移(S位,每帧有2^s字节)

物理地址 = f * 2^s + o

图片备用地址
os_04_02

基于页帧的物理地址计算实例

16-bit的地址空间  
9-bit(512byte)大小的页帧  

物理地址计算  
物理地址表示 = (3, 6)  

物理地址 = 2^s*f + o
F = 7   S = 9    f = 3  o = 6

实际物理地址 = 2^9 * 3 = 6 = 1536 + 6 = 1542

图片备用地址
os_04_03

4.2 页

一个程序的逻辑地址空间被划分为大小相等的页

页内偏移大小 = 帧内偏移大小
页号大小 != 帧号大小
一个逻辑地址是一个二元组(P, O)

P – 页号(P位, 2^p个页) O – 页内偏移(S位,每页有2^S字节)

虚拟地址 = P * 2^s + O

图片备用地址
os_04_04

页的寻址机制

图片备用地址
os_04_05

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

5.页表

5.1 页表概述

图片备用地址
os_04_06

图片备用地址
os_04_07

分页机制的性能问题

  1. 访问一个内存单元需要2次内存访问
  • 一次用于获取页表项
  • 一次用于访问数据
  1. 页表可能非常大
  2. 如何处理?
  • 缓存(Caching)
  • 间接(Indirection)访问

5.2 转换后备缓冲区(TLB)

图片备用地址
os_04_08

5.3 二级/多级 页表

图片备用地址
os_04_09

图片备用地址
os_04_10

5.4 反向页表

5.4.1 大地址空间问题

对于大地址空间 (64-bits)系统,多级页表变得繁琐

  • 比如:5级页表

不是让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对应

  • 逻辑(虚拟)地址空间增长速度快于物理地址空间

图片备用地址
os_04_11

5.4.2 页寄存器

图片备用地址
os_04_12

优点
  • 转换表的大小相对于物理内存来说很小
  • 转换表的大小跟逻辑地址空间大小无关
缺点
  • 需要的信息对调了,即根据帧号可找到页号
  • 如何转换回来?即根据页号找到帧号
  • 在需要再反向页表中搜索想要的页号

5.4.3 基于关联内存方案

图片备用地址
os_04_13

在反向页表中搜索一个页对应的帧号
  1. 如果帧数较少,页寄存器可以被防止在关联内存中
  2. 在关联内存中查找逻辑页号
    成功:帧号被读取, 失败:页错误异常(page fault)
  3. 限制因素
    大量的关联内存非常昂贵(难以在单个时钟周次内完成,耗电)

5.4.4 基于哈希查找方案

图片备用地址
os_04_14

  • 进程标识与页号的Hash值可能有冲突
  • 页表项中包括保护位、修改位、访问位和存在位等标识

欢迎大家的意见和交流

email: li_mingxie@163.com