动态分区分配方式首次适应算法(4)

2019-08-29 22:27

实验代码

//********动态分区分配方式的模拟一首次适应算法 ********* #include #include

#define Free 0 //空闲状态 #define Busy 1 //已用状态 #define OK 1 //完成 #define ERROR 0 //出错

#define MAX_length 640 //最大内存空间为640KB typedef int Status;

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();//内存分配 Status free(int); //内存回收

Status First_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;

15

block_last->data.ID=0;

block_last->data.state=Free; return OK; }

//----------------------- 分 配 主 存 ------------------------- Status alloc() { int ID,request; cout<<\请输入作业(分区号):\ cin>>ID;

cout<<\请输入需要分配的主存大小(单位:KB):\ cin>>request;

if(request<0 ||request==0) { cout<<\分配大小不合适,请重试!\ return ERROR; } if(First_fit(ID,request)==OK) cout<<\分配成功!\ else cout<<\内存不足,分配失败!\}

//------------------ 首次适应算法 ----------------------- 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; } if(p->data.state==Free && p->data.size>request) {

16

//有空闲块能满足需求且有剩余 temp->prior=p->prior; temp->next=p; temp->data.address=p->data.address; p->prior->next=temp; p->prior=temp; p->data.address=temp->data.address+temp->data.size; p->data.size-=request; return OK; break; } p=p->next; } return ERROR; }

//----------------------- 主 存 回 收 -------------------- Status free(int ID) { DuLNode *p=block_first; while(p) { if(p->data.ID==ID) { p->data.state=Free; p->data.ID=Free; if(p->prior->data.state==Free)//与前面的空闲块相连 { p->prior->data.size+=p->data.size; p->prior->next=p->next; p->next->prior=p->prior; } if(p->next->data.state==Free)//与后面的空闲块相连 { p->data.size+=p->next->data.size;if(p->next->next==NULL)p->next=NULL;else{ p->next->next->prior=p; p->next=p->next->next;} } break; } p=p->next; } cout<<\分区:\回收成功\ return OK;

17

// }

//--------------- 显示主存分配情况 ------------------ void show() { cout<<\ cout<<\ 主 存 分 配 情 况 ++++++\\n\ cout<<\ DuLNode *p=block_first->next; while(p) { cout<<\分 区 号:\ if(p->data.ID==Free) cout<<\ else cout<data.ID<data.state==Free) cout<<\空 闲\ else cout<<\已分配\ p=p->next; } }

//----------------------- 主 函 数--------------------------- void main() { Initblock(); int choice; int i; for(i=0;;i++) { cout<<\ cout<<\动态分区分配方式的模拟一+++++++++++++++++\\n\ cout<<\首次适应算法++++++++++++++++++++++++\\n\ cout<<\ ++++++++++++++++++++++++++++++++++++++++++++\\n\ cout<<\ ++ 1: 分配内存 2: 回收内存 ++\\n\ cout<<\ ++ 3: 查看分配 0: 退 出 ++\\n\ cout<<\ ++++++++++++++++++++++++++++++++++++++++++++\\n\ cout<<\请输入您的操作 :\ cin>>choice; if(choice==1)// 分配内存

18

}

alloc(); else if(choice==2)// 内存回收 { int ID;

cout<<\请输入您要释放的分区号:\ cin>>ID; free(ID); } else if(choice==3)//显示主存 show(); else if(choice==0)//退出 break; else //输入操作有误 { cout<<\输入有误,请重试!\ continue; } }

19


动态分区分配方式首次适应算法(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:河洛与八卦的关系

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: