第4章 存储器的管理课件文本
合集下载
第4章1-存储器管理PPT课件

28.01.2021
.
13
⑵ 不必给程序分配连续的内存空间,可以较好地利 用较小的内存块,这便于存储器用紧缩来解决存储 器的碎片问题。 动态地址再定位的缺点:需要附加的硬件支持,而 且实现存储管理的软件算法比较复杂。
28.01.2021
.
14
4.3 连续分配存储方式
计算机对装入内存的程序有两种分配方式:连续分配 和离散分配。 连续分配:为一个用户程序分配一个连续的内存空间, 主要用于60-70年代。它又分为二种:单一连续分配方 式和分区式分配方式 离散分配:将一个用户程序离散的分配到内存空间中 去,它有分页和分段两种分配方式。
区没有被使用的空间最小;
☻仅仅保证所选择的分区能够放得下相关进程即可。
28.01.2021
.
20
☻长处:
实现简单; 系统开销小。
☻不足:
因已分配分区存在内零头(Internal Fragment)而
使存储利用率不高;
因分区尺寸固定而使系统无法运行大程序; 因分区数目固定而使活动进程的数目受限。
28.01.2021
28.01.2021
.
5
逻辑地址(相对地址):相对用户程序模块,以0
地址为起始地址的编址方式。
物理地址(绝对地址):相对于内存,每一单元有
唯一地址的编址方式。
地址重定位(Relocation):把相对地址转换成内存
中的绝对地址的过程,也叫地址映射(map)。
28.01.2021
.
6
4.2.1 程序的装入
28.01.2021
.
12
当CPU取一条访问内存的指令时,地址变换硬件逻辑 自动将指令中的相对地址与重定位寄存器中的值相加, 再根据和值作为内存的绝对地址去访问该单元的数据。
第4章存储器的管理(第121314)精品PPT课件

地址映射
阜阳师范学院计算机与信息学院
物理地址空间
LOAD A ,200 1100
3456
1200 1300
8
4.2 程序的装入和链接
4.2.2 程序的链接
静态链接:在程序运行前,将目标模块及所需的库函
数链接成一个完整的装入模块,以后不再拆开。
装入时动态链接:指将用户源程序编译后所得的一组
目标模块,在装入内存时,采用边装入边链接的链接 方式。
装入模块装入内存后,程序中的逻辑地址与 实际内存地址完全相同,不须对程序和数据的地 址进行修改。 优点:装入过程简单。 缺点:过于依赖于硬件结构,不适于多道程序系 统。
06.10.2020
阜阳师范学院计算机与信息学院
4
4.2.1 程序的装入
2. 可重定位装入方式 (静态重定位)
将装入模块装入内存后,使装入模块中 的所有逻辑地址与实际装入内存的物理地址不 同,在程序执行之前由重定位装配程序一次性 实现地址转换,以后不再改变。
运行时动态链接:指对某些目标模块的链接,是在程
序执行中需要该目标模块时,才对它进行链接。
06.10.2020
阜阳师范学院计算机与信息学院
9
4.3 连续分配方式
单一连续分配 固定分区分配 动态分区分配 可重定位分区分配 伙伴系统 哈希算法 对换技术
06.10.2020
阜阳师范学院计算机与信息学院
11
4.3.2 固定分区分配
1. 基本原理及技术
把内存分为一些大小相等或不等的分 区,每个应用进程占用一个分区。操作系 统占用其中一个分区。 特点:适用于多道程序系统和分时系统;
支持多个程序并发执行 问题:可能存在内碎片
06.10.2020
第四章存储器管理9697088页PPT

• 将分区按大小排序,并将其地址、分配标识作 记录
• 例:dos的MCB(memory control block)
三、特点:
• 简单,分区大小固定,造成存储空间的浪费
18.11.2019
存储器管理
13
分区 大小 起址 状态 号 (KB) (KB)
1 12
20
已分配
2 32
32
已分配
3 64
64
已分配
内存
库
编译程 序产生 的目标
模块
链接 程序
装入 模块
装入 程序
18.11.2019
存储器管理
4
4.2.1 程序的装入
1、绝对装入: 编译后,装入前已产生了绝对地址(内存地址),装入 时不再作地址重定位。 • 绝对地址的产生:(1)由编译器完成,(2)由程序 员编程完成。 对(1)而言,编程用符号地址。 • 优点:装入过程简单,实现容易。 • 缺点:过于依赖于硬件结构,不适于多道程序系统。
2500
365
12500
365
+
5000 作业J
18.11.2019
15000
处理机一侧 存储器一侧 存储器管理
主存
27
图4.10动态重定位分区分配算法
请求分配u.size 检索空闲分区链(表)
无法分配, 否 返回
空闲分区总和 否 >=u.size?
是
紧凑形成连 续空闲区
找到大于u.size的可用 分区否?
存储器管理
22
从头开始查表
检索完否? Y
返回
图
N
4
-
m.size>u.size? N 继续检索下一个表项
第四章存储器管理2019-10-28 149页PPT文档

