模拟实现页面地址重定位实习报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编号:
大学计算机学院
课程实验(设计)报告
专业(班):计算机科学与技术计科6班
学号:17
姓名:伟
课程名称:操作系统设计
任课教师:宋伟
2015年12 月22日
模拟实现页面地址重定位实习报告
一、实习容
1、编写和调试模拟实现页式地址重定位。
2、加深理解页式地址重定位技术在多道程序设计中的作用和意义。
二、实习题目
当进程在CPU上运行时,如指令中涉及逻辑地址时,操作系统自动根据页长得到页号和页偏移,把页偏移拷贝到物理地址寄存器,再根据页号,查页表,得到该页在存中的块号,把块号左移页长的位数,写到物理地址寄存器。
三、实验容:
1、设计页表结构;
2、设计地址重定位算法
3、有良好的人机对话界面
三、设计思想
数据结构
int Page_length; //页长
int Page_Num;//页数
int process;//进程大小
int Logical_Address;//逻辑地址
class PageTable//定义一个页表项
{
public:
int page_num; //页的编号
int pic_num; //对应的物理存块号
public:
PageTable(int thepage_num, int thepic_num)
{
page_num = thepage_num;
pic_num = thepic_num;
}
PageTable()
{
page_num = 0;
pic_num = 0;
}
};
class LogicalAdd//定义逻辑地址
{ public:
int page_num; //逻辑地址对应的页号
int page_add; //对应的页地址
public:
LogicalAdd(int a, int b)
{
page_num = a;
page_add = b;
}
LogicalAdd()
{
page_num = 0;
page_add = 0;
}
};
PageTable PT[N]; //定义一个页表
LogicalAdd LogAdd; //logical address
主要函数
(1)void input() //输入函数
(2)int init() //初始化函数
(3)int translate() //转换函数,逻辑地址转换为物理地址(4)void output( int res) //输出结果的函数
Main函数
int main()
{
int choice;
cout <<"-------模拟页面地址重定位--------"<< endl;
for (;;)
{
cout <<"1:输入信息\n2:查看页表\n3:查看物理地址\n4: 退出"<< endl;
cin >> choice;
switch (choice)
{
case 1:input();
if (init() == -1) return -1;
break;
case 2:
output(0);
break;
case 3:
output(translate());
break;
case 4:
cout <<"已经退出\n";
exit(0);
break;
}
}
return 1;
}
初始化部分
1. 由键盘输入进程大小,页面大小,所要查询的虚拟地址
2.利用随机函数将页面号与物理块号一一对应
转换算法部分
1根据相应转换算法把逻辑地址转换为物理地址。
2.自动构造页表
结果显示部分
根据相应提示输出页表或者输入的逻辑地址对应的物理地址
四、源代码
/*C++ Source File*/
/*开发环境为Microsoft Visual Studio 2015*/
#include
#include
#include
#include
using namespace std;
#define N 50 //最大值为50
int Page_length; //页长
int Page_Num;//页数
int process;//进程大小
int Logical_Address;//逻辑地址
class PageTable//定义一个页表项{
public:
int page_num; //页的编号
int pic_num; //对应的物理存块号public:
PageTable(int thepage_num, int thepic_num)
{
page_num = thepage_num;
pic_num = thepic_num;
}
PageTable()