1、模拟实现页面地址重定位实习报告编号: 实验一二三四五六七八九十总评教师签名成绩大学计算机学院课程实验(设计)报告专业(班): 计算机科学与技术 计科6班 学 号: 2013301500217 姓 名: 伟 课程名称: 操作系统设计 任课教师: 宋伟 2015年12 月22日模拟实现页面地址重定位实习报告一、 实习容1、 编写和调试模拟实现页式地址重定位。2、 加深理解页式地址重定位技术在多道程序设计中的作用和意义。二、 实习题目当进程在CPU上运行时,如指令中涉及逻辑地址时,操作系统自动根据页长得到页号和页偏移,把页偏移拷贝到物理地址寄存器,再根据页号,查页表,得到该页在存中的块号,把块号左移
2、页长的位数,写到物理地址寄存器。三、实验容: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_nu
3、m = 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 PTN; /定义一个页表LogicalAdd LogAdd; /logical address 主要
4、函数(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: 退出 choice; switch (choice) case 1:input(); if (init() = -1) return -1; break; case 2: output(0);
5、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#inc
6、ludeusing namespace std;#define N 50 /最大值为50int 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; PageTab
7、le() 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 PTN; /定义一个页表LogicalAdd LogAdd; /logical address void input() cout 请输入进程大小
8、 process; cout Page_length; cout Logical_Address;int init() /初始化函数 srand(time(0); /伪随机函数,实现存随机装配 int i, temp; int sum = 1; Page_Num = process / Page_length + 1; /计算总页数 /*coutnum=Page_Numendl;*/ PT0.pic_num = 1; for (i = 0; i Page_Num; i+) PTi.page_num = i; temp = rand() % 3 + 1; sum = sum + temp; PT
9、i.pic_num += sum; /所对应的物理存块号 /*coutPTi.pic_num= Page_Num) cout 所查询的逻辑地址不在该页,初始化失败 endl; return -1; int translate() /转换函数,逻辑地址转换为物理地址 int i = 0; int res; while (i N) return -1; return res*Page_length + LogAdd.page_add;void output( int res) if (res = 0) cout 构造的页表如下: endl; cout 页号t 块号 endl; for (int i
10、 = 0; i Page_Num; i+) cout PTi.page_num t; cout PTi.pic_num endl; else cout 物理地址为: res endl;int main() int choice; cout -模拟页面地址重定位- endl; for (;) cout 1:输入信息n2:查看页表n3:查看物理地址n4: 退出 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 ) 图1首先输入1,进行手动初始化 图2 再输入2,查看页表信息 图3 输入3,查看物理地址 图4六、 心得与体会 通过本次实验,我对页面地址重定位有了较为浅显的认知,对于虚拟页面和物理块之间的联系有了更深的理解,从而也再次学习了存装入与重定向的相关知识,受益匪浅,希望在以后的学习中再接再厉。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1