(完整word版)linux操作标准系统实验三CB_第1页
(完整word版)linux操作标准系统实验三CB_第2页
免费预览已结束,剩余15页可下载查看

下载本文档

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

文档简介

1、1 / 16电子信息学院实验报告书【验证】BX090724朱杰评语:实验态度认真()一般()差()实验结果正确()部分正确()错()实验理论掌握()熟悉()了解()不懂()操作技能强()一般()差()实验报告好()一般()差()成绩:-指导教师:_胡静课程名题目:实验类别班级:学号:姓名:Linux 操作系统实验实验三存储管理试验1 / 16批阅时间:年 月日1 / 161、 实验内容或题目1(1)模拟初始内存页面分配(数组、结构体均可)(2)实现 Buddy heap 算法(3)通过键盘输入随机产生申请和释放操作*请求:r8 代表申请 8 个页面。*释放:f4 代表释放 4 个页面。注意:h

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

3、de 2 I 16#in elude typedef struct blockII定义一个内存块的结构体int size;II 块的大小int start;II 块的起始位置int loc;II 是否占用struct block *n ext;指向下一个块的指针struct block *prior;II 指向前一个块的指针block;int maxsize=512;可分配的内存空间总量block *n ote;II 初始化的结点block *id10; II 链表头的数组II 打印内存状态函数void prin tmem()int i;for(i=9; i=0;i-)prin tf(%d-,

