分页式管理实验报告 下载本文

cout<<\起始地址 分区大小 进程名\for(i=0;i

if(Used_Table[i].flag!=0)

printf(\].length, Used_Table[i].flag); break; default:

cout<<\请输入正确的选项!\} } } 截

2.首次适应算法实现动态分区分配 代码:#include #include #include #include

#define getpch(type) (type*)malloc(sizeof(type)) /*/#define NULL 0*/

struct table{

char name[10];

char state; /* D(分配) or N(空闲)*/ int size; /*分区大小*/ int addr; /*起始地址*/ struct table *next; struct table *prev; }*tab=NULL,*p;

typedef struct table TABLE;

UI(){

printf(\\\n\ printf(\ 首次适应算法 \\n\ printf(\ \\n\ printf(\ 计科3班 顾志祥 20101308103 \\n\ printf(\~~~~~\\n\}

recycle(char n[10]){ TABLE *pr=NULL; for(pr=tab;pr!=NULL;pr=pr->next){ if(!strcmp(pr->name,n)&&pr->state=='D'){ if(pr->prev!=NULL&&pr->prev->state=='N'){ /*回收区的前一分区空闲*/

if(pr->next->state=='N') { /*回收区的前后分区都空闲*/

pr->state='N';

pr->prev->size+=(pr->size+pr->next->size); /*合并分区大小*/ pr->prev->next=pr->next->next; /*删除回收分区及其后一空闲pr->next->next->prev=pr->prev; return 0;

分区表项*/

} else {

pr->state='N';

pr->prev->size+=pr->size; pr->next->prev=pr->prev; pr->prev->next=pr->next; return 0;

} }

else if(pr->next!=NULL&&pr->next->state=='N'){

}

}

pr->state='N';

pr->size+=pr->next->size; if(pr->next->next!=NULL){ pr->next->next->prev=pr; pr->next=pr->next->next; }

else pr->next=NULL; return 0;

}

if(pr==NULL) printf(\错误!此分区不存在或未分配作业或前后分区都不空闲!\\n\

else printf(\分区%s回收完毕!\\n\ return 0; }

allocate(int s){

TABLE *pt=NULL,*q;

for(pt=tab;pt!=NULL;pt=pt->next){ if(pt->size>=s&&pt->state=='N'){

}

pt->state='D'; if(pt->size>s){

q=getpch(TABLE);

printf(\请输入分割出的分区ID:\\n\

scanf(\ q->size=pt->size-s; /*分割分区*/ }

pt->size-=q->size; q->state='N';

q->addr=pt->addr+pt->size; if(pt->next!=NULL){ pt->next->prev=q; /*在空闲链中插入新的分区*/

q->next=pt->next; pt->next=q; q->prev=pt; return 0;

}

pt->next=q; q->prev=pt; q->next=NULL;

return 0;

}/*for*/

printf(\没有合适的分区,此次分配失败!\\n\return 0;