Upload
maris-garcia
View
176
Download
7
Embed Size (px)
DESCRIPTION
(ii) 分区回收算法. 检查是否与空白区相邻,是则合并成一个大空白区. 修改两个表 ( 返回分配区与空白区序号和始址 ). (c) 分区管理算法 ( 可适应于固定分区及可变分区 ). (i) 首次适应算法( First Fit: FF). 将空白区按存贮顺序链成一个队列,用一指针指向队首分配时将找到的第一个满足要求的空白区分配给它。. 指针. 10k. 60k. 90k. 20k. 例:. 有四块空白区 ( 从低地址 高地址 ) ,来了一个作业需分配 19k 内存 。. 指针. 10k. 60k. 90k. 20k. 41k. 解:. - PowerPoint PPT Presentation
Citation preview
检查是否与空白区相邻,是则合并成一个大空白区
修改两个表 ( 返回分配区与空白区序号和始址 )
(ii) 分区回收算法
将空白区按存贮顺序链成一个队列,用
一指针指向队首分配时将找到的第一个满足
要求的空白区分配给它。
(i) 首次适应算法 (First Fit: FF)
(c) 分区管理算法 ( 可适应于固定分区及可变分区 )
例:例:
指针
10k 60k 90k 20k
有四块空白区 ( 从低地址高地址 ) ,来了一个作业需分配 19k 内存。
指针
10k 60k 90k 20k
41k
在高地址空白区中保持较大空白区 ( 每次从10k 开始分配寻找 ) 。
解:解:
FF 特点:FF 特点:
(ii) 循环首次适应 (Next fit: NF)
将空白区组成环状队列,按循环顺序寻找空白区。( 与 FF 区别,头指针从低地址开始向高地址循环移动 )
1 2
指针移动
使得小空白区均匀分布,易于与其它空白区合并。
NF 特点:NF 特点:
(iii) 最佳适应算法 (Best fit: BF)
将空白区按大小排成队列,寻找时总是以最小的空白区开始,找到第一个合适的分区
指针
10k 60k 90k 20k
例:例:
来一个 19k 的作业
最佳地利用分区;
开销比较大,并不是最好算法。
指针
10k 20k 60k 90k
1k特点:特点:
解:解:
(iv) 最坏适应算法 (Worst fit: WF)
将空白区排序 ( 按从大到小 )
找最大空白区
如上例:
指针
90k 60k 20k 10k
71k
不会出现小的空白区。
特点:特点:
例例:设系统空白链表为
指针
7k 3k 10k 8k 20k 5k
a b c d e f
用户先后申请 7.5k , 4k 试用四种算法,试求出分配块。
FF: c,a
3k 3k 2.5k 8k 20k 5k
a b c d e f
NF: c,d
7k 3k 2.5k 4k 20k 5k
a b c d e f
3k 5k 7k 8k 10k 20k
b f a d c e
BF: 首先从小到大排序
3k 5k 7k 0.5k 10k 20k
b f a d c e
3k 5k 7k0.5k 10k 20k
b f ad c e
再排序从小到大
分配块为 d, f
8.5k 10k 8k 7k 5k 3k
e c d a f b
WF: e,e
0.5k 3k 1k 7k 10k 20k
d b f a c e
可变式分区与固定式分区分配方案相比,一
般来说其存储空间的利用率高些,但是,由于存
在着一些分散的,较小的空白区,仍然不能充分
利用-称之为存储器的“ 零头”。
(d) 碎片 ( 零头 ) 问题:存在于已分配的分区之间的一些不能充分利用的空白区
(i) 原因:请求释放使存区分割
(ii) 碎片总和 >nk ,但不能装入 nk 作业
(iii) 解决的方法:
(I) 将程序装入分散存区中 ––– 多重分区
Job1
Job2
Job3
RR11
RR 12
Job4 部分 2
Job4 部分 1
RR21
RR22
(II) 将碎片集中 ( 紧凑或拼接 ) ––– 可重定位分配
Job1Job2Job3
Job4
可重定位分区分配法是利用分区的“ 拼接”( 对空白区而言 ) 或“ 紧凑” ( 作业程序而言 ) 技术解决“ 零头”。
(4) 可重定位分区分配
(a) 概要:
移动内存已分配区的信息,使得所有分配区靠在一起使空白区连成一片,采用浮动方法。
(b) 浮动 ( 重定位-动态 ) 进行主存的压缩,就要将主存中用户程序移动 ( 浮动 ) ,对作业中与地址有关的部分进行调整。
请求分配一个大小为 xk 的分区
有大于 xk 的空闲区吗?
空闲区的总和xk 吗?
紧缩存储并相应地修改诸表( 得到一个完整的空闲区 xk)
分配分区并修改诸表
此刻已经分配一个
分区
返回一个分区号数
是
是
否
否
(c) 动态重定位可变分区分配算法:
例 例
20k
28k
88k
132k
182k
o.s
作业 1(8k)
(16k)
作业 3(24k)
(24k)
作业 (20k)
作业 4(50k)
(74k)
64k
112k
256k
(a) 初始状态
20k
202k
o.s
1324
作业 5(80k)
(54k)
122k
(c) 分配作业 5 之后(b) 移动之后( 即浮动 )
20k
28k
72k
o.s
1(8k)
3(24k)
2(20k)
4(50k)
(134k)
52k
122k
256k
作业5
80k
实现这种重定位,可通过类似于重定位装入程序的软件来达到,但这种方案要在费许多处理机时间,而且限制较大。
较好的办法是采用动态重定位技术 ( 在本章中,当一个作业装入与其地址空间不一致的存储空间时,可在每次访问指令或数据时,通过重定位寄存器来自动修改访问存储器的地址 )
因而,一个作业在主存中移动后,只需要改变重定位寄存器的内容即可。
例例 : : 图 (a) 是作业拼接之前的执行情况,这时重定位寄存器 RR 的值为 64k , (b) 是拼接后作业 3
执行情况,作业 3 被移动到 28k 大字节开始的分区中。为保证在新的位置上仍能正确执行,只需要将重点定位寄存器 RR 的值改为 28k 即可。
LDAD 1,500
12345
Load 1,500
1 2 3 4 5
500
64K
0
100
500
RR
65636
66036
64
作业 3 的分区
88K处理机一侧
存贮器一侧
(a) 拼接前
相对地址
定位寄存器
Load 1,500
12345
Load 1,500
1 2 3 4 5
500
28K
0
100
500
RR
28772
29172
28k
(b) 拼接后的执行情况
52k
256k主存
24k
相对地址
定位寄存器
采取动态重定位后,由于目标程序装入主存后不需修改地址指针及所有与地址有关的项,因而程序可在主存中随意浮动而不影响其正确执行。这样,就可以方便地进行存储器紧缩,较好地解决了碎片问题。
(d) 拼凑时机
(i) 出现相邻空白区即拼接; ( 或某分区被释放后即紧缩 )
(ii) 存贮不足 ( 空白分区不够大 ) 时进行拼接
紧缩工作大,开销大,但管理简单
紧缩次数少,但管理 ( 算法 ) 较复杂。
前面已有框图表示
(5) 多重分区分配-不拼接而解决零头问题
(a) 概要
将程序分为若干段,按小段申请存区,
即将程序分散在不连续存区中运行。
程序:程序、数据区等 (也可解决共亨信息问题 )
例例:多个编绎源程序,共享一个编绎程序,要求设置多对界地址寄存器,并在为每个作业 ( 或进程 ) 分配主存时,可按界地址寄存器对的多个数为其共分配多个不相邻接的自由分区 ( 空白区 )
采用多重分区技术既可以改善碎片情况,又便于共享。如上述几个进程要求同时编译的情况,只要这些进程的多重分区中都包含装有该程序的分区即可,这样主存中只有一个编译程序的副本。
例例:给一个作业分配二个分区
o.s
作 A 0 区
作 A 1 区
下界 0上界 0
下界 1
上界 1
采用动态重定位技术:
利用下界寄存器作为重定位 Reg
而上界可供检查地址越界用
例:例:
PC 机中 CS. DS. ES. SS段
代码数据附覆堆栈
在实存管理技术中,多重分区的多重程序不宜过多,否则会增加管理的复杂性,一般不超过 3~ 4
对界地址寄存器。多重分区技术的进一步发展导致了段式虚拟存储管理技术的出现。
(6) 覆盖 (overlay): 指一个作业的若干程序段 ( 或数据段 ) 或几个作业的某些部分间共享某主存空间
(a) 目标:用较小的存区满足较大的存区要求
(b) 程序的分析:并不是作业的每一部分都是时时要用的
mainA 20k
A0, 30k B0, 40k
B1, 30k
A2, 30kA1, 60k
A4, 40kA3, 20k
例:例:
B0, 40k
B1, 30kA1, 60k A2, 30k
A3, 20k A4, 40k
main20k
覆盖段 040k
覆盖段 160k
覆盖段 240k
Amain20k
A0, 30k
则总计 270k 160k 内存即可可装入
(c) 注意:
(i) 每次仅放入作业的一个部分
(ii) 覆盖段程序员事先确定
(iii) 系统自动覆盖-虚存
(iv) 可与其内存分配方法结合使用
(7) 交换: (swapping)
(a) 目标:解决小主存分区大作业的矛盾––– 利用辅存
(b) 概要:
将主存中已阻塞的作业信息存入辅存,将辅存中的活动作业调入主存并运行。
job1job2
job3 job1job2
job1 job2 job3 job3 job1
主存
辅存上部上部 下部
job3
job2
job2
覆盖的部分保存好!
Job2下部
Job1 <Job3 < Job2
(c) 注意:
(i) 覆盖与交换的区别
覆盖由用户解决空间不足
交换由系统解决空间不足
覆盖中被覆盖的那部分,既使未被破坏也不能使用,要重新调用。而交换中在界地址寄存器的保护下次可使用。
小结:实存管理小结小结:实存管理小结
(i) 两大类分区分配类
单一连续区
固定分区
可定分区
多重分区
可重定位分区
多用户
解决零头
覆盖交换类覆盖
交换
(ii) 空白区管理
分裂、合并、零头问题,分配回收算法:
FF、 NF、 BF、WF 。
§7.3 虚拟存贮管理 (Virtual storage) §7.3 虚拟存贮管理 (Virtual storage)
(1) 虚拟存贮器的概念
(a) 在实存管理技术中 ( 除开覆盖 ) ,要求整个作业必须装入主存
作业尺寸 > 主存大小作业无法运行
“ 扩充”主存 ––– 虚拟存贮技术
(b) 虚拟存贮器:
关键点:关键点:关键点:关键点:
地址空间 存贮空间(编程 ) (运行 )
逻辑 物理
虚空间 (虚存 ) 实存、实空间
交换o.s
程序的访问地址称为虚地址而程序可访问的虚地址范围叫做程序的虚地址空间。
可使用的实地址范围叫实地址空间 ( 即主存 )
在多道程序运行环境下, o.s把实际内存扩充成若干个虚存系统为每个用户建立一个虚拟存贮器,各用户可独立在虚存上编程运行。
(c) 虚空间独立于实空间
虚空间 >> 实空间 (也可以虚空间 < 实空间 )
系统地址空间 ––– 虚存空间
地址结构 cpu
20 位有效地址长度 ––– 0~ 220( 寻址范围 ) ,实存 64k<虚存 220 作业可以大于内存,部分作业调入运行,其余放入磁盘。
利用辅存存放放不进内存的作业部分。
主存+辅存虚拟存 (仅与地址结构有关 )
(i) 主存、辅存必须有一定量
(d) 制约:
(ii) 指令的地址或长度一定 (受制约 )
(iii) 要有地址的变换机构
(e) 虚存管理三大策略:调入策略 ( 把哪部分
装入主存 ) ,放置策略 ( 放在主存什么地
方 ) ,淘汰策略 ( 主存不足时,把哪部分淘
汰出主存。 )