式地址重定位模拟_第1页
式地址重定位模拟_第2页
式地址重定位模拟_第3页
式地址重定位模拟_第4页
式地址重定位模拟_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验报告学院: 专业:姓名学号班级指导老师课程名称操作系统原理实践成绩实验名称页式地址重定位模拟1.实验目的1、用高级语言编写和调试模拟实现页式地址重定位。2、加深理解页式地址重定位技术在多道程序设计中的作用和意义。2.实验内容当进程在CPU上运行时,如指令中涉及逻辑地址时,操作系统自动根据页长得到页号和页内偏移,把页内偏移拷贝到物理地址寄存器,再根据页号,查页表,得到该页在内存中的块号,把块号左移页长的位数,写到物理地址寄存器。1、设计页表结构2、设计地址重定位算法3、有良好的人机对话界面.实验环境PCvc++.实验方法和步骤(含设计)(1)分页地址变换机构将相对地址分为(页号,页内地址)页号P=INT[A/L「页内位移量W=AMODL;(2)读取PTR中的页表长度。IF页号〈页表长度THENGOTO3)ELSE越界中断;(3)读取PTR中的页表始址计算:页表始址+页号x页表项长度得到该页表项在页表中的位置,对应得到该页的物理块号。装入物理地址寄存器。(4)将逻辑地址中的页内地址送入物理地址寄存器的块内地址字段,拼接,得到最后的物理地址:块号块长度+W.程序及测试结果#include<stdio.h>#include<stdlib.h>#include<time.h> //封装时间的类库,时间不会重复,产生随机数最合适#defineN100//设定的页表最大长度为100#defineTrue1#defineFalse0intprocess; /进程大小intPage_length;//页长intPage_Num; //页表长度intLogical_Address;//逻辑地址intPhysical_Address;//物理地址inta[N]; //物理块号集合typedefstructPageTable//定义一个页表项{intpage_num; //页号intblock_num;//对应的物理块号}PageTable;PageTablePT[N];//定义一个页表typedefstructLogicalAdd//定义逻辑地址{intpage_num;//逻辑地址对应的页号intpage_add;//对应的页内地址}LogicalAdd;LogicalAddLA;/*****************输入进程信息*****************/voidinput(){printf("请输入进程大小:");scanf("%d",&process);printf("请输入页面大小:");scanf("%d",&Page_length);}/*****************获取到最小为巾,最大为n,总数为k个的不同随机数*****************/voidget_rand(intm,intn,intk)//结果存在a数组中{/* srand(time(0)) *//*根据时间生成一个随机数,伪随机函数实现内存随机分配,srand函数就用来初始化这个发生器,参数time(0)能够生成从1970年1月1日到当前机器时间的秒数,这个数在你每次执行程序的时候都会不断增长、变化,所以用它当做种子来初始化发生器,每次运行程序时,页号对应的块号都会发生变化。*/srand(time(0));inti,j,t;for(i=0;i<k;){/*rand(会返回一个范0〜RAND_MAX(至少是32767)之间的伪随机整数采用"模除+加法”的方法,产生指定范围内的随机整数在调用rand()函数之前,可以使用srand()函数设置随机数种子,如果没有设置随机数种子,rand()函数在调用时,自动设计随机数种子。随机数种子相同,每次产生的随机数也会相同。*/t=rand()%(n-m+1)+m;//[m,n]for(j=0;j<i;j++)/比较新生成的随机数t与a[0]〜a[i-1]if(a[j]==t)break;if(j==i)/不重复:j==i时,说明t与a数组中的数据(a[0]〜a[i-1])不重复a[i++]=t;/记录随机数。等价于a[i]=t;i++;}}/*****************初始化函数,生成页表*****************/intinit(){if(process%Page_length!=0)Page_Num=process/Page_length+1;elsePage_Num=process/Page_length;if(Page_Num>N){printf("该进程的页表长度为%d,大于设定长度%d,无法存储\n",Page_Num,N);returnFalse;}get_rand(0,N-1,Page_Num);//生成Page_Num个0~N-1的随机数,存到数组a中for(inti=0;i<Page_Num;i++)//初始化页表{PT[i].page_num=i;PT[i].block_num=a[i];//页号对应的物理内存块号}returnTrue;voidoutput(){printf("\n");printf("页表长度为:%d\n",Page_Num);printf("构造的页表如下:\n");printf("\n");printf("\t页号\t块号\n");for(inti=0;i<Page_Num;i++){printf("\t%d\t",PT[i].page_num);printf("%d\n",PT[i].block_num);}printf("\n");}/*****************转换函数,逻辑地址转换为物理地址*****************/inttranslate。{printf("输入逻辑地址:");scanf("%d",&Logical_Address);inti=0;LA.page_num=Logical_Address/Page_length;LA.page_add=Logical_Address%Page_length;if(LA.page_num>=Page_Num){printf("所查询的逻辑地址不在该页内,转换失败\n");returnFalse;}while(i<Page_Num){if(PT[i].page_num==LA.page_num)//找到页表项{//找到LA.page_num对应的物理块号PT[i].block_numPhysical_Address=PT[i].block_num*Page_length+LA.page_add;

printf("物理地址为:%d\n",Physical_Address);break;}elsei++;}returnTrue;}/*****************主函数*****************/intmain(){intchoice;printf("\t \n");printf("\t|| ||\n");printf("\t|| 欢迎使用页式地址重定位模拟系统 ||\n");printf("\t|| ||\n");printf("\t|| ||\n");printf("\t|| 在此输入个人姓名:****** ||\n");printf("\t \n");for(;;){||\n");||\n");||\n");||\n");||\n");||\n");——\n");printf("\t|| 请选择:printf("\t|| 1重定位 2退出printf("\t||printf("\t scanf("%d",&choice);switch(choice){input();if(init()==False)return-1;output();translate。;break;printf("E经退出\n");exit(0);//正常退出default:printf("输入的值不合法,请重新输入1或2\n");}}return0;}■rF:\UnriTledLexe6.实验分析与体会由于一个作业装入到与其地址空间不一致的存储空间所引起的,对有关地址部分的调整过程称为地址的重定位。这个调整过程就是把作业地址空间中使用的逻辑地址变换

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论