操作系统-课程设计任务(二):实验请求页式存储管理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

操作系统实验报告一

姓名:学号:时间:老师:

课程设计任务(二):实验请求页式存储管理

一.目的与要求

1.用高级语言编写几个常用的存储分配算法,并设计一个存储管理的模拟程序,对各种算法进行分析比较,评测其性能优劣;

2.用FIFO,LRU.OPT页面调度算法事业页面管理;

二.原理代码:

1.先进先出FIFO页面置换算法:

该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面;

2.最近最少使用页淘汰算法(LRU):

采用的是不断调整页表链的方法,即总是淘汰页表链链首的页,而把新访问的页插入链尾。如果当前调用页已在页表内,则把它再次调整到链尾。这样就能保证最近使用的页,总是处于靠近链尾部分,而不常使用的页就移到链首,逐个被淘汰,在页表较大时,调整页表链的代价也是不小的;

三.代码及运行结果:

#include

#include

using namespace std;

#define N 3

#define M 20

struct PageTable //页?表括?结á构1体?

{

int num;

int vacancy;

};

double hits;

int usetable[N];

int const a = 20;

int in[a];

PageTable *ppage=new PageTable[N];

int input()//

{

for(int i=0;i

{ cin >>in[i];

if(in[i]<0||in[i]>9)

{cout<<"第台?<

return 1;

}

}

return 0;

}

int ifexist(int j)//判D断?是?否?命ü中D

{

for(int i=0;i

{

if(in[j]==(ppage+i)->num)

return 1;

}

return 0;

}

bool nvacant()//页?面?是?否?有瓺空?

{

for(int i=0;i

{ if((ppage+i)->vacancy==0)

return 0;

}

return 1;

}

void FIFO()//

{

hits=0;

cout<<"输?入?页?面?号?引皔用?串?(0-9),共220个?"<

do{}while(input());

int count=0;

for(int j=0;j

if(!ifexist(j)){

if(nvacant())

{

(ppage+count%N)->num=in[j];

for(int i=0;i

{

cout<num<<" ";

}

cout<

count++;

}

else{

for(int i=0;i

{

if((ppage+i)->vacancy==0)

{ (ppage+i)->num=in[j];

(ppage+i)->vacancy=1;

for(i=0;i

{

cout<num<<" ";

}

cout<

break;

}

}

}

}

else{

for(int i=0;i

{

cout<num<<" ";

}

cout<

hits=hits+1;

}

}

cout<<"命ü中D率ê:"<

cout<<"缺ā?页?率ê:"<<1-hits/a<

}

int main()

{

for(int i=0;i

{

(ppage+i)->num=-1;

(ppage+i)->vacancy=0;

}

cout<<"FIFO"<

do {FIFO();}

while(1);

system("pause");

return 0;

}

运行结果:

……

void ChangeOrder(int a)

{

int v=0;

for(int i=0;i

if(usetable[i]==a)

{

v=i;

break;

}

for(int i=v;i

{

usetable[i]=usetable[i+1];

}

usetable[N-1]=a;

}

void LRU()

{

hits=0;

for (int i=0;i

usetable[N]=i;

cout<<"输?入?页?面?号?引皔用?串?(0-9)20..."<

do{}while(input());

//output();

相关文档
最新文档