ImageVerifierCode 换一换
格式:DOCX , 页数:25 ,大小:68.37KB ,
资源ID:4474948      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4474948.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(三种存储管理方式的地址换算教材.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

三种存储管理方式的地址换算教材.docx

1、三种存储管理方式的地址换算教材三种存储管理方式的地址换算摘要:操作系统(Operating System,OS)是方便用户、管理和控制计算机软硬件资源的系统软件(或程序集合)。从用户角度看,操作系统可以看成是对计算机硬件的扩充;从人机交互方式来看,操作系统是用户与机器的接口;从计算机的系统结构看,操作系统是一种层次、模块结构的程序集合,属于有序分层法,是无序模块的有序层次调用。操作系统在设计方面体现了计算机技术和管理技术的结合。操作系统是系统软件的核心,、它控制程序的执行和提供资源分配、调度、输入/输出控制和数据管理等任务。如DOS、UNIX、OS/2和Windows NT都是得到广泛使用的操

2、作的系统。 三种管理方式中,分页系统能有效地提高内存利用率,分段系统则能很好地满足用户需要,而段页式系统则是把前两种结合起来形成的系统。这种新系统既具有分段系统的便于实现、分段可共享、易于保护、可动态链接等一系列优点,有能像分页系统那样很好地解决内存的外部碎片问题,以及可为各个分段离散地分配内存等问题。关键字:分页方式,分段方式,段页式方式,操作系统。1. 引言:分页存储管理是将一个进程的逻辑地址空间分成若干个大小相等的片,称为页面或页。在分段存储管理方式中,作业的地址空间被划分为若干个段,每个段定义了一组逻辑信息。段的长度由相应的逻辑信息组的长度决定,因而个段长度不等。段页式存储管理方式是分

3、段和分页原理的结合,即先将用户程序分成若干个段,再把每个段分成若干个页,并为每一个段赋予一个段名。三种存储管理都有其相应的段表、页表和地址变换机构。2三种存储管理方式地址换算描述: (1)分页存储管理方式为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了页表寄存器,用于存放页表在内存中的始址和页表的长度。当进程要访问某个逻辑地址中的数据时,分页地址变换机构会自动地将有效地址(相对地址)分为页号和页内地址两部分,再以页号为索引去检索页表。查找操作由硬件执行。在执行检索之前,先将页号与页表长度进行比较,如果页号大于或等于页表长度,则表示本次所访问的地址已超越进程的地址空间。于是,这一错误

4、将被系统发现并产生一地址越界中断。若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,便得到该表项在页表中的位置,于是可从中得到该页的物理块号,将之装入物理地址寄存器中。与此同时,再将有效地址寄存器中的页内地址送入物理地址寄存器的块内地址字段中。这样便完成了从逻辑地址到物理地址的变换。(2)分段存储管理方式为了实现从进程的逻辑地址到物理地址的变换功能,在系统中设置了段表寄存器,用于存放段表始址和段表长度TL。在进行地址变换时,系统将逻辑地址中的段号与段表长度TL进行比较。若STL,表示段号太大,是访问越界,于是产生越界中断信号;若未越界,则根据段表的始址和该段的段号,计算出该段对应段表

5、项的位置,从中读出该段在内存的起始地址,然后,再检查段内地址d是否超过该段的段长SL。若超过,即dSL,同样发出越界中断信号;若未越界,则将该段的基址与段内地址d相加,即可得到要访问的内存物理地址。(3)段页存储管理方式在段页式系统中,为了便于实现地址变换,需配置一个段表寄存器,其中存放段表始址和段表长TL。进行地址变换时,首先利用段号S,将它与段表长TL进行比较。若STL,表示未越界,于是利用段表始址和段号来球出该段所对应的段表项在段表中的位置,从中得到该段的页表始址,并利用逻辑地址中的段内页号P来获得对应表的页表项位置,从中读出该页所在的物理块号b,再利用块号b和页内地址来构成物理地址。3

6、程序模块:#include #include int settable1(int n,int k);/创建页表 int printTable1(int n,int k);/显示页表 int transt(int n,int k,int add);/分页地址换算 int defSect(int n,int *t);/创建段表 int printSect(int n);/输出段表内容 int transSect(int n,int s,int d);/进行分段地址换算函数 int setSectTable(int n,int k);/创建段页式内容 int printSectTable(int n

7、,int k);/显示段页内容 int transSectPage(int n,int k,int s1,int s2,int s3);/段页式地址换算 /定义页表结构体 typedef struct stable int y1;/页号 int y2;/块号 stable; struct stable setst512; /建立段表的结构体 typedef struct setsect int d1;/段号 int d2;/段长 int d3;/基址 setsect; struct setsect sets512;/定义段表的总长度 /建立段页式内的页表的结构体 typedef struct

