操作系统页面置换算法代码文档格式.docx

上传人:b****8 文档编号:22123183 上传时间:2023-02-02 格式:DOCX 页数:18 大小:20.04KB
下载 相关 举报
操作系统页面置换算法代码文档格式.docx_第1页
第1页 / 共18页
操作系统页面置换算法代码文档格式.docx_第2页
第2页 / 共18页
操作系统页面置换算法代码文档格式.docx_第3页
第3页 / 共18页
操作系统页面置换算法代码文档格式.docx_第4页
第4页 / 共18页
操作系统页面置换算法代码文档格式.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

操作系统页面置换算法代码文档格式.docx

《操作系统页面置换算法代码文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统页面置换算法代码文档格式.docx(18页珍藏版)》请在冰豆网上搜索。

操作系统页面置换算法代码文档格式.docx

/*任选一指令访问点*/

a[i+1]=a[i]+1;

/*顺序执行一条指令*/

a[i+2]=(int)rand()%390;

/*执行前地址指令m’*/

a[i+3]=a[i+2]+1;

/*执行后地址指令*/

}

i++)/*将指令序列变换成页地址流*/

{

page[i]=a[i]/10;

offset[i]=a[i]%10;

for(i=4;

=32;

i++)/*用户内存工作区从4个页面到32个页面*/

printf("

%2dpageframes"

i);

FIFO(i);

LRU(i);

NUR(i);

\n"

);

return0;

}

voidFIFO(total_pf)/*FIFO(FirstinFirstout)ALGORITHM*/

inttotal_pf;

/*用户进程的内存页面数*/

inti;

pfc_type*p,*t;

initialize(total_pf);

/*初始化相关页面控制用数据结构*/

busypf_head=busypf_tail=NUL;

/*忙页面队列头,对列尾链接*/

i++)

if(pl[page[i]].pfn==INVALID)/*页面失效*/

diseffect+=1;

/*失效次数*/

if(freepf_head==NUL)/*无空闲页面*/

p=busypf_head->

next;

pl[busypf_head->

pn].pfn=INVALID;

/*释放忙页面队列中的第一个页面*/

freepf_head=busypf_head;

freepf_head->

next=NUL;

busypf_head=p;

p=freepf_head->

/*按方式调新页面入内存页面*/

pn=page[i];

pl[page[i]].pfn=freepf_head->

pfn;

if(busypf_tail==NUL)

busypf_head=busypf_tail=freepf_head;

else

busypf_tail->

next=freepf_head;

busypf_tail=freepf_head;

freepf_head=p;

FIFO:

%6.4F"

1-(float)diseffect/320);

voidLRU(total_pf)

inttotal_pf;

intmin,minj,i,j,present_time;

present_time=0;

diseffect++;

min=32767;

for(j=0;

j<

total_vp;

j++)

if(min>

pl[j].time&

&

pl[j].pfn!

=INVALID)

min=pl[j].time;

minj=j;

freepf_head=&

pfc[pl[minj].pfn];

pl[minj].pfn=INVALID;

pl[minj].time=-1;

pl[page[i]].time=present_time;

freepf_head=freepf_head->

present_time++;

LRU:

%6.4f"

voidNUR(total_pf)

inti,j,dp,cont_flag,old_dp;

pfc_type*t;

dp=0;

cont_flag=TRUE;

old_dp=dp;

while(cont_flag)

if(pl[dp].counter==0&

pl[dp].pfn!

cont_flag=FALSE;

dp++;

if(dp==total_vp)

if(dp==old_dp)

pl[j].counter=0;

pfc[pl[dp].pfn];

pl[dp].pfn=INVALID;

pl[page[i]].counter=1;

if(i%clear_period==0)

NUR:

voidinitialize(total_pf)/*初始化相关数据结构*/

diseffect=0;

pl[i].pn=i;

pl[i].pfn=INVALID;

/*置页面控制结构中的页号,页面为空*/

pl[i].counter=0;

pl[i].time=-1;

/*页面控制结构中的访问次数为0,时间为-1*/

for(i=1;

total_pf;

pfc[i-1].next=&

pfc[i];

pfc[i-1].pfn=i-1;

/*建立pfc[i-1]和pfc[i]之间的连接*/

pfc[total_pf-1].next=NUL;

pfc[total_pf-1].pfn=total_pf-1;

pfc[0];

/*页面队列的头指针为pfc[0]*/

模拟LRU页面置换算法

2010/02/0116:

33

#include<

#definePAGENUM6/*主存中允许的最大的页数*/

#defineMAXPAGENUM15/*一个程序包含的最大页数*/

/*定义栈的结构即置换器*/

typedefstructstack

intpage[PAGENUM];

inthead;

}PAGER;

/*定义一个置换器*/

PAGERpager;

/*栈的初始化*/

voidInitPager()

inttop=0;

inti,j,tmp;

intr;

randomize();

r=random(MAXPAGENUM);

pager.page[top++]=r;

while(top<

PAGENUM)

for(j=0;

top;

if(r==pager.page[j])

break;

if(j==top-1)

pager.head=PAGENUM-1;

/*栈中成员的移动,即移动页面的操作*/

voidMovingPage(intBegin)

for(i=Begin;

i<

PAGENUM-1;

i++)

pager.page[i]=pager.page[i+1];

/*出栈操作,即交换出页面的操作*/

voidPopPage(intp)

MovingPage(p);

pager.head=PAGENUM-2;

/*入栈操作,即换进新页面的操作*/

voidPushPage(intpage)

pager.head=PAGENUM-1;

pager.page[pager.head]=page;

/*打印主存中的页面*/

voidprintPager()

Thepagesinthepageris:

"

for(i=0;

i<

PAGENUM;

%d"

pager.page[i]);

/*处理页面的换进和换出*/

voidPagingProcess()

intrdm;

rdm=random(MAXPAGENUM);

if(rdm==pager.page[i])

printPager();

Thepage[%d]willbeaccessed\n"

rdm);

PopPage(i);

PushPage(rdm);

if(i==PAGENUM-1)

Thepage[0]willbepagedout\n"

PopPage(0);

Thepage[%d]willbepagedin\n"

clrscr();

3;

InitPager();

ROUND%d:

\n\n"

i+1);

