【操作系统学习】内存管理(二)

内存管理目录:

基本概念和内存分配

虚拟内存技术

局部页面替换算法

全局页面替换算法

 

1. 操作系统内存管理方面的任务

  • 抽象:逻辑地址空间。不需要考虑复杂的实际物理地址空间。
  • 保护:独立地址空间。进程之间程序运行不相互影响。
  • 共享:访问相同内存。
  • 虚拟化:更多的地址空间。最需要的放到内存中。

 

2. 在操作系统中管理内存的不同方法

  • 程序重定位(逻辑地址和物理地址转换)
  • 分段
  • 分页
  • 虚拟内存
  • 按需分页虚拟内存

实现高度依赖于硬件。

必须知道内存架构。

MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求。

 

3. 一种简单的内存管理方法

  • 当一个程序准许运行在内存中时,分配一个连续的区间。
  • 分配一个连续的内存区间给运行的程序以访问数据。
  • 碎片问题
    • 外碎片:还没有分配出去(不属于任何进程),但由于太小了无法分配给申请内存空间的新进程的空闲区域。
    • 内碎片:已经分配出去(明确指出属于哪个进程),却不能被利用的内存空间。

 

4. 连续分配策略

(1) 首次适配

  • 需求
    • 地址排序的空闲块列表
    • 分配需要寻找一个合适的分区
    • 重分配需要检查,看是否自由分区能合并于相邻的空闲分区
  • 优势
    • 简单
    • 易于产生更大的空间块
  • 劣势
    • 外部碎片问题
    • 不确定性

(2) 最优适配

  • 为了避免分割大空闲块
  • 为了最小化外部碎片产生的尺寸
  • 需求
    • 尺寸排列的空闲块列表
    • 分配需要寻找一个合适的分区
    • 重分配需要搜索及合并于相邻的空闲分区
  • 优势
    • 当大部分是小尺寸时非常有效
    • 比较简单
  • 劣势
    • 外部碎片
    • 重分配慢
    • 易产生很多没用的微小碎片

(3) 最差适配

  • 为了避免有太多微小的碎片
  • 需求;
    • 按尺寸排列的空闲块列表
    • 分配很快(获得最大的分区)
    • 重分配需要合并于相邻的空闲分区,若有,然后调整空闲块列表
  • 优势
    • 假如分配是中等尺寸效果最好
  • 劣势
    • 重分配慢
    • 外部碎片
    • 易于破碎大的空闲块以致打分去无法被分配

 

5. 碎片整理

  • 压缩式碎片整理
    • 移动内存空间,减少碎片。
  • 交换式碎片整理
    • 内存中没有空间,借用硬盘上的空间。当前没有用的程序放到硬盘。

 

6. 非连续内存分配

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

      硬件方案/软件方案

   两种硬件方案

  • 分段(更好的分类和共享)
    • 程序的分段地址空间
    • 分段寻址方案
  • 分页(绝大多数CPU使用)
    • 划分物理内存至固定大小的帧
    • 划分逻辑地址空间至相同大小的页
    • 建立方案:转换逻辑地址为物理地址(pages to frames)

      页表和MMU/TLB

物 理 地 址 
M(Frame) 
· 物 理 内 存 被 分 割 为 大 小 相 等 的 帧 
一 个 内 存 物 理 地 址 是 一 个 二 元 组 亿 。 ) 
丆 一 帧 号 俨 位 , 共 有 Y 个 帧 ) 
0 
。 一 帧 内 偏 移 0 位 , 每 帧 有 2S 字 节 ) 
物 理 地 址 =2S xf + 。 
物 理 地 址 
addr. 
1 
0 
( 0 , 0 )

 

 

7. 分页机制

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

  • 页内偏移的大小=帧内偏移的大小
  • 页号大小<>帧号大小

页 寻 址 机 制 
程 序 尸 
页 表 保 存 了 逻 辑 地 址 “ 物 
CPU 理 地 址 之 间 的 映 射 关 系 
尸 
0 
20 10 9 
16 10 9 
逻 辑 地 址 
物 理 地 址 
帧 号 
页 号 
页 表 基 址

 

页寻址机制

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

地 址 转 换 的 实 例 
, 1023 ) 
具 有 16 位 地 址 的 系 统 
》 32KB 的 物 内 存 
每 的 1024 by 《 c 
( 4 , 0 ) 
0 , 1023 ) 
CPU 
Il 
页 表 
物 理 地 址 
逻 辑 地 址 
F 《 ag 、 Frame num 
( 0 , 明

 

分页机制的性能问题

  • 访问一个内存单元需要2次内存访问
  • 页表可能非常大
  • 解决方法
    • TLB:空间换时间
    • 间接访问(二级页表/多级页表):时间换空间

Translation Look-aside Buffer (TLB) 
缓 存 近 期 访 问 的 页 帧 转 换 表 项 
TLB 使 用 a 艹 跹 誦 ve mem 。 引 关 联 内 存 ) 实 现 , 
具 各 快 速 访 问 性 能 
如 果 TLB 命 中 , 物 理 页 号 可 以 很 快 被 获 取 
龙 如 果 TLB 未 命 中 , 对 应 的 表 项 被 史 新 到 TLB 中 。 
逻 辑 地 址 
Key 
CPU 中 的 快 表 II„B 
物 理 地 址 
到 0 鼕 、 Frame num 
内 存 中 的 页 表 (PageTable)

 

20 
二 级 页 表 
CPU 
尸 2 
0 
逻 辑 地 址 
16 
a efable 
一 级 页 表 
Memory 
0 
物 理 地 址 
二 级 页 表

 

大地址空间问题

  • 有大地址空间,前向映射页表变得繁琐。
  • 不是让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对应。
  • 解决方案
    • 反向页表
      • 页表的大小不在和逻辑地址直接相关,而是和物理地址相关。
      • 技术要求较高。缓存,哈希。
posted @ 2021-12-23 10:31  no_forget  阅读(62)  评论(0编辑  收藏  举报