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


    内存管理目录:

    基本概念和内存分配

    虚拟内存技术

    局部页面替换算法

    全局页面替换算法

    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 
物 理 地 址 
二 级 页 表

    大地址空间问题

    • 有大地址空间,前向映射页表变得繁琐。
    • 不是让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对应。
    • 解决方案
      • 反向页表
        • 页表的大小不在和逻辑地址直接相关,而是和物理地址相关。
        • 技术要求较高。缓存,哈希。
  • 相关阅读:
    Don't Dismiss Georgia Tech's $6,600 Online Master's Degree
    Java SPI机制学习笔记
    Java SPI机制简介
    Java SPI机制
    Java SPI机制原理和使用场景
    中文代码之Spring Boot集成H2内存数据库
    H2数据库攻略
    JAVA 项目中使用 H2 数据库
    Java内存数据库-H2介绍及实例(SpringBoot)
    内存数据库-H2简介与实践
  • 原文地址:https://www.cnblogs.com/keeptry/p/15722346.html
Copyright © 2020-2023  润新知