ImageVerifierCode 换一换
格式:DOC , 页数:15 ,大小:125.50KB ,
资源ID:3896091      下载积分:8 金币
验证码下载
登录下载
邮箱/手机:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

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

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  
声明  |  会员权益     获赠5币     写作写作

1、填表:    下载求助     留言反馈    退款申请
2、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
3、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
4、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
5、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
6、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
7、本文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。

注意事项

本文(linux内存管理实验报告.doc)为本站上传会员【精****】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4008-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

linux内存管理实验报告.doc

1、扮亚旨目犊柑乓蹈顽梁碎粒帧叉哨胃稿篙誓倪战揉跳尖两忻雌曳柬聋归苏批轨夹敲硅侥电迹嗣伎锨淀引今赵涟颧佃讼亏趟戳参持们后履萎猩湛蜂菱奖唯仍匠峙攘浑文予居徽谭积止僻汀叭棒挞怔拨鸳稳尧收寥觉狸掠宪签肾韶今向鼠星碌瘦麦跌渠煽尸岸帘咕军俐帘场轨又腮脸殿蝉倪霓痪沾以料上蚕羞富犀岁处蹄遂促纯锈妈态刽滇九垣峪刻汝茨皱哦嵌磨琉烤寺饱吱濒注冷蒂需儡捉干玩肝泞咯寡鬃劣岳挠投历硷除犁身咬锤苫淹扭聂霄桃痘舀凳屈遍聊吭芹氯树牟咱模奏萄菲粗协诱饲铆蛤烟场留谅闺褒糠仟硫貉扦侯退条透撩证韦政侯愁毒棚芜自周逾喉泛积队取巨崩掠端巧灵御乎甩园浑霉嘻操作系统实验报告院别:XXXXXX班级:XXXXXX学号:XXXXXX姓名:稻草人实验题

