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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

实验5虚拟存储器.docx

1、实验5虚拟存储器操作系统实验实验五 虚拟存储器管理学号 姓名 班级 华侨大学电子工程系实验目的 1、 理解虚拟存储器概念。2、 掌握分页式存储管理地址转换盒缺页中断。 实验内容与基本要求 1、 模拟分页式存储管理中硬件的地址转换和产生缺页中断。2、 用先进先出页面调度算法处理缺页中断。实验报告内容 1、 分页式存储管理和先进先出页面调度算法原理。1.1分页式存储管理原理采用分页存储器允许把一个作业存放到若干不相邻的分区中,既可免去移动信息的工作,又可尽量减少主存的碎片。分页式存储管理的基本原理如下:A、 页框:物理地址分成大小相等的许多区,每个区称为一块; B、址分成大小相等的区,区的大小与块

2、的大小相等,每个称一个页面。C、 逻辑地址形式:与此对应,分页存储器的逻辑地址由两部分组成,页号和单元号。逻辑地址格式为 页号 单元号(页内地址) 采用分页式存储管理时,逻辑地址是连续的。所 以,用户在编制程序时仍只须使用顺序的地址,而不必考虑如何去分页。 D、页表和地址转换:如何保证程序正确执行呢? 采用的办法是动态重定位技术,让程序的指令执行时作地址变换,由于程序段以页为单位,所以,我们给每个页设立一个重定位寄存器,这些重定位寄存器的集合便称页表。页表是操作系统为每个用户作业建立的,用来记录程序页面和主存对应页框的对照表,页表中的每一栏指明了程序中的一个页面和分得的页框的对应关系。绝对地址

3、=块号*块长+单元号程序流程图。1.2先进先出页面调度算法原理先进先出调度算法根据页面进入内存的时间先后选择淘汰页面,先进入内存的页面先淘汰,后进入内存的后淘汰。本算法实现时需要将页面按进入内存的时间先后组成一个队列,每次调度队首页面予以淘汰。2 程序流程图a虚拟管理主流程图 b 先进先出调度流程图3 程序及注释#include malloc.h#include stdio.h#include iostream.h#include stdlib.h#define n 10 /假定系统允许的最大作业为,假定模拟实验中n值为10 #define m 10 /假定系统允许的空闲区表最大为m,假定模拟

4、实验中m值为10#define minisize 100typedef structfloat address; /已分分区起始地址float length; /已分分区长度,单位为字节int flag; /已分配区表登记栏标志,用0表示空栏目,实验中只支持一个字符的作业名 used_tablen;/已分配区表typedef structfloat address; /空闲区起始地址float length; /空闲区长度,单位为字节int flag; /空闲区表登记栏标志,用0表示空栏目,用1表示未分配 free_tablem; /空闲区表/采用最优分配算法分配xk大小的空间allocate

5、(char J,float xk)int i,k;float ad;k=-1;for(i=0;i=xk&free_tablei.flag=1)if(k=-1|free_tablei.lengthfree_tablek.length)k=i;if(k=-1)/未找到可用空闲区,返回printf( 无可用空闲区 n);return;/找到可用空闲区,开始分配:若空闲区大小与要求分配的空间差小于msize大小,则空闲区全部分配;若空闲区大小与要求分配的空间差大于minisize大小,则从空闲区划出一部分分配if(free_tablek.length-xk=minisize)free_tablek.f

6、lag=0; /该空闲区被分配ad=free_tablek.address;xk=free_tablek.length;elsefree_tablek.length=free_tablek.length-xk; ad=free_tablek.address+free_tablek.length; /修改已分配区表i=0;/寻找空表目while(used_tablei.flag!=0&i=n)printf( 无表目填写已分区,错误 /修正空闲区表if(free_tablek.flag=0)free_tablek.flag=1;/前面找到的是某个空闲分区的一部分 elsefree_tablek.l

7、ength=free_tablek.length+xk; return; n);/修改已分配表elseused_tablei.address=ad;used_tablei.length=xk;used_tablei.flag=J;return;/回收作业名为J的作业所占主存空间reclaim(char J)int i,k,j,s,t;float S,L;/寻找已分配表中对应登记项s=0;while(used_tables.flag!=J|used_tables.flag=0)&s=n)printf(找不到作业 n);return;/修改已分配表used_tables.flag=0;/取得归还分

8、区的起始地址S和长度LS=used_tables.address;L=used_tables.length;j=-1;k=-1;/寻找回收分区的空闲上下邻,上邻表目k,下邻表目j i=0;while(im&(j=-1|k=-1)if(free_tablei.flag=1)if(free_tablei.address+free_tablei.length=S) k=i;/找到上邻 if(free_tablei.address=S+L) j=i;/找到下邻i+;if(k!=-1)if(j!=-1) /上邻空闲区,下邻空闲区,三项合并free_tablek.length=free_tablej.le

9、ngth+free_tablek.length+L;free_tablej.flag=0;else /上邻空闲区,下邻非空闲区,与上邻合并free_tablek.length=free_tablek.length+L;elseif(j!=-1) /上邻非空闲区,下邻为空闲区,与下邻合并free_tablej.address=S;free_tablej.length=free_tablej.length+L;else /上下邻均为非空闲区,回收区域直接填入 /在空闲区表中寻找空栏目t=0;while(free_tablet.flag=1&t=m)/空闲区表满,回收空间失败,将已分配表复原out主

10、存空闲表没有空间,回收空间失败endl;第7/11页used_tables.flag=J;return;free_tablet.address=S;free_tablet.length=L;free_tablet.flag=1;return;/主函数void main( )int i,a;float xk;char s;ifstream in(input.txt);/空闲分区表初始化free_table0.address=10240;free_table0.length=102400;free_table0.flag=1;for(i=1;im;i+)第8/11页free_tablei.flag

11、=0;/已分配表初始化for(i=0;in;i+)used_tablei.flag=0;while(1)printf( 选择功能象(0-退出,1-分配主存,2-回收主存,3-显示主存) n);printf( 选择功能象(03): n);scanf(%d,&a);switch(a)case 0:exit(0);case 1:printf( 输入作业名J和作业名所需长度xk n);scanf(%c%c%f,&J,&xk); allocate(J,xk); break;case 2:printf( 输入要回收分区的作业名 );scanf(%c%c,&J);第9/11页reclaim(J); brea

12、k;case 3:);for(i=0;im;i+) printf( 输出空闲区表 :n起使地址 分区长度 标志printf(%6.0f%9.0f%6dn,free_tablei.address,free_tablei.length,free_tablei.flag);printf( 按任意键,输出已分配区表 n);getchar(); printf( 输出已分配表:n起使地址 分区长度 标志 n);for(i=0;in;i+) if(used_tablei.flag!=0)printf(%6.0f%9.0f%6cn,used_tablei.address,used_tablei.length,used_tablei.flag);elseprintf(%6.0f%9.0f%6dn,used_tablei.address,used_tablei.length,use第10/11页d_tablei.flag);break;default:defult:printf(没有该选项 n); 4. 运行结果以及结论。建立页表指令执行

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

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