教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 求职职场 >

操作系统课程设计-模拟设计页式存储管理的分配与回收(2)

来源:网络收集 时间:2026-01-23
导读: /*程序结束时,释放申请的动态内存*/ void Destroy(void) { listreqtabitem::iterator pos=reqtable.begin(); for(pos=reqtable.begin();pos!=reqtable.end();pos++) { if((*pos).state==true) delete [](*pos).pgta

/*程序结束时,释放申请的动态内存*/ void Destroy(void) { list<reqtabitem>::iterator pos=reqtable.begin(); for(pos=reqtable.begin();pos!=reqtable.end();pos++) { if((*pos).state==true) delete [](*pos).pgtabadr; } reqtable.clear(); }

/* 打印出进程请求表*/ void PrintReqtable(void) { cout<<endl; cout<<"|--------------------------------------------------------------------|"<<endl; cout<<"| 进程请求表

|"<<endl; cout<<"|--------------------------------------------------------------------|"<<endl; cout<<"|"<<setw(8)<<"进程号" <<setw(16)<<"请求页面数" <<setw(16)<<"页表起始地址" <<setw(16)<<"页表长度" <<setw(16)<<"状态 |"<<endl; cout<<"|---------------------------------------------------------------------|"<<endl; list<reqtabitem>::iterator pos=reqtable.begin(); for(pos=reqtable.begin();pos!=reqtable.end();pos++) { cout<<"|"<<setw(8)<<(*pos).pid <<setw(16)<<(*pos).reqpagenum <<setw(16)<<(*pos).pgtabadr <<setw(16)<<((*pos).reqpagenum) * pagesize; if((*pos).state) cout<<setw(4)<<"已分配 |"<<endl; else cout<<setw(4)<<"未分配 |"<<endl; if((*pos).pid!=reqtable.back().pid)

cout<<"|--------------------------------------------------------------------|"<<endl; else

cout<<"|--------------------------------------------------------------------|"<<endl; } }

/*打印页表*/

void PrintPageTable(void) { unsigned pid; int i; bool flag=false; cout<<"请输入进程号:"; cin>>pid; list<reqtabitem>::iterator pos=reqtable.begin(); for(pos=reqtable.begin();pos!=reqtable.end();pos++) { if((*pos).pid==pid&&(*pos).state==true) { flag=true; cout<<"|---------------------------|"<<endl; cout<<"| 此进程的页表 |"<<endl; cout<<"|---------------------------|"<<endl; cout<<"|"<<setw(16)<<"页号" <<setw(6)<<"块号 |"<<endl; cout<<"|---------------------------|"<<endl;

int reqpagenum=(*pos).reqpagenum; for(i=0;i<reqpagenum;i++) { cout<<"|"<<setw(16)<<(*pos).pgtabadr[i].pagenum <<setw(6)<<(*pos).pgtabadr[i].blocknum<<" |"<<endl; if(i!=reqpagenum-1) cout<<"|---------------------------|"<<endl; else cout<<"|---------------------------|"<<endl; } } } if(flag==false) cout<<"系统中不存在该进程或者该进程还没有被分配内存!\n"; } cout<<endl;

void PrintMem(void) { cout<<"内存总块数为"<<pagenum<<",已经使 "<<pagenum-Get_Mempagenum()<<"块!"<<endl; 用 cout<<"现在还有"<<Get_Mempagenum()<<"块内存区域空闲!"<<endl; } cout<<endl;

void PrintBlockSize(void) { } cout<<"cout<<endl; 物理块大小为:"<<pagesize<<"KB"<<endl;

/*void Kill(void) 结束指定进程*/ { bool flag; int i; reqtabitem temp; list<reqtabitem>::iterator pos=reqtable.begin(); int pid; do{ cout<<"请输入进程号:"; flag=false; cin>>pid; for(pos=reqtable.begin();pos!=reqtable.end();pos++) { if((*pos).pid==pid) { flag=true; temp=*pos; break; } } if(flag==false) cout<<"系统中不存在该进程!"<<endl; cout<<endl; }while(flag==false); for(i=0;i<int(temp.reqpagenum);i++)

mempage[temp.pgtabadr[i].blocknum]=0; reqtable.remove(temp);

//重新为没有分配到内存的进程分配内存

for(pos=reqtable.begin();pos!=reqtable.end();pos++) {

if((*pos).state==false) { int reqpnum; reqpnum=(*pos).reqpagenum; if(reqpnum<=Get_Mempagenum()) { (*pos).state=true; pagetable temp = new pgtabitem[reqpnum]; if(temp==NULL) { cout<<"内存分配失败!"<<endl; cout<<endl; exit(0); } (*pos).pgtabadr=temp; for(i=0;i<int(reqpnum);i++) { temp[i].pagenum=i; //页表的页号 号 } }

int randnum=random.Random(pagenum)+1;//随机产生一个块

while(mempage[randnum]==1) randnum=random.Random(pagenum)+1; temp[i].blocknum=randnum;//页表的块号 mempage[randnum]=1; } } }

/*初始化系统*/ void InitSys(void) { cout.setf(ios::left);//左对齐 Init_Mempage(); Init_Reqtable(); Init_DistMem(); }

/*输出主菜单*/

void MainMenu(void) { cout<<"页式存储管理的分配与回收"<<endl; cout<<"1.手动创建进程"<<endl; cout<<"2.显示进程页表"<<endl; cout<<"3.显示请求表"<<endl; cout<<"4.撤销进程"<<endl; cout<<"5.显示内存使用情况"<<endl; cout<<"6.显示物理块大小"<<endl; cout<<"7.退出系统"<<endl; cout<<"请输入您的选择(0--7):"; }

/*选择函数*/

void MainChoice() { int choice; do{ MainMenu(); cin>>choice; switch(choice) { case 1: Dist_Mem(); break; case 2: PrintPageTable(); break; case 3: PrintReqtable(); break; case 4: Kill(); break; case 5: PrintMem(); break; case …… 此处隐藏:1811字,全部文档内容请下载后查看。喜欢就下载吧 ……

操作系统课程设计-模拟设计页式存储管理的分配与回收(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/118936.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)