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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

课程设计三种存储管理方式的地址换算Word文件下载.docx

1、(二)分段存储管理方式的作用:A.方便编程B.信息共享在实现对程序和数据的共享时,是以信息的逻辑单位为基础的。段是信息的逻辑单位。由此可知,为了实现段的共享,希望存储管理能与用户程序分段的组织方式相适应。C.信息保护信息保护同样是对信息的逻辑单位进行保护,因此,分段管理方式能更有效和方便地实现信息保护功能。D.动态增长在实际应用中,往往有些段,特别是数据段,在使用过程中会不断地增长,而事先又无法确切地知道数据段会增长到多大。分段存储管理方式能较好地解决这一问题。E.动态链接动态链接是指在作业运行之前,并不把几个目标程序段链接起来。要运行时,先将主程序所对应的目标程序装入内存并启动运行,当运行过

2、程中又需要调用某段时,才将该段(目标程序)调入内存并进行链接。可见,动态链接也要求以段作为管理的单位。(三)段页式存储管理方式的作用分页系统以页面作为内存分配的基本单位,能够有效地提高内存利用率,而分段系统以段作为内存分配的基本单位,他能够更好地满足用户多方面的需要。如果能对两种存储管理方式“各取所长”,则可形成一种新的存储器管理方式段页式存储管理方式。这种新的系统既具有分段系统的便于实现、分段可共享、易于保护、可动态链接等一系列优点,又能像分页系统那样,很好地解决内存的外部碎片问题。2. 课程设计任务及要求2.1 设计任务日期陈国毅卢耀荣星期三下午阅读书本关于3种算法转换星期四上午在网上查阅

3、相关资料参考网上相关资料星期四下午开始尝试编写分页方式地址换算开始尝试编写分段方式地址换算星期五上午和队员讨论,开始实现完整的分页方式算法编写且继续查阅相关资料,并一起研究编写段页式方式的换算算法编写和队员讨论,开始实现完整的分段方式算法编写且继续查阅相关资料,并一起研究编写段页式方式的换算算法编写星期五下午讨论和修改相关代码,优化算法,得到最终代码,并共同编写文档讨论和修改相关代码,并且优化算法,得到最终代码并共同编写文档,2.2 设计要求 (一)分页方式的地址换算。1)用户给定一个逻辑地址,首先显示此地址的页号和页内地址,然后显示是第几块,最后显示其物理地址。1)由系统随机生成5个左右的段

4、,并随机生成一个段表并显示。2)由用户给定一个逻辑地址,包括段号和段内地址,最后显示其物理地址。(二)段页式的地址换算。1)先由系统随机生成5个左右的段,然后再由系统随机生成页面大小,但一定为2的幂。然后生成段表和页表。3. 算法及数据结构3.1算法的总体思想3.2数据结构模块3.2.1 功能进程的结构体声明与函数的声明3.2.2 数据结构 int flag; /分配状态,1为已分配,0为未分配 int allo; /页数 int r; /随机数 int l_addr; /逻辑地址int p_addr; /物理地址 int pnum,mnum ; /页号、内存块号 int addr; /页内地

5、址 int memsize; /内存容量 int z; Memory *memory; /内存地址 PageTable *page; /页表地址 int num; /段表长 int l_addr; /段内编移 int p_addr; int snum; /段号 SegTable *seg; /段表地址3.3分页方式的地址换算模块3.3.1功能用户给定一个逻辑地址,首先显示此地址的页号和页内地址,然后显示是第几块,最后显示其物理地址。3.3.2 数据结构void pageTra()/分页方式的地址换算3.3.3算法/页数 int i; int r;/随机数/逻辑地址/物理地址 int pnum,

