操作系统课件_第四章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
把程序装入起始地址为1000的内存区
0 100 … 0 1000 1100 装入程序 1500 1600 1234 … … … Mov r1,[1500]
Mov r1,[500]
…
500 1234 599
…
作业的地址空间
…
存储空间
静态地址重定位过程
把程序装入起始地址为1000的内存区 重定位寄存器 1000 逻辑地址 +
分区2 (100K)
分区1 (50K)
操作系统
操作系统
(a) 多作业队列 让作业按大小分别排 入各分区队列中等待
(b) 单作业队列
得到一个空闲分区, 就装入一个作业
图4.3 固定式分区的组织
主存分区说明表: 实现固定式分区管理, 描述各分区的分配情况。
[例] 分区起始地址 分区大小 占用标志 50k 30k J1 80k 100k 0 180k 200k J2 380k 132k 0 图4.4 固定式分区主存使用情况表
优点:简单。
二、 可变式分区/动态分区
根据作业的大小动态地划分分区,使分区的大 小正好等于作业大小。 – 各分区的大小是不定的; – 内存中分区的数目也是不定的。
[例] 如图4.5 所示。
1. 2. 3. 4. 5. 进程A在主存; 进程B和C从盘上装入; 进程A运行完; 进程D装入,进程B完成调出主存; 进程E装入主存。
1MB
高8k 区域
如,IBM PC机的DOS操作系统采用的结构
4.3
多用户多道程序的存贮分配 —— 分区分配
它把主存划分成若干个分区,除了操作系统占用 一个分区之外,其余的每一个分区容纳一个程序。 分区分配分为固定式分区和可变式分区。
一、 二、 三、 四、
固定式分区 可变式分区/动态分区 分区管理的存贮器保护 分区管理的优缺点
[动态重定位]: 装入程序把程序和数据原样装入
到已分配的存贮区中,然后把这个存贮区的起始 地址送入重定位寄存器中。在程序执行时,再将 相对地址转换成绝对地址。 优点:①主存利用率高。在存储区域可移动用户程 序。移动后,只要修改重定位寄存器即可。 ②程序不必占有连续的存贮空间。 ③便于多用户共享同一程序。
第四章
存储器管理
本章所涉及的内容
一、存贮器管理的功能 二、存贮器管理中的几个概念 三、存贮器管理所采用的各种方案的实现 原理、采用的数据结构、分配和回收算法 四、各种方案的优缺点
4.1
引
言
存储器管理:对主存的管理 单道程序系统,主存被划分成两部分:一 部分供OS使用,一部分供当前正在执行的 程序使用。 多道程序系统,存储器的“用户”部分必 须进一步地细分,以适应多个进程的要求。 细分的任务由操作系统动态实现,称作存 储器管理。 存贮器管理的目的:一是方便用户使用, 二是提高存贮器的利用率。
head
100k
0
10k
∧
0
730k 100k
图4.8 空闲区链
常用的空闲区链的管理方法有三种:首次
适应法、最佳适应法、最坏适应法。
首次适应(first fit)法:要求空闲分区按地
址递增的次序排列。当进行内存分配时,从空闲 区链首开始顺序查找,直到找到第一个能满足其 大小要求的空闲区为止。分一块给请求者,余下 部分仍留在空闲链中。
一、 固定式分区
把主存预先划分成几个大小不等的分区。 当作业到达时,选择一个适合作业要求的 最小空闲区分给作业,或当没有可用的空 闲分区时,让其在该分区队列中等待。 图4.3(a)多作业队列: 图4.3(b)单作业队列:
分区4 (132k)
分区3 (200K)
分区4 (132k)
作业
作业
分区3 (200K) 分区2 (100K) 分区1 (50K)
0 1000 1100 … … Mov r1,[500]
0 100
… Mov r1,[500] …
物理地址
1500 1599 1234 … …
500 1234 599 …
作业的地址空间
存储空间
动态地址重定位过程
4.2
单用户单道程序的存贮分配
是一种最简单的存储管理方式。 通常只能用于单用户、单任务OS中。 主存只有一个用户作业。 在这种管理方法下,存贮器划分为两部分: 一部分是操作系统,另一部分是用户作业。 采用静态分配方式,即作业一旦进入内存, 就要等到它执行结束后才能释放内存。因 此不支持虚拟存储方式。 存储保护容易:易判断地址是否越界。
需修改F2的首地址= R的首地址,F2的大小= F2的 大小+ R的大
占用区 释放 空闲区 1 F2 区R (b)合并后 占用区 1
空闲区F2
(c) 先将R与F2合并,记为F2。再将F 2与F1合并,并
将F2从链中删除。
空闲区 F1 (C) 释放区 空闲区 合并后 R F2
空闲区F1
(d) 若释放区R上下都不邻接空闲区,将其插入空闲区 链的适当位置即可。
优点:比较直观、简单。 缺点:由于主存分区个数不定,所以表格 长度的设置,或者表格不够用或者造 成表格浪费。
2. 空闲区链
为了实现对空闲分区的分配和链接,在 每个空闲分区的两端设置附加信息。 (1) 状态信息: “0”表示该区空闲,“1” 表示已分配。 (2) 该区的大小(以字或块为单位)。 (3) 指针:分别指向其上或其下分区的位 置。通常首字指针(又叫前向指针)指向下 一分区,尾字指针(又叫后向指针)指向其 上一分区位置。下图给出了带有表格信息 的分区格式。
状态位
分区大小(N+2) 前向指针
字
大小为N的已分配区或空闲区
状态位 分区大小(N+2) 后向指针 字
所有空闲区连成一个双向链。 系统设置一个链表头指针head,指向链 中第一个空闲区位置。
图4.6 (b)的未分配区表用空闲区链表表示:
100k 270k 0 10k 270k 0 730k ∧
1. 地址空间的逻辑地址往往与分配到的存贮空间 的物理地址不一致, 2. 而处理机执行用户程序时,所要访问的指令和 数据地址必须是实际的物理地址。
装入程序:负责把用户程序由地址空间装入到 存贮空间。 地址重定位分:静态重定位、动态重定位。
[静态重定位]:地址转换工作是在程序执行前由装
入程序集中一次完成。 特点:无硬件变换机构;为每个程序分配一个连续 的存储区;在程序执行期间不能移动,主存利用 率低;难以做到程序和数据的共享。
特点:
1. 因为分配分区要查找整个链表,所以比首次 适应算法效率低。 2. 因为它可能把主存划分得更小,成为无用的 碎片,所以它比首次适应要浪费更多的空贮 空间。
最坏适应(worst fit)法:分配存贮空间时,
要扫描整个链表,直到找到该链中能满足进程要 求且为链中最大的空闲区为止。然后,一分为二, 一部分给进程,另一部分仍留在链中。
2. 存贮空间 是指物理存贮器中全部物理存储单元的集 合所限定的空间。每个存储单元都有它自 己的编号地址。该地址被称为绝对地址, 或物理地址,或实地址。 存贮空间的大小:由系统的硬件配置决定的。
[一个程序只有从地址空间装入到存贮 空间后才能运行。]
3. 地址重定位(Relocation) 把程序地址空间的逻辑地址转换为存贮空 间的物理地址的工作叫地址重定位。又叫 地址映射,或地址变换。 地址重定位的原因:
始址 20K 110K 170K
长度 80K 60K 100K
占用标志 Pd Pe Pc
始址 100K 270K
长度 10K 730K
占用标志 有效 有效 空
空
┆
空
┆
(a)已分配区表 图4.6
(b)未分配区表 可变分区分区说明表
对图4.5(e)情况的描述
来自百度文库
当作业运行完成撤离系统时:
1. 将回收的分区登记在未分配区表中。 2. 将该作业占用的已分配区表目置为空。
(a) R与F1相邻接:F1的首地址+F1的大小=R的首地址。
只要修改F1的大小= F1的大小+R的大小,其它参数 不变和在链中的位置不变。
低地址 高地址 低地址 高地址
空闲 释放 占用区 (a)合并后 2 区F1 区R
占用区 空闲区 F1 2
(b) R与F2相邻接,R的首地址+ R的大小=F2的首地址。
内存管理过程:
–当有一个用户程序要装入内存时,由内存分配 程序检索分区说明表,从表中找出一个能满足 要求的尚未分配的分区分给该程序,然后修改 分区说明表中该分区表项的状态; –若找不到大小足够的分区,则拒绝为该程序分 配内存。 –当进程执行完毕,不再需要内存资源时,管理 程序将对应分区的状态置为未分配即可。 缺点:主存利用不充分。因为作业的大小不可能 刚好等于某个分区的大小,绝大多数已分配的分 区中,都有一部分存储空间被浪费掉了。
分区说明表:已分配区表,未分区说明表。 当为作业分配主存时:
1. 首先从未分配区表中找一个足以容纳该作业 的空闲区,若这个分区比较大,则一分为二, 一部分分配给作业,另一部分仍作为空闲区 留在表中。 2. 再在已分配区表中找一个空表目,填入新分 配作业的信息。
图4.6中的两张表的内容就是对图4.5(e)情 况的描述。
3. 位图法
使用位图,存贮空间被划分成大小相等的若 干个分配单位,称为块。它可以为小到几个 字节,大到几k字节。位图中的每一位相应 于一个块,0表示空闲,1表示被占用。
A进程 B C D E …
11111000 11111111 11001111 11111000
…
位图大小由存贮空间容量与分配单位的大小决定。 分配单位小,位图大;分配单位大,位图小。 进程的大小不是分配单位的整倍数:分配单位越大, 空间浪费将越大。 装入:当要装入具有k个存贮分配单位的进程时,存 贮管理程序必须扫描整个位图,寻找连续k个为0的 位。若找到,将其装入。否则,进程等待。 释放:当进程释放其占用区时,按其占用区覆盖的 存储块数将位图对应的位清0。 分配时,要将位图中找到的位转换为主存地址;回 收时,要进行反转换。 较少采用这种方案,因为查找位图的操作很费时。
1M
1M 270k
1M 270k
1M 270k
170k 140k 140k
Pc 100k
Pb 30k
Pc Pc 100k 170k 100k 170k
140k Pb 30k 100k 20k
Pc 100k
Pe(60k)
20k
Pa 120k OS
(a)
20k
Pa 120k OS
(b)
70k
Pd 80k
想法:使剩下的空闲区仍能分配给其它进程。 改进:从大到小对空闲区排序,以提高查找 速度。 缺点:由于最大的空闲区总是首先被分配而 进行划分,当有大作业到来时,其存储空 间的申请往往得不到满足。
回收一个释放区
若释放区与空闲区相邻接,要进行合并。 [例] 以首次适应法说明系统回收进程释放区存在的 四种可能情况。设与释放区R相邻的两个空闲区分 别为F1和F2。
一、 存贮器管理功能
1. 主存的分配和回收:系统应能记住每个存储区 的状态;实施存储器的分配;回收系统或用户 释放的存储区。 2. 提高主存利用率:使多道程序能动态地共享主 存,最好能共享主存中的信息。[地址转换或 重定位] 3. 主存保护:保证进入主存的各道作业都在自己 的存储空间内运行,互不干扰。由硬件和软件 配合完成。 4. 主存扩充:借助于虚拟存储技术或其他自动覆 盖技术,为用户提供比主存空间大的地址空间。
10k Pd 80k
0
0
0
OS
(c)
0
OS
(d)
OS
(e)
图4.5 可变式分区的使用情况 阴影部分为空闲区
系统中必须配置相应的数据结构,用来记 录内存的使用情况,为分配提供信息,实 现分区分配。 常用的数据结构:分区说明表、空闲区链 表。 不常用的数据结构:位示图和伙伴系统。
1. 分区说明表
特点:
–优先利用低地址部分的空闲分区,保留了高地 址部分的大空闲区。 –低地址端可能留下许多很少的空闲分区,而每 次查找是从低地址部分开始,会增加查找开销。
最佳适应(best fit)法:要扫描整个链表,
以获得能满足进程需求且为最小的空闲区。 如果该空闲分区大于作业的大小,则将剩余空 闲区仍留在空闲区链表中。 可从小到大对空闲区排序,方便查找。
二、存贮器管理中使用的几个概念
1. 地址空间: 一个应用程序经编译后,通常会形成若干 个目标程序,这些目标程序再经过链接而 形成可装入程序。这些程序的地址都是从 “0”开始的,程序中的其他地址都是相对 于起始地址计算的,由这些地址所形成的 地址范围称为地址空间,其中的地址叫做 相对地址,或逻辑地址,又叫虚地址。 地址空间的大小:由被编译的源程序决定。