PagingProcess();

getch();

页面调度算法(FIFO,LRU,OPT)

2006-11-2219:

29

iostream.h>

#include"

stdlib.h"

typedefintQElemType;

#defineok1

#defineoverflow0

#defineerror0

typedefstructQnode{

QElemTypedata;

structQnode*next;

}Qnode,*Queueptr;

typedefstruct{

Queueptrfront;

Queueptrrear;

}LinkQueue;

InitQueue(LinkQueue&

Q){

Q.front=Q.rear=(Queueptr)malloc(sizeof(Qnode));

if(!

Q.front)exit(overflow);

Q.front->

next=NULL;

returnok;

EnQueue(LinkQueue&

Q,QElemTypee){

Queueptrp;

p=(Queueptr)malloc(sizeof(Qnode));

p)exit(overflow);

p->

data=e;

next=NULL;

Q.rear->

next=p;

Q.rear=p;

DeQueue(LinkQueue&

Q,QElemType&

e){

if(Q.front==Q.rear)returnerror;

p=Q.front->

e=p->

data;

next=p->

if(Q.rear==p)Q.rear=Q.front;

free(p);

voidVisitQueue(LinkQueueQ){

Queueptrp;

while(p){cout<

<

p->

data<

"

;

p=p->

CompareQueue(LinkQueueQ,intpage){

while(p){

if(p->

data==page)returnok;

p=p->

returnerror;

voidFIFO(int*a,intn,intm){

LinkQueueQ;

intpage,t=0,flag=0,x;

InitQueue(Q);

for(inti=1;

i<

=m;

i++)

page=a[i];

t++;

if(t<

=n){EnQueue(Q,page);

cout<

a[i]<

else{

for(intj=1;

j<

=n;

j++)

if(CompareQueue(Q,page)){t--;

flag=1;

break;

if(flag==0){DeQueue(Q,x);

x<

wastakenout"

<

page<

wastakenin"

EnQueue(Q,page);

endl;

VisitQueue(Q);

:

flag=0;

cout<

缺页中断数为:

t="

t<

voidLRU(int*a,intn,intm){

intpage,t=0,flag=0,x,e;

t++;

else{for(intj=1;

DeQueue(Q,e);

EnQueue(Q,e);

intmax(int*t,intn){

intmax=t[1],s=1;

if(t[i]>

max){max=t[i];

s=i;

returns;

voidOPT(inta[21],intn,intm){

intw=0,flag=0;

int*t=newint[n+1];

w++;

if(w<

=n)cout<

;

else{

for(intq=1;

q<

q++)

if(a[i]==a[q]){w--;

if(flag==0)

for(intk=i;

k<

k++)

if(a[j]!

=a[k])t[j]++;

elsebreak;

a[max(t,n)]<

wastakenout"

wastakenin"

a[max(t,n)]=a[i];

for(ints=1;

s<

s++)

a[s]<

for(intr=1;

r<

r++)t[r]=0;

w="

w<

delete[]a;

main()

intm,n;

输入页面数:

cin>

>

m;

int*a=newint[m+1];

输入驻留集大小:

n;

inputthepages"

cin>

a[i];

TheresultofFIFO:

FIFO(a,n,m);

TheresultofLRU:

LRU(a,n,m);

TheresultofOPT:

OPT(a,n,m);

return0;

模拟FIFO页面调度算法处理缺页中断

2009-11-2816:

14

iostream.h>

math.h>

classList;

classitem

public:

friendclassList;

private:

item(intp=0,ints=0,intb=0,intl=0,intc=0){page=p;

sign=s;

block=b;

locate=l;

changesign=c;

next=NULL;

item*next;

intpage;

intsign;

intchangesign;

intblock;

intlocate;

classList

List(intp=0,ints=0,intb=0,intl=0,intc=0){list=newitem(p,s,b,l,c);

intcheck(intp);

intinsert(intp,ints,intb,intl);

void

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1