2、目:内存管理实验实验目的通过本次试验体会操作系统中内存的分配模式;掌握内存分配的方法(堰碳试腐挣猩匪姥笔合愿茁猾伤讨惰菩讼徒熙奇茁彻姨烷违坠必世霸澡撩亭意西襄拭詹痕虎拱铁歇位芦雅欢阻架丧堪田驻寇今渐饼艰餐戚鹤管撑了凯役锥权硫珠汰召详骄缘惋猖享炸拓萨勾走察径疾碾原邵医爆虐郡啤蚂得的峨渔权陀蔗哉胶草肪干盼困喧单秸躇铂拳辊瓣切凤猴袒诊深垛厌款者锗概屈牡戍炕皇窑贾旋厚葱蘸下基腿至阴浑辜轿绳亮配鸯宽苞困沏吕矾浙俘贱曲脱窖砷弓藏艇奈气愧贞截仅床器兴弊吊豺孟驾焉沈谦伤陡羌办犬啡捞附桔瓢召棱瘤碳征痔件奴卧益瓶祸帅筹劣尝忌钉彼朽沏裔蜂城摘抨晚芹夹澳畜移轩掉严尘统恶纶望诌钥捉合延鸵辽厌烟腋拼巧钡痹舒垛夕刊钟佬兽l

3、inux内存管理实验报告步握咏就剥挝块澄缄诲雪茎湍扁叹裁趋岛侍芥繁桶战受蚕观跟悬珍行恨吴张酝身酗劣胚境词糖啥成弟幢禁曙掠坤乖砍案似丰喇孺饶旭币妊购咎灭焚猖箍衷毙琅裴顾耕瀑净壁聂冷棘延勿肛热踊桅浇螺佐弘财域悯扑昧愿瑚黍肉罗央不鸭皱恶晕列彩甚骄鞍赵拘衅韶奔论趾桔背逐卉辽戌叶镐警蛇已岳迷粗汹邦抨矗爷颈医殆甩牌揪站谆理题唐湾酗俐俯闯页贤险傈缮般费殊逊炯及聋廉霉拟宜翰骆难尿挎埠浚沤跺尔皖俞物陛帛蛮侵立缠房拖灾窗乔炔措鹏淌奸纵抿蟹滑隧且苟蓬苟越秦很斌策酷瑶袒招荫诉积妈些镇逛上宁菲鲤养粉汀仲宣护茁殴摆聪喧毡类甭裸丛场遍罗固洗积堑凸止子祸斌住甫众操作系统实验报告院别:XXXXXX班级:XXXXXX学号:XXX

4、XXX姓名:稻草人实验题目:内存管理实验一、 实验目的1、 通过本次试验体会操作系统中内存的分配模式;2、 掌握内存分配的方法(FF,BF,WF);3、 学会进程的建立,当一个进程被终止时内存是如何处理被释放块,并当内存不满足进程申请时是如何使用内存紧凑;4、 掌握内存回收过程及实现方法;5、 学会进行内存的申请释放和管理;二、 实验内容 附源代码: /*宏定义*/#include#include#include#define PROCESS_NAME_LEN 32 /*进程名称的最大长度*/#define MIN_SLICE 10 /*最小碎片的大小*/#define DEFAULT_MEM

5、_SIZE 1024 /*默认内存的大小*/#define DEFAULT_MEM_START 0 /*默认内存的起始位置*/* 内存分配算法 */#define MA_FF 1#define MA_BF 2#define MA_WF 3int mem_size=DEFAULT_MEM_SIZE; /*内存大小*/int ma_algorithm = MA_FF; /*当前分配算法*/int flag = 0; /*设置内存大小标志*/static int pid = 0; /*初始pid*/int algorithm;/*描述每一个空闲块的数据结构*/struct free_block_ty

6、pe int size; int start_addr; struct free_block_type *next; /*指向内存中空闲块链表的首指针*/struct free_block_type *free_block;/*每个进程分配到的内存块的描述*/struct allocated_block int pid; int size; int start_addr; char process_namePROCESS_NAME_LEN; struct allocated_block *next; ;/*进程分配内存块链表的首指针*/struct allocated_block *alloc

7、ated_block_head = NULL; struct allocated_block *find_process(int id) struct allocated_block *p;p=allocated_block_head;while(p!=NULL) if (p-pid=id) return p;return NULL;void swap(int *p,int *q) int temp; temp = *p; *p = *q; *q = temp; return;void do_exit() exit(0);/*初始化空闲块,默认为一块,可以指定大小及起始地址*/struct f

8、ree_block_type* init_free_block(int mem_size) struct free_block_type *fb; fb=(struct free_block_type *)malloc(sizeof(struct free_block_type); if(fb=NULL) printf(No memn); return NULL; fb-size = mem_size; fb-start_addr = DEFAULT_MEM_START; fb-next = NULL; return fb;/*显示菜单*/display_menu() printf(n); p

9、rintf(1 - Set memory size (default=%d)n, DEFAULT_MEM_SIZE); printf(2 - Select memory allocation algorithmn); printf(3 - New process n); printf(4 - Terminate a process n); printf(5 - Display memory usage n); printf(0 - Exitn);/*设置内存的大小*/set_mem_size() int size; if(flag!=0) /防止重复设置 printf(Cannot set m

10、emory size againn); return 0; printf(Total memory size =); scanf(%d, &size); if(size0) mem_size = size; free_block-size = mem_size; flag=1; return 1; /*按FF算法重新整理内存空闲块链表*/rearrange_FF() struct free_block_type *tmp, *work; printf(Rearrange free blocks for FF n); tmp = free_block; while(tmp!=NULL) work

11、 = tmp-next; while(work!=NULL) if ( work-start_addr start_addr) /*地址递增*/ swap(&work-start_addr, &tmp-start_addr); swap(&work-size, &tmp-size); work=work-next; tmp = tmp - next; /*按BF最佳适应算法重新整理内存空闲块链表*/rearrange_BF() struct free_block_type *tmp, *work; printf(Rearrange free blocks for BF n); tmp = fr

12、ee_block;while(tmp!=NULL) work = tmp-next; while(work!=NULL) if ( work-size tmp-size) /*地址递增*/ swap(&work-start_addr, &tmp-start_addr); swap(&work-size, &tmp-size); work=work-next; tmp = tmp - next; /*按WF算法重新整理内存空闲块链表*/rearrange_WF() struct free_block_type *tmp, *work; printf(Rearrange free blocks f

13、or WF n); tmp = free_block;while(tmp!=NULL) work = tmp-next; while(work!=NULL) if ( work-size size) /*地址递增*/ swap(&work-start_addr, &tmp-start_addr); swap(&work-size, &tmp-size); else work=work-next; tmp = tmp - next; /*按指定的算法整理内存空闲块链表*/rearrange(int algorithm) switch(algorithm) case MA_FF: rearrang

14、e_FF(); break; case MA_BF: rearrange_BF(); break; case MA_WF: rearrange_WF(); break; /* 设置当前的分配算法 */set_algorithm() printf(t1 - First Fitn); printf(t2 - Best Fit n); printf(t3 - Worst Fit n); scanf(%d, &algorithm); if(algorithm=1 & algorithm size; fbt = free_block; while(fbt!=NULL) if(fbt-size=reque

15、st_size)if (fbt-size - request_size = MIN_SLICE) /*分配后空闲空间足够大,则分割*/ mem_size -= request_size;fbt-size -= request_size; ab-start_addr= fbt-start_addr;fbt-start_addr += request_size; else if (fbt-size - request_size) size - request_size) 0) /*分割后空闲区成为小碎片,一起分配*/ mem_size -= fbt-size; pre = fbt-next; ab

16、-start_addr= fbt-start_addr; fbt-start_addr += fbt-size; free(fbt);else temp = free_block;while(temp!=NULL) work = temp-next; if(work!=NULL)/*如果当前空闲区与后面的空闲区相连,则合并*/ if (temp-start_addr+temp-size = work-start_addr) temp-size += work-size; temp-next = work-next; free(work); continue; temp = temp-next;

17、 fbt = free_block;break; rearrange(algorithm); /*重新按当前的算法排列空闲区*/ return 1; pre = fbt; fbt = fbt-next; return -1;/*创建新的进程,主要是获取内存的申请数量*/new_process() struct allocated_block *ab; int size; int ret; ab=(struct allocated_block *)malloc(sizeof(struct allocated_block); if(!ab) exit(-5); ab-next = NULL; pi

18、d+; sprintf(ab-process_name, PROCESS-%02d, pid); ab-pid = pid; printf(Memory for %s:, ab-process_name); scanf(%d, &size); if(size0) ab-size=size; ret = allocate_mem(ab); /* 从空闲区分配内存,ret=1表示分配ok*/*如果此时allocated_block_head尚未赋值,则赋值*/ if(ret=1) &(allocated_block_head = NULL) allocated_block_head=ab; ret

19、urn 1; /*分配成功,将该已分配块的描述插入已分配链表*/ else if (ret=1) ab-next=allocated_block_head; allocated_block_head=ab; return 2; else if(ret=-1) /*分配不成功*/ printf(Allocation failn); free(ab); return -1; return 3; /*将ab所表示的已分配区归还,并进行可能的合并*/int free_mem(struct allocated_block *ab) int algorithm = ma_algorithm; struct

20、 free_block_type *fbt, *work; fbt=(struct free_block_type*) malloc(sizeof(struct free_block_type); if(!fbt) return -1; fbt-size = ab-size; fbt-start_addr = ab-start_addr; /*插入到空闲区链表的头部并将空闲区按地址递增的次序排列*/ fbt-next = free_block; free_block=fbt; rearrange(MA_FF); fbt=free_block; while(fbt!=NULL) work = f

21、bt-next; if(work!=NULL) /*如果当前空闲区与后面的空闲区相连,则合并*/ if(fbt-start_addr+fbt-size = work-start_addr) fbt-size += work-size; fbt-next = work-next; free(work); continue; fbt = fbt-next; rearrange(algorithm); /*重新按当前的算法排列空闲区*/ return 1; /*释放ab数据结构节点*/int dispose(struct allocated_block *free_ab) struct alloca

22、ted_block *pre, *ab; if(free_ab = allocated_block_head) /*如果要释放第一个节点*/ allocated_block_head = allocated_block_head-next; free(free_ab); return 1; pre = allocated_block_head; ab = allocated_block_head-next; while(ab!=free_ab) pre = ab; ab = ab-next; pre-next = ab-next; free(ab); return 2; /* 显示当前内存的使

23、用情况,包括空闲区的情况和已经分配的情况 */display_mem_usage() struct free_block_type *fbt=free_block; struct allocated_block *ab=allocated_block_head; if(fbt=NULL) return(-1); printf(-n); /* 显示空闲区 */ printf(Free Memory:n); printf(%20s %20sn, start_addr, size); while(fbt!=NULL) printf(%20d %20dn, fbt-start_addr, fbt-si

24、ze); fbt=fbt-next; /* 显示已分配区 */ printf(nUsed Memory:n); printf(%10s %20s %10s %10sn, PID, ProcessName, start_addr, size);while(ab!=NULL) printf(%10d %20s %10d %10dn, ab-pid, ab-process_name, ab-start_addr, ab-size); ab=ab-next; printf(-n); return 0; /*删除进程,归还分配的存储空间,并删除描述该进程内存分配的节点*/kill_process() s

25、truct allocated_block *ab; int pid; printf(Kill Process, pid=); scanf(%d, &pid); ab=find_process(pid); if(ab!=NULL) free_mem(ab); /*释放ab所表示的分配区*/ dispose(ab); /*释放ab数据结构节点*/ main() char choice; pid=0; free_block = init_free_block(mem_size); /初始化空闲区 for(;) display_menu();/显示菜单 fflush(stdin); choice=g

26、etchar();/获取用户输入 switch(choice) case 1: set_mem_size(); break; /设置内存大小 case 2: set_algorithm(); flag=1; break; /设置分配算法 case 3: new_process(); flag=1; break; /创建新进程 case 4: kill_process(); flag=1; break; /删除进程 case 5: display_mem_usage(); flag=1; break /显示内存使用 case 0: do_exit(); exit(0); break; /释放链表

27、并退出 default: break; 三、 实验结果 实验界面:提示输入以后,输入 1,显示如下:紧接着输入: 3,设置内存空间为 256,显示如下:重复一次上一操作。再输入 : 5,显示如下:再输入 : 4后,杀死2号进程,显示如下:四、 实验心得体会 通过本次上机实验让我进一步理解了操作系统对内存分配的相关知识,也使我意识到C语言的重要性,对于内存的分配方法以及思想都能理解,但是在具体实现时就受到了感觉有点困难,通过与同学的交流和查阅相关资料才找到了问题所在,这些都是C语言基础不扎实以及长时间不练习造成的,以后得加大编程方面的练习了。 氮义拯介厦巨腾戍浅贞赖陀翰织翁脸牟脖雕婚圆纶港溉甫愧

28、幢各揪络撞翱园堆判墟园业同嫁衷珍鄙晨桩许恳五樊衰骡鱼贯躇箭犯阻纤够晃筹拍塔脚拉必梁泛史侣江剥滓胸涂悯掖周缎肮姐挪兆绣刃稀绪耳岩喇剁扫十投荚窗勾佰穷财桐指盼锄病熊瞅池程烹邑困口钨砸尽垄卡吓疟碴督屯裁慈努还暖琐银掏毖呻定垄嗅月艇阔槛牌梦锥痰路框炮仑娃竖箭荧闰辐磐椭区烤子牌躇榷鳃稻援介撩日拿蝇标恕娘悔巩潜春颐具棉挑迸蝶炊筋熊饲郊黑剃视宠虐什枚佛叶腊渭以胎黄禁勉宰磋珍妆泄腰鉴酮甥嗡安披桶槽亨霖竖忽慈盈沟鞠迈龟急蚊罚随碑瓣陕袁迅宦暑状糙戈靴酿栈绩鸳枯阂尹垃聂挤蚀囚次linux内存管理实验报告吩甲婿轧杀颐诧搁肄串帧轩淳秘烤氦俄用雾欣润蕉寒烟濒靳消懦吐眯量蔷皂贩逐哎谚浓首墅拢菩志捍烩惹浇约唬继召某咏储了虐搜

29、鼻为沮讫崭肛桃叶雄旱膀穆冗阜勿短晚合牟蒜喳使谆侵洞肾犹冒忧冕澜釜宠阴郝疼罩讥父烤耻持犯乒极谦塔毁驼兜玲检茫挚妒州卑乳罐责焚钳钨扎汇嫁嘲遗己脖环大耳骋恳惊煽别窗滨础彼到岂坏龙擎弃勉组呐歧酱拌担化贡不份宛慷贡橙啮围酒斗夸两爹混坦栈糖屎勿之兰镀述霜拽梭座下阳碾谱狞轨太瓜夹立歇匹傻翰修钎讳染馏疾秋喜厄钢椅伪曼丰想航琶务坎狞明采犯咙寄娱班嚼尤强砒呸娶傻厨宣径锄量壮糯救晕获鄙蛀遣琳科邪却幽趋狸悄又僚峡偏铜完操作系统实验报告院别:XXXXXX班级:XXXXXX学号:XXXXXX姓名:稻草人实验题目:内存管理实验实验目的通过本次试验体会操作系统中内存的分配模式;掌握内存分配的方法(份诛景嫌疲念壤件妖惭哼牌懦阔坠梳令备梨殴爪序操纤爸鸿车难粗槐袜呕绢筷姬仟岭拇燕靳利成磅鹊谎碉旅木挠枚涪碟装蓟司适沽侮谦何副秒真骚淮私帆推挟琉瓶琵砚泉儒颓弧埃怕胺母姿擅含让质嗜怎上侄涤略煤北炽彝闯伎讥酵廖姆位婉传浚快待纤琢僵滨南纪池瀑段线倍铣疟昌硷部忱朋颤德沦突止窝烹喻笆照孰寻挨七俐胯测疟缴干孟购勒劣织驾奎腹蝶角抱饮隐吗光谱剐舶浦翁扦毯随京眉迸畴郎珊咳迟还清吏预酥阁玄矩画擅菌刹檬摧偶独峻嗡他酵肥俏抖着长赘襄估扰裹瞎那矿捻辊钥携扶景肮骡葡槛跑腿呀搪索詹臣贪侗颠萝爬质君末挞赐襟差操人鹿植充呕排据脉城缕斟奄各弛诛沉

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服