第三章内存管理
第 3 章 内存管理
本章内容结构图:
3.1 内存管理相关概念
3.1.1 什么是内存?进程的基本原理,深入指令理解其过程
小结(梳理一下本小节的知识点叭!!!):
3.1.2 内存管理都管些什么?
- 操作系统负责对进程进行内存空间的分配与回收。
- 操作系统需要提供某种技术从逻辑上对内存空间进行扩充。(虚拟存储技术(操作系统的虚拟性)、覆盖技术、交换技术)
- 操作系统需要提供地址转换功能,负责程序的逻辑地址与物理地址的转换。(三种装入方式)
- 操作系统需要提供内存保护功能,保证各进程在各自存储空间内运互不干扰。
小结(梳理一下本小节的知识点叭!!!):
3.1.3 覆盖技术与交换技术的思想(实现虚拟性)
覆盖技术:
交换技术:
小结(梳理一下本小节的知识点叭!!!):
3.1.4 内存空间的分配与回收(单一连续分配、固定分区分配、动态分区分配)
本小节介绍的三种分配方式均为连续分配管理方式,指为用户进程分配的必须是一个连续的内存空间。
- 单一连续分配
- 固定分区分配
- 动态分区分配
小结(梳理一下本小节的知识点叭!!!):
3.1.5 动态分配分区算法(首次适应、最佳适应、最坏适应、邻近适应)
- 首次适应算法(First Fit)
- 最佳适应算法(Best Fit)
- 最坏适应算法(Worst Fit)
- 邻近时应算法(Next Fit)
小结(梳理一下本小节的知识点叭!!!):
3.1.6 基本分页存储管理方式
基本分页存储管理的思想就是按照固定分区分配的方法把内存分成一个个相等的小分区,再按照分区大小把进程拆分为一个个小部分,再把这一个个小部分放到内存分区中去(不要求连续)。显然,如果把分区大小设置的更小一些,内部碎片会更小,内存利用率会更高。
在明白分页的基本概念后,接下来最重要的部分就是:将进程地址空间分页后,操作系统该如何实现逻辑地址到物理地址的转换?
对于之前讲的进程在内存中连续存放时,操作系统采用动态重定位的方式实现逻辑地址到物理地址的转换。
那么,对于采用非连续存放的分页技术,操作系统应该如何实现地址的转换呢?需要完成以下四个步骤:
- 要算出逻辑地址对应的页号
- 要知道该页号对应页面在内存中的起始地址
- 要算出逻辑地址在该页面内的偏移量
- 物理地址 = 页面起始地址 + 页内偏移量
计算实际物理地址(页号和页内偏移量)的方式可大体分为两种:手算 和 利用地址的二进制表示法计算(页面大小必须为 2 的正数幂)
下面先来看一看简单的手算法:
下面介绍利用地址的二进制表示法计算:
上面两种方法可以计算出步骤 1 中的页号和步骤 3 中的页内偏移量,若想计算出步骤 2 中的页面起始地址,还需引入页表。
小结(梳理一下本小节的知识点叭!!!):
3.1.7 基本地址变换机构(重点)
用于实现逻辑地址到物理地址转换的一组硬件机构
来道例题:
小结(梳理一下本小节的知识点叭!!!):
3.1.8 具有快表的地址变换机构
小结(梳理一下本小节的知识点叭!!!):
3.1.9 两级页表
单级页表会存在什么样的问题?
问题一:页表必须连续存放,因此当页表很大时,需要占用很多个连续的页框
我们在解决进程在内存中的连续存储问题时,将进程地址空间分页,并为其建立一张页表,记录各页面的存放位置。同样的思路,也可以用于解决 “页表必须连续存放” 的问题,把必须连续存放的页表再分页。
可将长长的页表进行再分组,使每个内存块刚好可以放入一个分组(例如:页面大小为 4KB,每个页表项 4B,每个页面可存放 1K 个页表项,因此每 1K 个连续的页表项分为一组,每组刚好占一个内存块,再将各组离散地放到内块中)
问题二:没有必要让整个页表常驻内存,因为进程在一段时间内可能只需要访问几个特定的页面
可以在需要访问页面时才把页面调入内存(虚拟存储技术)。可以在页表项中增加一个标志位,用于表示该页面是否已经调入内存。
小结(梳理一下本小节的知识点叭!!!):
3.1.10 基本分段存储管理方式
与分页系统类似,分段系统中也可以引入快表机构,将近期访问过的快表项放到快表中,这样可以少一次访问,加快地址变换速度。
小结(梳理一下本小节的知识点叭!!!):
3.1.11 段页式存储管理方式
小结(梳理一下本小节的知识点叭!!!):
3.2 虚拟内存管理
3.2.1 虚拟内存的基本概念(局部性原理)
虚拟内存有以下三个主要特征:
- 多次性:无需在作业运行时一次性装入内存,而是允许被多次调入内存
- 对换性:在作业运行时无需常驻内存,而是允许在作业运行过程中,将作业换入、换出
- 虚拟性:在逻辑上扩充了内存的容量,是用户看到的内存容量远大于实际的容量
小结(梳理一下本小节的知识点叭!!!):
3.2.2 请求分页存储管理方式(页表机制、缺页中断机构、地址变换机构)
请求分页存储管理与基本分页存储管理的主要区别:
- 请求调页:在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存,然后继续执行程序。
- 页面置换:若内存空间不够时,由操作系统负责将内存中暂时用不到的信息换出到外存
新增步骤:
- 请求调页(查到页表项时进行判断)
- 页面置换(需要调如页面,但没有空闲内存块时进行)
- 需要修改请求页表中新增的表项
小结(梳理一下本小节的知识点叭!!!):
3.2.3 页面置换算法(最佳、先进先出、最近最久未使用、时钟、改进时钟)
- 最佳置换算法(OPT)
最佳置换算法可以保证最低的缺页率,但实际上,只有在进程执行的过程中才能知道接下来会访问到的是哪个页面。操作系统无法提前预判页面访问序列。因此,最佳置换算法实际上是无法实现的。 - 先进先出置换算法(FIFO)
- 最近最久未使用置换算法(LRU)
- 时钟置换算法(CLOCK)
- 改进型的时钟置换算法
小结(梳理一下本小节的知识点叭!!!):
3.2.4 页面分配策略(固定分配局部置换、可变分配全局置换、可变分配局部置换)
小结(梳理一下本小节的知识点叭!!!):

浙公网安备 33010602011771号