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

下载本文档

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

文档简介

第页题目三种存储管理方式的地址换算 姓名: 学号: 专业: 学院: 指导教师: 姚若龙 2018年11月27日【目录】摘要…………………01引言…………………02算法设计……………02程序分析……………04算法分析……………09调试结果……………11个人总结……………15参考文献……………15摘要:

操作系统(Operating

System,OS)是方便用户、管理和控制计算机软硬件资源的系统软件(或程序集合)。

从用户角度看,操作系统可以看成是对计算机硬件的扩充;

从人机交互方式来看,操作系统是用户及机器的接口;从计算机的系统结构看,操作系统是一种层次、模块结构的程序集合,属于有序分层法,是无序模块的有序层次调用。操作系统在设计方面体现了计算机技术和管理技术的结合。操作系统是系统软件的核心,、它控制程序的执行和提供资源分配、调度、输入/输出控制和数据管理等任务。如DOS、UNIX、OS/2和Windows

NT都是得到广泛使用的操作的系统。

三种管理方式中,分页系统能有效地提高内存利用率,分段系统则能很好地满足用户需要,而段页式系统则是把前两种结合起来形成的系统。这种新系统既具有分段系统的便于实现、分段可共享、易于保护、可动态链接等一系列优点,有能像分页系统那样很好地解决内存的外部碎片问题,以及可为各个分段离散地分配内存等问题。

关键字:

分页方式,分段方式,段页式方式,操作系统。

一.引言分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页。在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。段的长度由相应的逻辑信息组的长度决定,因而个段长度不等。段页式存储管理方式是分段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。三种存储管理都有其相应的段表、页表和地址变换机构。

二.三种存储管理方式地址换算描述

(1)分页存储管理方式

在页式存储管理方式中地址结构由两部构成,前一部分是页号,后一部分为页内地址w(位移量),如图为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了页表寄存器,用于存放页表在内存中的始址和页表的长度。当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表。查找操作由硬件执行。在执行检索之前,先将页号及页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。于是,这一错误将被系统发现并产生一地址越界中断。若未出现越界错误,则将页表始址及页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。及此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。(2)分段存储管理方式程序通过分段划分为多个模块,如代码段、数据段、共享段:

–可以分别编写和编译

–可以针对不同类型的段采取不同的保护

–可以按段为单位来进行共享,包括通过动态链接进行代码共享

为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度TL。在进行地址变换时,系统将逻辑地址中的段号及段表长度TL进行比较。若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址,然后,再检查段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号;若未越界,则将该段的基址及段内地址d

相加,即可得到要访问的内存物理地址。

(3)段页存储管理方式

在段页式系统中,为了便于实现地址变换,需配置一个段表寄存器,其中存放段表始址和段表长TL。进行地址变换时,首先利用段号S,将它及段表长TL进行比较。若S>TL,表示未越界,于是利用段表始址和段号来球出该段所对应的段表项在段表中的位置,从中得到该段的页表址,并利用逻辑地址中的段内页号P来获得对应表的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。

(4)段表、页表、段表地址寄存器。为了进行地址转换,系统为每个作业建立一个段表,并且要为该作业段表中的每一个段建立一个页表。系统中有一个段表地址寄存器来指出作业的段表起始地址和段表长度。三.程序模块intsettable1(intn,intk);//创建页表intprintTable1(intn,intk);//显示页表inttranst(intn,intk,intadd);//分页地址换算intdefSect(intn,int*t);//创建段表intprintSect(intn);//输出段表内容inttransSect(intn,ints,intd);//进行分段地址换算函数intsetSectTable(intn,intk);//创建段页式内容intprintSectTable(intn,intk);//显示段页内容inttransSectPage(intn,intk,ints1,ints2,ints3);//段页式地址换算//定义页表结构体typedefstructstableinty1;//页号inty2;//块号}stable;structstablesetst[512];//建立段表的结构体typedefstructsetsectintd1;//段号intd2;//段长intd3;//基址}setsect;structsetsectsets[512];//定义段表的总长度//建立段页式内的页表的结构体typedefstructtableintdy1;//页号intdy2;//块号}table;//建立段页式的结构体typedefstructsetAllstructtablec1[512];//定义段内页表的结构体intc2;//段号intc3;//段长intc4;//起始地址}setAll;structsetAllset[512];//定义段页式的总长度1.分页系统

intpage(intA,intL)

{

intd,P,kd,i;

intWD;

intPT[256];

for(i=1;i<256;i++)

{

PT[i]=rand()%512;//定义随机产生的快号在到之间

}

P=A/L;//页号等于逻辑地址/页面大小

d=A%L;//页内地址=逻辑地址%页面大小

if(P>L)printf("页号大于页表长度,越界中断\n\n");//如果页号大于页表长度,输出越界中段

else{

printf("页号=逻辑地址/页面大小=%d,页内地址=逻辑地址%页面大小=%d\n",P,d);//输出页号和页内地址

kd=PT[P];//根据页号随机产生快号

printf("根据页号%d得到块号%d\n",P,kd);

WD=kd*L+d;//计算物理地址的公式

printf("物理地址=块号%d*页面大小%d+页内地址%d\n",kd,L,d);//输出物理地址=块号*页面大小+页内地址

printf("逻辑地址%d换算后的物理地址为%d\n\n",A,WD);//输出物理地址的结果

return(0);

}

}

2.分段系统

intSegment(intsn,intsd)

