操作系统课程设计---三种存储管理方式的地址换算过程.doc_第1页
操作系统课程设计---三种存储管理方式的地址换算过程.doc_第2页
操作系统课程设计---三种存储管理方式的地址换算过程.doc_第3页
操作系统课程设计---三种存储管理方式的地址换算过程.doc_第4页
操作系统课程设计---三种存储管理方式的地址换算过程.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

西 安 工 业 大 学信息与计算科学09级操作系统实验课程设计报告题 目:三种存储管理方式的地址换算过程 班 级: 学 号: 姓 名: 时 间: 一 任务:编程演示三种存储管理方式的地址换算过程,分别是:分页式地址换算,分段式地址换算和段页式地址换算。二思想:为了能将用户地址空间中的逻辑地址变换为内存空间中的物理地址,在系统中必须设置地址变换机构。该机构的基本任务是实现从逻辑地址到物理地址的转换。由于页内地址和物理地址是一一对应的,因此,地址变换机构的任务实际上只是将逻辑地址中的页号,转换内存中的物理块号。又因为页面映射表的作用就是用于实现从页号到物理块号的变换,因此,分页式地址变换任务是借助于页表来完成的。在分段式存储管理系统中,为每个分段分派一个连续的分区,而进程中的各个段可以离散地移入内存中不同的分区中。为使程序能正常运行,亦即,能从物理内存中找出每个逻辑段所对应的位置,在系统中为每个进程建立一张“段表”。每个段在表中占有一个表项,其中记录了该段在内存中的起始地址和段的长度。分页和分段存储管理方式都各有优缺点。分页系统能有效地提高内存利用率,而分段系统则能很好地满足用户需要。如果能对两种存储管理方式“各取所长”,则可将两者结合成一种新的存储管理方式系统。这种新系统既具有分段系统的便于实现,分段可共享,易于保护,可动态链接等一系列优点,又能像分页系统那样很好地解决内存的外部碎片问题,以及可为各个分段离散地分配内存等问题。把这种结合起来形成的新系统称为“段页式系统”。三目的:每种地址换算过程的目的都是把用户地址空间中的逻辑地址变换为内存空间中的物理地址。四方案:分页式:当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址的页号和页内地址两部分,再以页号为索引去检索页表。查找操作由硬件执行,在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。于是,这一错误将被系统发现并产生一地址越界中断。若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样变完成了从逻辑地址到物理地址的变换。分段式:为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用来存放段表始址和段表长度tl。在进行地址变换时,系统将逻辑地址中的段号与段表长度tl进行比较。若stl,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存中的起始地址,然后,再检查段内地址d是否超过该段的段长sl。若超过,即dsl,同样发出越界中断信号;若未越界,则将该段的基址与段内地址d相加,即可得到要访问的内存物理地址。段页式:在段页式系统中,为了便于实现地址变换,须配置一个段表寄存器,其中存放段表始址和段表长tl。进行地址变换时,首先利用段号s,将它与段表长tl进行比较。若stl,表示未越界,于是利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号p来获得对应页的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。五框图:分页式:分段式:段页式:六运行环境在实现地址转换的程序实现时,运用了eclipse来实现,因为对java程序的编写稍微熟悉点,可以很好的编写及调试。程序很容易看懂,输入条件在后边备注。七程序及运行结果import java.util.*;class ya void print()system.out.println(*); int ye()int b;int result = 0;scanner s=new scanner(system.in);system.out.println(请输入页表长度:);int length=s.nextint(); /定义页表长度,并从键盘输入inta =new intlength; /定义一个数组,用来存放页号所在的块号system.out.println(请按顺序输入页号所对应的块号);for(int i=0;i=length)system.out.println(产生越界中断);else b=ai; result=b*l+d;/system.out.println(物理地址为:+result);return result; int duan()int address=0;int a=new int1010;scanner s=new scanner(system.in);system.out.println(请输入段表长度:);int length=s.nextint();system.out.println(请输入段号所对应的段长和基址:);for(int i=0;ilength;i+)for(int j=0;j=length)system.out.println(产生越界中断);else if (w=as0)system.out.println(产生越界中断); elseaddress=as1+w;return address;/system.out.println(转换后的物理地址为:+address); void dy() int l=1024;int result=0;scanner s=new scanner(system.in);system.out.println(请输入段表长度:);int length=s.nextint();system.out.println(请输入段号:);int s=s.nextint();system.out.println(请输入页号:);int p=s.nextint(); system.out.println(请输入页内地址:);int d=s.nextint();inta=3,600,2,1200,4,2300,4,3200;intb=3,4,9,7;if(s=length)system.out.println(段超长,越界中断);else if(p=ap0)system.out.println(页超长,越界中断); else result=bp*l+d; system.out.println(转换后的物理地址为:+result); public class hihihi public static void main(string args)ya r= new ya();r.print();system.out.println(若选择分页方式地址换算方法请输入1);system.out.println(若选择分段方式地址换算方法请输入2);system.out.println(若选择段页式地址换算方法请输入3);r.print();scanner s=new scanner(system.in);int i=s.nextint();switch(i)case 1:system.out.println(转换后的物理地址为:+r.ye();break;case 2:system.out.println(转换后的物理地址为:+r.duan();break;case 3:r.dy();运行结果:八程序改进:发现程序中有以下问题:1.上述程序中的段表和页表是直接从键盘输入,我们可以对程序进行改进,把段表和页表在程序中显示出来,这样程序的输入就变得简单,并容易理解。段表和页表确定后,比较段号和段表长度时,段表长度就是固定的,就不需要再设置段表长度变量。还有,在段页式中,页内始址没有实际用处,所以可以不用输入。2.第一个分页式中,给定条件应该是逻辑地址,在程序中对逻辑地址换算成页号和页内地址,而不用直接输入页号和页内地址。九改进后的程序和运行结果:import java.util.*;class ya void print() system.out.println(*);int ye() int b;int result = 0;inta=3,4,9,7;scanner s = new scanner(system.in);system.out.println(请输入页面大小:);int l = s.nextint(); /从键盘输入页面大小system.out.println(请输入逻辑地址:);int r=s.nextint();int i,d;i=(int)(r/l);d=r%l;if (i = 4) system.out.println(产生越界中断); else b = ai;result = b * l + d;return result;int duan() int address = 0;int a=1024,6144,600,4096,500,8192,200,9200;scanner s = new scanner(system.in);system.out.println(请输入段号:);int s = s.nextint();system.out.println(请输入位移量:);int w = s.nextint();if (s = 4) system.out.println(产生越界中断); else if (w = as0) system.out.println(产生越界中断); else address = as1 + w;return address;void dy() int l = 1024;int result = 0;inta =3,2,4,4;int b = 3,4,9,2,4,5,4,2,3,2,6,5,4;scanner s = new scanner(system.in);system.out.println(请输入段号:);int s = s.nextint();if (s = 4) system.out.println(段超长,越界中断);system.out.println(请输入页号:);int p = s.nextint();tryif (p = ap) catch(exception e)finallysystem.out.println(页超长,越界中断);system.out.println(请输入页内地址:);int d = s.nextint();result = bsp * l + d;system.out.println(转换后的物理地址为: + result);public class hihihi public static void main(string args) ya r = new ya();r.print();system.out.println(若选择分页方式地址换算方法请输入1);system.out.println(若选择分段方式地址换算方法请输入2);system.out.println(若选择段页式地址换算方法请输入3);r.print();scanner s = new scanner(system.in);int i = s.nextint();switch (i) case 1:system.out.println(转换后的物理地址为: + r.ye();break;case 2:system.out.println(转换后的物理地址为: + r.duan();break;case 3:r.dy();九总结:对于上述三种存储器管理方式,我们可以显而易见的发现每种方式都有各自的优缺点。对于分页式地址变换,系统给机构分配页面大小,每页的大小都是相同的,这里的“页”只是存放信息的物理单位,并无完整的意义,不便于实现共享。并且在实际应用中,页的大小到底要大还是要小,也是很难去决定的。而在分段地址变换中,用户把自己的作业按照逻辑关系分为若干大小不同的段,可根据系统需要进行分段。在实现相对程序和数据的共享时,是以信息的逻辑单位为基础的,并能有效和方便地实现信息保护功能。在实际应用中,往往有些段,在使用过程中会不断地增长,而事先又无法确切地知道数据段会增长到多大,分段存储管理方式会较好地解决这一问题。在段页式管理系统中,很好的将分页式和分段式的优点结合起来,但是在这个系统中,很有可能要访问三次内存,这样就增加了系统的开销。 在编写这个程序时,发现这个程序如果全从键盘输入的话,虽然更具有普遍性,但是使程序显得冗长而繁琐。因此最后把段表和页表在程序中编程已知条件。从运行结果,我们可以看出程序相对简单了很多。在段页式中,我还加入了异常处理,使程序更好的运行。在编写时,我本来将三个程序分开实现,但是后来发现,可以直接在主函数外创建一个类,如程序中的ya类,然后再此类中编写四个函

温馨提示

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

评论

0/150

提交评论