查找.
A 18, B 10
17
20
9
323
35 19019 136
22366
310
8/17/2019
辽东学院信息技术学院
21
最佳适应法
• 要求按空闲区大小从小到大的次 序组成空闲区表(链)。
• 每次把能满足作业要求,并且是 最小的空闲分区分配给作业
15
136
91
8/17/2019
20
30
42
226
(3)
作业 30K
回 收 内 存 的 四 种 情 (4) 况
作业
作业A
20K
30
100
8/17/2019
54050
首址450
大小50K
回
收
作
720
业
A 辽东学院信息技术学院
30K 作业A 作业
20K 作业
大小50K
380
100
20
500
作业 30K
作业A 20K 作业
13000 100
180
大小50K
辽东学院信息技术学院
11
4.3.1 单一连续分配
•最简单的一种存储分配管理方法 •只能用于单用户、单任务的操作系统 中 •把内存分为两部分
•系统区:提供给OS使用,内存的低 址部分 8/17/2019 •用户区:提供给用户辽东使学院用信。息技术学院
内存 系统区 0 (OS)
100k
进用程户区AB
12
1. 分区分配中的数据结构
(1) 空闲分区表。 分区号 大小(K) 始址(K)
2
42
35
4
20
91
6
存储器管理PPT课件

32K
作业B
I. 将分区按大小排序,建立分区使用6表4K,并将起始地址、大
3
6小4、分配标64识作记录已分配
4 II. 1检2索8 分区使12用8表找能已满分足配要求的尚未分配的分作区业C III. 放到能容纳作业的最小分区的队列中。
128K
分区说明表
~~
256K
~~ 分配情况
输入队列的组织
每个分区有独立输入队列:小分区的队列长,大分 区的队列空,浪费
M1
0 模块C
RETURN N-1
(a)目标模块
0 模块A JSR L; RETUR
L-1 N L
L+M -L1+ M
模块B JSR L+M; RETUR N模块C
L+M+N RETURN
-1
(b)装入模块
4.2 连续分配方式
单一连续分配
用于单用户,单任务中
分区式分配
固定式 动态式 动态重定位
1)换出
a.选出被换出进程: 因素:优先级,驻留时间,进程状态
b.换出过程: 对于共享段:计数减1, 是0则换出,否则不换 修改PCB和MCB(或内存分配表)
2)换入:
a.选择换入进程:优先级,换出时间等。 b.申请内存。 c.换入
4.3 基本分页存储管理
连续分配引起:碎片 碎片问题的解决:紧凑方式,消耗系统开销。 换一种思路:离散分配
第四章 存储器管理
第四章 存储器管理
装入和链接 连续分配方式 基本分页存储管理方式 基本分段存储管理方式 虚拟存储器 请求分页存储管理方式 页面置换算法 请求分段存储管理方式
4.1 程序的装入和链接
编辑―――编译―――链接―――装入―――运行
作业B
I. 将分区按大小排序,建立分区使用6表4K,并将起始地址、大
3
6小4、分配标64识作记录已分配
4 II. 1检2索8 分区使12用8表找能已满分足配要求的尚未分配的分作区业C III. 放到能容纳作业的最小分区的队列中。
128K
分区说明表
~~
256K
~~ 分配情况
输入队列的组织
每个分区有独立输入队列:小分区的队列长,大分 区的队列空,浪费
M1
0 模块C
RETURN N-1
(a)目标模块
0 模块A JSR L; RETUR
L-1 N L
L+M -L1+ M
模块B JSR L+M; RETUR N模块C
L+M+N RETURN
-1
(b)装入模块
4.2 连续分配方式
单一连续分配
用于单用户,单任务中
分区式分配
固定式 动态式 动态重定位
1)换出
a.选出被换出进程: 因素:优先级,驻留时间,进程状态
b.换出过程: 对于共享段:计数减1, 是0则换出,否则不换 修改PCB和MCB(或内存分配表)
2)换入:
a.选择换入进程:优先级,换出时间等。 b.申请内存。 c.换入
4.3 基本分页存储管理
连续分配引起:碎片 碎片问题的解决:紧凑方式,消耗系统开销。 换一种思路:离散分配
第四章 存储器管理
第四章 存储器管理
装入和链接 连续分配方式 基本分页存储管理方式 基本分段存储管理方式 虚拟存储器 请求分页存储管理方式 页面置换算法 请求分段存储管理方式
4.1 程序的装入和链接
编辑―――编译―――链接―――装入―――运行
第四章存储器管理(操作系统经典和讲义 值得看存储器管理)ppt课件

