您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 电子商务 > 模拟实现页面地址重定位实习报告
1编号:实验一二三四五六七八九十总评教师签名成绩武汉大学计算机学院课程实验(设计)报告专业(班):计算机科学与技术计科6班学号:2013301500217姓名:张伟课程名称:操作系统设计任课教师:宋伟2015年12月22日2模拟实现页面地址重定位实习报告一、实习内容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){3page_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-------模拟页面地址重定位--------endl;for(;;){cout1:输入信息\n2:查看页表\n3:查看物理地址\n4:退出endl;cinchoice;switch(choice){case1:input();if(init()==-1)return-1;break;case2:output(0);break;case3:output(translate());break;case4:cout已经退出\n;exit(0);break;}}4return1;}初始化部分1.由键盘输入进程大小,页面大小,所要查询的虚拟地址2.利用随机函数将页面号与物理块号一一对应转换算法部分1根据相应转换算法把逻辑地址转换为物理地址。2.自动构造页表结果显示部分根据相应提示输出页表或者输入的逻辑地址对应的物理地址四、源代码/*C++SourceFile*//*开发环境为MicrosoftVisualStudio2015*/#includeiostream#includecstdlib#includestring#includetime.husingnamespacestd;#defineN50//最大值为50intPage_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;}5};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;//logicaladdressvoidinput(){cout请输入进程大小endl;cinprocess;cout输入页长\n;cinPage_length;cout输入逻辑地址\n;cinLogical_Address;}intinit()//初始化函数{srand(time(0));//伪随机函数,实现内存随机装配inti,temp;intsum=1;Page_Num=process/Page_length+1;//计算总页数/*coutnum=Page_Numendl;*/PT[0].pic_num=1;for(i=0;iPage_Num;i++){PT[i].page_num=i;temp=rand()%3+1;sum=sum+temp;PT[i].pic_num+=sum;//所对应的物理内存块号/*coutPT[i].pic_numendl;*/}6LogAdd.page_num=Logical_Address/Page_length;if(LogAdd.page_num/Page_Num=Page_Num){cout所查询的逻辑地址不在该页内,初始化失败endl;return-1;}}inttranslate()//转换函数,逻辑地址转换为物理地址{inti=0;intres;while(iPage_Num){if(PT[i].page_num==LogAdd.page_num){res=PT[i].pic_num;break;}//找到某个逻辑地址对应的物理块号elsei++;}if(iN)return-1;returnres*Page_length+LogAdd.page_add;}voidoutput(intres){if(res==0){cout构造的页表如下:endl;cout页号\t块号endl;for(inti=0;iPage_Num;i++){coutPT[i].page_num\t;coutPT[i].pic_numendl;}}elsecout物理地址为:resendl;}intmain(){intchoice;7cout-------模拟页面地址重定位--------endl;for(;;){cout1:输入信息\n2:查看页表\n3:查看物理地址\n4:退出endl;cinchoice;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,进行手动初始化8图2再输入2,查看页表信息图3输入3,查看物理地址9图4六、心得与体会通过本次实验,我对页面地址重定位有了较为浅显的认知,对于虚拟页面和物理块之间的联系有了更深的理解,从而也再次学习了内存装入与重定向的相关知识,受益匪浅,希望在以后的学习中再接再厉。
本文标题:模拟实现页面地址重定位实习报告
链接地址:https://www.777doc.com/doc-3816945 .html