实验五页面置换算法.docx
- 文档编号:5752481
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:11
- 大小:107.01KB
实验五页面置换算法.docx
《实验五页面置换算法.docx》由会员分享,可在线阅读,更多相关《实验五页面置换算法.docx(11页珍藏版)》请在冰豆网上搜索。
实验五页面置换算法
一、实验目的
1.了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。
2.理解不同存储管理方式下的主存空间的分配和回收。
二、实验环境
Linux平台。
三、实验内容
1.实现最近最久未使用置换算法。
2.可变分区管理方式下采用最先适应算法实现主存分配和回收。
3.分页管理方式下采用位示图实现主存分配和回收。
四、实验代码
//分段内存管理
#include
#include
usingnamespacestd;
#defineMAX_MEM256//内存总量
#defineOS_MEM60//系统占用内存
#defineTOTLE_LEFT196//除系统占用内存外的剩余内存
//空闲分区表节点
structFree
{
intstart;
intlength;
Free(ints,intl);
};
Free:
:
Free(ints,intl)
{
start=s;
length=l;
}
//已分配分区表节点
structTask
{
stringname;
intstart;
intlength;
Task(stringn,ints,intl);
};
Task:
:
Task(stringn,ints,intl)
{
name=n;
start=s;
length=l;
}
//声明空闲分区表
list
list
//分配可用起始地址
intget_free(intsize)
{
intstart=-1;
//查找适当的空闲分区
list
:
iteratorit=free_list.begin();
boolfind=false;
while(it!
=free_list.end())
{
if((*it)->length>=size)
{
find=true;
start=(*it)->start;
//大于就分割把低地址分配出去
if((*it)->length>size)
{
(*it)->start+=size;
(*it)->length-=size;
}
//等于就从空闲分区中删掉
else
free_list.erase(it);
break;//找到就跳出循环
}
it++;
}
returnstart;
}
voiddo_request(stringname,intsize)
{
if(name=="SYSTEM")
{
cout<<"申请不合法!
非法进程名!
"< return; } if(size>TOTLE_LEFT) { cout<<"申请不合法! 超出最大可用内存! "< return; } //查找是否已存在同名进程 boolfind=false; list : iteratorit=task_list.begin(); while(it! =task_list.end()) { if((*it)->name==name) { find=true; break; } it++; } if(find) { cout<<"此进程已存在! "< return; } //从空闲分区选择合适的空间 intstart=get_free(size); //未找到合适空间 if(start==-1) { cout<<"系统内存不足! 进程等待! "< return; } Task*ta=newTask(name,start,size); task_list.push_back(ta); cout<<"进程申请内存成功! "< } //插入到空闲分区表,按照起始地址从小到大 voidfree_task(intstart,intlength) { //查找要插入的位置 list : iteratorinit_it,last_it; last_it=init_it; list : iteratorit=free_list.begin(); while(it! =free_list.end()) { if((*it)->start>start)break; last_it=it; it++; } boollink_prev=false; boollink_next=false; //有前一个时 if(last_it! =init_it) { if((*last_it)->start+(*last_it)->length==start) link_prev=true; } //有后一个时 if(it! =free_list.end()) { if(start+length==(*it)->start) link_next=true; } //与前后都相连 if(link_prev&&link_next) { (*last_it)->length+=length+(*it)->length; free_list.erase(it); } //只与前相连 elseif(link_prev) { (*last_it)->length+=length; } //只与后相连 elseif(link_next) { (*it)->start=start; (*it)->length+=length; } //前后都不相连 else { Free*fr=newFree(start,length); free_list.insert(it,fr); } } voiddo_revoke(stringname) { if(name=="SYSTEM") { cout<<"错误! 不能回收系统内存! "< return; } //查找要回收的进程是否存在 boolfind=false; list : iteratorit=task_list.begin(); while(it! =task_list.end()) { if((*it)->name==name) { find=true; break; } it++; } if(! find) { cout<<"错误! 要回收的进程不存在! "< return; } free_task((*it)->start,(*it)->length); task_list.erase(it); cout<<"回收进程占用内存成功! "< } voidprint_task() { cout<<"进程名称起始地址大小"< for(list : iteratorit=task_list.begin();it! =task_list.end();it++) { cout<<(*it)->name<<"" <<(*it)->start<<"" <<(*it)->length< } } voidprint_free() { cout<<"以下是空闲分区表的状态"< <<"起始地址大小"< for(list : iteratorit=free_list.begin();it! =free_list.end();it++) { cout<<(*it)->start<<"" <<(*it)->length< } } intmain() { //把系统占用后剩余的内存空间计入空闲分区表 Free*fr=newFree(OS_MEM,TOTLE_LEFT); free_list.push_back(fr); Task*ta=newTask("SYSYEM",0,OS_MEM); task_list.push_back(ta); print_free(); boolquit=false; while(! quit) { cout<<"选择要进行的操作: 1.申请内存2.回收内存3.查看进程>"; intop; cin>>op; if(op==1) { cout<<"请输入进程名及占用空间大小(用空格隔开): "; stringname; intsize; cin>>name; cin>>size; do_request(name,size); print_free(); } elseif(op==2) { cout<<"请输入要回收的进程名: "; stringname; cin>>name; do_revoke(name); print_free(); } elseif(op==3) { print_task(); } else { cout<<"非法操作! "< } cout<<"******************************"< charcon; cout<<"继续(y/n): "; cin>>con; if(con=='n'||con=='N') { quit=true; } } return0; } 实验结果: 五、实验总结分析 通过本次试验,我学会了最近最久未使用置换算法;最先适应分配算法;LRU和其他置换算法各自的优缺点;各种主存分配算法的优缺点。 部分Linux系统常用简单指令的使用,也对操作系统的基本原理有了更深层次的了解。 但在试验的过程中仍然存在诸多问题,习惯于使用图形化的操作系统后,对该指令操作系统就不太适应。 但Linux的效率远比图形化的操作系统的效率要高,所以在以后的实验过程中,要多多练习,多多动手操作,多多记忆,才能完全驾驭Linux操作系统。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 页面 置换 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)