操作系统-页式地址重定位模拟实验报告.doc
《操作系统-页式地址重定位模拟实验报告.doc》由会员分享,可在线阅读,更多相关《操作系统-页式地址重定位模拟实验报告.doc(6页珍藏版)》请在冰豆网上搜索。
操作系统-页式地址重定位模拟实验报告
一、实验目的:
1、用高级语言编写和调试模拟实现页式地址重定位。
2、加深理解页式地址重定位技术在多道程序设计中的作用和意义。
二、实验原理:
当进程在CPU上运行时,如指令中涉及逻辑地址时,操作系统自动根据页长得到页号和页内偏移,把页内偏移拷贝到物理地址寄存器,再根据页号,查页表,得到该页在内存中的块号,把块号左移页长的位数,写到物理地址寄存器。
三、实验内容:
1、设计页表结构
2、设计地址重定位算法
3、有良好的人机对话界面
四、存储结构
typedefstructPageTable
{
intpage_num;
intpic_num;
}PageTable;
PageTablePT[N];
typedefstructLogicalAdd
{
intpage_num;
intpage_add;
}LogicalAdd;
LogicalAddLA;
intPage_length;//页长
intPage_num;//页数
intProcess;//进程大小
intAddress;//逻辑地址
五、函数列表
Input();//输入
Init();//初始化
Translate();//生成物理地址
Output();//输出
Main();//主函数
六、运行结果截图:
(1)输入
(2)查看页表
(3)查看物理地址
(4)退出
七、源程序代码:
#include
#include
#include
#include
usingnamespacestd;
#defineN50
typedefstructPageTable
{
intpage_num;
intpic_num;
}PageTable;
PageTablePT[N];
typedefstructLogicalAdd
{
intpage_num;
intpage_add;
}LogicalAdd;
LogicalAddLA;
intPage_length;//页长
intPage_num;//页数
intProcess;//进程大小
intAddress;//逻辑地址
voidInput()
{
cout<<"输入进程长度:
";
cin>>Process;
cout<<"输入页长:
";
cin>>Page_length;
cout<<"请输入逻辑地址:
";
cin>>Address;
}
intInit()
{
srand(time(0));
inti,temp;
intsum=1;
Page_num=Process/Page_length+1;
//cout<<"num="< PT[0].pic_num=1;
for(i=0;i {
PT[i].page_num=i;
temp=rand()%3+1;
sum+=temp;
PT[i].pic_num+=sum;
//cout< }
LA.page_num=Address/Page_length;
if(LA.page_num>=Page_num){
cout<<"所查逻辑地址不在该页内,初始化失败!
"< return-1;
}
LA.page_add=Address%Page_length;
}
intTranslate()
{
inti=0;
intres;
while(i {
if(PT[i].page_num==LA.page_num){
res=PT[i].pic_num;
break;
}
elsei++;
}
if(i>=N)
return-1;
returnres*Page_length+LA.page_add;
}
voidOutput(intres)
{
if(res==0)
{
cout<<"构造的页表如下:
"< cout<<"页号\t块号"< for(inti=0;i {
cout< cout< }
}
else
cout<<"物理地址为:
"<}
intmain()
{
intk;
cout<<"\t*************欢迎使用页式地址重定位模拟系统*****************\n";
for(;;)
{
cout<<"\t---请输入以下选项---"< cout<<"1.输入信息;"< cin>>k;
switch(k)
{
case1:
Input();
if(Init()==-1)return-1;
break;
case2:
Output(0);
break;
case3:
Output(Translate());
break;
case4:
cout<<"O(∩_∩)O谢谢使用,再见!
"< exit(0);
break;
}
}
return1;
}
八、小结
通过本次实验,加深了我对于分页式存储管理方式的理解,以及编程实现了页式地址重定位模拟。
在编程过程中所遇到的困难不多,为了简化模拟过程,我使用了十进制数来表示各数据(单位字节)。
页表的构建上,我是根据输入的页长和进程空间的大小来动态分配空间和页表的表长的,块号的生成用了累加随机数的方式。