模拟实现页面地址重定位实习报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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()

相关文档
最新文档