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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

Linux操作系统实验报告存储管理试验参考模板.docx

1、Linux操作系统实验报告存储管理试验参考模板电子信息学院实验报告书课程名:Linux操作系统实验 题 目: 实验三 存储管理试验 实验类别 【验证】 班 级: BX0907 学 号: 09 姓 名: 吴沛儒 评语:实验态度:认真( ) 一般( ) 差( )实验结果:正确( ) 部分正确( )错( )实验理论:掌握( ) 熟悉( ) 了解( ) 不懂( )操作技能:强( ) 一般( ) 差( )实验报告:好( ) 一般( ) 差( )成绩: 指导教师: 胡静 批阅时间: 年 月 日成绩: 指导教师: 宁建红 批阅时间: 年 月 日1、实验内容或题目(1)模拟初始内存页面分配(数组、结构体均可)

2、 (2)实现Buddy heap算法 (3)通过键盘输入随机产生申请和释放操作请求:r8代表申请8个页面。释放:f4代表释放4个页面。 (4)每个申请或释放操作,都在屏幕上显示操作前与操作后的内存分配的对比图。 (5)实验假设申请和释放的页数都是2的整次幂。(1)建立工作集页面模型。 (2)利用随机函数动态生成进程访问页面的序列号。 (3)实现FIFO页面淘汰算法。 (4)实现页故障率反馈模型。2、实验目的与要求(1) 用C语言是实现模拟Linux系统中连续内存分配用到的伙伴对算法。 (2) 通过链表的形式输出在内存申请和释放过程中内存状态的对比图。(1)了解工作集模型的原理及其特点。 (2)

3、实现页故障率反馈模型。3、实验步骤与源程序1. Buddy heap算法模拟源程序; #include #include typedef struct block int size; int start; int loc; struct block *next; struct block *prior; block;int maxsize=512; block *note; block *id10; void printmem() int i; for(i=9; i=0;i-) printf(%d -,i); block * temp = (struct block *)malloc(size