6、mnum;/页号、内存块号/页内地址/内存容量/内存地址/页表地址 z=6+rand()%8;/随机数Z的范围6到8 memsize=pow(2,z); /2的Z次幂运算得出大小为2的幂 printf(自动生成页面的大小为:%dn,memsize); allo=11;/进程数为11 if(allomemsize)/判断超出内存容量,无法分配!n); return;memory=malloc(memsize*sizeof(Memory);/分配内存page=malloc(allo*sizeof(PageTable);/分配内存给页表initMem(memory,memsize);/内存for(i

7、=0;i=allo)/判断是否越界地址越界! else addr=l_addr%BLOCK;/取余,得出页内地址 mnum=pagepnum.addr;/内存块号 p_addr=mnum*memsize+addr;/计算物理地址逻辑地址%d 所在页号是%d,页内地址是%d,内存块号是%d,物理地址是%dn,l_addr,pnum,addr,mnum,p_addr);/输出物理地址 break; 3.4分段方式的地址换算模块3.4.1功能由系统随机生成5个左右的段,并随机生成一个段表并显示。由用户给定一个逻辑地址,包括段号和段内地址,最后显示其物理地址。3.4.2 数据结构void segTra

8、()/分段方式的地址换算模块3.4.3算法/段表长 int i=0;/段内编移/段号/段表地址 num=5;/段的数目5 seg=malloc(num*sizeof(SegTable);/ initSeg(seg,num);seg0.len=1+rand()%20;/随机生成第0段的大小seg0.addr=1+rand()%20;/随机生成第0段的基址seg1.len=1+rand()%20;/随机生成第1段的大小seg1.addr=21+rand()%40;/随机生成第1段的基址seg2.len=1+rand()%20;/随机生成第2段的大小seg2.addr=41+rand()%60;/随

9、机生成第2段的基址seg3.len=1+rand()%20;/随机生成第3段的大小seg3.addr=61+rand()%80;/随机生成第3段的基址seg4.len=1+rand()%20;/随机生成第4段的大小seg4.addr=81+rand()%100;/随机生成第4段的基址*段表内容*n段号t段长t基址n for(i=0;num;i+)%dt%dt%dn,i,segi.len,segi.addr);*Hetiu*n while(1)请输入段号和段内地址(#:#):/输入段号和段内地址%d:snum,&/赋值段号和段内地址 if(snum=num|snum0|segsnum.lenl_

10、addr)/检验是否越界 p_addr=segsnum.addr+l_addr;逻辑地址%d:%d的物理地址是%dn,snum,l_addr,p_addr);3.5段页方式的地址换算模块3.5.1功能先由系统随机生成5个左右的段,然后再由系统随机生成页面大小,但一定为2的幂。3.5.2数据结构void segPageTra()/段页式的地址换算3.5.2算法 int i,j,count=0; int num,snum,pnum,mnum;/段表长、段号、页号、内存块号 Memory*memory; Segment*seg;/Z随机数,范围6到8/页表大小,2的幂 seg=malloc(num*

11、sizeof(Segment);/分配内存给段表 memory=malloc(memsize*sizeof(Memory);/分配内存大小 initMem(memory,memsize);/初始化内存和大小 i=0;seg0.len=1+rand()%5;/随机分配第0段表的段的数目1到5seg1.len=1+rand()%5;/随机分配第1段表的段的数目1到5seg2.len=1+rand()%5;/随机分配第2段表的段的数目1到5seg3.len=1+rand()%5;/随机分配第3段表的段的数目1到5seg4.len=1+rand()%5;/随机分配第4段表的段的数目1到5 initSe

12、gment(seg,num);/初始化段页表i+) /随机分配内存块 for(j=0;jsegi.len;j+) segi.pagej.addr=r;*段页表内容*n段号t段内页表号t块号ni+)/用FOR循环输出段页表,i);t%dtt%dn,j,segi.pagej.addr);/输出段号,段内页表,块号-n*n/输出页面的大小/提示用户输入段号和段内地址/根据逻辑地址的段内地址和块的大小来获得对应页的页表项位置/取余,求得页表始址pnum)/检验是否越界地址越界! mnum=segsnum.pagepnum.addr;/再获取物理块号 p_addr=segsnum.pagepnum.ad

13、dr*memsize+addr;%d 所在页号是%d,内存块号是%d,页内地址是%d,物理地址是%dn,snum,l_addr,pnum,mnum,addr,p_addr);3.6主函数模块3.6.1功能用于程序与用户的交互操作,由用户选择算法,并执行相应的算法。3.6.2数据结构void main() /主函数3.6.3算法 int select;MENU: system(cls*三种存储管理方式的地址换算*n 1.分页方式的地址换算n 2.分段方式的地址换算n 3.段页方式的地址换算n*计算机操作系统课程设计卢耀荣、陈国毅*n /以上是界面请选择:select); /输入,选择功能模块 s

14、witch(select) /swithch函数 case 1: pageTra(); /分页方式的地址换算模块pause goto MENU; case 2: segTra(); /分段方式的地址换算模块 case 3: segPageTra(); /段页方式的地址换算模块 default:4. 程序设计与实现4.1 程序流程图4.2 程序代码#include/表头文件windows.hstdlib.h#include math.h#define BLOCK 512/默认块大小为512Btypedef struct MEMORY/内存块/分配状态,1为已分配,0为未分配Memory;type

15、def struct PAGETABLE/页表/ int flag; /状态PageTable;typedef struct SEGTABLE /段表 int len; /段长 /段基址SegTable;typedef struct SEGMENT /段页表Segment;/void initMem(Memory *men,int memsize); /初始化内存/void initPage(PageTable *page,int size); /初始化页表/void initSeg(SegTable *seg,int size); /初始化段表void initSegment(Segment

16、 *seg,int size); /初始化段页表void pageTra(); /分页方式的地址换算void segTra(); /分段方式的地址换算void segPageTra(); /段页方式的地址换算void initMem(Memory *mem,int memsize) /初始化内存memsize; memi.flag=0;/*void initPage(PageTable *page,int size) /初始化页表size; pagei.flag=0;void initSeg(SegTable *seg,int size) /初始化段表 segi.flag=0;*/void initSegment(Segment *seg,int size) /初始化段页表 segi.page=malloc(segi.len*sizeof(PageTable); 功能:分页方式的地址换算 输入:逻辑地址 输出:物理地址/进程大小 int

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

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