1
第 5章 内存管理
本章知识点:
? 5.1 概述
? 5.2 存储管理的基本技术
? 5.3 分页存储管理
? 5.4 分段存储管理
? 5.5 段页式存储管理
? 5.6 虚拟内存的置换算法
? 5.7 系统举例 ( 略 )
2
5.1 概述
在计算机系统中,内存管理在很大程度
上影响着这个系统的性能,这使得存储
管理成为人们研究操作系统的中心问题
之一。虽然随着硬件技术和生产水平的
迅速发展,内存的成本急速下降,但是,
内存容量仍是计算机资源中最关键且最
紧张的资源。因此,对内存的有效管理
仍是现代操作系统中十分重要的问题。
3
5.1.1 基本概念
1.存储器的层次
3级存储器结构
缓 存
内 存
外 存
程序和数据必须
先移到内存,才
能被 CPU 存取
程序和数据
可以被 CPU
直接存取











4
5.1.1 基本概念
2.存储管理
在单道程序系统中, 存储管理就是分配
和回收内存区 。
在多道程序系统中, 要求存储管理具有
内存空间管理, 地址转换, 内存扩充,
内存保护和共享等功能 。
5
5.1.2 虚拟存储器
虚拟存储器是具有请求调入和交换功能、
能从逻辑上对内存容量进行扩充、给用
户提供了一个比真实的内存空间大得多
的地址空间,在作业运行前可以只将一部
分装入内存便可运行的、以逻辑方式存
在的存储器。 虚拟存储器的核心,实质
上是让程序的访问地址和内存的可用地
址相脱离。虚拟存储器最显著的特性是
虚拟性,在此基础上它还有离散性、多
次性和交换性等基本特征。
6
5.1.3 重定位
把地址空间中使用的逻辑地址转换为内
存空间中的物理地址的地址转换叫做重
定位,也称为地址映射或地址映像。 根
据地址转换的时间及采用技术手段的不
同,把重定位分为静态重定位和动态重
定位两种。
7
5.1.3 重定位
1,静态重定位
静态重定位是由专门设计的重定位装配程序来完成
的,是在目标程序装入到内存区时由装配程序来完
成地址转换 。
优点,无需增加地址转换机构
缺点,
? 不能实现重新分配内存
? 用户必须事先确定所需的存储量
? 每个用户进程需各自使用一个独立的副本。
8
5.1.3 重定位
2,动态重定位
动态重定位是在目标程序执行过程中,在 CPU
访问内存之前,由硬件地址映射机构来完成将
要访问的指令或数据的逻辑地址向内存的物理
地址的转换。
优点,内存的使用更加灵活有效;几个作业共
享一程序段的单个副本比较容易;无需用户干预,由系统来负责全部的存储管理 。
缺点, 需附加硬件支持;实现存储器管理的软
件比较复杂。
9
5.2 存储管理的基本技术
最基本的 4种存储管理技术是分区法、
可重定位分区法、覆盖技术、交换
技术 。
10
5.2.1 分区法
分区管理是满足多道程序设计的一种最
简单的存储管理方法。 其基本原理是给
每一个内存中的进程划分一块适当大小
的存储块,以连续存储各进程的程序和
数据,使各进程能并发进行。
11
5.2.1 分区法
1,固定分区法
固定分区法就是把内存固定划分为若干
个不等的区域,划分的原则由系统决定。
在整个执行过程中保持分区长度和分区
个数不变。
固定分区法管理方式虽然简单,但内存
利用率不高。
12
5.2.1 分区法
2,动态分区法
动态分区分配是根据进程的实际需要,
动态地为它分配连续的内存空间,各个
分区是在相应作业装入内存时建立的,
其大小恰好等于作业的大小。
为了实现分区分配, 系统中设置了相应
的数据结构来记录内存的使用情况, 常
用的数据结构形式有空闲分区表和 空闲
分区链
13
5.2.2 可重定位分区法
使用动态分区法 会出现“碎片”问题,解决碎
片问题的方法,是允许存储块的大小可动态变
化, 采用动态重定位技术可以较好地解决这个
问题。
动态重定位分区分配算法, 与动态分区分配算
法基本上相同;差别仅在于:在这种分配算法
中, 增加了, 紧凑, 功能, 通常是在找不到足
够大的空闲分区来满足用户需求时, 进行紧凑
处理 。
14
5.2.2 可重定位分区法
动态重定位的实现过 程
Y
0 0
≈ ≈ 限长寄存器
基址寄存器
5 0 0 B 6 4 K B 相对地址 2 4 K B 6 4 K B
L O A D 1, 3 0 0 0
?
3 0 0 0

