操作系统实验报告3--虚拟存储
计师101 徐翼飞 1013012015
虚拟存储器管理
1.实验目的
模拟请求分页虚拟存储器管理技术中的硬件地址变换。缺页中断以及页式淘汰算法,处理缺页中断。
2.实验内容
1.模拟请求分页存储管理中的硬件地址变换的过程
2. 采用先进先出算法实现分页管理的缺页调度
3.1 数据结构设计
1)创建结构体page为进程的页表
struct page
{
int i;//页号
int flag;//有效位
int number;//主存块号
long address;//外存地址
int change;//修改位
};
2)定义结构体order为存储指令
struct order
{
char p[10];
int i1;//页号
int offset;//偏移量
};、
3)定义数组p用来存放空闲进程块的信息
int *p=new int [n];
4)定义类process
class process
{
private:
page *a; int M;//数组的长度 int *p; int N;//页表的长度 int head; int *spare;
public:
process()//构造函数 { } ~process()//析构函数 { } void operate(order *s)//分页存储管理
{ }
int FIFO(int i)//先进先出算法
{ }
void show()//输出显示
{ }
}
3.3 算法设计
i)构造函数对所有变量初始化
step1::输入进程的页数
cin>>n; a=new page [n];//定义为该进程存储的页表 N=n;//页表的长度 step2: 初始化页表项 a[i].i=i; a[i].flag=0; a[i].number=-1; a[i].address=11+i; a[i].change=0; step3:输入进程空闲块的数目 cin>>n; M=n;//主存中空闲的块的数量
p=new int [n]; spare=new int[n];//定义空闲块的块号 head=0; cout<<"请输入"<<n<<"个块的对应空闲块的块号。"<<endl; for(i=0;i<n;i++)//输入空闲的块号 { } head=0; for(int j=0;j<M&&j<N;j++,head=(head+1)%M)//将进程一部分cin>>k;//空闲的块号 spare[i]=k; p[head]=-1;//初始的时候-1表示内存当前的块为空 head=(head+1)%M; 请入内存修改相应的内容
{ } p[head]=head; a[head].flag=1; a[head].number=spare[head];
ii) .模拟请求分页存储管理
step1:输入指令
s=new order;//定义一个结构体变量。
cout<<"请输入操作:"<<endl; cin>>s->p; cout<<"请输入页号:"<<endl;//待修改 cin>>s->i1; cout<<"请输入偏移量:"<<endl; cin>>s->offset;
Step2:调用模拟请求分页存储管理函数
Step1:看a[s->i1].flag是否为1,为1说明要操作的块在内存之中在判断操作是否为存操作,为存操作的话则置修改位为1.
if(a[s->i1].flag==1)
{ cout<<"主存物理地址为:
"<<(a[s->i1].number*64+s->offset)<<endl;
} if(strcmp(s->p,"存")==0) a[s->i1].change=1;
Step2: 如果当前要操作的块不在内存之中则发生缺页调用先进先出算法来进行调度
else
{ cout<<"发生了缺页中断,运行中断处理程序。"<<endl; if(FIFO(s->i1)==1)
} operate(s); else cout<<"出错。"<<endl;
iii) 先进先出算法实现分页管理的缺页调度
step1: 看看内存中没无空闲的块,有的话将块请入内存并且设置相应的参数。
if(p[head]==-1)//head指针指向空闲的块将其请入内存
{ p[head]=i;//将要操作的进程块的块号存入存放空闲进程块的表
} a[i].flag=1;//有效位为1 a[i].number=spare[head];//主存块表号修改 head=(head+1)%M; return 1;//返回成功。
step2:内存没有空闲的块则将内存最先进入内存的块请出到兑换区再将进程请入到内存中。并且修改相应的信息。 else
{ a[p[head]].flag=0;请出兑换区 a[p[head]].number=-1;
} if(a[p[head]].change==1) cout<<"将本页面写入交换区"<<endl; a[p[head]].change=0; p[head]=i;//请入内存。 a[i].flag=1; a[i].number=spare[head]; cout<<"装入"<<endl; head=(head+1)%M; return 1;//返回成功。
4.运行结果
源程序:
#include<iostream>
#include<cstdlib>
#include<iomanip>
using namespace std;
struct page
{
}; int i; int flag; int number; long address; int change;
struct order
{
}; char p[10]; int i1;//页号 int offset;//偏移量
class process
{
private:
page *a;
int M;//数组的长度
int *p; int N;//页表的长度 int head; int *spare;
public:
process()
{ int n; int k; cout<<"请输入进程的页数"<<endl; cin>>n; a=new page [n]; N=n; for(int i=0;i<n;i++)
} a[i].i=i; a[i].flag=0; a[i].number=-1; a[i].address=11+i; a[i].change=0; cout<<"请输入进程空闲块的数目:"<<endl; cin>>n; M=n;//主存中空闲的块的数量 p=new int [n]; spare=new int[n]; head=0; cout<<"请输入"<<n<<"个块的对应空闲块的块号。"<<endl; for(i=0;i<n;i++)//输入空闲的块号 { } cin>>k; spare[i]=k; p[head]=-1; head=(head+1)%M; head=0; for(int j=0;j<M&&j<N;j++,head=(head+1)%M) { p[head]=head; a[head].flag=1; a[head].number=spare[head]; } } ~process() { delete a; delete p; delete spare; } void operate(order *s) { if(a[s->i1].flag==1) { cout<<"主存物理地址为:"<<(a[s->i1].number*64+s->offset)<<endl; if(strcmp(s->p,"存")==0) a[s->i1].change=1; } else
} cout<<"发生了缺页中断,运行中断处理程序。"<<endl; if(FIFO(s->i1)==1) operate(s); else cout<<"出错。"<<endl; } int FIFO(int i) { } if(p[head]==-1) { p[head]=i; a[i].flag=1; a[i].number=spare[head]; head=(head+1)%M; return 1; } else { } a[p[head]].flag=0; a[p[head]].number=-1; if(a[p[head]].change==1) cout<<"将本页面写入交换区"<<endl; a[p[head]].change=0; p[head]=i; a[i].flag=1; a[i].number=spare[head]; cout<<"装入"<<endl; head=(head+1)%M; return 1; return 0; void show() { cout<<"进程的页表:"<<endl; cout<<"----- …… 此处隐藏:2531字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [文秘资料]班长职务辞职报告
- [文秘资料]完美的辞职报告
- [文秘资料]经典的员工辞职报告
- [文秘资料]医院口腔医生辞职报告
- [文秘资料]总经理辞职报告范文四篇
- [文秘资料]超市职员个人辞职报告
- [文秘资料]村妇联主任的辞职报告
- [文秘资料]辞职报告书格式
- [文秘资料]酒店辞职报告简单范文
- [文秘资料]联通的辞职报告
- [文秘资料]2017最新私企员工辞职报告范文
- [文秘资料]2019年度医院基层党组织书记抓党建述职
- [文秘资料]工作时间长辞职报告
- [文秘资料]辞职报告怎么写出来
- [文秘资料]个人能力原因辞职报告
- [文秘资料]网络工程师辞职报告
- [文秘资料]项目部辞职报告
- [文秘资料]缝纫工辞职报告怎么写
- [文秘资料]XXX州委书记述职报告
- [文秘资料]抓基层党建工作述职报告
- (王虎应老师讲课记录)六爻理象思维
- 八个常见投影机故障排除法
- 质量专业综合知识(中级)第一章质量管理
- 煤矿班组建设实施意见
- 我国快餐业与肯德基经营模式的比较与分
- 汽车保险杠模具标准化模架技术工艺研究
- 汽车二级维护作业团体赛比赛规程
- 装卸搬运工安全操作规程
- 高效的工作方法-刘铁
- 依据《生产安全事故报告和调查处理条例
- 2015专业PS夜景亮化效果图制作教程
- 企业劳动定额定员浅析
- 中枢神经系统医学影像学本科五年制第五
- 长城汽车参观探营第三站:研发试验中心
- 小升初语文专项训练
- 建筑工程质量检测资质分类与等级标准
- 周燕珉-我国养老社区的发展现状与规划
- 《生命里最后的读书会》读后感
- 实验室管理评审报告
- CCNA思科网院教程精华之网络基础知识




