检查是否与空白区相邻,是则合并成一个大空白区

44
检检检检检检检检检检 检检检检检检 检检检检检 ,一 检检检检检 ( 检检检检检检检检检检检检检检 ) (ii) 检检检检检检

Upload: maris-garcia

Post on 03-Jan-2016

176 views

Category:

Documents


7 download

DESCRIPTION

(ii) 分区回收算法.  检查是否与空白区相邻,是则合并成一个大空白区.  修改两个表 ( 返回分配区与空白区序号和始址 ). (c) 分区管理算法 ( 可适应于固定分区及可变分区 ). (i) 首次适应算法( First Fit: FF). 将空白区按存贮顺序链成一个队列,用一指针指向队首分配时将找到的第一个满足要求的空白区分配给它。. 指针. 10k. 60k. 90k. 20k. 例:. 有四块空白区 ( 从低地址 高地址 ) ,来了一个作业需分配 19k 内存 。. 指针. 10k. 60k. 90k. 20k. 41k. 解:. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 检查是否与空白区相邻,是则合并成一个大空白区

检查是否与空白区相邻,是则合并成一个大空白区

修改两个表 ( 返回分配区与空白区序号和始址 )

(ii) 分区回收算法

Page 2: 检查是否与空白区相邻,是则合并成一个大空白区

将空白区按存贮顺序链成一个队列,用

一指针指向队首分配时将找到的第一个满足

要求的空白区分配给它。

(i) 首次适应算法 (First Fit: FF)

(c) 分区管理算法 ( 可适应于固定分区及可变分区 )

Page 3: 检查是否与空白区相邻,是则合并成一个大空白区

例:例:

指针

10k 60k 90k 20k

有四块空白区 ( 从低地址高地址 ) ,来了一个作业需分配 19k 内存。

Page 4: 检查是否与空白区相邻,是则合并成一个大空白区

指针

10k 60k 90k 20k

41k

在高地址空白区中保持较大空白区 ( 每次从10k 开始分配寻找 ) 。

解:解:

FF 特点:FF 特点:

Page 5: 检查是否与空白区相邻,是则合并成一个大空白区

(ii) 循环首次适应 (Next fit: NF)

将空白区组成环状队列,按循环顺序寻找空白区。( 与 FF 区别,头指针从低地址开始向高地址循环移动 )

1 2

指针移动

使得小空白区均匀分布,易于与其它空白区合并。

NF 特点:NF 特点:

Page 6: 检查是否与空白区相邻,是则合并成一个大空白区

(iii) 最佳适应算法 (Best fit: BF)

将空白区按大小排成队列,寻找时总是以最小的空白区开始,找到第一个合适的分区

指针

10k 60k 90k 20k

例:例:

来一个 19k 的作业

Page 7: 检查是否与空白区相邻,是则合并成一个大空白区

最佳地利用分区;

开销比较大,并不是最好算法。

指针

10k 20k 60k 90k

1k特点:特点:

解:解:

Page 8: 检查是否与空白区相邻,是则合并成一个大空白区

(iv) 最坏适应算法 (Worst fit: WF)

将空白区排序 ( 按从大到小 )

找最大空白区

如上例:

指针

90k 60k 20k 10k

71k

不会出现小的空白区。

特点:特点:

Page 9: 检查是否与空白区相邻,是则合并成一个大空白区

例例:设系统空白链表为

指针

7k 3k 10k 8k 20k 5k

a b c d e f

用户先后申请 7.5k , 4k 试用四种算法,试求出分配块。

Page 10: 检查是否与空白区相邻,是则合并成一个大空白区

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: 首先从小到大排序

Page 11: 检查是否与空白区相邻,是则合并成一个大空白区

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

Page 12: 检查是否与空白区相邻,是则合并成一个大空白区

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

Page 13: 检查是否与空白区相邻,是则合并成一个大空白区

可变式分区与固定式分区分配方案相比,一

般来说其存储空间的利用率高些,但是,由于存

在着一些分散的,较小的空白区,仍然不能充分

利用-称之为存储器的“ 零头”。

Page 14: 检查是否与空白区相邻,是则合并成一个大空白区

(d) 碎片 ( 零头 ) 问题:存在于已分配的分区之间的一些不能充分利用的空白区

(i) 原因:请求释放使存区分割

(ii) 碎片总和 >nk ,但不能装入 nk 作业

Page 15: 检查是否与空白区相邻,是则合并成一个大空白区

(iii) 解决的方法:

(I) 将程序装入分散存区中 ––– 多重分区

Job1

Job2

Job3

RR11

RR 12

Job4 部分 2

Job4 部分 1

RR21

RR22

Page 16: 检查是否与空白区相邻,是则合并成一个大空白区

(II) 将碎片集中 ( 紧凑或拼接 ) ––– 可重定位分配

