操作系统存储管理实验.doc
文本预览下载声明
***大学计算机科学系
实 验 报 告 书
实验题目: C++模拟存储管理及分区分配实现
课程名称: 操作系统
实验目的:
1、通过编写和调试存储管理的模拟程序以加深对存储管理方案的理解。熟悉虚存管理的各种页面淘汰算法?
2、通过编写和调试地址转换过程的模拟程序以加强对地址转换过程的了解。 ?模拟?FIFO、LRU、OPT算法设计一个请求页式存储管理方案。
设计一个可变式分区分配的存储管理方案。并模拟实现分区的分配和回收过程。 下面种算法:
首次适应算法 最佳适应算法
算法设计与流程
程序设计流程图如下:
页面置换算法流程图:
1、页面置换算法程序设计如下:
#includeiostream.h
#define M 40
#define N 10//可用内存页面
struct Pro//页面结构体
{
int num;
int time;
};
int Input(int m, Pro p[])
{
cout请输入实际页数:;
do
{
cinm;
if(mM) cout数目太多,请重试endl;
else break;
}while(1);
coutendl请输入各页面号endl;
for(int i=0;im;i++)
{
cinp[i].num;
p[i].time=0;
}
return m;
}
void Print(Pro *page, int n)//打印当前的页面
{
for(int i=0; in; i++)
coutpage[i].num ;
coutendl;
}
int Search(int e, Pro *page, int n)//在内存页面中查找
{
for(int i=0; in; i++)
if(e==page[i].num)
return i;
return -1;
}
int Max(Pro *page, int n)
{
int e=page[0].time, i=0;
while(in) //找出离现在时间最长的页面
{
if(e page[i].time)
e=page[i].time;
i++;
}
for(i=0; in; i++)
if(e==page[i].time)
return i;
return -1;
}
int Compfu(Pro *page, int i, int t, Pro p[])
{
int count=0;
for(int j=i; jM; j++)
{
if(page[t].num==p[j].num ) break;
else count++;
}
return count;
}
int main()
{
int nu;
cout可用内存页面数:endl;
cinnu;
if(nuN)
{
cout页面过大endl;
return 0;
}
Pro p[M];
Pro page[N];
char c;
int m=0/*实际页数*/, t=0/*页面循环*/;
float n=0; //缺页次数
m = Input(m, p);
do{
for(int i=0; inu; i++)//初始化页面基本情况
{
page[i].num=0;
page[i].time=2-i;
}
/*int j=0,count=1;
page[0].num=p[0].num;
int i=1,k=1;
while(iN)
{
int flag=1;
for(j=0;ji;j++)
if(p[k].num==page[i].num)
{n++;flag=0;break;}
if(flag==1){page[i].num=p[k].num;i++;}
count++;k++;
}*/
i=0;
coutf:FIFO页面置换endl;
coutl:LRU页面置换endl;
couto:OPT页面置换endl;
cout按其它键结束endl;
cinc;
if(c==f)//FIFO页面置换
{
n=0;
cout页面置换情况: endl;
while(im)
{
if(Search(p[i].num, page, nu)=0) i++;//找到相同的页面
else
{
if(t==nu) t=0;
显示全部