操作系统 第三章 内存

操作系统 第三章 内存

清华大学 陈渝老师 操作系统教程

在这里插入图片描述

三、内存

计算机体系结构及内存分层体系

  • 计算机体系结构

      - CPU:程序/软件执行的控制
      - 内存:放置程序的代码及其处理的数据
      - 设备
    
      	- eg.鼠标、键盘
    
  • 内存分层体系

      - 主存(物理内存):放置操作系统本身以及需要运行的代码
      - 磁盘(虚拟内存):放置永久存放的数据
    
  • 在操作系统的内存管理范例

    • 操作系统中管理内存的4个目标

      • 抽象

        • 逻辑地址空间
      • 保护

        • 独立地址空间
      • 共享

        • 访问相同内存
      • 虚拟化

        • 更多的地址空间
    • 操作系统中管理内存的不同方法

      • 程序重定位
      • 分段
      • 分页
      • 虚拟内存
      • 按需分页虚拟内存
    • 实现高度依赖于硬件

      • 必须知道内存架构
      • MMU(内存管理单元):硬件组件负责处理CPU的内存访问请求

地址空间和地址生成

  • 地址空间定义

      - 物理地址空间
    
      	- 硬盘支持的地址空间
    
      - 逻辑地址空间
    
      	- 一个运行的程序所拥有的内存范围
    
  • 地址生成

    • 逻辑地址生成

      • eg.在C程序里,函数的位置、变量的名字就是一种逻辑地址
      • .o 文件的地址从0开始
    • 物理地址生成

      • CPU方面

        • 运算器需要在逻辑地址的内存内容
        • 内存管理单元寻找在逻辑地址和物理地址之间的映射
        • 控制器从总线发送在物理地址的内存内容的请求
      • 内存方面

        • 内存发送物理地址内存的内容给CPU
      • 操作系统方面

        • 建立逻辑地址和物理地址之间的映射
  • 地址安全检查

      - 操作系统需要确保每个程序可以有效访问的地址空间
    
      	- 起始地址
      	- 地址长度
    

连续内存分配

  • 内存碎片问题

    • 空闲内存不能被利用

    • 外部碎片

      • 在分配单元间的未使用内存
    • 内部碎片

      • 在分配单元中的未使用内存
  • 分区的动态分配

    • 简单的内存管理方法

      • 当一个程序准许运行在内存中,分配一个连续的区间
      • 分配一个连续的内存区间给运行的程序以访问数据
    • 分配策略

      • 首次适配

          - 为了分配n字节,使用第一个可用空闲块以致块的尺寸比n大
          - 基本原理和实现
        
          	- 简单实现
          	- 需求
        
          		- 按地址排序的空间块列表
          		- 分配需要寻找一个合适的分区
          		- 重分配需要检查,看是否自由分区能合并于相邻的空闲分区
        
          	- 优势
        
          		- 简单
          		- 易产生更大的空闲块,向着地址空间的结尾
        
          	- 劣势
        
          		- 易产生外碎片
          		- 不确定性
        
      • 最佳适配

          - 为了分配n字节,使用最小可用空闲块以致块的尺寸比n大
          - 基本原理和实现
        
          	- 为了避免分割大空闲块
          	- 为了最小化外部碎片产生的尺寸
          	- 需求
        
          		- 按尺寸排列的空闲块列表
          		- 分配需要寻找一个合适的分区
          		- 重分配需要搜索及合并于相邻的空闲分区
        
          	- 优势
        
          		- 当大部分分配是小尺寸时非常有效
          		- 比较简单
        
          	- 劣势
        
          		- 外部碎片
          		- 重分配慢
          		- 易产生很多没用的微小碎片
        
      • 最差适配

          - 为了分配n字节,使用最大可用空闲块以致块的尺寸比n大
          - 基本原理和实现
        
          	- 为了避免又太多微小的碎片
          	- 需求
        
          		- 按尺寸排列的空闲块列表
          		- 分配很快(获得最大分区)
          		- 重分配需要搜索及合并于相邻的空闲分区,若有,然后调整空闲块列表
        
          	- 优势
        
          		- 假如分配是中等尺寸效果最好
        
          	- 劣势
        
          		- 外部碎片
          		- 重分配慢
          		- 易于破碎大的空闲块以致大分区无法被分配
        
  • 压缩式碎片整理

    • 重置程序以合并孔洞

    • 要求所有程序时动态可重置的

    • 问题

      • 何时重置

        • 不能再程序运行时进行
      • 开销

        • 频繁进行此操作开销很大
  • 交换式碎片整理

    • 运行程序需要更多的内存
    • 抢占等待的程序和回收它们的内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fqlll

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值