{

inti,wd;

for(i=0;i<255;i++)

{

st.segf[i]=rand()%255;//定义随机产生段首地址为到之间

st.segl[i]=rand()%2048;//定义随机产生段长度为到之间

}

if(sn>256)printf("段号%d大于段表长度,越界中断\n\n",sn);//如果段号大于段表长度,输出越界中断

elseif(sd>st.segl[sn])printf("段内地址%d大于段长度%d,越界中断\n",sd,st.segl[sn]);//如果段内地址大于段长度,输出越界中断

else{

printf("根据段号找到段首地址%d\n",st.segf[sn]);

printf("物理地址=段首地址%d+段内地址%d\n",st.segf[sn],sd);//输出物理地址=段首地址+段内地址

wd=st.segf[sn]+sd;//计算物理地址的算法

printf("换算得到的物理地址为:%d\n\n",wd);//输出物理地址

}

return(0);

}

3.段页系统

intSegPagt(intsn,intpn,intpd)

{

inti,wd;

sp.pl=256;

for(i=0;i<255;i++)

{

sp.pf[i]=sp.segf[i]=rand()%26624;//定义随机产生的数在到之间

sp.ptl[i]=sp.segl[i]=rand()%512;//定义随机产生的数在到之间

sp.pt[i]=rand()%256;//定义随机产生的数在到之间

}

if(sn>256)printf("段号%d大于段表长度,越界中断\n\n",sn);//如果段号大于段表长度,输出越界中断

elseif(pn>sp.ptl[pn])printf("页号%d大于页表长度%d,越界中断\n",pn,sp.ptl[pn]);//如果页号大于页表长度,输出越界中断

elseif(pd>sp.pl)printf("页内地址%d大于页面长度%d,中断\n",pd,sp.pl);//如果页内地址大于页面长度,输出中断

else{

printf("通过段号%d找到页表首地址%d\n通过页号%d找到块号%d\n",sn,sp.pf[sn],pn,sp.pt[pn]);//输出页表首地址和块号

printf("物理地址=页表首地址%d+快号%d*页面长度%d+页内地址%d\n",sp.pf[sn],sp.pt[pn],sp.pl,pd);//输出物理地址=页表首地址+快号*页面长度+页内地址

wd=sp.pf[sn]+sp.pt[pn]*sp.pl+pd;//计算物理地址的公式

printf("物理地址为:%d\n\n",wd);//输出物理地址的最好结果

}return(0);

}

4.主函数

intmain(){

intcode;

intpl,pa,sn,sd,pd,pn;

//constintptl;

inttemp;

do{

printf("地址换算过程\n\n");

printf("1.分页式地址换算\n");

printf("2.分段式地址换算\n");

printf("3.段页式地址换算\n");

printf("4.结束运行\n\n");

printf("\n");

printf("请输入您的选择:");

scanf("%d",&code);

switch(code)

{

case1:{

printf("注意:请演示设定页表长度小于\n");

printf("请输入换算的逻辑地址:\n");

scanf("%d",&pa);

printf("页面大小(B):\n");

scanf("%d",&pl);

page(pa,pl);

}break;

case2:{

printf("请演示设定段表长度小于\n");

printf("请输入逻辑地址的段号:\n");

scanf("%d",&sn);

printf("段内地址:\n");

scanf("%d",&sd);

Segment(sn,sd);

}break;

case3:{

printf("预设定段表长为,页面大小为\n");

printf("请输入逻辑地址的段号:\n");

scanf("%d",&sn);

printf("页号:\n");

scanf("%d",&pn);

printf("页内地址:\n");

scanf("%d",&pd);

SegPagt(sn,pn,pd);

}break;

case4:{}break;

}

}while(code<4);

}

四.三种存储管理方式的地址变换机构

(1)分页系统的地址变换机构

为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了页表寄存器,用于存放页表在内存中的始址和页表的长度。当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表。查找操作由硬件执行。在执行检索之前,先将页号及页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。于是,这一错误将被系统发现并产生一地址越界中断。若未出现越界错误,则将页表始址及页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。及此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。页表始址页表长度页表始址页表长度>页号(3)页内地址1b页表物理地址逻辑地址L越界中断页表寄存器页号块号0123(2)分段系统的地址变换机构为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度TL。在进行地址变换时,系统将逻辑地址中的段号及段表长度TL进行比较。1.若S>TL,表示段号太大,是访问越界,于是产生越界中断信号;2.若未越界,则根据段表的始址和该段的段号,计算出该段对应段表项的位置,从中读出该段在内存的起始地址,然后,再检查段内地址d是否超过该段的段长SL。若超过,即d>SL,同样发出越界中断信号;3.若未越界,则将该段的基址及段内地址d相加,即可得到要访问的内存物理地址。段表始址段表始址段表长度>2100越界有效地址段号段长基址0123物理地址(3)

段页式系统中的地址变换机构在段页式系统中,为了便于实现地址变换,需配置一个段表寄存器,其中存放段表始址和段表长TL。进行地址变换时,首先利用段号S,将它及段表长TL进行比较。若S>TL,表示未越界,于是利用段表始址和段号来球出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号P来获得对应表的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。段表始址段表始址段表长度段表寄存器>段超长页号P段号S页内地址0123段表长度页表始址0123b块号b块内地址页表段表五.结果分析

1)主菜单页面

2)页式页面

选择1输入:换算的逻辑地址:120页面大小:100输出:页号=1页内地址=20块号=41物理地址=41203)段式页面

选择2输入:换算的逻辑地址的段号:230

温馨提示

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

评论

0/150

提交评论