页面置换算法(操作系统试验)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验4 页面置换算法(2学时)
一、实验目的
通过实验加强对虚拟存储管理中页面置换算法的理解和掌握。
二、实验内容
编写程序实现虚拟存储管理中OPT,FIFO,LRU页面置换算法。
三、实验要求
1、任意给出一组页面访问顺序(如页面走向是1、
2、5、7、5、7、1、4、
3、5、6、
4、3、2、1、
5、2)。
2、分配给该作业一定的物理块(如3块、4块等)。
3、利用OPT,FIFO,LRU页面置换算法模拟页面置换过程并计算其缺页率。
4、每访问一个页面均需给出内存中的内容(内存中的页面号),若有淘汰还需给出淘汰的页面号。
5、通过给出特殊的页面访问顺序,分配不同的物理块,利用FIFO 算法计算其缺页率,进一步理解Belady现象。
6、(附加)实现CLOCK置换算法,修改位可在确定页面号时直接任意给出。
代码部分:
#include
#include
#include
void rand(int n,int p[])//这函数是产生n个1~10的随机数放到p[]数组里面
{
int START=1;
int END=10;
int v;
int i;
int a;
srand(time(NULL));
for(i=0; i {v=rand()%(END-START+1)+START; p[i]=v; cout< } } struct Pro { int num,time; //num存放具体的内容,time在不同算法里面有不同的意义 }; //它们是物理块和页面的数据结构 int Input(int m,int N,Pro *p,Pro *page)//完成p[]数组和page[]的初始化工作{ //p[]数组是存放页面的空间,m是页面的长度 //page[]是可以使用的物理块,N是物理块的大小 cout< int *p2=new int[m]; rand(m,p2); for(int i=0;i { p[i].num=p2[i]; p[i].time=0; } for(i=0;i { page[i].num=0; page[i].time=N+2-i; } return m; } int Search(int e,Pro *page,int N)//算法里面都要用到它。 {//它是找e页是否在page物理块中,N是物理块的大小 for(int i=0;i if(e==page[i].num) return i;//如果找到,就返回在物理块中的位置给Search return -1;//找不到,就返回-1 } int Max(Pro *page,int N)//LRU算法用到的 {//找出在page块中,time最大的值和位置,同时位置返回 //time最大,就代表了最久没被使用的数 int e=page[0].time,i=0; int k=0; while(i { if(e { k=i; } i++; } return k; } int Compfu(Pro *page,int i,int t,Pro p[],int m)//OPT算法用到的 { //找出如果page[t]要等于p,并且zai p[i]~p[m]这个区间内,走的次数,最大的数 int count=0;//count是保存走的步数 for(int j=i;j { if(page[t].num==p[j].num )break;//如果相等,跳出循环