




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第四章 存储器管理实验 课程名称:操作系统实验 授课教师:王铁军 电子邮箱: 理解内存页面调度的机理,掌握几种理论调度算法实现,并通过实验比较各种调度算法的优劣。此外通过实验了解HASH表数据结构的使用。 原理简述 算法实现提示 初始化。设置两个数组pageap和pagecontrolpp分别表示进程页面数和内存分配的页面数,并产生一个的随机数序列maintotal_instruction(当然这个序列由page的下标随机构成),表示待处理的进程页面顺序,diseffect置零。看main中是否有下一个元素,有就由main中获取该页面下标,并转到;没有,就转到。 如果该page业已在内存中,就
2、转到;否则就到,同时未命中的diseffect加1。观察pagecontrol是否占满,如果占满需将使用队列(中建立的)中最先进入的(就是队列第一个单元)pagecontrol单元“清干净”,同时将对应的page单元置为“不在内存中”。将该page与pagecontrol建立关系(可以改变pagecontrol的标示位,也可以采用指针连接,总之至少要使对应的pagecontrol单元包含两个信息:一是它被使用了,另外是哪个page单元使用的;page单元包含两个信息:对应的pagecontrol单元号、本page单元已在内存中); 将用到的pagecontrol置入使用队列(这里的队列当然是一
3、种先进先出的数据结构了,而不是泛指),返回; 显示命中率 :%100_1ninstructiototaldiseffectPage.h#ifndef _PAGE_H#define _PAGE_Hclass cpage public:int m_nPageNumber,m_nPageFaceNumber,m_nCounter,m_nTime;#endifPageControl.h#ifndef _PAGECONTROL_H#define _PAGECONTROL_Hclass CpageControl public:int m_nPageNumber, m_nPageFaceNumber;cla
4、ss CPageControl *m_pNext;#endifMemory.h#ifndef _MEMORY_H#define _MEMORY_H class CMemory public:CMemory();void initialize(const int nTotal_pf);void FIFO(const int nTotal_pf);void LRU(const int nTotal_pf);void NUR(const int nTotal_pf);void OPT(const int nTotal_pf);private:vector _vDiscPages;vector _vM
5、emoryPages;CPageControl *_pFreepf_head, *_pBusypf_head, *_pBusypf_tail;vector _vMain,_vPage,_vOffset;int _nDiseffect; CMemory:CMemory(): _vDiscPages(TOTAL_VP), _vMemoryPages(TOTAL_VP), _vMain(TOTAL_INSTRUCTION), _vPage(TOTAL_INSTRUCTION), _vOffset(TOTAL_INSTRUCTION) int S,i,nRand;srand(getpid()*10);
6、nRand=rand()%32767;S=(float)319*nRand/32767+1;for(i=0;iTOTAL_INSTRUCTION;i+=4) _vMaini=S;_vMaini+1=_vMaini+1;nRand=rand()%32767;_vMaini+2=(float)_vMaini * nRand/32767;_vMaini+3=_vMaini+2+1;nRand=rand()%32767;S=(float)nRand * (318-_vMaini+2)/32767+_vMaini+2+2;for(i=0;iTOTAL_INSTRUCTION;i+) _vPagei=_v
7、Maini/10;_vOffseti=_vMaini%10;_vPagei%=32;Memory.hvoid CMemory:initialize(const int nTotal_pf)int ix;_nDiseffect=0;for(ix=0;ix_vDiscPages.size();ix+) _vDiscPagesix.m_nPageNumber=ix;_vDiscPagesix.m_nPageFaceNumber=INVALID;_vDiscPagesix.m_nCounter=0;_vDiscPagesix.m_nTime=-1;for(ix=1;ixnTotal_pf;ix+) _
8、vMemoryPagesix-1.m_pNext = &_vMemoryPagesix;_vMemoryPagesix-1.m_nPageFaceNumber=ix-1;Memory.h_vMemoryPagesnTotal_pf-1.m_pNext=NULL;_vMemoryPagesnTotal_pf-1.m_nPageFaceNumber = nTotal_pf-1;_pFreepf_head=&_vMemoryPages0; void CMemory:FIFO(const int nTotal_pf) int i;CPageControl *p;initialize(n
9、Total_pf);_pBusypf_head=_pBusypf_tail=NULL;for(i=0;im_pNext; _vDiscPages_pBusypf_head-m_nPageNumber.m_nPageFaceNumber = INVALID; _pFreepf_head=_pBusypf_head; _pFreepf_head-m_pNext=NULL; _pBusypf_head=p;Memory.hp=_pFreepf_head-m_pNext;_pFreepf_head-m_pNext=NULL;_pFreepf_head-m_nPageNumber=_vPagei;_vD
10、iscPages_vPagei.m_nPageFaceNumber = _pFreepf_head-m_nPageFaceNumber;if(_pBusypf_tail=NULL)_pBusypf_head=_pBusypf_tail=_pFreepf_head;else _pBusypf_tail-m_pNext=_pFreepf_head; _pBusypf_tail=_pFreepf_head;Memory.h_pFreepf_head=p; coutFIFO: 1-(float)_nDiseffect/320; void CMemory:LRU(const int nTotal_pf)
11、 int i,j,nMin,minj,nPresentTime(0); initialize(nTotal_pf);Memory.hfor(i=0;iTOTAL_INSTRUCTION;i+) if(_vDiscPages_vPagei.m_nPageFaceNumber = INVALID) _nDiseffect+; if(_pFreepf_head=NULL) nMin=32767;for(j=0;j_vDiscPagesj.m_nTime &_vDiscPagesj.m_nPageFaceNumber!=INVALID) nMin=_vDiscPagesj.m_nTime; m
12、inj=j;Memory.h_pFreepf_head=&_vMemoryPages_vDiscPagesminj.m_nPageFaceNumber;_vDiscPagesminj.m_nPageFaceNumber=INVALID;_vDiscPagesminj.m_nTime=-1;_pFreepf_head-m_pNext=NULL; _vDiscPages_vPagei.m_nPageFaceNumber= _pFreepf_head-m_nPageFaceNumber;_vDiscPages_vPagei.m_nTime=nPresentTime;_pFreepf_head
13、=_pFreepf_head-m_pNext;Memory.helse_vDiscPages_vPagei.m_nTime=nPresentTime;nPresentTime+; coutLRU: 1-(float)_nDiseffect/320;void CMemory:NUR(const int nTotal_pf) int i,j,nDiscPage,nOld_DiscPage; bool bCont_flag; initialize(nTotal_pf); nDiscPage=0;Memory.hfor(i=0;iTOTAL_INSTRUCTION;i+) if(_vDiscPages
14、_vPagei.m_nPageFaceNumber =INVALID) _nDiseffect+; if(_pFreepf_head=NULL) bCont_flag=true; nOld_DiscPage=nDiscPage; while(bCont_flag)if(_vDiscPagesnDiscPage.m_nCounter=0&_vDiscPagesnDiscPage.m_nPageFaceNumber!=INVALID) bCont_flag=false;Memory.helse nDiscPage+; if(nDiscPage=TOTAL_VP) nDiscPage=0;
15、if(nDiscPage=nOld_DiscPage) for(j=0;jm_pNext=NULL; _vDiscPages_vPagei.m_nPageFaceNumber=_pFreepf_head-m_nPageFaceNumber; _pFreepf_head=_pFreepf_head-m_pNext;else _vDiscPages_vPagei.m_nCounter=1; if(i%CLEAR_PERIOD=0) for(j=0;jTOTAL_VP;j+) _vDiscPagesj.m_nCounter=0; Memory.h coutNUR:1-(float)_nDiseffe
16、ct/320; void CMemory:OPT(const int nTotal_pf) int i,j,max,maxpage,nDistance,vDistanceTOTAL_VP; initialize(nTotal_pf); for(i=0;iTOTAL_INSTRUCTION;i+) if(_vDiscPages_vPagei.m_nPageFaceNumber=INVALID) _nDiseffect+; if(_pFreepf_head=NULL) for(j=0;jTOTAL_VP;j+) if(_vDiscPagesj.m_nPageFaceNumber!=INVALID)
17、 vDistancej=32767;else vDistancej=0;Memory.hnDistance=1; for(j=i+1;jTOTAL_INSTRUCTION;j+) if(_vDiscPages_vPagej.m_nPageFaceNumber!=INVALID)& (vDistance_vPagej=32767) vDistance_vPagej=nDistance; nDistance+; max=-1; for(j=0;jTOTAL_VP;j+)if(maxm_pNext=NULL; _vDiscPagesmaxpage.m_nPageFaceNumber=INVALID; _vDiscPages_vPagei.m_nPageFaceNumber=_pFreepf_head-m_nPageFaceNumber; _pFreepf_head=_pFreepf_head-m_pNext; coutOPT:1-(float)_nDiseffect/320;#endifmain.cpp#include #include #include #include #include #include using namespace std;#define INVALID -1const int TOTAL_INSTRUCTION(320);const int TO
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 廉政档案管理管理办法
- 工业低碳管理暂行办法
- 巡察公告管理暂行办法
- 彼得潘阅读教学课件
- 大学中国梦课件
- 瑜伽教学体式精讲课件
- 散步教学课件下载
- 拼音拼读教学课件
- 儿童肥胖与健康管理:从认知到行动
- 长期卧床病人康复护理
- 句法 课件-初升高衔接英语课程
- 中国肿瘤药物治疗相关恶心呕吐防治专家共识(2022年版)解读
- 蔬菜基地建设项目可行性研究报告
- 武进区横山桥高级中学申报四星级高中自评报告
- RB/T 228-2023食品微生物定量检测的测量不确定度评估指南
- 常见输血不良反应的诊断及处理精讲课件
- JG-T 225-2020 预应力混凝土用金属波纹管
- 2024年俄罗斯湿纸巾和湿巾行业应用与市场潜力评估
- 正规挖机安全协议责任书
- 全屋定制直播间话术
- HG-T20678-2023《化工设备衬里钢壳设计标准》
评论
0/150
提交评论