当前位置:文档之家› 连续分配存储管理方式

连续分配存储管理方式

8
固定分区分配
例:在某系统中,采用固定分区分配管理方式,内存分区(单位字节) 情况如图所示,现有大小为1K、9K、33K、121K的多个作业要求进入内 存,试画出它们进入内存后的空间分配情况,并说明主存浪费多大?
0k 20k 28k 60k
180k
511k
(1)内存分区图
os
1 2 3
4
(2)分区说明表
0
系统区
m
用户区
n
地址: 0<m<n
2
固定分区分配
把内存用户空间划分为若干个固定大小的区域,
每个分区只装入一道作业。
划分的原则由系统操作员或操作系统决定。 分区一旦划分结束,则系统运行期间,每个分
区的长度和内存的总分区个数将保持不变。
3
固定分区分配
划分分区的两种方法: 1. 分区大小相等
适用于控制多个相同对象的场合 缺乏灵活性,小程序浪费空间,大程序无法装入 2. 分区大小不等 为了解决灵活性问题,将内存分为多个大小不等
内存分配的一般过程 内存回收的几种情况
15
内存分配流程
从头开始查表
检索完否? Y
返回
N m.size>u.size?
N 继续检索下一个表项
Y
m.sizeu.size<=size?
N 从该分区中划出u.size大小的分区
Y 将该分区从链中移出
将该分区分配,并修改相关结构
返回
16
回收内存
当某一个用户作业完成释放所占分区时,系统应进行回
4.3 连续分配方式
连续分配方式:为一个用户程序分配一个连 续的存储空间。
1. 单一连续分配 2. 固定分区分配 3. 动态分区分配 4. 动态重定位分区分配
1
单一连续分配
最简单,只适用于单用 户、单任务系统
内存分为两部分:
系统区 内存的低址部分,
仅供OS使用
用户区 系统区以外的全部
内存空间,供用户 程序使用
区号 1 2 3 4
大小 8k 32k 120k 331k
起址 20k 28k 60k 180k
状态 未分配 未分配 未分配 未分配
9
解:根据分区说明表,将4个分区依次分配给4个作业,同时 修改分区说明表,其内存分配和分区说明表如下所示:
0k 20k 28k
60k
(1)内存分配图
1K
9K2 333K
19
基于顺序搜索的动态分区分配算法
1. 首次适应算法 2. 循环首次适应算法 3. 最佳适应算法 4. 最坏适应算法
20
首次适应算法(first fit, FF)
要求按地址递增的次序组织空闲区表( 链) 。 申请和分配:从低地址找起,直至找到一个能可满足 要求的空闲分区,根据作业大小划出一块给申请者, 剩余空间仍留在空闲链中,成为一个小的空闲分区。 优点:优先使用内存中低址部分的小空闲区, 从而保 留了高址部分的大空闲区,有利于大作业。 缺点: 低址部分不断被划分,形成许多难以利用的小空闲
起始地址和使用状况。
分配过程
➢ 当用户作业要求装入系统时,操作系统查找分区说明表中标 记的空闲区域,根据作业大小,按照一定的分配策略,选择 一个空闲分区分配给该作业,并把分区说明表中该分区标明 已占用。
5
固定分区分配
分区号 1 2 3 4
分区说明表示例
大小(KB) 始址
8
20
32
28
64
60
132
124
状态 已分配 已分配 已分配 未分配
6
固定分区分配
缺点: 分区数量是固定的,每个分区只能装入一道作业, 限制了系统能容纳的作业数。 分区大小是固定的,每个分区只能装入一道作业, 剩余空间无法再利用,造成浪费。
优点:实现简单
7
固定分区分配示例
某系统的内存容量为256K,操作系统占用低地址的20K,其 余空间划分成4个固定大小的分区。如下图:
分区(碎片),造成空间浪费 碎片聚集在低址区域,每循环首次适应算法(next fit)
是FF算法的演变和改进,每次分配不再从空闲分区链 (表)的开始找起,而是从上次找到的空闲分区的下一个 找起,找到一个能满足要求的空闲分区。 需增设一个起始查寻指针,指示下一次查找从那个空 闲分区开始。 优点:使空闲分区分布均匀,减少查找开销 缺点:缺乏大空闲分区,不利于大作业
180k
121K
511k
(2)分区说明表
区号 1 2 3 4
大小 8k 32k 120k 331k
起址 20k 28k 60k 180k
状态 已分配 已分配 已分配 已分配
(3) 主存浪费空间 = (8-1)+(32-9)+(120-33)+(331-121) = 7+23+87+210=327(k)
的分区:小分区( 较多) ,中等分区( 适量) ,大分 区( 少量)
4
固定分区分配
每个用户作业占用一个连续分区,作业的程序和数据一旦装 入分区后就不能再移动,通常采用静态地址重定位。
分区的管理和分配 分区说明表
➢ 用于管理和分配内存的数据结构。 ➢ 每个表项对应一个分区,记载着这个分区的序号、空间大小、
的表项。 4 不邻接,则建立一新表项。
17
回收内存
F1 回收区
回收区 F2
F1 回收区
F2
作业1 回收区 作业2
(1)
(2)
(3)
(4)
F1, F2: 空闲区
作业1,2:非空闲区
图4-8 内存回收时的情况
18
动态分区分配大类
基于顺序搜索的动态分区分配算法 基于索引搜索的动态分区分配算法
机制:搜索合适的空闲分区、划分、分配 策略:怎样去搜索?怎样算“合适”?
11
动态分区分配
12
动态分区分配的数据结构
空闲分区表
在系统中设置一张空闲区表,每个表目记录
一个空闲区,主要参数包括分区号、长度和 起始地址。
空闲分区链
利用每个内存空闲区的头几个单元存放分区
分配控制信息,在分区的头、尾设置指针, 从而把所有的空闲区链接起来。
13
动态分区分配
14
动态分区的分配和回收
10
动态分区分配
动态分区法在作业执行前并不建立分区,分区的建立
是在作业的处理过程中进行的,且其大小可随作业或 进程对内存的要求而改变。这就改变了固定分区法中 那种即使是小作业也要占据大分区的浪费现象,从而 提高了内存的利用率。
采用动态分区法,在系统初启时,除了操作系统中常
驻内存部分之外,只有一个空闲分区。随后,分配程 序将该区依次划分给调度选中的作业或进程。
收。在可变式分区中,应该检查回收区与内存中前后空 闲区是否相邻,若相邻,则应进行合并,形成一个较大 的空闲区,并对相应的链表指针进行修改;若不相邻, 应将空闲区插入到空闲区链表的适当位置。
回收时的几种情况:
1 上邻空闲区:合并,改大小 2 下邻空闲区:合并,改大小、首地址。 3 上、下邻空闲区:合并,改大小,取消下邻空闲区
相关主题