当前位置:文档之家› 实验操作系统存储管理实验报告

实验操作系统存储管理实验报告

实验四操作系统存储管理实验报告一、实验目的存储管理的主要功能之一是合理地分配空间。

请求页式管理是一种常用的虚拟存储管理技术。

本实验的目的是通过请求页式管理中页面置换算法模拟设计,了解虚拟存储技术的特点,掌握请求页式存储管理的页面置换算法。

二、实验内容(1)通过计算不同算法的命中率比较算法的优劣。

同时也考虑了用户内存容量对命中率的影响。

页面失效次数为每次访问相应指令时,该指令所对应的页不在内存中的次数。

在本实验中,假定页面大小为1k,用户虚存容量为32k,用户内存容量为4页到32页。

(2)produce_addstream通过随机数产生一个指令序列,共320条指令。

A、指令的地址按下述原则生成:1)50%的指令是顺序执行的2)25%的指令是均匀分布在前地址部分3)25%的指令是均匀分布在后地址部分B、具体的实施方法是:1)在[0,319]的指令地址之间随机选取一起点m;2)顺序执行一条指令,即执行地址为m+1的指令;3)在前地址[0,m+1]中随机选取一条指令并执行,该指令的地址为m’;4)顺序执行一条指令,地址为m’+1的指令5)在后地址[m’+2,319]中随机选取一条指令并执行;6)重复上述步骤1)~5),直到执行320次指令C、将指令序列变换称为页地址流在用户虚存中,按每k存放10条指令排列虚存地址,即320条指令在虚存中的存放方式为:第0条~第9条指令为第0页<对应虚存地址为[0,9]);第10条~第19条指令为第1页<对应虚存地址为[10,19]);。

第310条~第319条指令为第31页<对应虚存地址为[310,319]);按以上方式,用户指令可组成32页。

(3)计算并输出下属算法在不同内存容量下的命中率。

1)先进先出的算法<FIFO);2)最近最少使用算法<LRU);3)最佳淘汰算法<OPT);4)最少访问页面算法<LFR);其中3)和4)为选择内容三、系统框图五运行结果首先打印出产生的指令信息,第一列为指令序列号,第二列为指令地址,第三列为指令所在的虚页号选择FIFO调度算法,并且内存从3也开始逐渐增加到32页,打印出缺页次数缺页率,命中率选择LRU调度算法,并且内存从3也开始逐渐增加到32页,打印出缺页次数缺页率,命中率选择OPT调度算法,并且内存从3也开始逐渐增加到32页,打印出缺页次数缺页率,命中率六实验程序产生指令流文件produce_addstream.h #ifndef PRODUCE_ADDSTREAM_H #define PRODUCE_ADDSTREAM_H #include<stdio.h>#include<stdlib.h>#include<time.h>#include<iomanip.h>#include<vector>using namespace std。

#define random(x> (rand(>%x>#define MAX_LENGTH 320struct produce{int num。

//指令序号int zhiling。

//指令地址int virtualpage。

//指令虚页号produce *next。

}。

struct produce*creatlist(>。

void insert(struct produce *first,struct produce *s>。

//插入一个节点<尾插法)void print(struct produce *first>。

//打印函数int max(vector<vector<int> >,int >。

struct produce*creatlist(>{srand((int>time(0>>。

struct produce*first=new produce。

first->next=NULL。

int m=0,m1=0。

/*int yanzheng[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1}。

for (int i=0。

i<(MAX_LENGTH/4>。

i++>{struct produce *s0。

s0=new produce。

s0->num=i*4+0。

s0->zhiling=yanzheng[i*4+0]。

s0->virtualpage=s0->zhiling。

insert(first,s0>。

struct produce *s1。

s1=new produce。

s1->num=i*4+1。

s1->zhiling=yanzheng[i*4+1]。

s1->virtualpage=s1->zhiling。

insert(first,s1>。

struct produce *s2。

s2=new produce。

s2->num=i*4+2。

s2->zhiling=yanzheng[i*4+2]。

s2->virtualpage=s2->zhiling。

insert(first,s2>。

struct produce *s3。

s3=new produce。

s3->num=i*4+3。

s3->zhiling=yanzheng[i*4+3]。

s3->virtualpage=s3->zhiling。

insert(first,s3>。

}//*///*for (int i=0。

i<(MAX_LENGTH/4>。

i++>{struct produce *s0。

s0=new produce。

m=random(MAX_LENGTH>。

s0->num=i*4+0。

s0->zhiling=m+1。

s0->virtualpage=s0->zhiling/10。

insert(first,s0>。

m1=random(m+1>。

struct produce *s1。

s1=new produce。

s1->num=i*4+1。

s1->zhiling=m1。

s1->virtualpage=s1->zhiling/10。

insert(first,s1>。

struct produce *s2。

s2=new produce。

s2->num=i*4+2。

s2->zhiling=m1+1。

s2->virtualpage=s2->zhiling/10。

insert(first,s2>。

struct produce *s3。

s3=new produce。

s3->num=i*4+3。

s3->zhiling=random(MAX_LENGTH-m1-2>+m1+2。

s3->virtualpage=s3->zhiling/10。

insert(first,s3>。

}//*/return first。

}void insert(struct produce *first,struct produce *s>{struct produce *r=first。

struct produce *p。

while(r>{p=r。

r=r->next。

}p->next=s。

p=s。

p->next=NULL。

}void print(struct produce *first> //打印函数{struct produce *p。

p =first->next。

cout<<"随机产生的指令的信息如下"<<endl。

cout<<"指令序号 "<<"指令地址 "<<"指令虚页号"<<endl。

while (p>{cout<<p->num<<'\t'<<p->zhiling<<setw(14><<p->virtualpage<<endl。

p=p->next。

}}int max(vector<vector<int> > page,int Maxpage>{int a=0,position=0。

for (int i=0。

i<Maxpage。

i++>{if (page[i][1]>a>{a=page[i][1]。

position=i。

}}return position。

}#endif先来先出调度算法:fifo.h#ifndef FIFO_H#define FIFO_Hvoid fifo(struct produce *first,int Maxpage>{vector<int> page(Maxpage>。

//for (int i=0。

i<Maxpage。

i++>page[i]=-1。

int rear=0。

//定义一个变量,指向要被替换的位置int pages。

//定义变量保存当前指令的所在的地址int count1=0。

//int count2=0。

//缺页次数int find=1。

struct produce *p=first->next。

while (p>{pages=p->virtualpage。

for(int i=0。

i<Maxpage。

i++>{if (page[i]==-1||count1<Maxpage>{page[i]=pages。

count1 ++。

count2 ++。

find =1。

break。

}else if (page[i]==pages>{find =1。

break。

}find=0。

}if (find==0>{page[rear]=pages。

rear ++。

rear=rear%Maxpage。

count2 ++。

}p=p->next。

}cout<<"FIFO调度算法缺页次数缺页率命中率"<<endl。

cout<<count2<<setw(25><<double(count2>/MAX_LENGTH<<setw(10><<1 -double(count2>/MAX_LENGTH<<endl。

相关主题