Job1Job2Job3

Job4

可重定位分区分配法是利用分区的“ 拼接”( 对空白区而言 ) 或“ 紧凑” ( 作业程序而言 ) 技术解决“ 零头”。

Page 17: 检查是否与空白区相邻,是则合并成一个大空白区

(4) 可重定位分区分配

(a) 概要:

移动内存已分配区的信息,使得所有分配区靠在一起使空白区连成一片,采用浮动方法。

(b) 浮动 ( 重定位-动态 ) 进行主存的压缩,就要将主存中用户程序移动 ( 浮动 ) ,对作业中与地址有关的部分进行调整。

Page 18: 检查是否与空白区相邻,是则合并成一个大空白区

请求分配一个大小为 xk 的分区

有大于 xk 的空闲区吗?

空闲区的总和xk 吗?

紧缩存储并相应地修改诸表( 得到一个完整的空闲区 xk)

分配分区并修改诸表

此刻已经分配一个

分区

返回一个分区号数

(c) 动态重定位可变分区分配算法:

Page 19: 检查是否与空白区相邻,是则合并成一个大空白区

例 例

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

Page 20: 检查是否与空白区相邻,是则合并成一个大空白区

实现这种重定位,可通过类似于重定位装入程序的软件来达到,但这种方案要在费许多处理机时间,而且限制较大。

较好的办法是采用动态重定位技术 ( 在本章中,当一个作业装入与其地址空间不一致的存储空间时,可在每次访问指令或数据时,通过重定位寄存器来自动修改访问存储器的地址 )

因而,一个作业在主存中移动后,只需要改变重定位寄存器的内容即可。

Page 21: 检查是否与空白区相邻,是则合并成一个大空白区

例例 : : 图 (a) 是作业拼接之前的执行情况,这时重定位寄存器 RR 的值为 64k , (b) 是拼接后作业 3

执行情况,作业 3 被移动到 28k 大字节开始的分区中。为保证在新的位置上仍能正确执行,只需要将重点定位寄存器 RR 的值改为 28k 即可。

Page 22: 检查是否与空白区相邻,是则合并成一个大空白区

LDAD 1,500

12345

Load 1,500

1 2 3 4 5

500

64K

0

100

500

RR

65636

66036

64

作业 3 的分区

88K处理机一侧

存贮器一侧

(a) 拼接前

相对地址

定位寄存器

Page 23: 检查是否与空白区相邻,是则合并成一个大空白区

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

相对地址

定位寄存器

Page 24: 检查是否与空白区相邻,是则合并成一个大空白区

采取动态重定位后,由于目标程序装入主存后不需修改地址指针及所有与地址有关的项,因而程序可在主存中随意浮动而不影响其正确执行。这样,就可以方便地进行存储器紧缩,较好地解决了碎片问题。

Page 25: 检查是否与空白区相邻,是则合并成一个大空白区

(d) 拼凑时机

(i) 出现相邻空白区即拼接; ( 或某分区被释放后即紧缩 )

(ii) 存贮不足 ( 空白分区不够大 ) 时进行拼接

紧缩工作大,开销大,但管理简单

紧缩次数少,但管理 ( 算法 ) 较复杂。

前面已有框图表示

Page 26: 检查是否与空白区相邻,是则合并成一个大空白区

(5) 多重分区分配-不拼接而解决零头问题

(a) 概要

将程序分为若干段,按小段申请存区,

即将程序分散在不连续存区中运行。

程序:程序、数据区等 (也可解决共亨信息问题 )

Page 27: 检查是否与空白区相邻,是则合并成一个大空白区

例例:多个编绎源程序,共享一个编绎程序,要求设置多对界地址寄存器,并在为每个作业 ( 或进程 ) 分配主存时,可按界地址寄存器对的多个数为其共分配多个不相邻接的自由分区 ( 空白区 )

采用多重分区技术既可以改善碎片情况,又便于共享。如上述几个进程要求同时编译的情况,只要这些进程的多重分区中都包含装有该程序的分区即可,这样主存中只有一个编译程序的副本。

Page 28: 检查是否与空白区相邻,是则合并成一个大空白区

例例:给一个作业分配二个分区

o.s

作 A 0 区

作 A 1 区

下界 0上界 0

下界 1

上界 1

采用动态重定位技术:

利用下界寄存器作为重定位 Reg

而上界可供检查地址越界用

Page 29: 检查是否与空白区相邻,是则合并成一个大空白区

例:例:

PC 机中 CS. DS. ES. SS段

代码数据附覆堆栈

在实存管理技术中,多重分区的多重程序不宜过多,否则会增加管理的复杂性,一般不超过 3~ 4

对界地址寄存器。多重分区技术的进一步发展导致了段式虚拟存储管理技术的出现。