≈ L O A D 1, 3 0 0 0
小于 2 4 K B?
+
3 0 0 0 B
1 2 3
≈ ≈ N
地址越界

≈ 1 2 3 中断
8 8 K B ≈ ≈ 访问内存地址
2 4 K B ≈ ≈
作业 3 的
地址空间 内存
15
5.2.3 覆盖 技术
覆盖是在程序运行过程中,把同一存储
区在不同时刻分配给不同的程序段或数
据段来共享的一种存储分配技术。
使用覆盖技术时的缺点是程序员必须小
心地设计程序及其数据结构,使得要覆
盖的段块具有相对独立性,不存在直接
联系或相互交叉访问。
16
5.2.4 交换技术
交换是指将一个进程从内存拷贝到磁盘
上,以腾出空间给其他进程使用。需要
时,再将该进程调入内存。 交换进程由
换出和换进两个过程组成,换出是把内
存中的数据和程序换到外存的交换区,
而换进则是把外存交换区中的数据和程序换到内存的分区中。
在交换系统中,交换所占用的时间相当
多。
17
5.3 分页存储管理
分页管理也是解决碎片问题的一种有效
办法,它允许程序的存储空间是不连续
的,用户程序的地址空间被划分为若干
个固定大小的区域。
18
5.3.1 基本概念
1,页面和物理块
在分页存储管理中,将一个进程的逻辑地址
空间划分成若干个大小相等的部分,每一部
分称为页面或页,并且每页都有一个编号。
同样,将内存空间也划分成与页面大小相同
的若干个存储块,即为物理块或页框。页面
和物理块的大小由硬件即机器的地址结构所
决定的。分页系统中的逻辑地址由页号 P和页
内位移 d组成。
19
5.3.1 基本概念
2,页表
每个进程都有自己的页面映象表,简称页表,
页表中包含每个帧的基址及相应的页号。 页表
的作用是实现从页号到物理块号的地址映射 。
页表的表项中常设置一存取控制字段,用于对
该存储块中的内容进行保护。如果要利用分页
系统去实现虚拟存储器,还需要增加另外的数
据项。
20
5.3.1 基本概念
3,分页系统中的地址转换
地址转换机构就是将逻辑地址中的页号转
换为内存中的物理块号 。 地址转换任务是
借助于页表来完成的, 所以人们有时也把
页表称为地址变换表或地址映像表 。
21
5.3.1 基本概念
(1)基本的地址转换
越界中断
页表寄存器 逻辑地址
页表始址
页表长度 >
页号 页内位移
+
页号 块号
0 1
1 ?
?
页表 物理地址
22
5.3.1 基本概念
(2)快表的地址转换
越界中断
页表寄存器 逻辑地址
页表始址
页表长度 >
页号 页内位移
+
页号 块号 页号 块号
0 1 输入
1 ? 寄存

