文章目录
第3章 内存管理
【考纲内容】
(一)内存管理基础
内存管理概念:逻辑地址与物理地址空间,地址变换,内存共享,内存保护,
内存分配与回收
连续分配管理方式;页式管理;段式管理;段页式管理
(二)虚拟内存管理
虚拟内存基本概念;请求页式管理;页框分配;页置换算法
内存映射文件 (Memory-Mapped Files); 虚拟存储器性能的影响因素及改进方式
【复习提示】
内存管理和进程管理是操作系统的核心内容,需要重点复习。
3.1 内存管理概念
3.1.1 内存管理的基本原理和要求
内存管理的功能:
-
内存空间的分配与回收
-
地址转换:逻辑地址->物理地址
-
内存空间的扩充:利用虚拟存储技术或自动覆盖技术,从逻辑上扩充内存。
-
内存共享:指允许多个进程访问内存的同一部分。
-
存储保护:保证各道作业在各自的存储空间内运行,互不干扰。
-
程序的链接与装入:编译、链接、装入
程序的链接有以下三种方式。
(1)静态链接:在程序运行之前,先将各目标模块及它们所需的库函数链接成一个完整的可执行程序,以后不再拆开
(2)装入时动态链接:将用户源程序编译后所得到的一组目标模块,在装入内存时,采用边装入边链接的链接方式
(3)运行时动态链接:对某些目标模块的链接,是在程序执行中需要该目标模块时,才对它进行的链接,便于修改和更新,便于实现对目标模块的共享内存的装入模块在装入内存时,同样有以下三种方式:
(1)绝对装入:在编译时,如果知道程序将驻留在内存的某个位置,编译程序将产生绝对地址的目标代码。绝对装入程序按照装入模块中的地址,将程序和数据装入内存。只适用于单道程序环境。
(2)可重定位装入:根据内存当前情况,将装入模块装入到内存的适当位置,装入时对目标程序中指令和数据的修改过程称为重定位,地址变换通常是在装入时一次完成的,所以又称为静态重定位。静态重定位的特点是在一个作业装入内存时,必须分配其要求的全部内存空间,如果没有足够的内存,就不能装入该作业。作业一旦进入内存后,在整个运行期间不能在内存中移动,也不能再申请内存空间。
(3)动态运行时装入:也称动态重定位,装入程序并不立即把装入模块中的相对地址转换为绝对地址,而是把这种地址转换推迟到程序真正要执行时才进行。装入内存后的所有地址均为相对地址,需要一个重定位寄存器的支持。动态重定位的特点是可以将程序分配到不连续的存储空间;在程序运行之前可以只装入它的部分代码即可投入运行,然后在程序运行期间,根据需要动态申请分配内存;便于程序段的共享。 -
逻辑地址与物理地址
当装入程序将可执行代码装入内存时,必须通过地址转换将逻辑地址转换成物理地址,这个过程称为地址重定位。
-
进程的内存映像
- 代码段:即程序的二进制代码,代码段是只读的,可以被多个进程共享。
- 数据段:即程序运行时加工处理的对象 包括全局变址和静态变址。
- 进程控制:PCB 存放在系统区。操作系统通过 PCB 来控制和管理进程。
- 堆:用来存放动态分配的变量 通过调用 malloc 函数动态地向高地址分配空间。
- 栈:用来实现函数调用。从用户空间的最大地址往低地址方向增长。
-
内存保护
1)在CPU中设置一对上、下限寄存器,存放用户作业在主存中的下限和上限地址,每当CPU访问一个地址时,分别和两个寄存器的值相比,判断有无越界。
2)采用重定位寄存器(基址寄存器)和界地址寄存器(限长寄存器),内存管理机构动态地将逻辑地址与界地址寄存器进行比较,如果未发生地址越界,则加上重定位寄存器的值后映射成物理地址,再送交内存单元。 -
内存共享
可重入代码又称 纯代码,是一种允许多个进程同时访问但不允许被任何进程修改的代码。
-
内存分配与回收
*3.1.2 覆盖与交换
1)覆盖:把用户空间分成一个固定区和若干个覆盖区,将经常活跃的部分放在固定区,其余部分按调用关系分段,首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统再将其调入覆盖区,替换覆盖区中原有的段。特点是打破了必须将一个进程的全部信息装入主存后才能运行的限制。
2)交换:把处于等待状态(或在CPU调度原则下被剥夺运行权利)的程序从内存移到辅存,把内存空间腾出来,这一过程叫“换出”,把准备好竞争CPU运行的程序从辅存移到内存,这一过程叫“换入”
交换技术主要是在不同进程(或作业)之间进行,而覆盖则用于同一个程序或进程中。
3.1.3 连续分配管理方式
-
单一连续分配:优点是简单、无外部碎片,可以采用覆盖技术;缺点是只能用于单用户、单任务的操作系统中,有内部碎片,存储器的利用率极低。
-
固定分区分配:有内部碎片。
-
动态分区分配,可变分区分配,产生外部碎片,可用紧凑技术解决。
1)首次适应算法:空闲分区以地址递增的次序链接,分配内存时顺序查找,找到大小能满足要求的第一个空闲分区。
2)最佳适应算法:空闲分区以容量递增形成分区链,找到第一个能满足要求的空闲分区。
3)最坏适应算法:又称最大适应算法,空闲分区以容量递减的次序链接,找到第一个也即是最大的分区。
4)邻近适应算法:又称循环首次适应算法,分配内存时从上次查找结束的位置开始继续查找
首次适应算法可能比最佳适应算法效果好,而它们两者一定比最大适应算法效果好。
3.1.4 基本分页存储管理
基本分页存储管理:不会产生外部碎片,地址空间是一维的
- 分页存储的几个基本概念
进程中的块称为页,内存中的块称为页框(或页帧),外存也以同样的单位进行划分,直接称为块。
地址结构:0~11位为页内地址,即每页大小为4KB;12 ~ 32位为页号,地址空间最多允许有2^20页
页表由页表项组成,页表项包括两部分,第一部分为页号,第二部分为物理内存中的块号,系统为每个进程建立一张页表,记录页面在内存中对应的物理块号,实现从页号到物理块号的地址映射。
-
基本地址变换机构
页面大小L,逻辑地址A,物理块号b
页号P=A/L,页内偏移量W=A%L
物理地址E=b*L+W -
具有快表的地址变换机构
快表(TLB):具有并行查找能力的高速缓冲存储器,用来存放当前访问的若干页表项,以加速地址变换的过程
- 两级页表
建立多级页表的目的在于建立索引,不用浪费主存空间去存储无用的页表项,也不用盲目地顺序式查找页表项
3.1.5 基本分段存储管理
分段管理方式的提出则考虑了用户和程序员,以满足方便编程、信息保护和共享、动态增长及动态链接等多方面的需要。
基本分段存储管理:段内要求连续,段间不要求连续,地址空间是二维的
在页式系统中,逻辑地址的页号和页内偏移量对用户是透明的;在段式系统中,段号和段内偏移量必须由用户显示提供。
- 分段
地址结构:
-
段表
段表用于实现从逻辑段到物理内存区的映射
-
地址变换结构
-
段的共享与保护
与分页管理类似,分段管理的保护力法主要有两种:一种是存取控制保护,另一种是地址越界保护。
3.1.6 段页式管理
段页式存储管理:段表只有一个,而页表可能有多个,地址空间是二维的
在段页式系统中,作业的逻辑地址分为:段号、页号和页内偏移量
在进行地址变换时,首先通过段表查到页表始址,然后通过页表找到页帧号,最后形成物理地址。