操作系统概念——第8章 内存管理

1. 背景

内存是现代计算机运行的中心,由很大一组字或字节组成,每个字或字节都有自己的地址。CPU通过PC的值从内存中提取指令。

1.1 基本硬件

问题:为什么CPU不能直接从磁盘中提取指令与数据?
① CPU能直接访问的存储器只有内存和处理器内的寄存器
执行指令以及指令的数据必须在这些可直接访问的存储器上
因此,机器语言可以用内存地址作为参数,而不能使用磁盘地址作为参数。

(1)保证访问物理内存的相对速度
高速缓存:协调速度差异的内存缓存区

(2)内存空间保护
目的: 确保操作系统不被用户进程访问,以及用户进程不被其他用户进程访问。

两种寄存器
基地址寄存器:含有最小合法物理内存地址
界限地址寄存器:含有地址访问范围
在这里插入图片描述
只有操作系统可以(通过特权指令)加载基地址寄存器和界限地址寄存器的值,而不允许用户程序修改它们。

实现方式:
采用基地址寄存器和界限地址寄存器的硬件地址保护,通过对用户模式下产生的每个地址与寄存器的值比较来完成的。
在这里插入图片描述

1.2 逻辑地址空间与物理地址空间

定义
逻辑地址:由CPU所生成的地址(范围为 0 → m a x 0 \to max 0max
物理地址:加载到内存地址寄存器中的地址(范围为 R → R + m a x R \to R+max RR+max
逻辑地址空间:由程序生成的所有逻辑地址的集合
物理地址空间:逻辑地址空间中所有逻辑地址相对应的物理地址

逻辑地址空间绑定到单独一套物理地址空间
用户只生成逻辑地址,且认为进程的地址空间为0到max。这些地址在使用前必须映射到物理地址。

问题:逻辑地址与物理地址相同吗?

不相同。
编译时和加载时的地址绑定方法产生的逻辑地址与物理地址相同
执行时的地址绑定产生的逻辑地址与物理地址不相同

1.3 地址绑定

(1)地址绑定的几种情况
在这里插入图片描述
① 编译时地址绑定
在编译时就知道进程将在内存中的驻留地址,可以直接生成 “绝对代码”

② 加载时地址绑定
在编译时不知道进程将在内存中的驻留地址,则编译器必须生成 “可重定位代码”

③ 运行时地址绑定
如果进程执行时可以从一个内存段转移到另一个内存段,则必须延迟到运行时进行地址绑定。

(2)使用重定位寄存器的动态重定位
硬件
内存管理单元MMU:在运行时完成从虚拟地址到物理地址的映射
重定位寄存器
实现
物理地址 = 逻辑地址 + 基地址
在这里插入图片描述

1.4 动态链接与共享库

(1)动态链接
将链接推迟到运行时
存根:
是一小段代码,二进制镜像中对每个库程序的引用都有一个存根。
它首先检查所需子程序是否已在内存。如果不在,就将子程序装入内存。存根会用子程序地址替换自己,并开始执行子程序。下一在执行该子程序代码时,就可以直接执行。

(2)共享库
多个版本的库可以都装入内存,程序将通过版本信息确定使用那个库版本。

2. 连续内存分配

2.1 内存映射与保护

硬件支持
内存管理单元MMU:在运行时完成从虚拟地址到物理地址的映射
重定位寄存器:含有最小的物理地址值
界限地址寄存器:含有逻辑地址的范围值

保护实现
① CPU产生的每个逻辑地址都需要与寄存器进行核对。
每个逻辑地址必须小于界限地址寄存器,MMU动态将逻辑地址加上重定位寄存器的值后映射为物理地址。将映射后的物理地址发送给内存单元。
在这里插入图片描述
寄存器初始化
作为上下文切换的一部分,调度程序会初始化重定位寄存器和界限地址寄存器。

2.2 内存分配

(1)多分区方法
将内存分为固定大小的分区,每个分区只能容纳一个进程。
缺点
多道程序的程度会受分区数的限制

(2)可变分区方法
在任意时刻有一组可用孔大小列表和输入队列,通常一组不同大小的孔分散在内存中。
① 当新进程需要内存时,操作系统为其查找足够大的孔
② 如果孔太大,就将孔分成两块。一部分分给进程,另一部分还会给孔集合
③ 进程终止时释放内存,将内存还会给孔集合。若新孔与其他孔相邻,则合并成更大的孔。

问题:三种常见的动态分配方式的定义与比较

(3)动态存储分配的三种常用方式
① 首次适应:分配第一个足够大的孔
② 最佳适应:分配最小的足够大的孔
③ 最差适应:分配最大的孔
首次适应和最佳适应在空间方面优于最差适应。
首次适应相对于最佳适应更快。

2.3 碎片

(1)外部碎片问题
定义
当总的可用内存之和可以满足请求但不连续时,就会出现外部碎片问题。
产生原因
连续内存分配会使内存空间被分为分散的小片段
解决方法——紧缩(compaction)
移动内存内容,以便所有空闲空间合并为一整块。(分散 --> 合并)
① 仅在重定位是动态并在运行时可采用。
② 这种方案开销较大。
解决方法——分页、分段
允许进程的物理地址空间是非连续的

(2)内部碎片问题
定义
将内存以固定大小为单位分配,当分配的大小比进程需求大时,会出现内部碎片问题。

3. 分页

3.1 基本方法

(1)基本方法
将物理内存分为固定大小的块,称为帧。将逻辑内存也分为固定大小的块,称为页。

(2)硬件支持
在这里插入图片描述
逻辑地址
CPU产生的逻辑地址由页号(P)和页偏移(d)两部分组成
页的大小通常为2的幂。若页大小为 2 n 2^n 2

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冠long馨

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

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

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

打赏作者

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

抵扣说明:

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

余额充值