1. 题目简介
借用外存空闲分区管理中位示图的方法来表示主存分配情况,实现主存空间的分配和回收
要求能显示和打印分配或回收前后的位示图和当前空闲块数,对完成一次分配后还要显示或打印为作业建立的页表
2. 所用数据结构
为要分配的作业建立数据结构
typedefstructjob{ intpage[64];// 页表 intjobname; intsize; intpresent;// 表示作业的状态, 执行还是结束 strcutjob*next;}JN,*jobnode;
3. 程序代码描述
voidinit()//初始化作业链 voidshowbitgraph()//显示位示图 voidmemoryallocate()//分配内存 voidmemoryrecycle()//回收内存 voidshowjob()//显示内存中还有多少作业 voidshowpagetable()//显示页表
核心代码:
voidmemoryallocate()//内存分配 { inti,j,k=0; jobnodep=newJN; jobnodeq=head; cout<<"请输入作业的名称:"<<endl; cin>>p->jobname; cout<<"请输入作业所需的内存大小:"<<endl; cin>>p->size; p->present=1; if(p->size>64-::count) cout<<"作业所需的内存大小不能满足,分配失败"<<endl; else { intcontrol=1; for(i=0;i<8&&control;i++) { for(j=0;j<8&&control;j++) { if(bitgraph[i][j]==0) { p->page[k]=8*i+j; bitgraph[i][j]=1; ::count++; k++; if(k==p->size) control=0; } } } while(q->next!=NULL) { q=q->next; } q->next=p; p->next=NULL; } cout<<endl; showbitgraph();}voidmemoryrecycle()//内存回收 { inti; intm,n,symbol=0; intid; cout<<"请输入执行结束作业的名称:"<<endl; cin>>id; jobnodepoint=head->next; while(point!=NULL) { if(id==point->jobname) { for(i=0;i<point->size;i++) { m=point->page[i]/8; n=point->page[i]%8; bitgraph[m][n]=0; ::count--; } point->present=0; } else { point->present=1; } point=point->next; } jobnoder=head->next; while(r!=NULL) { if(r->present==0) { cout<<"内存回收成功!"<<endl; showbitgraph(); } r=r->next; }}
4. 运行结果
分配主存:
显示作业和页表:
回收主存:
完整的代码+数据:
https://download.csdn.net/download/qq_38735017/87380378?spm=1001.2014.3001.5501