操作系统-内存管理.docx

内存管理 代码 #includestdlib.h #includeiostream using namespace std; #define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错 #define MAX_length 32767 //最大内存空间为KB typedef int Status; int n=0; typedef struct freearea//定义一个空闲区说明表结构 { int ID; //分区号 long size; //分区大小 long address; //分区地址 int state; //状态 }ElemType; //---------- 线性表的双向链表存储结构------------ typedef struct DuLNode //double linked list { ElemType data; struct DuLNode *prior; //前趋指针 struct DuLNode *next; //后继指针 }DuLNode,*DuLinkList; DuLinkList block_first; //头结点 DuLinkList block_last; //尾结点 Status alloc(int);//内存分配 Status free(int); //内存回收 Status First_fit(int,int);//首次适应算法 Status Best_fit(int,int); //最佳适应算法 void show();//查看分配 Status Initblock();//开创空间表 Status Initblock()//开创带头结点的内存空间链表 { block_first=(DuLinkList)malloc(sizeof(DuLNode)); block_last=(DuLinkList)malloc(sizeof(DuLNode)); block_first-prior=NULL; block_first-next=block_last; block_last-prior=block_first; block_last-next=NULL; block_last-data.address=0; block_last-data.size=MAX_length; block_last-data.ID=0; block_last-data.state=Free; return OK; } //----------------------- 分配主存------------------------- Status alloc(int ch) { int ID,request; cout请输入作业(分区号):; cinID; cout请输入需要分配的主存大小(单位:KB):; cinrequest; if(request0 ||request==0) { cout分配大小不合适,请重试!endl; return ERROR; } if(ch==2) //选择最佳适应算法 { if(Best_fit(ID,request)==OK) cout分配成功!endl; else cout内存不足,分配失败!endl; return OK; } else //默认首次适应算法 { if(First_fit(ID,request)==OK) cout分配成功!endl; else cout内存不足,分配失败!endl; return OK; } } //------------------ 首次适应算法----------------------- Status First_fit(int ID,int request)//传入作业名及申请量 { //为申请作业开辟新空间且初始化 DuLinkList temp=(DuLinkList)malloc(sizeof(DuLNode)); temp-data.ID=ID; temp-data.size=request; temp-data.state=Busy; DuLNode *p=block_first-next; while(p) { if(p-data.state==Free p-data.size==request) {//有大小恰好合适的空闲块 p-data.state=Busy; p-data.ID=ID; return OK; break

文档评论(0)

1亿VIP精品文档

相关文档