教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 文秘资料 >

操作系统实验报告3--虚拟存储

来源:网络收集 时间:2026-07-18
导读: 计师101 徐翼飞 1013012015 虚拟存储器管理 1.实验目的 模拟请求分页虚拟存储器管理技术中的硬件地址变换。缺页中断以及页式淘汰算法,处理缺页中断。 2.实验内容 1.模拟请求分页存储管理中的硬件地址变换的过程 2. 采用先进先出算法实现分页管理的缺页调度

计师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字,全部文档内容请下载后查看。喜欢就下载吧 ……

操作系统实验报告3--虚拟存储.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/1995625.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)