Page 30: 检查是否与空白区相邻,是则合并成一个大空白区

(6) 覆盖 (overlay): 指一个作业的若干程序段 ( 或数据段 ) 或几个作业的某些部分间共享某主存空间

(a) 目标:用较小的存区满足较大的存区要求

(b) 程序的分析:并不是作业的每一部分都是时时要用的

Page 31: 检查是否与空白区相邻,是则合并成一个大空白区

mainA 20k

A0, 30k B0, 40k

B1, 30k

A2, 30kA1, 60k

A4, 40kA3, 20k

例:例:

Page 32: 检查是否与空白区相邻,是则合并成一个大空白区

B0, 40k

B1, 30kA1, 60k A2, 30k

A3, 20k A4, 40k

main20k

覆盖段 040k

覆盖段 160k

覆盖段 240k

Amain20k

A0, 30k

则总计 270k 160k 内存即可可装入

Page 33: 检查是否与空白区相邻,是则合并成一个大空白区

(c) 注意:

(i) 每次仅放入作业的一个部分

(ii) 覆盖段程序员事先确定

(iii) 系统自动覆盖-虚存

(iv) 可与其内存分配方法结合使用

Page 34: 检查是否与空白区相邻,是则合并成一个大空白区

(7) 交换: (swapping)

(a) 目标:解决小主存分区大作业的矛盾––– 利用辅存

(b) 概要:

将主存中已阻塞的作业信息存入辅存,将辅存中的活动作业调入主存并运行。

Page 35: 检查是否与空白区相邻,是则合并成一个大空白区

job1job2

job3 job1job2

job1 job2 job3 job3 job1

主存

辅存上部上部 下部

job3

job2

job2

覆盖的部分保存好!

Job2下部

Job1 <Job3 < Job2

Page 36: 检查是否与空白区相邻,是则合并成一个大空白区

(c) 注意:

(i) 覆盖与交换的区别

覆盖由用户解决空间不足

交换由系统解决空间不足

覆盖中被覆盖的那部分,既使未被破坏也不能使用,要重新调用。而交换中在界地址寄存器的保护下次可使用。

Page 37: 检查是否与空白区相邻,是则合并成一个大空白区

小结:实存管理小结小结:实存管理小结

(i) 两大类分区分配类

单一连续区

固定分区

可定分区

多重分区

可重定位分区

多用户

解决零头

覆盖交换类覆盖

交换

Page 38: 检查是否与空白区相邻,是则合并成一个大空白区

(ii) 空白区管理

分裂、合并、零头问题,分配回收算法:

FF、 NF、 BF、WF 。

Page 39: 检查是否与空白区相邻,是则合并成一个大空白区

§7.3 虚拟存贮管理 (Virtual storage) §7.3 虚拟存贮管理 (Virtual storage)

(1) 虚拟存贮器的概念

(a) 在实存管理技术中 ( 除开覆盖 ) ,要求整个作业必须装入主存

作业尺寸 > 主存大小作业无法运行

“ 扩充”主存 ––– 虚拟存贮技术

(b) 虚拟存贮器:

Page 40: 检查是否与空白区相邻,是则合并成一个大空白区

关键点:关键点:关键点:关键点:

地址空间 存贮空间(编程 ) (运行 )

逻辑 物理

虚空间 (虚存 ) 实存、实空间

交换o.s

Page 41: 检查是否与空白区相邻,是则合并成一个大空白区

程序的访问地址称为虚地址而程序可访问的虚地址范围叫做程序的虚地址空间。

可使用的实地址范围叫实地址空间 ( 即主存 )

在多道程序运行环境下, o.s把实际内存扩充成若干个虚存系统为每个用户建立一个虚拟存贮器,各用户可独立在虚存上编程运行。

Page 42: 检查是否与空白区相邻,是则合并成一个大空白区

(c) 虚空间独立于实空间

虚空间 >> 实空间 (也可以虚空间 < 实空间 )

系统地址空间 ––– 虚存空间

地址结构 cpu

20 位有效地址长度 ––– 0~ 220( 寻址范围 ) ,实存 64k<虚存 220 作业可以大于内存,部分作业调入运行,其余放入磁盘。

利用辅存存放放不进内存的作业部分。

主存+辅存虚拟存 (仅与地址结构有关 )

Page 43: 检查是否与空白区相邻,是则合并成一个大空白区

(i) 主存、辅存必须有一定量

(d) 制约:

(ii) 指令的地址或长度一定 (受制约 )

(iii) 要有地址的变换机构

Page 44: 检查是否与空白区相邻,是则合并成一个大空白区

(e) 虚存管理三大策略:调入策略 ( 把哪部分

装入主存 ) ,放置策略 ( 放在主存什么地

方 ) ,淘汰策略 ( 主存不足时,把哪部分淘

汰出主存。 )