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