快表
页表
物理地址
?
23
5.3.2 纯分页系统
纯分页系统的地址转换过程 如下:页 号 位移
如页号 > 页表
大小,则中断
逻辑地址
+
大小 页表始址
如果访问不允
许,则中断
页框号 位移 物理地址
页框号 存储控制
页描述子
页表
24
5.3.3 请求式分页系统
请求式分页系统是目前常用的一种实现虚拟存
储器的方式 。 其基本思想是, 作业在运行之前,
只把当前需要的一部分页面装入内存, 当需要
其他页面时, 才自动选择一些页交换到辅存,
同时调入所需的页到内存中 。 在请求式分页系
统中, 其地址转换类似于纯分页系统的地址转
换, 如果访问的页已在内存中, 则与纯分页系
统的地址转换过程类似;如果发生缺页, 通常
的作法是由硬件发出中断信号, 再由操作系统
的相应软件负责调入其所缺的页面 。
25
5.3.4 硬件支持及缺页处理
为了实现请求式分页,系统必须有一定
的硬件支持,这包括页表、快表硬件设
施,除此之外,还需要依赖内存管理单
元来完成地址转换的任务,并且当出现
缺页时,在硬件方面,还须增加缺页中
断响应机构。
26
5.3.4 硬件支持及缺页处理
1,页表
分页系统中的从逻辑地址到物理地址的
转换是通过页表来实现的。页表是数组,
每一表目对应进程中的一个虚页,页表
表目通常为 32位,它不仅包含该页在内
存的基地址,还包含有页面、内存块号、
改变位、状态位、引用位和保护权限等
信息。
27
5.3.4 硬件支持及缺页处理
2,快表
快表是为了加快地址转换速度而使用的
一个联想高速缓存,使用快表进行地址
转换的速度比页表要快很多倍。快表由
硬件实现,每个表目对应一个物理页框,
包含如下信息:页号、物理块号、数据
快表、指令快表和保护权限。
28
5.3.4 硬件支持及缺页处理
3,内存管理单元
内存管理单元 MMU主要是用来完成地址转换,
它具有如下功能:将逻辑地址分为页号和页内
位移,在页表中先找到与该页对应的物理块号,
再将其与页内位移一起组成物理地址;管理硬
件的页表地址寄存器;当页表中的状态位为
,0”,或页面访问越界,或出现保护性错误
时,内存管理单元会出现页面失效异常,并将
控制权交给操作系统内核的相应程序处理;设
置页表中相应的引用位、改变位、状态位和保
护权限等。
29
5.3.4 硬件支持及缺页处理
4,缺页中断机构
缺页中断是一种特殊
的中断, 它与一般中
断的区别为:
? 在指令执行期间产生
和处理中断信号;
? 一条指令在执行期间
可能产生多次缺页中断 。
右图为页面中断处理算
法流程图 。
保留 CPU 的状态
缺页故障
在外存找到所需页

空页框吗?
选择淘汰的页面
该页是否
修改过?
把该页写入外存
装入新的一页
更新页表和缓存
恢复执行
Y
N
N
Y
30
5.3.5 页的共享和保护
分页存储管理技术使每个作业分别存储
在内存的不连续的存储块中,这种灵活
性允许两个和多个作业共享程序库中的
例程或公共数据段的同一副本,共享的
方法是使这些相关进程的逻辑空间中的
页指向相同的内存块。
并非所有页面都可共享,故实现信息共
享的前提是提供附加的保护措施,对共
享信息加以保护。
31
5.4 分段存储管理
分段方法是将程序分成若干逻辑段,并对
这些段分别分配存储空间。这些段的长度
可以不同,也不必连续进行分配。 这种存
储管理方式已成为当今所有存储管理方式
的基础。
32
5.4.1 基本概念
1,分段
在分段存储管理方式中,段是一组逻辑
信息的集合。每个段都有自己的名字和
长度,通常用一个段号来代替段名,每
个段都从 0开始编址,并采用一段连续的
地址空间,段的长度由相应的逻辑信息
组的长度决定。 分段系统中的逻辑地址
由段号 s和段内地址 d组成 。
33
5.4.1 基本概念
2,分页和分段的主要区别
? 页是信息的物理单位,分页是为了便于系统管
理;而段是信息的逻辑单位,分段是为了满足
用户需要。
? 分页式存储管理的作业地址空间是一维的;而
分段式存储管理作业地址空间是二维的。
? 页的长度由系统确定,是等长的;而段的长度
由具有相对完整意义的信息长度确定,是不固
定的。
34
5.4.2 基本原理
分段管理,就是管理由若干段组成的作
业,并且按分段来进行存储分配,由于
分段的作业地址空间是二维的,所以分
段的关键在于如何把分段地址结构变成
一维的地址结构。和分页管理一样,可
以采用动态重定位技术来进行地址转换。
35
5.4.2 基本原理
分段地址转换 过程
L B
段表长 段表地址
段 表
寄存器
+
s d
段号 段内地址
逻辑地址
段长 内存始址
1K
50 0
6 K
10 K
段表



