一、实验目的:
了解动态分区分配方式中的数据结构和分配算法,
并进一步加深对动态分区存储管理方式及其实现过程的理解。
二、实验内容:
- 用C语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程和回收过程。其中,空闲分区通过空闲分区链(表)来管理;在进行内存分配时,系统优先使用空闲区低端的空间。
- 假设初始状态下,可用的内存空间为640KB,并有下列的请求序列:
•作业1申请130KB
•作业2申请60KB
•作业3申请100KB
•作业2释放60KB
•作业4申请200KB
•作业3释放100KB
•作业1释放130KB
•作业5申请140KB
•作业6申请60KB
•作业7申请50KB
•作业8申请60KB
分别采用首次适应算法和最佳适应算法进行内存的分配和回收,要求每次分配和回收后显示出空闲内存分区链的情况。
三、实现思路:
- 采用java的ArrayList数据结构存储自定义分区类Block的实例对象分区作为分区链。
- 根据最先适应/最佳适应的思想为作业分配内存(改变内存属性大小、当前作业id、分配始址等),并根据实际情况来释放或合并Block对象的空间属性大小。
四、主要的数据结构:
private static List<Block> blockList = new ArrayList<>();
private static class Block {
int address;
int size;
int id;
}
五、程序流程图:
- 最先适应算法FF:
- 最佳适应算法BF:
六、算法关键代码:
private static boolean allocation(int id, int size){
boolean flag = false;
int blockAddress = 0;
int blockSize = 0;
int blockId = 0;
for(int i = 0; i < blockList.size(); i++){
blockAddress = blockList.get(i).address;
blockSize = blockList.get(i).size;
blockId = blockList.get(i).id;
if(blockId == -1 && blockSize >= size) {
blockList.get(i).id = id;
blockList.get(i).size = size;
if (blockSize > size) {
Fi