计算机操作系统内存管理系统可变分区存储管理方式的内存分配回收.doc
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
计算机操作系统内存管理系统可变分区存储管理方式的内存分配回收 计算机操作系统的内存管理系统中,存储管理方式是非常重要的一部分。可变分区存储管理方式是一种常用的存储管理方式,它可以根据作业的需求动态地分配和回收内存空间。下面将对可变分区存储管理方式的内存分配回收进行详细的分析和介绍。 1. 可变分区存储管理方式的基本原理 可变分区存储管理方式的基本原理是将内存空间看做一个大的空闲区,然后根据作业的需求动态地分配和回收内存空间。当作业需要装入内存时,系统会从空闲区中查找一个足够大的空闲区,然后将其分配给作业。作业执行完毕后,其所占用的内存空间将被回收,变成一个空闲区。如果该空闲区的相邻分区也是空闲区,那么需要将相邻空闲区合并成一个空闲区。 2. 最优适应算法 为了提高内存的使用率,系统使用了最优适应算法,每次为作业分配内存时,总是把既能满足要求、又是最小的空闲分区分配给作业。但是,这种方法可能会出现找到的一个分区可能只比作业所需求的长度略大一点的情行,这时,空闲区分割后剩下的空闲区就很小以致很难再使用,降低了内存的使用率。为了解决此问题,系统设定了一个限值 minsize,如果空闲区的大小减去作业需求长度得到的值小于等于 minsize,不再将空闲区分成己分区和空闲区两局部,而是将整个空闲区都分配给作业。 3. 存分配与回收所使用的构造体 为了便于对内存的分配和回收,系统建立了两表记录内存的使用情况。一个是记录作业占用分区的“存分配表”,包括分区起始地址、长度、作业名/标志〔为 0 时作为标志位表示空栏目〕;另一个是记录空闲区的“空闲分区表”,包括分区起始地址、长度、标志〔0 表空栏目,1 表未分配〕。两表都采用顺序表形式。 4. 存分配算法的实现 当要装入一个作业时,从“空闲分区表”中查找标志为“1”〔未分配〕且满足作业所需内存大小的最小空闲区,假设空闲区的大小与作业所需大小的差值小于或等于 minsize,把该分区全局部配给作业,并把该空闲区的标志改为“0”〔空栏目〕。同时,在已分配区表中找到一个标志为“0”的栏目登记新装人作业所占用分区的起始地址、长度和作业名。假设空闲区的大小与作业所需大小的差值大于 minsize。那么把空闲区分成两局部,一局部用来装入作业,另外一局部仍为空闲区。这时只要修改原空闲区的长度,且把新装人的作业登记到已分配区表中。 5. 存回收算法的实现 在可变分区方式下回收内存空间时,先检查是否有与归还区相邻的空闲区〔上邻空闲区,下邻空闲区〕。假设有,那么将它们合件成一个空闲区。在程序实现时,首先将要释放的作业在“存分配表”中的记录项的标志改为“0”〔空栏目〕,然后检查“空闲区表”中标志为‘1’〔未分配〕的栏目,查找是否有相邻的空闲区,假设有,将之合并,并修改空闲区的起始地址和长度。 6. 数据结构的定义 在系统中,使用了两种数据结构:已分配表和空闲分区表。已分配表的定义为: ``` struct { float address; //已分分区起始地址 float length; //已分分区长度,单位为字节 int flag; //已分配区表登记栏标志,"0"表示空栏目 } used_table[n]; //已分配区表 空闲分区表的定义为: struct { float address; //空闲区起始地址 float length; //空闲区长度,单位为字节 int flag; //空闲区表登记栏标志,用"0"表示空栏目,用"1"表示未分配 } free_table[m]; //空闲区表 ``` 其中,n 和 m 分别是系统允许的最大作业数量和空闲区表最大数量。 7. 核心算法:最优分配算法 最优分配算法的实现是通过一个动态分区的方式来实现的。核心算法的实现如下所示: ``` int distribute(int process_name, float need_length) { int i, k=-1; float ads, len; int count=0; i=0; while(i<=m-1) { //核心的查找条件,找到最优空闲区 } return k; } ``` 这个算法的主要思想是找到一个能够满足作业需求的最小空闲区,然后将其分配给作业。如果找不到这样的空闲区,那么就需要将空闲区分成两局部,一局部用来装入作业,另外一局部仍为空闲区。
- 粉丝: 7
- 资源: 21万+
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- GitBook 教授 Javascript 编程基础知识.zip
- Generation.org 开发的 JAVA 模块练习.zip
- FastDFS Java 客户端 SDK.zip
- etcd java 客户端.zip
- Esercizi di informatica!执行计划,metti alla prova!.zip
- Eloquent JavaScript 翻译 - 2ª edição .zip
- Eclipse Paho Java MQTT 客户端库 Paho 是一个 Eclipse IoT 项目 .zip
- disconf 的 Java 应用程序.zip
- cloud.google.com 上使用的 Java 和 Kotlin 代码示例.zip
- 未命名3(3).cpp