4、i);block * temp = (struct block *)malloc(sizeof(struct block);temp = idi-n ext;while(temp!=NULL)printf(%d(%s)(%d)-,temp-size,temp-loc=1?占用:空闲,temp-start);存块的大小、状态、起始位置temp=temp-n ext;prin tf(n);II 初始化void in it()int i; 输出内3 / 16for(i=0;iprior=idi;idi-next=NULL;no te=(struct block *)malloc(sizeof(str

5、uct block);no te-size=maxsize;no te-start=0;no te-loc=0;no te- next=NULL;id9=(struct block *)malloc(sizeof(struct block); id9-n ext =no te;id9-prior=id9;no te-prior=id9;prin tmem();int power(int x,int y)/计算 x 的 y 次幕int k=0,tmp=1;for(;kn ext;int flag=0,isFirst=0;while(pe nd!=NULL)if(pe nd-loc=0)/ 可拆分

6、/卸载被拆分结点if(isFirst=0)idtempld-n ext=pe nd-n ext;else pen d-prior- n ext=pe nd-n ext;/拆分后的结点初始化int size=(pe nd-size)/2;int start=pe nd-start;n ewu-size=size;n ewu-start=start;n ewf-start=start+size;n ewu-loc=0;n ewf-size=size;n ewf-loc=0;n ewf-prior =n ewu;n ewu-n ext =n ewf;n ewf- next=NULL;tempId-;

7、cen d=idtempld;while(ce nd- next!=NULL)cen d=ce nd-n ext;/被拆分结点/挂载点/拆分后的第二个结点/拆分后的第一个结点5 / 16cen d- next =n ewu;将拆分后的结点进行挂载n ewu-prior=ce nd;flag=1;return 1;else pen d=pe nd-n ext;isFirst+;if(flag=O)templd=templd+1;if(templdn ext;int n extStart=first-start+first-size;int preStart=first-start-first-s

8、ize;int flag=0,isFirst=0;while(seco nd!=NULL)if(sec on d-start=n extStart | sec on d-start=preStart) & sec on d-loc=0)/初始化合并后的结点6 / 16merger-size=(first-size)+(sec on d-size);merger-loc=0;merger-start=(first-start)start)?(first-start):(secon d-start);/卸载可合并的结点if(first- next!=NULL)first- n ext-pr

9、ior=first-prior;if(first-prior-prior)=first-prior)idtempld-n ext=first-n ext;else first-prior- n ext=first- n ext;if(seco nd- next!=NULL)sec on d-n ext-prior=secon d-prior;if(isFirst=O)idtempld-n ext=sec ond-n ext;elsesec on d-prior- n ext=sec ond-n ext;/挂载合并后的结点templd+;merger- n ext=idtempld-n ext;

10、merger-prior=idtempld;if(idtempld-n ext!=NULL) idtempld-n ext-prior=merger;idtempld-n ext=merger;if(templdn ext;return 0;7 / 16isFirst+;return 1;内存释放int freeb(i nt size)block * first=(struct block *)malloc(sizeof(struct block);int templd=root(2,size);first=idtempId-n ext;int flag=0;while(first!=NULL

11、)if(first-loc=1)first-loc=0;flag=1;break;else first=first-n ext;if(flag=1)merge(templd,first);/ 归并prin tmem();else printf(需要释放的内存块不存在!n);return -1;8 / 16int requestb(int size) / 申请 size 个页面block * temp=(struct block *)malloc(sizeof(struct block);int tempId = root(2,size);int flag=0;temp=idtempld-n e

12、xt;while(temp!=NULL)if(temp-loc=0 & temp-size=size)分酉己temp-loc=1;flag=1;printf(分配成功!n);prin tmem();return 1;elsetemp=temp-n ext;if(flag=0)templd+;if(templd-*Imythdubuntu:5 ./buddy9=512(闲M3) a1 - Q -请輸人命令:(臥空ta相隔示例:8) )r128分配成功!9-8-256(空闲)()(25砧“:7128(占用)(6) 128(空闲(128)6 -5-4-是否维域?门地境6逋岀:1请输人命令:臥

13、空楷相示例:8)64分配麻功!95-256(1 H256)-7-128(占用1 te) )-6- 64(占用Ml囲)-翅4(空嗣5-4-3-2 -1 -A0 -是習维燥?门维壊.81E出丨:1片 L-1kEythd回ubuntu: *M味人矗令;规空梧相陶,示柄;时64fM-87&5 4 32 10牌 g FImyttidiubuntu:请输入布令:(以空格相降,示例r 1萸 分配成功!7128(占用)(3-128(占用6-64(占用】(170) -=-64(空闻5-4-白-A是否继英继境.G) )退di 1:1请输入陆令:(取空搐相隔,示制r 64分配成功F7128(占用)(0)12

14、8(占用6-64(占用】(128) 64(占用0 退出):丄请输入醋令H取空帼相隔,示便f 645- *7-128(占用)10)*12E占用6小&4空闲)(128)54(占用4-2 -L -9+星段绽块和L堰愎,0追出):1120(3 )(128h128(占用1(0;128(占用1(2561 120 H ) 1334;-雄否业蜒?门塑釀-SiBifi ):1谪味人矗令汀规空柜相冏,示的;r 9 f 12BJ255($ He)- =126(占冃)12561*128(畳香馆填?1捱釀.Sififfi ):1诅宦A矗令汀臥空梅相両,示柄;r 9) f 12B9 -512(SW )()-3-是

15、査馆填?1垣境.dig ffl ):0lmythdukHintu;i |)(256) 128(空闲) )(384)-)(256)- 128(空闲)估B4) - a:B)j (25和:-12肌空闲) )(384)-11 / 162.页故障率反馈模型源程序;#i nclude #i nclude #i nclude #defi ne MAX_WORKSET 10#defi ne WINDOW_SIZE 20int mempage=10; /内存页面总数(进程要访问的页面从0 到该范围内随机生成)int procArrayWINDOW_SIZE; /进程访问页面序列int wi nMAX_W0RKS

16、ET2;工作集double maxRate=0.8,minRate=0.2; 故障率上下限double curRate;int cur_workset=3;int conflictCount=0; 故障次数void print()程序输出函数curRate=(double)co nflictCou nt/(double)WINDOW_SIZE;printf(缺页故障率:%g,故障率上限 /下限:g/%gn,curRate,maxRate,minRate);void changeArray()动态改变访问页面序列int i;for(i=0;iWINDOW_SIZE;i+)procArrayi=r

17、a nd()%mempage;printf(进程调用页面序列:);for(i=0;iWINDOW_SIZE;i+)prin tf(%d|,procArrayi);prin tf(n);void init()/初始化工作集和页面序列12 / 16int i,j;cha ngeArray();for(i=0;iMAX_WORKSET;i+)wi niO=-1;wi ni1=cur_workset;void changePage(int number) 换页int i,flag=O;for(i=1;icur_workset;i+)if(wi nflag1 = win i1) 寻找最先进入的flag=

18、i;win flag0=procArray nu mber;/ 换页wi nflag1=1;conflictCount+; 冲突次数加 1for(i=0;icur_workset;i+)if(i!=flag & wi ni1!=-1)工作集进入顺序处理wi ni1+;void step(int number)/ 调用一次内存页面int i,hit=0;for(i=0;icur_workset;i+)if(procArray number = wi ni0) 命中nu mber+;hit=1;break;13 / 16if(hit=O)尚未命中cha ngePage( nu mber);

19、/ 换页nu mber+;/retur n nu mber;void run()程序运行int i;con flictCo un t=0;cha ngeArray();for(i=0;imaxRate)cur_workset+;else if(curRatei&|B|6|9|6|3|alS|fil|l|5l冲突京故:故匱军:,7,i5( (Rs/TPR:e.5/e.2冲灭;XU: E筑缺页故隍聿:) )5,故隍宰上曄/下曜:e.8/6.2焉入任言宇符卑找,q退出进程用皿如序菊:Z|l|7B|5|7|4|l|8|5|9|7|5|3|8|li|3l|B|9f -冲克窪BS: th缺页覘區率

20、:P托乳酿35率上配厂F昭:9,0/6.3端人任倉手苻握集qifi出进ISifl用页直呼列:6|4|3|3|3|8|&|6|4|8|8|8|9|7|7|5|4|3|3|冲突圧裁突圧裁LirEmesss即:日宀5摊琴审上凉/下幅:e.B/e.2輔人任足审将19换”q诲出c逍程谓ffiraWF?列:&|S|2|5|4|Q|5|9|4|6|9|2|?|4|7|7|5|4|B|J|冲鉴取理:L和缺页故變率;0.65; &,S/e.2储人任吉宇符堂蟾.qiEtti进fiiflfflPllfilff :2|a|9|3|6|8|0|2l|&|5|l|l|e|8|5|e6|4|

21、6|冲裏蕊敢:垃HlSStS樂:日一$5.5 35率上更/下限!0.0/B.2输入任範孚哥堆读,qifi出址程W面序列:2|5|8|4|2|fl|4|7j2t4|0|Z|9|9|9|S|l|3|l|冲夬戻数:L3:歆词轨険率:氐站煤誥率上陀/节恠;9.0/e.2 Si人任总宇苻墮裟.qiEiilE迥程谓匿貝冈序列:L|e|3Kle|3|9|l|9|6|9|3p|a|e|5|B|6H|fl|冲宽蕊趣:ti,iJiiuss直率:日”,乳故写車上理/下唱:&,e/e.j筛入任意芋符變绪,qifi出4讯廉常用艮箭睜列:a|4|B|2ti|7|5|fi|9|B|7|2|B|2|9|9|fi|8|2|7|冲夹窝觀:19rWRSSST:日.5.尿阳峯上隔/下限:0.B/A.2韓人任竜爭軒迪读qilc诳程i用mil序列:&|l|3|2|l|5|9|l|4|9| 1|B|7|5|B|7|Q|4|冲裏凰朝;直玻为故陞率;9.6,s率上盟/下辱:e.a/.2悔人任言宇

温馨提示

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

评论

0/150

提交评论