8、table int dy1;/页号 int dy2;/块号 table; /建立段页式的结构体 typedef struct setAll struct table c1512;/定义段内页表的结构体 int c2;/段号 int c3;/段长 int c4;/起始地址 setAll; struct setAll set512;/定义段页式的总长度 4三种存储管理方式的地址变换机构(1) 分页系统的地址变换机构(2) 分段系统的地址变换机构段号S位移量W(3) 段页式系统中的地址变换机构5结束语:为期二周的操作系统课程设计很快就结束了,做为每个学期末的一项必修课,课程设计的目的就是要让我们能够

9、更加深刻的理解课堂上所学的知识,并能够将它们应用到实践中去,让知识能为实践服务。这次操作系统的课程设计,我是通过编程演示三种存储管理方式的地址换算过程。通过这次课程设计,加深了我对课堂上所学的三种存储管理方式的地址换算的概念的理解,了解了操作系统的工作原理已经平时遇到的一些状况是怎么样产生的,通过这次操作系统的课程设计,另我学到了很多在课堂上学不到的知识,以及动手能力,这次课程设计老师不限开发工具,因此也锻炼了我们对新的开发工具的掌握能力。对于我们计算机专业的学生来说,在软件更新如此之快的今天,对新的开发工具的快速掌握能力也是一项必不可少的能力。当然,在这次课程设计中,也暴露出来了一些问题,就

10、是我对开发工具的使用,虽然大学三年基本是用C编写程序比较多,但是还是感到了力不从心的感觉,就是自己对一些C函数库的了解不够,导致自己在用的时候走了很多弯路,这也从间接让我了解了许多平时学习不到的知识。课程设计不仅能锻炼我们把知识应用于实践的能力,还锻炼了我们思维的逻辑性。编写一个BUG尽可能少的程序,需要考虑很多方面的问题,包括给别人试用,这就锻炼了我们逻辑思维的能力,为今后走上工作岗位打下了坚实的基础。6参考文献:计算机操作系统 西安电子科技大学出版社C语言程序设计教程 机械工业出版社附:三种存储管理方式地址换算程序清单如下:#include #include int settable1(i

11、nt n,int k);/创建页表 int printTable1(int n,int k);/显示页表 int transt(int n,int k,int add);/分页地址换算 int defSect(int n,int *t);/创建段表 int printSect(int n);/输出段表内容 int transSect(int n,int s,int d);/进行分段地址换算函数 int setSectTable(int n,int k);/创建段页式内容 int printSectTable(int n,int k);/显示段页内容 int transSectPage(int

12、n,int k,int s1,int s2,int s3);/段页式地址换算 /定义页表结构体 typedef struct stable int y1;/页号 int y2;/块号 stable; struct stable setst512; /建立段表的结构体 typedef struct setsect int d1;/段号 int d2;/段长 int d3;/基址 setsect; struct setsect sets512;/定义段表的总长度 /建立段页式内的页表的结构体 typedef struct table int dy1;/页号 int dy2;/块号 table; /

