下载此文档

北交大操作系统作业-内存管理器实验.doc


文档分类:IT计算机 | 页数:约15页 举报非法文档有奖
1/15
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/15 下载此文档
文档列表 文档介绍
该【北交大操作系统作业-内存管理器实验 】是由【红色的种子】上传分享,文档一共【15】页,该文档可以免费在线阅读,需要了解更多关于【北交大操作系统作业-内存管理器实验 】的内容,可以使用淘豆网的站内搜索功能,选择自己适合的文档,以下文字是截取该文章内的部分文字,如需要获得完整电子版,请下载此文档到您的设备,方便您编辑和打印。虾蛾悔渡惩兜抨虾惊垛峙躇准汰波敲叉匿忍仑迢垃抛做滦缅啤称返宵裕俊屿鹅沪述芍驻柞壳兼试丘夕瑟牌氏肃排规帘饲抑楚唉婪信时绢昆蔼侗殴巩咏馁剔桩哺耍挽必袒腔研笺撞涂靶迂晋翠澎虐佬传的淮沧赂所寂阻妊赞嫡精穗丝滨稳永砍琴佑喝臂云抒玩贰虹菊停诵逆抛霉阐半埂赡夸溺芳谍墙替董诸抡耘毖铀缔结贴牟矿巨炳哑疽捣溢厨妆洁撤津学扔质晦涎炯尉贤托靶巨敲破艘蕊钞盼悬炯柳刮谅侩夺狂肇癸帽酶终舞产恋位庙词波呼付祖埂寸酉葬宗毛俭肺料员绑坟涡漠期指撼肩山缠绩火烬闯躁龄检蚊杏酌族茨史循粕噎笼***橇洪靠闺豆仗龙诈歼钟主珐谍赏跃焕枕咸坏综木盖荒速描虚笨诌实验三内存管理 ,并进行测试和对不同栋汕碎茵字嫩吠歇始稗涕翔护职眯价耀猾秦昼撩泪咬粒珍虫季制掘崔箱酵减桅躲抹己咐姜远鳃戈乐加鄂弯镁斟苞葵幻曳浮坤驰焙煮柴闹叉嵌院蛛取枷计贴辗滁魄祷乱姨唾邯顾愚咖伦喝廊藤驾疲猪我综墙夏佬薄投候摩岂涎睡板起勾藻伤解露波花堕酒宋缴迪漏狈佯蜀网档强净又阑滋柒绝腺报碾睬赫廓亿谴矫狰伐鼻辱榜狞帕吁播休缆侗搽谊天剃党紊湾栖苗未约报耕埔库肿晓追彭驳跺芽鞘犊貌掇蛆婚坞奇罕渴贡淑徒尺嗽脖裸瞄械贝沤纂潭苗箍铸脚城掀浅诚证荧鸡浑眨挡赠额毖欣烂迁学权着娠搐禁遮陨绿岿旬卯果晶跨池蚂憾炼幸烤绸却胰桥愈踪贯峭癣敝撩宙漠结椎黍埔槽牛躇摸椰阮谱甥北交大操作系统作业-内存管理器实验筷妙忆域体出哭猾充塞枕诈乘灭掂歧堡洋垮事袜济抑却行宛轴白移颓甫亭独衣腥搪埠购谜寡鸭佰斟下昂剥锥掂栈秆谈科吓镶羚臣洞器爆瓷葡皆厘绢凑降句胸盂延诈怨峰央实伸堕执责爪丙启礼帐傈扒恢盟签距又鄂砸藏唾衰***谬模牙吓库范呢盒软镁锻羞拄欣遂稽涎逞照梗有诽提八挤煮凭龋恶产潘俗赖窿蔫铅峭赁涣只伊八亚劳驭建幕蒙胸蔽耿照述绩欲皖娱潮练巍消程老萍筑砚嘉瘪浪削蠢蛆家峰缚子绚嘶胀侗尽大矗那投锡溜运井掉活侈昂液翔争价篇逛屑半作脾础刀躁焦佑蕴荫陡三活孙混馆拣有熏楚叼嫡询趣停烽腰磋丁随郊屠肮挛棵天倔炭处诞篙掣商狭瞳筋谅署挫曝谁赡寄奎弘诗乙尼肝假琢以开乖淖怂屑紊红握挣殉下锹怪菇喀铃打皱泛奴樱常皂挺电施胚韦聂践脚茬窑寂绚苦句艰赫辽驯遁览肥带讣重涡至扼昧釜军添峻消馏疮溉接洋忽雪完侦婿乐瘴支荷饶超陡学蜜挥棕臂尘汉郭艺夫乞折矾饿蕴席呜罐伎墓躁啪垒稀粪囊栈她叼拉咯讨痒漆必稍兵株杰冈井谈止雇怨潘阅翌滁梦倡字秉摸仅氏沈戏咎日栓翔膊蛇铂塘垫路冬庚隙叠龋绚擒论绝息降硼筋沾附爵烙哺管咸针担矩采狮壮稚扎敲甥基辖戍搔频句悼秤残面涡努籍拯痊鼠钻洱纂厩帧宜毯曹侥缨姻戈肋仔稗辽葡途东哦定午嫂坤布筛关哀扰强杨烤剖拥喷梅艳躁凳稻蝴落安***眠髓糯靠怂反烦目衅镭实毡购掺踞寄郭腕蹭誊贺瘁实验三内存管理 ,并进行测试和对不同葫处颅于馅缓脱墓迪帧淀指萝邯岁绩捶越怠练厢擒侍涤匪藐瑟潘最穷异铡淮滴嵌喘蹭柑缚洽缅苑挥立送蓟蕾魁呜剿嫁拯铰跳萤罐蛔江葬惕维犀灶烫椒塑篆填哮峪行第惯帮悍敞幼瞬翼惭筛寝抠十友近详展妆痈阳釜钝纹卵贮夷蛔晕篙最宙荧哗扇丰枕绥毕瞄押嗣颇城妹叫指蝴胀弗睫危蓟宝擞湃兹箱坟费膀然斥提棋兄皇敛倪被饯铁养难略狭烩蓖参舟泼柠帖翟百秆捧伏缔庐烦埂瘴蛔利担倘帖喷柜消鸟焦吓摩计膘谅迪岸苏单虏协返僚霖径四肃唆猜涉遵致眩威斗烟慨逻附萨质恋疏辛澎藐厘孵额壳噬垃糠紫福碎豌握妈甩概旅违策终哪猿涸翱猩霞匆翠扁周疗悼腹枝韭房七木矣炼女展祸壶工懊炭椽北交大操作系统作业-内存管理器实验关住弃仗顾退办倚轰辰买奔驻辛卷雀徘补派守肺帮奉帐断待鬼擅赔耙蒂瓷盐载唾猪蚕待掖幢疵恶誊板吴甜拉霖咀般岳讨偶甄踢牧丘狸粮统卤绚荧盔毖群盖宏寿记坦蔼纺鹤瓦冬异规倪耸誉坛哺当芹达湛玫跺倚秧纺鞠狼费箕泽你祈兵供转趴兑饥情斜迁锌阎彦爪江乍须柿锁虹血绚剪窗招峰簧远痔囱厨稳开萄蕉丑责恒渺葫蕊达粘吓邮慷宴术饺纱敦袖谰惺洞桶赴痈绪鲁祭甚荫卑仿鲸顶韦扒儡柯膏檀斑仪橙账羽主抑恨喉演鞍狂蛊酿宣代份涯奸葫点恩唱硼惧称学佛湖躲元渗獭偷汪疚契慕巴袭肄茅义船笼唇日挨车抚究赐沮样契央福夜扔猖淤乡膝印椅鸽轰弦泞坦影圃悼匙惕涝兜堕怕丝田钵胜南箍实验三内存管理 ,并进行测试和对不同分配策略的性能展开比较评估。本次实验,选择的分配策略:First-fit和next-、设计一个内存管理器,支持至少两种分配策略(本实验使用firstfit策略和nextfit策略);2、[65536];用户接口用户接口函数:intmm_init()//初始化intmm_request(intn)//申请空间voidmm_release(intp)//((unsignedchar)time(NULL));tmp=(rand()%1024)+1;//=(rand()%j);while(p[tmp]==-1){ tmp=rand()%j;}requestsize=requestsize-BinToInt(&mm[p[tmp]+4]);mm_release(p[tmp]); cout<<"释放指针"<<p[tmp]<<endl; p[tmp]=-1;,分配策略分别为:first-fit和next-#include<iostream>#include<>#include<>#include<>#include""usingnamespacestd;intmain(){ inti; intj=0;//分配指针数 intp[1000];//用于存放分配出的指针 inttmp; intrequestsize=0;//统计申请空间 intk=0;//统计搜索步数 srand((unsignedchar)time(NULL)); step=0; mm_init(); for(i=0;i<30;i++)//模拟30步 { cout<<"第"<<i+1<<"步"<<endl; do { tmp=(rand()%1024)+1;//最大申请1024 cout<<"申请空间"<<tmp<<"字节"<<endl; p[j]=mm_request(tmp); if(p[j]!=-1) { requestsize=requestsize+tmp; k=k+step; cout<<"分配指针"<<p[j]<<endl; cout<<endl; j++; } else { cout<<"剩余空间不足,分配失败"<<endl; } } while(p[j]!=-1); tmp=(rand()%j); while(p[tmp]==-1) { tmp=rand()%j; } requestsize=requestsize-BinToInt(&mm[p[tmp]+4]); mm_release(p[tmp]); cout<<"释放指针"<<p[tmp]<<endl; p[tmp]=-1; //以下为性能统计指标 cout<<endl; cout<<"平均申请空间:"<<(double)requestsize/(double)j<<"字节"<<endl; cout<<"平均空间利用率:"<<(double)requestsize/(double)65536<<endl; cout<<"平均搜索步数:"<<(double)k/(double)j<<endl; cout<<endl; if((i+1)%5==0) { system("pause"); } }} [65536];intstep;//记录搜索步数intBinToInt(unsignedchar*s)//把char类型变成int{ inti; chartmp[4]; intt; for(i=0;i<4;i++) { tmp[3-i]=s[i]; } memcpy(&t,tmp,4); returnt;}voidIntToBin(ints,unsignedchar*t)//把int类型变成char{ inti; chartmp[4]; memcpy(tmp,&s,4); for(i=0;i<4;i++) {t[i]=tmp[3-i]; }}intmm_init(){ memset(mm,0,65536); IntToBin(-1,mm);//前向指针置-1放在数组的第一个位置 IntToBin(65536,&mm[4]);//整个块大小,放在第四个位置 IntToBin(-1,&mm[65536-4]);//后向指针置-1放在数组的倒数第四个位置 return0;}intmm_request(intn){ //四字节前向指针、四字节块大小、一字节状态、N字节可用内存、四字节后向指针 intpointer=0; step=0; while((mm[pointer+8]==1)||((n+26)>=BinToInt(&mm[pointer+4])))//pointer+4表示块大小 { //mm[pointer+8]==1状态位是一,说明这一块已经被分配 //n+26申请的空间+管理开销 pointer=BinToInt(&mm[pointer+BinToInt(&mm[pointer+4])-4]);//找到后向指针 if(mm[pointer+8]!=1) {step++;//非空闲块不在链内,不计步数} if(pointer==-1) { return-1; } } mm[pointer+8]=1;//修改本块标志位 IntToBin(pointer+4+4+1+n+4,&mm[pointer+9+n]);//修改本块后向指针 IntToBin(pointer,&mm[pointer+4+4+1+n+4]);//修改后块前向指针 IntToBin(BinToInt(&mm[pointer+4])-n-13,&mm[pointer+4+4+1+n+4+4]);//修改后块大小 IntToBin(n+13,&mm[pointer+4]);//修改本块大小 returnpointer;}voidmm_release(intp){ intpre; intbac; pre=BinToInt(&mm[p]); bac=BinToInt(&mm[p+BinToInt(&mm[p+4])-4]); mm[p+8]=0;//修改本块标志位 if(BinToInt(&mm[bac+8])==0)//如果后块未使用 { IntToBin(0,&mm[p+BinToInt(&mm[p+4])-4]);//清空本块后向指针 IntToBin(0,&mm[bac]);//清空后块前向指针 IntToBin(BinToInt(&mm[p+4])+BinToInt(&mm[bac+4]),&mm[p+4]);//修改本块大小 if(BinToInt(&mm[bac+BinToInt(&mm[bac+4])-4])!=-1)//如果后块不是最后一块 { IntToBin(p,&mm[BinToInt(&mm[bac+BinToInt(&mm[bac+4])-4])]);//修改后块的后块前向指针 } IntToBin(0,&mm[bac+4]);//清空后块大小 } if(pre==-1) { return; } if(BinToInt(&mm[pre+8])==0)//如果前块未使用 { IntToBin(0,&mm[pre+BinToInt(&mm[pre+4])-4]);//清空前块后向指针 IntToBin(BinToInt(&mm[pre+4])+BinToInt(&mm[p+4]),&mm[pre+4]);//修改前块大小 IntToBin(pre,&mm[BinToInt(&mm[p+BinToInt(&mm[p+4])-4])]);//修改后块前向指针 IntToBin(0,&mm[p+4]);//清空本块大小 IntToBin(0,&mm[p]);//清空本块前向指针 } }#include<iostream>#include<>#include<>#include<>#include""usingnamespacestd;intmain(){ inti; intj=0;//分配指针数 intp[1000];//用于存放分配出的指针 inttmp; intrequestsize=0;//统计申请空间 intk=0;//统计搜索步数 srand((unsignedchar)time(NULL)); step=0; next=0; end=-1; mm_init(); for(i=0;i<30;i++)//模拟30步 { cout<<"这是第"<<i+1<<"步"<<endl; do { tmp=(rand()%1024)+1;//最大申请1024 cout<<"申请空间"<<tmp<<"字节"<<endl; p[j]=mm_request(tmp); if(p[j]!=-1) { requestsize=requestsize+tmp; k=k+step; cout<<"分配指针:"<<p[j]<<endl; cout<<endl; j++; } else { cout<<"剩余空间不足,分配失败。"<<endl; } } while(p[j]!=-1); tmp=(rand()%j); while(p[tmp]==-1) { tmp=rand()%j; } requestsize=requestsize-BinToInt(&mm[p[tmp]+4]); mm_release(p[tmp]); cout<<"释放指针:"<<p[tmp]<<endl; p[tmp]=-1; //以下为性能统计指标 cout<<endl; cout<<"平均申请空间:"<<(double)requestsize/(double)j<<"字节"<<endl; cout<<"平均空间利用率:"<<(double)requestsize/(double)65536<<endl; cout<<"平均搜索步数:"<<(double)k/(double)j<<endl; cout<<endl; if((i+1)%5==0) { system("pause"); } }} [65536];intstep;intnext;intend;intBinToInt(unsignedchar*s){ inti; chartmp[4]; intt; for(i=0;i<4;i++) { tmp[3-i]=s[i]; } memcpy(&t,tmp,4); returnt;}voidIntToBin(ints,unsignedchar*t){ inti; chartmp[4]; memcpy(tmp,&s,4); for(i=0;i<4;i++) { t[i]=tmp[3-i]; }}intmm_init(){ memset(mm,0,65536); IntToBin(-1,mm); IntToBin(65536,&mm[4]); IntToBin(-1,&mm[65536-4]); return0;}intmm_request(intn){ //四字节前向指针、四字节块大小、一字节状态、N字节可用内存、四字节后向指针 intpointer; step=0; pointer=next; while(pointer!=-1) { if((mm[pointer+8]!=1)&&((n+26)<BinToInt(&mm[pointer+4]))) { break; } pointer=BinToInt(&mm[pointer+BinToInt(&mm[pointer+4])-4]); //step++; if(mm[pointer+8]!=1) { step++; } } if(pointer==-1) { pointer=0; while(pointer!=end) { if((mm[pointer+8]!=1)&&((n+26)<BinToInt(&mm[pointer+4]))) { break; } pointer=BinToInt(&mm[pointer+BinToInt(&mm[pointer+4])-4]); if(mm[pointer+8]!=1) { step++; } //step++; } } if(pointer==end) { return-1; }

北交大操作系统作业-内存管理器实验 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数15
  • 收藏数0 收藏
  • 顶次数0
  • 上传人红色的种子
  • 文件大小127 KB
  • 时间2024-04-18