开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第3天,点击查看活动详情
临近期末,和我一起复习操作系统吧。
什么是动态分区分配?
·动态分区分配是指在系统运行的过程中建立分区,并使分区的大小刚好与作业的大小相等。
实现动态分区需要的数据结构
- 在动态分区存储管理中,要有相应的数据结构来登记空闲分区的说明信息,它包括空闲分区的大小和位置
- 不同的系统根据要求采用不同的结构。常用的有空闲分区表和空闲分区队列结构
- 系统还要设置了等待分区队列,当系统中无空闲区或没有满足要求的空闲区时,则把申请者送入等待队列中,等待别的进程释放内存后再唤醒队列中的进程。
空闲分区表和空闲分区队列举例
动态分区的分配和回收
分区的分配
- 系统初启后,除操作系统占用一个分区外,其余存储区为一个大的空闲区。
- 分区的分配是指系统根据用户的请求,在空闲分区表或空闲分区队列中寻找一个满足用户要求的空闲分区,把这个空闲分区分配给用户。
- 以空闲分区表为例,当用户要求一个大小为SIZE的存储空间时,系统查询空闲分区表,找一个大于或等于SIZE的空闲区。
分配时的三种情况
-
一是系统中无满足要求的空闲分区,则分配失败。
-
二是空闲区大小与SIZE相等,则修改空闲分区表相应表目,向用户返回该空闲分区首址,表示此空闲分区已分给了要求的用户。
-
其三是空闲分区大于SIZE,这时将空闲分区一分为二。
将一个空闲分区分成二部分有两种办法:
- 从空闲分区的上部开始划出SZE大小的空闲分区给用户
- 从空闲分区的底部开始向上划出SIZE大小的空闲分区给用户。
分区的回收
当某个进程释放某存储区时,系统首先检查释放区是否与系统中的空闲区相邻,若相邻则把释放区合并到相邻的空闲区中去,否则把释放区作为一个空闲区插入到空闲分区表的适当位置。
释放区与空闲区相邻的四种情况
- 释放区与前空闲区相邻:将释放区与前空闲区合并为一个空闲区。其首址仍为
前空闲区首址,大小为释放区大小与空闲区大小之和 - 释放区与前后两个空闲区相邻:将这三个区合为一个空闲区,其首址为前空闲
区首址,大小为这三个区大小之和,并取消原后空闲区表目。 - 释放区与后空闲区相邻:则把释放区合并到后空闲,首地址为释放区首地址,
大小为二者大小之和。 - 释放区不与任何空闲区相邻:将释放区作为一个空闲区,将其大小和首址插入
到空闲区表的适当位置。