操作系统实验3-动态分区存储管理分析.docx
文本预览下载声明
实验三动态分区存储管理一:实验目的了解动态分区存储管理方式中的数据结构和分配算法,加深对动态分区存储管理方式及其实现技术的理解。二:实验内容用C语言或Pascal语言分别实现采用首次适应算法和最佳适应算法的动态分区分配过程Allocate()和回收过程Free()。其中,空闲分区采用空闲分区链来组织,内存分配时,优先使用空闲区低地址部分的空间。三:实验类别动态分区存储管理四:实验类型模拟实验五:主要仪器计算机六:结果和小结七:程序#includestdio.h#includetime.h#includestdlib.h#define SIZE 640 // 内存初始大小#define MINSIZE 5 // 碎片最小值struct memory{struct memory *former;//前向指针int address;//地址int num;//作业号int size;//分配内存大小int state;//状态0表示空闲,1表示已分配struct memory *next;//后向指针}linklist;void intmemory()// 初始化空闲分区链{memory *p=(memory *)malloc(sizeof(memory));// 分配初始分区内存 p-address=0;// 给首个分区赋值 p-size=SIZE; p-state=0; p-num=-1; p-former=linklist; p-next=NULL; linklist.former=NULL;// 初始化分区头部信息 linklist.next=p;}int firstFit(int num, int size)// 首次适应算法{memory *p = linklist.next;while(p != NULL){if(p-state == 0 p-size = size) // 找到要分配的空闲分区{if(p-size - size = MINSIZE)// 整块分配{p-state = 1; p-num = num; } else // 分配大小为size的区间{ memory *node=(memory *)malloc(sizeof(memory)); node-address=p-address + size; node-size=p-size-size; node-state=0; node-num=-1; // 修改分区链节点指针 node-former=p; node-next=p-next; if(p-next !=NULL){ p-next-former=node; } p-next = node; // 分配空闲区间 p-size = size; p-state = 1; p-num = num; } printf(内存分配成功!\n); return 1; } p = p-next; } printf(找不到合适的内存分区,分配失败...\n); return 0;}int bestFit(int num, int size)// 最佳适应算法{ memory *tar=NULL; int tarSize=SIZE + 1; memory *p=linklist.next; while(p!=NULL) { if(p-state==0 p-size = size p-size tarSize) //寻找最佳空闲区间 { tar=p; tarSize=p-size; } p=p-next; } if(tar!=NULL) { if(tar-size - size = MINSIZE) //找到要分配的空闲分区{tar-state =
显示全部