模拟实现页面地址重定位实习报告文档格式.docx
- 文档编号:17605226
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:12
- 大小:63.46KB
模拟实现页面地址重定位实习报告文档格式.docx
《模拟实现页面地址重定位实习报告文档格式.docx》由会员分享,可在线阅读,更多相关《模拟实现页面地址重定位实习报告文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
计算机科学与技术计科6班
学号:
17
姓名:
伟
课程名称:
操作系统设计
任课教师:
宋伟
2015年12月22日
一、实习容
1、编写和调试模拟实现页式地址重定位。
2、加深理解页式地址重定位技术在多道程序设计中的作用和意义。
二、实习题目
当进程在CPU上运行时,如指令中涉及逻辑地址时,操作系统自动根据页长得到页号和页偏移,把页偏移拷贝到物理地址寄存器,再根据页号,查页表,得到该页在存中的块号,把块号左移页长的位数,写到物理地址寄存器。
三、实验容:
1、设计页表结构;
2、设计地址重定位算法
3、有良好的人机对话界面
三、设计思想
数据结构
intPage_length;
//页长
intPage_Num;
//页数
intprocess;
//进程大小
intLogical_Address;
//逻辑地址
classPageTable//定义一个页表项
{
public:
intpage_num;
//页的编号
intpic_num;
//对应的物理存块号
PageTable(intthepage_num,intthepic_num)
{
page_num=thepage_num;
pic_num=thepic_num;
}
PageTable()
page_num=0;
pic_num=0;
};
classLogicalAdd//定义逻辑地址
{public:
//逻辑地址对应的页号
intpage_add;
//对应的页地址
public:
LogicalAdd(inta,intb)
page_num=a;
page_add=b;
LogicalAdd()
page_add=0;
PageTablePT[N];
//定义一个页表
LogicalAddLogAdd;
//logicaladdress
主要函数
(1)voidinput()//输入函数
(2)intinit()//初始化函数
(3)inttranslate()//转换函数,逻辑地址转换为物理地址
(4)voidoutput(intres)//输出结果的函数
Main函数
intmain()
intchoice;
cout<
<
"
-------模拟页面地址重定位--------"
<
endl;
for(;
;
)
cout<
1:
输入信息\n2:
查看页表\n3:
查看物理地址\n4:
退出"
cin>
>
choice;
switch(choice)
{
case1:
input();
if(init()==-1)return-1;
break;
case2:
output(0);
case3:
output(translate());
case4:
cout<
已经退出\n"
exit(0);
}
return1;
}
初始化部分
1.由键盘输入进程大小,页面大小,所要查询的虚拟地址
2.利用随机函数将页面号与物理块号一一对应
转换算法部分
1根据相应转换算法把逻辑地址转换为物理地址。
2.自动构造页表
结果显示部分
根据相应提示输出页表或者输入的逻辑地址对应的物理地址
四、源代码
/*C++SourceFile*/
/*开发环境为MicrosoftVisualStudio2015*/
#include<
iostream>
cstdlib>
string>
time.h>
usingnamespacestd;
#defineN50//最大值为50
//logicaladdress
voidinput()
请输入进程大小"
cin>
process;
输入页长\n"
Page_length;
输入逻辑地址\n"
Logical_Address;
intinit()//初始化函数
{
srand(time(0));
//伪随机函数,实现存随机装配
inti,temp;
intsum=1;
Page_Num=process/Page_length+1;
//计算总页数
/*cout<
"
num="
Page_Num<
endl;
*/
PT[0].pic_num=1;
for(i=0;
i<
Page_Num;
i++)
PT[i].page_num=i;
temp=rand()%3+1;
sum=sum+temp;
PT[i].pic_num+=sum;
//所对应的物理存块号
/*cout<
PT[i].pic_num<
LogAdd.page_num=Logical_Address/Page_length;
if(LogAdd.page_num/Page_Num>
=Page_Num)
所查询的逻辑地址不在该页,初始化失败"
return-1;
inttranslate()//转换函数,逻辑地址转换为物理地址
inti=0;
intres;
while(i<
Page_Num)
if(PT[i].page_num==LogAdd.page_num)
res=PT[i].pic_num;
}//找到某个逻辑地址对应的物理块号
elsei++;
if(i>
N)
returnres*Page_length+LogAdd.page_add;
voidoutput(intres)
if(res==0)
构造的页表如下:
页号\t块号"
for(inti=0;
PT[i].page_num<
\t"
PT[i].pic_num<
elsecout<
物理地址为:
res<
五、运行实例
用户提示界面(如图1)
图1
首先输入1,进行手动初始化
图2
再输入2,查看页表信息
图3
输入3,查看物理地址
图4
六、心得与体会
通过本次实验,我对页面地址重定位有了较为浅显的认知,对于虚拟页面和物理块之间的联系有了更深的理解,从而也再次学习了存装入与重定向的相关知识,受益匪浅,希望在以后的学习中再接再厉。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 实现 页面 地址 定位 实习 报告