zoukankan      html  css  js  c++  java
  • 【操作系统学习】内存管理(二)

    内存管理目录:

    基本概念和内存分配

    虚拟内存技术

    局部页面替换算法

    全局页面替换算法

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

    大地址空间问题

    • 有大地址空间,前向映射页表变得繁琐。
    • 不是让页表与逻辑地址空间的大小相对应,而是让页表与物理地址空间的大小相对应。
    • 解决方案
      • 反向页表
        • 页表的大小不在和逻辑地址直接相关,而是和物理地址相关。
        • 技术要求较高。缓存,哈希。
  • 相关阅读:
    关于在MAC上进行 LARAVEL 环境 Homestead 安装过程记录
    js 贷款计算器
    js 实现阶乘
    js 两点间距离函数
    composer Your requirements could not be resolved to an installable set of packages
    vue 项目优化记录 持续更新...
    vue 项目打包
    vue 真机调试页面出现空白
    vue 真机调试
    谈谈-Android状态栏的编辑
  • 原文地址:https://www.cnblogs.com/keeptry/p/15722346.html
Copyright © 2011-2022 走看看