1
操
作
系
统
|
存
储
器
管
理
1
CUIT 徐虹
第五章存储器管理
?存储管理的机制
?存储管理的功能
?分区管理
?分页管理
?分段管理
操
作
系
统
|
存
储
器
管
理
2
CUIT 徐虹
5.1 存储管理的功能
?存储管理的目的
?主存的分配和管理
?记住内存每个位置的状态。
?在系统程序或用户作业提出申请
时,实施分配,并修改分配记录。
?接受系统或用户释放的存储区,
或主动收回不再用的存储区,并
相应地修改分配记录表
操
作
系
统
|
存
储
器
管
理
3
CUIT 徐虹
?提高内存利用率
? “扩充”内存容量
?信息保护
操
作
系
统
|
存
储
器
管
理
4
CUIT 徐虹
?内外存数据传输的控
?用户程序控制
?操作系统控制
?交换(Swapping):由OS把那在内
存中处于等待状态的进程换出内存,就
绪进程换入内存。
?请求调入(On demand)和预调入
(On prefetch)
操
作
系
统
|
存
储
器
管
理
5
CUIT 徐虹
?内存的分配与回收
?存储分配的方式:
?直接分配:
?静态分配:
?动态分配:
?程序设计方面:程序独立性,程序模块化,
表格处理。
?系统方面:能重新分配主存,程序在需要时
调入内存
操
作
系
统
|
存
储
器
管
理
6
CUIT 徐虹
?内存管理的内容
?分配结构:
?放置策略:
?交换策略:
?调入策略:
?回收策略:
2
操
作
系
统
|
存
储
器
管
理
7
CUIT 徐虹
?内存信息的共享与保护
?上下界保护法
?保护键法
?为每个被保护存储块分配一个单独的保
护键,在程序状态字中设置相应的开关
字段,不同的进程值不一样,匹配时,
方可进行访问。
?界限寄存器与CPU 的用户态和核心
态工作方式相结合
?用户态进程只能访问在界限寄存器所规
定范围内的内存部分,而核心态进程则
可访问整个内存地址空间。
操
作
系
统
|
存
储
器
管
理
8
CUIT 徐虹
5. 2 程序的装入和链接
?程序的装入
?绝对装入方式(Absolute
Loading Mode)
?编译程序产生绝对地址目标代码,由
装入程序根据装入模块中的地址,将
程序和数据装入内存。
操
作
系
统
|
存
储
器
管
理
9
CUIT 徐虹
?2.可重定位装入方式(Relocatable
Loading Mode)
?重定位:在装入时对目标程序中的指令和
数据地址的修改过程。
?静态地址重定位:是指作业在装入时随即
进行的地址变换方式,这一工作由装配程
序完成。
?优点:无需增加硬件地址变换机构;实现
简单。
?缺点:程序经地址定位后就不能再移动了;
程序在存储空间中只能连续分配;多个用
户难以共享存于内存中的同一程序。
操
作
系
统
|
存
储
器
管
理
10
CUIT 徐虹
?3.动态运行时装入方式(Dynamic
Run-Time Loading)
?程序执行过程中,当访问指令或数据时,
才进行的地址变换方法,称为动态重定
位。
?靠硬件地址变换机构实现的。
?基地址寄存器(重定位寄存器)BR
?程序虚地址寄存器VR
?地址MA=(BR)+(VR)
?优点:可对内存进行非连续分配;提供
了实现虚存的基础;有利于程序段的共
享。
操
作
系
统
|
存
储
器
管
理
11
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
12
CUIT 徐虹
?程序的链接
?静态链接
?装入时动态链接
?运行时动态链接
3
操
作
系
统
|
存
储
器
管
理
13
CUIT 徐虹
5. 3 连续分配存储管理方式
?单一连续分配
?存储区的分配
?内存分配和回收策略
?优点
?管理简单,不要求专用的硬件支
持;为防止破坏OS ,设置界限寄
存器;易于实现。
操
作
系
统
|
存
储
器
管
理
14
CUIT 徐虹
?缺点
?存储器利用率低
?缺乏灵活性,小于内存,否则提供覆
盖。
?某些系统中安全性差。
?信息不共享
?CPU 利用率低,周转时间长。
操
作
系
统
|
存
储
器
管
理
15
CUIT 徐虹
?固定分区
?工作原理
?在系统生成时,将内存划分为若干
各分区,每个分区的大小可以不等,
一经划分,不能更改。
?系统对内存的管理和控制通过分区
说明表说明各区的区号,大小,起
始地址及状态。
?特点
?可使多个作业共享内存,但管理简
单,内存利用率太低,对工作负荷
明确的作业比较合适。
操
作
系
统
|
存
储
器
管
理
16
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
17
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
18
CUIT 徐虹
?动态分区
?工作原理
存储空间的划分是在装入作业时进行
的,且使分区大小正好适应作业的需要。
?数据结构
?空闲分区表:序号,大小,起址,状态
?空闲分区链:在每个分区中附上一个表
格信息,状态(0,1),大小,指针
(空白分区才有)
4
操
作
系
统
|
存
储
器
管
理
19
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
20
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
21
CUIT 徐虹
?分区管理算法
?首次适应算法(First Fit)
?每个空白区按地址递增的顺序链接在一
起。
?特点:尽量使用低端地址,以保持高址
部分的大空间区;低址部分有很多小空白
区,回收时花销较大,费时。
?循环首次适应算法
?从上次查找的位置开始查找。
操
作
系
统
|
存
储
器
管
理
22
CUIT 徐虹
?最佳适应算法
?空白区按大小递增的顺序链在一起。变量
FREE 中的始端指针总指向最小的空白区。
?特点:平均而言,查找时间较少;选择最适
合的空白区。形成很多小碎片;找一个大空
白区时较慢;回收时费时;先拼接,再把该
区插入适当位置。
?最差适应算法
?空白区按容量递减次序排列。
?特点:分配时间快;剩下的空白分区仍可用;
各空白区比较均匀地减少,工作一段时间后,
就不能满足大空白区的要求;回收麻烦。
操
作
系
统
|
存
储
器
管
理
23
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
24
CUIT 徐虹
?算法分析
?特点:有助于多道程序设计;只需要界地
址寄存器,用于存储保护;算法简单,易
于实现。但会产生碎片,降低存储器的利
用效率;分区的大小,受内存容量限制。
?几种算法比较:搜索速度,释放速度,空
闲区的利用。
5
操
作
系
统
|
存
储
器
管
理
25
CUIT 徐虹
?分区的分配
?在未分配表中找出一个足够大的空白分
区;
?如比进程要求的大,则分为两部分;
?修改两个说明表的有关信息,并回送一
个所分配分区的序号或该分区的始址。
?分区的回收
?检查回收的分区是否与空白区邻接,如
有则加以合并,上邻接,下邻接,上下
邻接。
?修改两张说明表。
操
作
系
统
|
存
储
器
管
理
26
CUIT 徐虹
?伙伴系统
操
作
系
统
|
存
储
器
管
理
27
CUIT 徐虹
?可重定位分区分配
?原理:内存紧凑
?地址映射
?地址空间:在编译后,一个目标程序所
限定的地址,即地址空间仅仅是指程序
用来访问信息所用的一系列地址单元的
集合,这些单元编号称为逻辑地址(相
对地址)。
?存储空间:指主存中一系列存储信息的
物理单元的集合,这些单元的编号称为
物理地址或绝对地址。
?重定位:把作业地址空间中使用的逻辑
地址变换成主存中的物理地址的过程。
操
作
系
统
|
存
储
器
管
理
28
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
29
CUIT 徐虹
?实现
?动态重定位技术:访问指令或数据时,通
过重定位寄存器来自动修改访问存储器的
地址。
?内存拼接
?在某个分区被回收时,如不与空白区邻接,
则立即进行拼接。
?在为作业分配而找不到足够大的空白区时
再进行拼接。
操
作
系
统
|
存
储
器
管
理
30
CUIT 徐虹
?分区的保护措施
?界地址存储管理
?采用上,下界寄存器的方案。
?采用基地址,限长寄存器的方法。
?保护键
?给每个存储块都分配一个单独的保护键,
而在程序状态字中设置保护键字段,对不
同的作业赋予不同的代码。
6
操
作
系
统
|
存
储
器
管
理
31
CUIT 徐虹
5. 4 覆盖与交换技术
?覆盖技术
?覆盖是指一个作业的若干程序段,
或几个作业的某些部分共享一段存
储空间。
?覆盖的管理(覆盖区的管理,覆盖
的调入调出)是由系统实施。但要
求程序员提供一个明确的覆盖结构。
操
作
系
统
|
存
储
器
管
理
32
CUIT 徐虹
A 20K
B 50K
C 30K
D 30K
E 20K F 40K
常住部分20K
覆盖区0 50K
覆盖区1 40K
0
20K
70K
110K
操
作
系
统
|
存
储
器
管
理
33
CUIT 徐虹
?交换技术
?交换
?交换就是把主存中的信息以文件的形式写入
到辅存,接着将指定的信息从辅存续入主存,
并将控制转给它。
?交换空间的管理
?文件区:离散分配,提高存储空间的利用率;
?对换区:连续分配,提高交换速度。
?对换空间的分配与回收:注意空闲区的拼接
?交换区分配算法:首次适应算法、循环适应
算法和最佳适应算法。
操
作
系
统
|
存
储
器
管
理
34
CUIT 徐虹
?换入和换出
消息M 中有:分区号i,基址basei,长度sizei,
方向和外存交换区中分区始址。
SWAPIN
Begin local m
m.base = basei; m.ceiling = basei + sizei;
m.direction = “in” ;
m.source = backupstorebasei ;
send ((m,i),device queue ) ;
end
操
作
系
统
|
存
储
器
管
理
35
CUIT 徐虹
SWAPOUT (i)
Begin local m
m.base = basei;
m.ceiling = basei + sizei;
m.direction = “out” ;
m.destination = base of free area on swap
area ;
backupstorebasei = m.destination ;
send ((m,i),device queue ) ;
end
操
作
系
统
|
存
储
器
管
理
36
CUIT 徐虹
5. 5 分页存储管理
?基本原理
?实现方法
?各进程的地址空间分成大小相等的页,
把内存的存储空间也分成与页大小相
同的片,称为物理块。在分配存储空
间时,以块为单位来分配。
?页面大小:2
i
(1K,2K,4K 等)
7
操
作
系
统
|
存
储
器
管
理
37
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
38
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
39
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
40
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
41
CUIT 徐虹
?地址变换
?页表
采用动态重定位技术,为作业的每页设置一个重
定位寄存器,这些寄存器组成一组,称为页表。
其中一个表目为该页在主存中的块号。
在主存中专门分配一些存储单元来存放页表。
页表始址和长度存放在控制寄存器中。
?页表的大小
操
作
系
统
|
存
储
器
管
理
42
CUIT 徐虹
8
操
作
系
统
|
存
储
器
管
理
43
CUIT 徐虹
?页表始址的选择
为了快速地根据页表始址和页号找到所需相
应表目,页表的始址应为2 的幂。
例:页表始址P
A
0---12位,页号:13—17位
页表为32 字节。
P
A
=2
5
P
S
:页表区始址
P
AI
=P
S
+ i*2
5
(0〈I〈N-1,N为作业个数〉
操
作
系
统
|
存
储
器
管
理
44
CUIT 徐虹
?快表---采用联想存储器加快查表速度
在地址变换机构中,加入一个高速,小容
量、具有并行查询能力的联想存储器,构成
快表,存放正运行的作业的当前页号和块号。
在快表中找到,直接进行地址转换;未找
到,则在主存页表继续查找,并把查到的页
号和块号放入联想存储器的空闲单元中,如
没有,淘汰最先装入的页号。
操
作
系
统
|
存
储
器
管
理
45
CUIT 徐虹
?地址变换
页号P页内地址W
31 12 11 0
找到地址变换
(P,W)
————
(B,W )————(实际地址)
在开始执行(或恢复执行)一个作业时,由系统把页表
始址和页表长度放入控制寄存器中。
操
作
系
统
|
存
储
器
管
理
46
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
47
CUIT 徐虹
?例:一个三页长的进程,每页长1K。
页号页面号(块号)
0 2
1 3
2 8
指令:100 LOAD 1,2500 的地址变换过程为:
根据控制寄存器找到页表的始址和长度,
该指令地址=2*1024+100 = 2148
执行:2500 = 2048+452 P=2 W=452 B= 8
2500单元的物理地址=1024*8+452 = 8644
操
作
系
统
|
存
储
器
管
理
48
CUIT 徐虹
?分页存储管理算法
?管理表目
?作业表(JT)——整个系统一张,每个
作业对应一个表目
?内容:页表长度,页表始址,状态
?存储分块表(MBT)——整个系统一张
?表示方式:链表,位示图
?页表(PT)——每个作业一张
?分页存储分配算法
9
操
作
系
统
|
存
储
器
管
理
49
CUIT 徐虹
?多级页表
?两级页表
?引入
?两级页表的结构
外层页号P1内层页号P2页内地址D
31 22 21 12 11 0
?地址变换
?多级页表结构
操
作
系
统
|
存
储
器
管
理
50
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
51
CUIT 徐虹
?反置页表
?原理
?在每个物理块内设置一个表项:页号及进
程标识符。
?为每个进程建立一个外部页表,当访问页
不在内存时,才访问外部页表。
?地址变换
?特点
操
作
系
统
|
存
储
器
管
理
52
CUIT 徐虹
?分页存储管理方案的评价
?优点
?有效解决存储器的零头问题,能在更高
的程度上进行多道程序设计,从而相应
提高了存储器和CPU 的利用率。
?缺点
?采用动态地址变换为增加计算机成本和
降低CPU 的速度。
?表格占内存空间,费时来管理表格。
?存在页内碎片。
?作业动态的地址空间受内存容量限制。
操
作
系
统
|
存
储
器
管
理
53
CUIT 徐虹
5. 6 分段存储管理
分段存储管理:方便编程、分段共享、分段保
护、动态链接和动态增长。
?基本思想
把程序按内容或过程(函数)关系分成
段,每段有自己的名字。段式管理程序
以段为单位分配内存,然后通过地址映
射机构把段式虚地址转换成实际的内存
物理地址。
操
作
系
统
|
存
储
器
管
理
54
CUIT 徐虹
?实现原理
?段式虚存空间
?进程的虚地址空间为二维的,段长不固定,
每个段定义一组逻辑上完整的程序或数据。
段号S 段内地址W
31 16 15 0
例:CALL [X] | (Y)
LOAD 1,[A] | 6
STORE 1,[B] | (C)
10
操
作
系
统
|
存
储
器
管
理
55
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
56
CUIT 徐虹
?内存的分配和回收
?内存的分配
?内存中有足够的空闲区满足该段的要求
?分配算法:最先适应算法;最佳适应;最
坏适应算法。
?不满足
?所有空闲区之和是否满足,如满足则合并。
?内存的回收
操
作
系
统
|
存
储
器
管
理
57
CUIT 徐虹
?段式管理的地址变换
?段表(Segment Mapping Table)
段号始址长度存取方式
?动态地址变换
?当进程执行时,管理程序把其段表始址和段
表长度放入段表寄存器中,以段号为索引,查
段表。
?对内存二次以上访问,可采用高速联想寄存
器,加快查找速度。
操
作
系
统
|
存
储
器
管
理
58
CUIT 徐虹
?段的共享与保护
?共享
?使用相同的段名,置适当的续写控制
?共享段的保护与淘汰
?保护措施
?越界保护
?存取保护
?环保护机构
操
作
系
统
|
存
储
器
管
理
59
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
60
CUIT 徐虹
?性能评价
?优点
?便于程序模块化处理和处理变化的数据结构。
?便于共享分段
?便于动态链接。
?缺点
?地址变换费时,管理表格,硬件支持,使OS
复杂。
?为满足段的动态增长和减少碎片,要用拼接
技术。
?段长不定,管理困难;段长受内存可用区的
限制。
11
操
作
系
统
|
存
储
器
管
理
61
CUIT 徐虹
5. 7 段页式存储管理
?基本思想
?为什么提出段页式管理
?基本思想
?用分段方法来分配和管理虚存,用
分页方法来分配和管理实存。
?特点
操
作
系
统
|
存
储
器
管
理
62
CUIT 徐虹
?实现原理
?虚地址构成
段号S 页号P 页内地址D
有效地址长度决定作业地址空间的范围(虚存
容量)
例:在IBM /370 中,24位有效地址,(共32)
位,虚存16 M。有256 段,每段最多16 页,
每页4K。
程序的分段,由程序员或编译程序按信息
的逻辑结构划分,分页由OS 自动完成。
操
作
系
统
|
存
储
器
管
理
63
CUIT 徐虹
?段表和页表
?段表:每个进程一张。管理内存分配与释
放,存储保护和地址变换等。
?页表:每个段一张。管理页面保护,页表
始址,页表长度。
?段表与页表的关系
?动态地址变换过程
?为提高地址转换速度,设置快速联想寄存
器,存放当前最常用的段号,页号和对应
的内存页面与其它控制用栏目。
操
作
系
统
|
存
储
器
管
理
64
CUIT 徐虹
操
作
系
统
|
存
储
器
管
理
65
CUIT 徐虹
?评价
?优点
?保留了请求页式和分段存储管理的全部优
点,提供了大量虚存空间,有效利用内存,
为组织多道程序运行提供了方便。
?缺点
?增加硬件成本,系统的复杂性和管理上的
开销。仍有碎片,各种表格占内存。
操
作
系
统
|
存
储
器
管
理
66
CUIT 徐虹
小结
?常用内存管理方法:分区式,页式,
段式,段页式
?内存管理的核心是解决内外存的统
一以及之间的数据交换问题
?内存扩充,内存的分配与回收,地
址变换,内存的保护与共享,内外
存数据交换的控制等。
?几种存储管理方法的比较。