+d < m?
访内地址
10K
内存


Y
N
地址越界,发生中断
36
5.4.3 硬件支持和缺段处理
为了实现分段式存储管理,系统必须有
一定的硬件支持,以完成快速请求分段
的功能,这包括段表机制、地址转换机
构。当出现缺段的问题时,需要有缺段
中断机构来进行及时地处理。
37
5.4.3 硬件支持和缺段处理
1,段表机制
请求分段管理中 的主要数据结构 是段表, 在段
表项中, 除了段号 (名 ),段长, 段在内存的始
址外, 它还包含存取方式, 访问字段, 改变位,
状态位, 增补位, 外存起址 。
段表可以存放在一组寄存器中, 这样有利于提
高地址转换速度;但更常见的是将段表放在内
存中 。 在配置了段表后, 执行中的进程可通过
查找段表, 找到每个段所对应的内存区 。
38
5.4.3 硬件支持和缺段处理
2,地址转换机构
请求分段式的
地址转换过程
如右图所示
访问 [ s ] [w ]
w ≤段长?
符合存取方式?
Y
段 s 在主存?
Y
Y
修改访问字段,如写访问,
则置修改位 =1
形成访问主存地址
(A ) = ( 主存始址 ) + ( 位移 w)
返回
分段越界
中断处理
N
分段越界
中断处理
N
缺段中
断处理
N
39
5.4.3 硬件支持和缺段处理
3,缺段中断机构
虚段 s 不在内存
阻塞请求进程
从外存读入段 s
修改段表及内存空闲区链
唤醒请求进程
返回
空闲区拼接,以形成
一个合适的空闲区
淘汰一个或几个实段以
形成一个合适空闲区
Y
空闲区容量总和
能否满足?
内存中有合适
的空闲区吗?
Y
N
N
请求分段系统中的中断处理过程
40
5.4.4 段的共享和保护
1,段的共享
段的共享是指两个以上的作业,使用某
个子程序或数据段,而在内存中只保留
该信息的一个副本。具体地说,只需在
每个进程的段表中,用相应的表项来指
向共享段在内存的起始地址即可。
41
5.4.4 段的共享和保护
2,段的保护
在分段系统中,由于每个分段在逻辑上
是独立的,因而比较容易实现信息保护。
段的保护是为了实现段的共享和保证作
业正常运行的一种措施。分段存储管理
中的保护主要有地址越界保护和存取方
式控制保护。
42
5.4.4 段的共享和保护
分段式存储管理的优点:
? 提供了内外存统一管理的虚存,每次调入一段
有意义的信息。
? 允许段长动态增长。
? 便于对具有完整逻辑功能的信息段进行共享。
? 便于实现动态链接。
分段式存储管理的缺点:需要更多的硬件支持,
诸多功能会使系统的复杂性大大增加 ; 段的长
度受内存可用区大小的限制 ; 若替换算法选择
不恰当就有可能产生抖动现象。
43
5.5 段页式存储管理
分页存储管理能有效地提高内存的利用
率,分段存储管理能很好地满足用户的
需要,段页式存储管理则是分页和分段
两种存储管理方式的结合,它同时具备
了两者的优点。
44
5.5.1 基本概念
段页式存储管理既方便使用又提高了内
存利用率,是目前用得较多的一种存储
管理方式
? 等分内存
? 作业或进程的地址空间
? 段内分页
? 逻辑地址结构
? 内存分配
? 段表、页表和段表地址寄存器
45
5.5.2 地址转换
段页式系统中的地址转换机构
0
1
2
3
段表寄存器


