- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统实验报告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::输入进程的页数
cinn;
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:输入进程空闲块的数目
cinn;
M=n;//主存中空闲的块的数量
p=new int [n];
spare=new int[n];//定义空闲块的块号
head=0;
cout请输入n个块的对应空闲块的块号。endl;
for(i=0;in;i++)//输入空闲的块号
{
cink;//空闲的块号
spare[i]=k;
p[head]=-1;//初始的时候-1表示内存当前的块为空
head=(head+1)%M;
}
head=0;
for(int j=0;jMjN;j++,head=(head+1)%M)//将进程一部分请入内存修改相应的内容
{
p[head]=head;
a[head].flag=1;
a[head].number=spare[head];
}
ii) .模拟请求分页存储管理
step1:输入指令
s=new order;//定义一个结构体变量。
cout请输入操作:endl;
cins-p;
cout请输入页号:endl;//待修改
cins-i1;
cout请输入偏移量:endl;
cins-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
文档评论(0)