4、of(struct block); temp = idi-next; while(temp!=NULL) printf(%d(%s)(%d)-,temp-size,temp-loc=1?占用:空闲,temp-start); temp=temp-next; printf(n); void init() int i; for(i=0;iprior=idi;idi-next=NULL; note=(struct block *)malloc(sizeof(struct block); note-size=maxsize; note-start=0; note-loc=0; note-next=NUL

5、L; id9=(struct block *)malloc(sizeof(struct block); id9-next=note; id9-prior=id9; note-prior=id9; printmem();int power(int x,int y) int k=0,tmp=1; for(;knext; int flag=0,isFirst=0; while(pend!=NULL) if(pend-loc=0) if(isFirst=0) idtempId-next=pend-next; else pend-prior-next=pend-next; int size=(pend-

6、size)/2; int start=pend-start; newu-size=size; newu-start=start; newf-start=start+size; newu-loc=0; newf-size=size; newf-loc=0; newf-prior=newu; newu-next=newf; newf-next=NULL; tempId-; cend=idtempId; while(cend-next!=NULL) cend=cend-next; cend-next=newu; newu-prior=cend; flag=1; return 1; else pend

7、=pend-next; isFirst+; if(flag=0) tempId=tempId+1; if(tempIdnext; int nextStart=first-start+first-size; int preStart=first-start-first-size; int flag=0,isFirst=0; while(second!=NULL) if(second-start=nextStart | second-start=preStart) & second-loc=0) merger-size=(first-size)+(second-size); merger-loc=

8、0; merger-start=(first-start)start)?(first-start):(second-start); if(first-next!=NULL) first-next-prior=first-prior; if(first-prior-prior)=first-prior) idtempId-next=first-next; else first-prior-next=first-next; if(second-next!=NULL) second-next-prior=second-prior; if(isFirst=0) idtempId-next=second

9、-next; else second-prior-next=second-next; tempId+; merger-next=idtempId-next; merger-prior=idtempId; if(idtempId-next!=NULL) idtempId-next-prior=merger; idtempId-next=merger; if(tempIdnext; isFirst+; return 1;int freeb(int size) block * first=(struct block *)malloc(sizeof(struct block); int tempId=

10、root(2,size); first=idtempId-next; int flag=0; while(first!=NULL) if(first-loc=1) first-loc=0; flag=1; break; else first=first-next; if(flag=1) merge(tempId,first); printmem(); else printf(需要释放的内存块不存在!n); return 1;int requestb(int size) block * temp=(struct block *)malloc(sizeof(struct block); int t

11、empId = root(2,size); int flag=0; temp=idtempId-next; while(temp!=NULL) if(temp-loc=0 & temp-size=size) temp-loc=1; flag=1; printf(分配成功!n); printmem(); return 1; else temp=temp-next; if(flag=0) tempId+; if(tempId=9) int rs=split(tempId); if(rs=-1) printf(没有合适的空间可分配!n); return -1; else requestb(size)

12、; else printf(没有合适的空间可分配!n); return -1; free(temp); int main() init(); int flag=1; int size; char order; do printf(请输入命令:(以空格相隔,示例:r 8)n); scanf(%c %d,&order,&size); if(order=r) requestb(size); else if(order=f) freeb(size); else printf(error!); printf(是否继续?(1继续,0退出):); scanf(%d,&flag); getchar(); wh

13、ile(flag=1);结果图:2. 页故障率反馈模型源程序; #include #include #include #define MAX_WORKSET 10#define WINDOW_SIZE 20int mempage=10; int procArrayWINDOW_SIZE; int winMAX_WORKSET2;double maxRate=0.8,minRate=0.2;double curRate;int cur_workset=3;int conflictCount=0;void print() curRate=(double)conflictCount/(double)

14、WINDOW_SIZE; printf(缺页故障率:%g,故障率上限/下限:%g/%gn,curRate,maxRate,minRate);void changeArray() int i; for(i=0;iWINDOW_SIZE;i+) procArrayi=rand()%mempage; printf(进程调用页面序列:); for(i=0;iWINDOW_SIZE;i+) printf(%d|,procArrayi); printf(n);void init() int i,j; /changeArray(); for(i=0;iMAX_WORKSET;i+) wini0=-1; wi

15、ni1=cur_workset; void changePage(int number) int i,flag=0; for(i=1;icur_workset;i+) if(winflag1 = wini1) flag=i; winflag0=procArraynumber; winflag1=1; conflictCount+; for(i=0;icur_workset;i+) if(i!=flag & wini1!=-1) wini1+; void step(int number) int i,hit=0; for(i=0;icur_workset;i+) if(procArraynumb

16、er = wini0) /number+; hit=1; break; if(hit=0) changePage(number); void run() int i; conflictCount=0; changeArray(); for(i=0;imaxRate) cur_workset+; else if(curRateminRate) cur_workset-; int main() init(); char quit; do run(); print(); feedback(); printf(输入任意字符继续,q退出n); scanf(%c,&quit); getchar(); wh

17、ile(quit != q);4、结果分析与实验体会存储管理是操作系统中最重要的组成部分之一。在早期计算时代,由于人们所需要的内存数目远远大于物理内存,人们设计出了各种各样的策略来解决此问题,其中最成功的是虚拟内存技术。它使得系统中为有限物理内存竞争的进程所需内存空间得到满足。我们以Buddy Heap算法为例,实现模拟Linux系统中连续内存分配。BH算法具有速度快的明显特点,同时解决了外碎片问题,但带来内碎片,这是由于实际请求一般不能恰好与2i相对应,此时必须向上取整。对于更大块的请求内碎片的浪费更严重。为此Linux将剩余的内碎片按2j整数次幂切片并由二次分配器进行单独管理。此外当进程物

18、理空间不要求连续时,内存分配由第三分配器完成。此外,这个实验还需要很好的理解FIFO算法,这是最简单的页面淘汰算法,在实现时,对应每一个页面需要有一个调入时间,该时间可设在内存中并用软件记录,不过最好设在寄存器中并由硬件记录。当内存空间紧张时,调入时间最早的页面将被淘汰。FIFO算法易于理解和编程,但它的效率不高。被置换的页面可能存有一个初始化程序段,很早以前曾用到,以后不会再用到;但也可能存有一组经常访问的全局变量,初始化时被调入内存,在整个程序运行过程中都将会用到。这次实验难点在理论方面,在理解了之后操作比较顺利。 友情提示:范文可能无法思考和涵盖全面,供参考!最好找专业人士起草或审核后使用,感谢您的下载!

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

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