段表始址 段表长度 段超长 段号 s 页号 p 页内地址
0
1
2
3
段表

页表
b 块号 b 块内地址
页表长度 页表始址
46
5.5.3 管理算法
在地址转换过程中,软、硬件应密切配合,这在分页和分
段式存储管理中已体现出来,段页式存储管理也是如此 。
地址转换过程中硬、软件的相互作用 如下图所示
访问 ( s, p, w )
N
有无链接
障碍?
Y
访问 ( s, p, w )
缺段吗?
缺页吗?
N
N
Y
Y
链接障碍
中断处理
缺页中断
处 理
硬件 软件
缺段中断
处 理
硬件 软件
缺段中断
处 理
链接障碍
中断处理
47
5.5.3 管理算法
段页式存储管理的优点:
? 提供了虚存的功能
? 无紧缩问题, 也没有页外碎片的存在
? 便于处理变化的数据结构
? 便于共享和控制存取访问权限 。
缺点:增加了软件的复杂性和管理开销, 需要
更多的硬件支持;各种表格要占用一定的存储
空间;存在着系统抖动现象;存在着页内碎片
的问题 。
48
5.6 虚拟内存的置换算法
实现请式调页,必须解决的主要问题是
选择合适的页面置换算法和块分配算法。
在置换页面时,通常选择这样一些牺牲
者,即在对它们进行替换时,可达到最
低缺页中断率。可利用访问串对替换算
法的性能进行评价。访问串是由程序规
定的内存地址访问表列。
49
5.6.1 先进先出页面置换算法
FIFO方法是将最先进入队列的页号所对
应的页面最先选择为牺牲者 。 这种方法
易于理解, 但性能不是在任何场合都是
好的 。
使用 FIFO方法可能会出现 Belady异态,
这是一种在增加帧的情况下反而使缺页
中断率增加的异常情况 。
50
5.6.2 最佳页面置换算法
较理想的页面替换方法是优化( OPT) 或
最小( MIN) 缺页中断方法。这种方法总
是替换最长将来时间不被使用的那个页面。
它需要访问将来知识。通常用来同其他方
法进行比较。
51
5.6.3 最近最少使用页面置换算法
最近最少使用 (Least Recently Used,LRU)页
面置换算法则是根据页面调入内存后的使用
情况,选择最近最少使用的页面予以淘汰。
该算法的主要出发点是,如果某页被访问了,
则它可能马上又要被访问;反之,如果某页
长时间未被访问,则它在最近一段时间内不
会被访问 。
52
5.6.4 第 2次机会页面置换算法
这种方法将页面按 FIFO次序安排,且每
个页有一个访问位。先选择“最老”的
页,若其访问位被清除,则它就是牺牲
者;若它的访问位已置值,则先清除它,
然后选择下一页,重复前述过程。
53
5.6.5 时钟页面置换算法
把所有的页面保存在一个类似钟表面的
环形链表中,用一个指针指向最老的页
面,就如表针指向某一时刻一样。它和
第 2次机会算法的区别仅是实现的方法不
同。
54
5.6.6 其他页面置换算法
1,最近未使用置换算法
将淘汰指针指向
下一个存储块
淘汰此页
N
引用位
是 1 吗?
Y
返回
置引用位为 0
55
5.6.6 其他页面置换算法
2,页面缓冲算法
该算法规定将一个被淘汰的页放入两个链表中
的一个, 即如果页面未被修改, 就将它直接放
入空闲链表中, 否则便放入已修改页面的链表
中 。 这时页面在内存中并不做物理上的移动,
而只是将页表中的表项移到上述两个链表之一
中 。
56
The end
Thanks!