太原工业学院计算机工程系
操作系统实验报告(04)
实验名称
虚拟存储器的模拟实现
实验日期
成绩
姓名
班级学号
实
验
目
的
理解虚拟存储器概念。
掌握分页式存储管理地址转换和缺页中断。
实
验
环
境
PC机++vc++
实
验
内
容
模拟分页式存储管理中硬件的地址转换和产生缺页中断。
用先进先出页面调度算法处理缺页中断。
先进先出页面调度算法原理:
优先淘汰最早进入内存的页面,亦即在内存中驻留时间最久的页面。该算法实现简单,只需把调入内存的页面根据先后次序链接成队列,设置一个指针总指向最早的页面。但该算法与进程实际运行时的规律不适应,因为在进程中,有的页面经常被访问。
实
验
步
骤
程序源码:
#include<iostream>
using namespace std;
#include<>
const int Nsize=10;
const int Psize=12;
typedef struct page
{
int yemian;//页面号
int biaoji;//被访问标记
}page;//页面逻辑结构
page block[Nsize];
//page block[Psize];
void Init(int QString[],int Nsize)
{//初始化内存单元,缓冲区
for(int i=0;i<Nsize;i++)
{
block[i].yemian=-1;//找到内存空间
block[i].biaoji=0;
}
for( i=0;i<Psize;i++)
{
block[i].yemian=QString[i];
block[i].biaoji=0;
}
}
int findSpace(int Nsize)
{//查找是否有空闲内存
for(int i=0;i<Nsize;i++)
{
if(block[i].yemian==-1)
{
return i;//找到空闲内存, 返回位置
} }
return -1;
}
int findExist(int curpage,int Nsize)
{//查找内存中是否有该页面
for(int i=0;i<Nsize;i++)
{
if(block[i].yemian==block[curpage].yemian)
{
return i;//找到页面返回
}}
return -1;
}
int findReplace(int Nsize)
{//查找置换的页面
int a=0;
for(int i=0;i<Nsize;i++)
{
if(block[i].biaoji>=block[a].biaoji)
{
a=i;//找到应置换的页面,返回位置
}
}
return a;
}
void display(int Nsize)
{//显示
for(int i=0;i<Nsize;i++)
{
if(block[i].yemian!=-1)
{
cout<<block[i].yemian<<" ";//飞空闲内存
}}
cout<<endl;
}
//FIFO置换算法
void FIFO(int Nsize)
{
int exist,space,action;
float score;
for(int i=0;i<Psize;i++)
{
exist=findExist(i,Nsize);
if(exist!=-1)//内存中有此页面
{
cout<<"不缺页"<<endl;
score+=1;//统计不缺页次数
}
else
{
space=findSpace(Nsize);
if(space!=-1)//找到空闲内存
{
block[space]=block[i];
display(Nsize);
}
else
{
action=findReplace(Nsize);//找到应置换的页面
block[action]=block[i];
display(Nsize);
}
}
for(int j=0;j<Nsize;j++)
{
block[j].biaoji++;//所有的页面biaoji++
}
}
cout<<"缺页次数为:"<<20-score<<endl;
}
v
微波工程手册带状传输线 来自淘豆网m.daumloan.com转载请标明出处.