13、建立段页式的结构体 typedef struct setAll struct table c1512;/定义段内页表的结构体 int c2;/段号 int c3;/段长 int c4;/起始地址 setAll; struct setAll set512;/定义段页式的总长度 int main() int choice1,choice2; int truth=0,truth1; int jobAddr;/进程的逻辑地址空间 int md;/页面大小 int addr1;/输入的逻辑地址 int dc;/定义段表的长度 int dh,sAddr;/定义段表的逻辑地址的段号和段内地址 int dyc

14、;/段页式的段表长度 int jobs,jobt,joba;/段页式逻辑段号、段内页号、页内地址 do printf( 组员:符小平 崔健 王菲菲 王天渤n); printf(-操作系统课程设计题目:分页、分段、段页式地址换算-nn); printf( 总菜单n); printf( 1.分页方式n); printf( 2.分段方式n); printf( 3.段页式n); printf( 4.结束nn); printf(-n); printf(请输入您的选择:n); scanf(%d,&choice1); switch(choice1) case 1:/分页方式 do printf( 分页方式n

15、); printf(-n); printf( 1.随机生成进程大小n); printf( 2.进程创建页表n); printf( 3.显示页表的信息n); printf( 4.地址换算n); printf( 5.退出n); printf(-nn); printf(请输入您的选择:); scanf(%d,&choice2); switch(choice2) case 1: printf( 随机生成一个进程(大小在1024K至2048K)n); printf(-n); do jobAddr=rand()%2048;/随机产生进程的逻辑地址空间 while(jobAddrjobAddr) do pr

16、intf(输入的逻辑地址大于进程地址空间,请重新输入逻辑地址(K):); scanf(%d,&addr1); while(addr1jobAddr); transt(jobAddr,md,addr1); printf(nn-n); else printf(nn-n); printf(n还没有创建页表.请先选择2创建页表.nn); printf(nn-n); break; else printf(nn-n); printf(n还没有创建进程.请先选择1创建进程.nn); printf(nn-n); break; break; case 5: printf(-nn); printf(退出分页方式地

17、址换算选项,进入总菜单.n); printf(-nn); break; default: printf(-n); printf(错误提示:你输入的选择有错,请重新选择!n); printf(-n); while (choice2!=5); break; case 2:/分段方式 do printf( 分段方式地址换算n); printf(-n); printf( 1.创建段表n); printf( 2.显示段表n); printf( 3.地址换算n); printf( 4.退出n); printf(-nn); printf(请输入您的选择:); scanf(%d,&choice2); swit

18、ch(choice2) case 1: printf( 开始创建段表n); printf(-n); printf(请输入你要创建的段表长度(最大为512个):); scanf(%d,&dc); defSect(dc,&truth); printf(-n); break; case 2: if(truth=1) printf(n 显示已经创建的段表内容n); printf(-nn); printSect(dc); printf(nn-n); else printf(nn-n); printf(n还没有创建段表.请先选择1创建段表.nn); printf(nn-n); break; break;

19、case 3: if(truth=1) printf( 分段地址换算n); printf(-n); printf(请您输入逻辑地址的段号,段内地址(K):); scanf(%d,%d,&dh,&sAddr); transSect(dc,dh,sAddr); printf(-n); else printf(-n); printf(n还没有创建段表.请先选择1创建段表.nn); printf(-n); break; break; case 4: printf(-nn); printf(退出分段方式地址换算选项,进入总菜单.n); printf(-nn); break; default: print

20、f(-n); printf(错误提示:你输入的选择有错,请重新选择!n); printf(-n); while (choice2!=4); break; case 3:/段页式 do printf( 段页式地址换算n); printf(-n); printf( 1.创建段页式n); printf( 2.显示段页式结构n); printf( 3.地址换算n); printf( 4.退出n); printf(-nn); printf(请输入您的选择:); scanf(%d,&choice2); switch(choice2) case 1: printf( 开始创建段页式n); printf(-n); printf(请输入你要创建的段表长度(最大为512个):); scanf(%d,&dyc); printf(页面的大小K:); scanf(%d,&md); setSectTable(dyc,md); truth=1; printf(-

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1