内存:DRAM, SDRAM等;
外存:软盘、硬盘、光盘、磁带等;
.
5
存储器的分类
存储器分为主存储器(主存)和辅助存储器(辅存)。
主存:处理器可直接存取指令和数据的存储器;
主存空间一般可以分成两部分
A、系统区——用以存放OS常驻主存部分, B、用户区——主存的管理就是对用户区进行管理。
不知道以后操作系统将把程序装入何处,只好从0地址开始编址。 )
目标程序中指令地址都是相对0编址的,使用的是相 对地址、逻辑地址。可以执行并不就能执行,还必 须由操作系统调入内存才能执行。通常把编译程序 形成的从0开始编址的地址空间称为作业的地址空间。
(每个可执行程序都有一个自己的地址空间。)
2020/4/28
2020/4/28
.
16
1. 地址映射
地址映射:将用户程序中的逻辑地址转换为运行时
由机器直接寻址的物理地址。(逻辑地址
物理地址)
– 当程序装入内存时, 操作系统要为该程序分配一个合 适的内存空间,由于程序的逻辑地址与分配到内存 物理地址不一致, 而CPU执行指令时,是按物理地址 进行的,所以要进行地址转换。
2020/4/28
.
9
(b) 程序只能在主存中运行
字节 字 双字 块段体
2020/4/28
(c) 物理地址:(绝对地址,实地址)存储
控制部件能够识别的主存单元编号(或字
节地址),也就是主单元的实际地址(需
要区分存贮体中不同的存贮单元,统一编号, 这些编号称为地址)
.
10
存储空间(2)
存储空间:主存中一系列存储信息的物理单 元的集合。这些单元的编号,称为物理地址 或绝对地址、内存地址。
第四章存储器管理(操作系统经典和讲义 值得看存储器管理)ppt课件

– 实质上:这个地址变换过程,是把作业地址空间中使用的逻辑地
址变换成主存空间中的物理地址的过程,这种变换就是地址映射
(重定位) 。
2021/4/20
可编辑课件PPT
17
从用户工作环境来看
运行一个用户程序的过程
在操作系统中, 把编好源程序 后上机调试的 工作分成四个 步骤,称为四 个作业步:
编辑 编译 连 接 运行
逻辑地址控制——指程序中相对地址的全体。 202物1/4/理20 地址空间 —— 相可对编辑于课实件PP际T 的主存地址空间。 12
1、地址空间
用高级语言编程时,要定义变量、函数,程序中有 函数调用,有转向等,都是以它们的名字进行的, 程序员在一个“名字空间”驾御自己的程序。通常 把程序员用的地址空间为名空间。
2021/4/20Βιβλιοθήκη 可编辑课件PPT18
2. 重定位:把程序中相对地址变换为绝对地址
举例:
0 LOAD 1, 6
100 LOAD 1, 6
(每个可执行程序都有一个自己的地址空间。)
2021/4/20
可编辑课件PPT
13
程序执行过程与地址空间的转换过程
2021/4/20
可编辑课件PPT
14
例: Address: mov Ax,1
名空间
…
编译 Obj 目标地址
地址空间
2021/4/20
EXE文件装入
可编辑课件PPT
存贮空间
15
因为多道程序系统中,主存将存放多道作业,而 程序员在编写程序时,不可能了解自己的程序将放在主 存中何处运行,不可能用绝对地址来编写程序。
2021/4/20
可编辑课件PPT
9
(b) 程序只能在主存中运行
址变换成主存空间中的物理地址的过程,这种变换就是地址映射
(重定位) 。
2021/4/20
可编辑课件PPT
17
从用户工作环境来看
运行一个用户程序的过程
在操作系统中, 把编好源程序 后上机调试的 工作分成四个 步骤,称为四 个作业步:
编辑 编译 连 接 运行
逻辑地址控制——指程序中相对地址的全体。 202物1/4/理20 地址空间 —— 相可对编辑于课实件PP际T 的主存地址空间。 12
1、地址空间
用高级语言编程时,要定义变量、函数,程序中有 函数调用,有转向等,都是以它们的名字进行的, 程序员在一个“名字空间”驾御自己的程序。通常 把程序员用的地址空间为名空间。
2021/4/20Βιβλιοθήκη 可编辑课件PPT18
2. 重定位:把程序中相对地址变换为绝对地址
举例:
0 LOAD 1, 6
100 LOAD 1, 6
(每个可执行程序都有一个自己的地址空间。)
2021/4/20
可编辑课件PPT
13
程序执行过程与地址空间的转换过程
2021/4/20
可编辑课件PPT
14
例: Address: mov Ax,1
名空间
…
编译 Obj 目标地址
地址空间
2021/4/20
EXE文件装入
可编辑课件PPT
存贮空间
15
因为多道程序系统中,主存将存放多道作业,而 程序员在编写程序时,不可能了解自己的程序将放在主 存中何处运行,不可能用绝对地址来编写程序。
2021/4/20
可编辑课件PPT
9
(b) 程序只能在主存中运行
计算机操作系统-存储器管理 ppt课件

只适合于单道程序环境
ppt课件
10
4.1 程序的装入和链接
2. 可重定位装入方式 在多道程序环境下,目标模块的起始地址通常从 0开始,程序中的其他地址都是相对于起始地址 计算的。因此应采用可重定位装入方式,根据内 存的当前情况,将装入模块装入到内存的适当位 置。
注意:在采用可重定位装入方式将装入模块装入 内存后,会使装入模块中的所有逻辑地址与实际 装入内存的物理地址不同。
系统区(OS)
用户区 内存
ppt课件
21
4.2 连续分配方式
连续分配方式,是指为一个用户程序分配一个连 续的内存空间。
单一连续分配
固定分区分配
动态分区分配
可重定位分区分配
ppt课件
22
4.2.2 固定分区分配
1. 原理 将内存用户空间划分为若干个固定大小的区域,在每个分区中 只装入一道作业,便可以有多道作业并发执行。当有一空闲分 区时,便可以再从外存的后备作业队列中,选择一个适当大小 的作业装入该分区,当该作业结束时,可再从后备作业队列中 找出另一作业调入该分区。
ppt课件
13
4.1 程序的装入和链接
4.1.2 程序的链接
程序经过编译后得到一组目标模块,再利用链接程序 将目标模块链接,形成装入模块。 根据链接时间的不同,把链接分成三种: 1、静态链接:在程序运行前,将目标模块及所需的库 函数链接成一个完整的装配模块,以后不再拆开。 2、装入时动态链接:指将用户源程序编译后所得的一 组目标模块,在装入内存时,采用边装入边链接的链 接方式。 3、运行时动态链接:指对某些目标模块的链接,是在
分区分配中的数据结构 分区分配算法 分区分配及回收操作
ppt课件
26
4.2.3 动态分区分配
ppt课件
10
4.1 程序的装入和链接
2. 可重定位装入方式 在多道程序环境下,目标模块的起始地址通常从 0开始,程序中的其他地址都是相对于起始地址 计算的。因此应采用可重定位装入方式,根据内 存的当前情况,将装入模块装入到内存的适当位 置。
注意:在采用可重定位装入方式将装入模块装入 内存后,会使装入模块中的所有逻辑地址与实际 装入内存的物理地址不同。
系统区(OS)
用户区 内存
ppt课件
21
4.2 连续分配方式
连续分配方式,是指为一个用户程序分配一个连 续的内存空间。
单一连续分配
固定分区分配
动态分区分配
可重定位分区分配
ppt课件
22
4.2.2 固定分区分配
1. 原理 将内存用户空间划分为若干个固定大小的区域,在每个分区中 只装入一道作业,便可以有多道作业并发执行。当有一空闲分 区时,便可以再从外存的后备作业队列中,选择一个适当大小 的作业装入该分区,当该作业结束时,可再从后备作业队列中 找出另一作业调入该分区。
ppt课件
13
4.1 程序的装入和链接
4.1.2 程序的链接
程序经过编译后得到一组目标模块,再利用链接程序 将目标模块链接,形成装入模块。 根据链接时间的不同,把链接分成三种: 1、静态链接:在程序运行前,将目标模块及所需的库 函数链接成一个完整的装配模块,以后不再拆开。 2、装入时动态链接:指将用户源程序编译后所得的一 组目标模块,在装入内存时,采用边装入边链接的链 接方式。 3、运行时动态链接:指对某些目标模块的链接,是在
分区分配中的数据结构 分区分配算法 分区分配及回收操作
ppt课件
26
4.2.3 动态分区分配
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
22
第4章 存储器管理
二、分区分配算法
为把一个新作业装入内存,须按照一定的分配算法,从 空闲区表或空闲分区链中,选一个分区分配给该作业,目前 常用以下三种分配算法:
1.首次适应算法
此算法可以在上述两种数据结构上实施,但通常要求自
由块按始地址从小到大的顺序排序。当须分配空间时,总是
从头开始查找,直到找到一个符合要求的自由块。
凑”。然后寻找合适的内存空间。
32
第4章 存储器管理
4.3 分页存储管理方式
(3)分区的分配与回收操作。
1.分区分配中的数据结构。 要实现分区分配,系统必须配置相应的数据结构,用来 记录内存的使用情况。为分配提供依据。常用的数据结构有 两种:
20
第4章 存储器管理
(1)空闲分区表
其表的结构如图4.11所示:
序号
1 2 3 4 5
分区大小(kb)
64 24 40 30 …
分区始址(k)
回收分区r上、 下邻的空闲区
回收分区r单独 为空闲区
图4.13 内存回收时的情况
27
第4章 存储器管理
4.2.4 可重定位分区
1.紧凑 在连续分配方式中,必须把一个系统程序或用户程序, 装入到连续的内存空间中,如果在系统中若干个小的分区, 其总容量大于要装入的程序,但由于它们不相连接,使该程 序不能装入内存。例如图4.14(a)所示.,紧凑后如图4.14(b)
6
第4章 存储器管理
(2)可重定位装入方式
又称静态重定位。是在程序执行之前,有操作系统的重
定位装入程序完成。一般用于多道程序环境中,编译程序不 能预知所编译的目标模块在内存什么地方。重定位程序根据 装入程序的内存起始地址,直接修改所涉及到的逻辑地址, 将内存的起始地址加上逻辑地址得到正确的内存地址。
报地址错。
17
第4章 存储器管理
界限寄存器
重定位寄存器
逻辑地址 CPU < +
物理地址 内存
地址错
图4.7 地址映射和地址保护
18
第4章 存储器管理
4.2.2 固定分区分配方式
固定分区管理比较简单,本节仅以举例的方式说明其原 理。设一个容量为32k的实际内存,分割成如下若干区域,如 图所示。 10k 操作系统
24
第4章 存储器管理
三、分区分配和回收
在动态分区存储管理方式中,主要操作是分配和回收内存。 1.分配内存 首先,系统利用某钟算法,从空闲区表中找到所需的分 区。设请求的分区的大小为u.size,表中每个分区的大小可表 为m.size。若m.size-u.size≤size (size是事先规定的不再切 割的剩余分区的大小),说明多余部分太小,可不再切割,将 整个分区分给请求者;否则,从该分区中划分出与请求的大 小相等的内存空间分配出去,余下的部分仍留在空闲分区链
7
第4章 存储器管理
0
10000
2000 Load 1,3500 3500 360 5000 作业地址空间
12000 Load 1,3500 13500 360 15000
内存空间
图4.3 作业装入内存时的情况
8
第4章 存储器管理
(3)动态运行时的装入方式
又称动态重定位。是在程序执行期间进行的。一般说来, 这种转换有专门的硬件机构来完成,通常采用一个重定位寄 存器 ,每次进行存储访问时,对取出的逻辑地址加上重定位 寄存器的内容,形成正确的内存地址。如图4.4所示.
或空闲分区表中。最后,将分配的首地址返回给调用者。
25
第4章 存储器管理
2.回收内存
回收分区的主要工作是:首先检查是否有临接的空闲区,
如有则合并,使之成为一个连续的空闲区,而不是许多零散
的小的部分;之后,修改有关的分区描述信息。一个回收分 区邻接空闲区的情况有四种:如图4.13所示。第一种情况是 回收分区r上邻的一个空闲区,此时应合并成为一个连续的空 闲区,其始址为r上邻的空闲区始址,而大小为二者之和。第
即在系统增加一个重定位寄存器,用它来装入程序在内存中
的起始地址。程序在执行时,真正访问的内存地址是相对地 址与重定位寄存器中地址相加而形成的。
30
第4章 存储器管理
重定位寄存 器 10000 0 100 相对地址
1000 0 1010 0 Load1,250 0
Load1,250 0
250 0
2500 1250 0
12
第4章 存储器管理
0
模块A CALL B Return ;
L-1 0 模块B CALL C Return ; L+M-1 模块C Return ; L+M
0
模块A JSR “L” Return ;
模块B JSR”L+M” Return 模块C Return
L-1
L
M-1 0
N-1 目标模块
L+M+N-1 装入模块
14
第4章 存储器管理
4.2.1 单道程序的连续分配
这是一种最简单的存储方式,只能用于单用户、单任务 的操作系统。在这种存储方式中,内存分为两个分区:系统 区和用户区。 1.系统区。 仅供操作系统使用,一般驻留在低址部分,其中包括 中断向量。
15
第4章 存储器管理
2.用户区 操作系统以外的全部空间。其结构图如图4.6所示。
+ 365
365
500 0
1500 0 作业J
处理机一 存储器一 侧 侧
图 4-15 动态重定位示 意
主存
31
第4章 存储器管理
3.动态重定位分区分配算法
动态重定位分区分配算法,与动态分区分配算法基本相 同;差别仅在于:在这种分配算法中,增加了“紧凑”功能,
通常是找不到足够大的空闲区来满足用户的需要,进行“紧
小作业
中等作业区 大作业区
4k
6k 12k
这种分区分配方式在整个系统运行期间是不变的。 在这种情况下,当为一个作业分配空间时,应该先判定它 分在哪个区域比较合适,然后再进行分配。
19
第4章 存储器管理
4.2.3 动态分区分配
动态分区分配需要解决的问题有三个: (1)分区分配中所用的数据结构。 (2)分区的分配算法。
44 132 210 270 …
状态
可用 可用 可用 可用 …
21
第4章 存储器管理
(2)空闲分区链
为了实现对空闲分区的分配与链接,在每个分区的起始 部分,设置一些用于控制分区分配的信息,以及用于链接各 分区的前向指针:在分区尾部则设置一后向指针;然后形成 一个双向链。其结构如图4.12所示。
如图4.12 空闲链结构
23
第4章 存储器管理
2.最佳适应法
可以在上述两种数据结构上实施,但要求按自由块从小 到大的顺序排序。分配从头开始查找,即从小端到大端的方 向查找。直到找到第一个满足要求的自由块。显然,所能找 到的自由块能满足要求的最小块。
3.最坏适应算法 数据结构和排序方法如上。当分配空间时不 是从小往 大查,而是从大往小查,因此,所找到的自由块是所有自由 块中最大者。
11
第4章 存储器管理
(2)装入时动态链接 用户源程序经编译后得到目标模块,是在装入内存时边 装入边链接的。即在装入一个目标模块时,若发生一个外部 模块调用时,将引起装入程序去找相应的外部目标模块,并 将它装入内存。 (3)运行时动态链接 装入时进行的链接虽然可以将整个模块装入到内存的任 何地方,但装入摸块的结构是静态的。在程序执行期间装入 模块是不可改变的,因为无法预知本次要运行哪个模块,只 能将所有可能要运行的模块,在装入时全部链接在一起,使 得每次执行的模块都相同。这样效率很低,因此采用运行时 动态链接。在这种链接方式中,可将某些目标模块的链接, 推迟到执行时才进行。即在执行过程中,若发现一个被调用 模块尚未装入内存时,有OS去找该模块,将它装入内存, 并把它链接到调用模块上。
9
第4章 存储器管理
10000
10000
12000
Load 1,3500 13500 360 13500 物理地址 内存空间 3500 +
15000
图4.4 采用动态重定位时内存空间及地址重定位示意图
10
第4章 存储器管理
2.目标程序链接
链接程序的功能,是将经过编译或汇编后得到的一组目 标模块以及它们所需要的库函数,装配成一个完整的装入模 块。实现链接的方法有三种:静态链接、装入时动态链接和 运行时动态链接。 (1)静态链接 设编译后得到的三个目标模块A、B、C,它们的长度分 别为L、M和N。 程序链接示意图如图4.5所示。需要完成的 工作是对相对地址进行修改,同时变换外部调用符号,将每 个CALL语句改为跳转到某个相对地址,从而形成一个完整 的装入模块,又称可执行文件。通常不再拆开,运行时可直 接装入内存。这种事先进行链接,以后不再拆开的方式称为 静态链接。
图4.5 程序链接示意图
13
第4章 存储器管理
4.2.连续分配存储管理方式
连续分配是指为一个用户程序分配一个连续的内存空间, 连续分配有两种:单道程序的连续分配和多道程序的连续分 配。多道程序的连续分配又称为分区分配方式,它包括固定 分区、动态分区和动态重定位分区三种。下面就是对各种连 续存储管理的研究。
4
第4章 存储器管理
程序 链接程序 数据 编译程序产生的目标 模块 库函数 装入模块 装入程序
图4.2 对用户程序的处理步骤
5
第4章 存储器管理
1.目标程序装入内存的方式
程序只有装入到内存后才能运行。装入方式分绝对装入 方式、可重定位装入方式和动态运行时装入方式。 (1)绝对装入方式 在编译时,如果知道程序将驻留在内存什么位置,那么 编译程序将产生绝对地址的目标代码。绝对装入程序按照装 入模块中的地址,将程序和数据装入内存。装入模块被装入 内存后,不须对程序和数据的地址进行修改,程序中所使用 的绝对地址,即可以在编译或汇编中给出,也可以有程序员 直接给予。一般不让程序员给予地址,通常情况是在程序中 采用符号地址,然后在编译或汇编时,将这些符号地址再转 化为绝对地址。
第4章 存储器管理
二、分区分配算法
为把一个新作业装入内存,须按照一定的分配算法,从 空闲区表或空闲分区链中,选一个分区分配给该作业,目前 常用以下三种分配算法:
1.首次适应算法
此算法可以在上述两种数据结构上实施,但通常要求自
由块按始地址从小到大的顺序排序。当须分配空间时,总是
从头开始查找,直到找到一个符合要求的自由块。
凑”。然后寻找合适的内存空间。
32
第4章 存储器管理
4.3 分页存储管理方式
(3)分区的分配与回收操作。
1.分区分配中的数据结构。 要实现分区分配,系统必须配置相应的数据结构,用来 记录内存的使用情况。为分配提供依据。常用的数据结构有 两种:
20
第4章 存储器管理
(1)空闲分区表
其表的结构如图4.11所示:
序号
1 2 3 4 5
分区大小(kb)
64 24 40 30 …
分区始址(k)
回收分区r上、 下邻的空闲区
回收分区r单独 为空闲区
图4.13 内存回收时的情况
27
第4章 存储器管理
4.2.4 可重定位分区
1.紧凑 在连续分配方式中,必须把一个系统程序或用户程序, 装入到连续的内存空间中,如果在系统中若干个小的分区, 其总容量大于要装入的程序,但由于它们不相连接,使该程 序不能装入内存。例如图4.14(a)所示.,紧凑后如图4.14(b)
6
第4章 存储器管理
(2)可重定位装入方式
又称静态重定位。是在程序执行之前,有操作系统的重
定位装入程序完成。一般用于多道程序环境中,编译程序不 能预知所编译的目标模块在内存什么地方。重定位程序根据 装入程序的内存起始地址,直接修改所涉及到的逻辑地址, 将内存的起始地址加上逻辑地址得到正确的内存地址。
报地址错。
17
第4章 存储器管理
界限寄存器
重定位寄存器
逻辑地址 CPU < +
物理地址 内存
地址错
图4.7 地址映射和地址保护
18
第4章 存储器管理
4.2.2 固定分区分配方式
固定分区管理比较简单,本节仅以举例的方式说明其原 理。设一个容量为32k的实际内存,分割成如下若干区域,如 图所示。 10k 操作系统
24
第4章 存储器管理
三、分区分配和回收
在动态分区存储管理方式中,主要操作是分配和回收内存。 1.分配内存 首先,系统利用某钟算法,从空闲区表中找到所需的分 区。设请求的分区的大小为u.size,表中每个分区的大小可表 为m.size。若m.size-u.size≤size (size是事先规定的不再切 割的剩余分区的大小),说明多余部分太小,可不再切割,将 整个分区分给请求者;否则,从该分区中划分出与请求的大 小相等的内存空间分配出去,余下的部分仍留在空闲分区链
7
第4章 存储器管理
0
10000
2000 Load 1,3500 3500 360 5000 作业地址空间
12000 Load 1,3500 13500 360 15000
内存空间
图4.3 作业装入内存时的情况
8
第4章 存储器管理
(3)动态运行时的装入方式
又称动态重定位。是在程序执行期间进行的。一般说来, 这种转换有专门的硬件机构来完成,通常采用一个重定位寄 存器 ,每次进行存储访问时,对取出的逻辑地址加上重定位 寄存器的内容,形成正确的内存地址。如图4.4所示.
或空闲分区表中。最后,将分配的首地址返回给调用者。
25
第4章 存储器管理
2.回收内存
回收分区的主要工作是:首先检查是否有临接的空闲区,
如有则合并,使之成为一个连续的空闲区,而不是许多零散
的小的部分;之后,修改有关的分区描述信息。一个回收分 区邻接空闲区的情况有四种:如图4.13所示。第一种情况是 回收分区r上邻的一个空闲区,此时应合并成为一个连续的空 闲区,其始址为r上邻的空闲区始址,而大小为二者之和。第
即在系统增加一个重定位寄存器,用它来装入程序在内存中
的起始地址。程序在执行时,真正访问的内存地址是相对地 址与重定位寄存器中地址相加而形成的。
30
第4章 存储器管理
重定位寄存 器 10000 0 100 相对地址
1000 0 1010 0 Load1,250 0
Load1,250 0
250 0
2500 1250 0
12
第4章 存储器管理
0
模块A CALL B Return ;
L-1 0 模块B CALL C Return ; L+M-1 模块C Return ; L+M
0
模块A JSR “L” Return ;
模块B JSR”L+M” Return 模块C Return
L-1
L
M-1 0
N-1 目标模块
L+M+N-1 装入模块
14
第4章 存储器管理
4.2.1 单道程序的连续分配
这是一种最简单的存储方式,只能用于单用户、单任务 的操作系统。在这种存储方式中,内存分为两个分区:系统 区和用户区。 1.系统区。 仅供操作系统使用,一般驻留在低址部分,其中包括 中断向量。
15
第4章 存储器管理
2.用户区 操作系统以外的全部空间。其结构图如图4.6所示。
+ 365
365
500 0
1500 0 作业J
处理机一 存储器一 侧 侧
图 4-15 动态重定位示 意
主存
31
第4章 存储器管理
3.动态重定位分区分配算法
动态重定位分区分配算法,与动态分区分配算法基本相 同;差别仅在于:在这种分配算法中,增加了“紧凑”功能,
通常是找不到足够大的空闲区来满足用户的需要,进行“紧
小作业
中等作业区 大作业区
4k
6k 12k
这种分区分配方式在整个系统运行期间是不变的。 在这种情况下,当为一个作业分配空间时,应该先判定它 分在哪个区域比较合适,然后再进行分配。
19
第4章 存储器管理
4.2.3 动态分区分配
动态分区分配需要解决的问题有三个: (1)分区分配中所用的数据结构。 (2)分区的分配算法。
44 132 210 270 …
状态
可用 可用 可用 可用 …
21
第4章 存储器管理
(2)空闲分区链
为了实现对空闲分区的分配与链接,在每个分区的起始 部分,设置一些用于控制分区分配的信息,以及用于链接各 分区的前向指针:在分区尾部则设置一后向指针;然后形成 一个双向链。其结构如图4.12所示。
如图4.12 空闲链结构
23
第4章 存储器管理
2.最佳适应法
可以在上述两种数据结构上实施,但要求按自由块从小 到大的顺序排序。分配从头开始查找,即从小端到大端的方 向查找。直到找到第一个满足要求的自由块。显然,所能找 到的自由块能满足要求的最小块。
3.最坏适应算法 数据结构和排序方法如上。当分配空间时不 是从小往 大查,而是从大往小查,因此,所找到的自由块是所有自由 块中最大者。
11
第4章 存储器管理
(2)装入时动态链接 用户源程序经编译后得到目标模块,是在装入内存时边 装入边链接的。即在装入一个目标模块时,若发生一个外部 模块调用时,将引起装入程序去找相应的外部目标模块,并 将它装入内存。 (3)运行时动态链接 装入时进行的链接虽然可以将整个模块装入到内存的任 何地方,但装入摸块的结构是静态的。在程序执行期间装入 模块是不可改变的,因为无法预知本次要运行哪个模块,只 能将所有可能要运行的模块,在装入时全部链接在一起,使 得每次执行的模块都相同。这样效率很低,因此采用运行时 动态链接。在这种链接方式中,可将某些目标模块的链接, 推迟到执行时才进行。即在执行过程中,若发现一个被调用 模块尚未装入内存时,有OS去找该模块,将它装入内存, 并把它链接到调用模块上。
9
第4章 存储器管理
10000
10000
12000
Load 1,3500 13500 360 13500 物理地址 内存空间 3500 +
15000
图4.4 采用动态重定位时内存空间及地址重定位示意图
10
第4章 存储器管理
2.目标程序链接
链接程序的功能,是将经过编译或汇编后得到的一组目 标模块以及它们所需要的库函数,装配成一个完整的装入模 块。实现链接的方法有三种:静态链接、装入时动态链接和 运行时动态链接。 (1)静态链接 设编译后得到的三个目标模块A、B、C,它们的长度分 别为L、M和N。 程序链接示意图如图4.5所示。需要完成的 工作是对相对地址进行修改,同时变换外部调用符号,将每 个CALL语句改为跳转到某个相对地址,从而形成一个完整 的装入模块,又称可执行文件。通常不再拆开,运行时可直 接装入内存。这种事先进行链接,以后不再拆开的方式称为 静态链接。
图4.5 程序链接示意图
13
第4章 存储器管理
4.2.连续分配存储管理方式
连续分配是指为一个用户程序分配一个连续的内存空间, 连续分配有两种:单道程序的连续分配和多道程序的连续分 配。多道程序的连续分配又称为分区分配方式,它包括固定 分区、动态分区和动态重定位分区三种。下面就是对各种连 续存储管理的研究。
4
第4章 存储器管理
程序 链接程序 数据 编译程序产生的目标 模块 库函数 装入模块 装入程序
图4.2 对用户程序的处理步骤
5
第4章 存储器管理
1.目标程序装入内存的方式
程序只有装入到内存后才能运行。装入方式分绝对装入 方式、可重定位装入方式和动态运行时装入方式。 (1)绝对装入方式 在编译时,如果知道程序将驻留在内存什么位置,那么 编译程序将产生绝对地址的目标代码。绝对装入程序按照装 入模块中的地址,将程序和数据装入内存。装入模块被装入 内存后,不须对程序和数据的地址进行修改,程序中所使用 的绝对地址,即可以在编译或汇编中给出,也可以有程序员 直接给予。一般不让程序员给予地址,通常情况是在程序中 采用符号地址,然后在编译或汇编时,将这些符号地址再转 化为绝对地址。