操作系统存储器的分配与回收算法实现.doc
- 文档编号:238342
- 上传时间:2022-10-07
- 格式:DOC
- 页数:20
- 大小:287.50KB
操作系统存储器的分配与回收算法实现.doc
《操作系统存储器的分配与回收算法实现.doc》由会员分享,可在线阅读,更多相关《操作系统存储器的分配与回收算法实现.doc(20页珍藏版)》请在冰豆网上搜索。
操作系统实验报告
操作系统实验报告
存储器的分配与回收算法实现
姓名:
学号:
09070009
班级:
09计算机1
一、实验名称及要求
1、实验名称:
存储器的分配与回收算法实现
2、实验要求:
学生应正确地设计有关的数据结构与各个功能模块,画出程序的流程图,编写程序,程序执行结果应正确。
3、实验方式:
学生通过实验室的微机上机,实际调试程序。
。
4、实验环境:
Windows操作系统环境下的个人微机
C或C++程序设计语言
二、实验内容
1本实验是模拟操作系统的主存分配,运用可变分区的存储管理算法设计主存分配和回收程序,并不实际启动装入作业。
2采用最先适应法、最佳适应法、最坏适应法分配主存空间。
3当一个新作业要求装入主存时,必须查空闲区表,从中找出一个足够大的空闲区。
若找到的空闲区大于作业需要量,这是应把它分成二部分,一部分为占用区,加一部分又成为一个空闲区。
4当一个作业撤离时,归还的区域如果与其他空闲区相邻,则应合并成一个较大的空闲区,登在空闲区表中。
5运行所设计的程序,输出有关数据结构表项的变化和内存的当前状态。
三、实验程序
#include
#include
#include
typedefstructFreeLink{//定义自由链
structFreeLink*prior;
charname;
intstart;
intsize;
boolflag;
structFreeLink*next;
}*ptr,*head;
headtop;
ptrp;
voidprint(){//将内存分配情况打印到屏幕上
p=top;
cout<<"************************内存分配情况表************************"< cout<<"区号\t\t"<<"起始位置\t"<<"区间长度\t"<<"区间状态\t"< do{ cout< if(p->flag==false){cout<<"空闲"< else{cout<<"已占用"< p=p->next; } while(p! =NULL); } voidclear(){//结束操作时清空“内存”以备其他操作 do{ p=top; top=top->next; free(p); } while(top! =NULL); } voidasc(ptr&p){//最佳适应法的内存分配函数 intmin; ptrop; FreeLink*fl=(FreeLink*)malloc(sizeof(FreeLink)); cout<<"请输入要分配内存的进程名"< cin>>fl->name; cout<<"请输入要分配内存的大小"< cin>>fl->size; min=256; fl->flag=true; do{ if(p->flag==false&&p->size<=min&&p->size>=fl->size){ min=p->size; op=p; } p=p->next; } while(p! =NULL); if(op->size>fl->size){ fl->start=op->start; op->start=fl->start+fl->size; op->size=op->size-fl->size; fl->next=op; fl->prior=op->prior; op->prior->next=fl; op->prior=fl; gotoflag1; } if(op->size==fl->size){ op->flag=fl->flag; op->name=fl->name; free(fl); gotoflag1; } cout<<"内存过小,分配失败! "< flag1: cout<<"分配成功! "< flag2: ; } voiddec(ptr&p){//最坏适应法的内存分配函数 intmax; ptrop; FreeLink*fl=(FreeLink*)malloc(sizeof(FreeLink)); cout<<"请输入要分配内存的进程名"< cin>>fl->name; cout<<"请输入要分配内存的大小"< cin>>fl->size; max=fl->size; fl->flag=true; do{ if(p->flag==false&&p->size>=max){ max=p->size; op=p; } p=p->next; } while(p! =NULL); if(op->size>fl->size){ fl->start=op->start; op->start=fl->start+fl->size; op->size=op->size-fl->size; fl->next=op; fl->prior=op->prior; op->prior->next=fl; op->prior=fl; gotoflag3; } if(op->size==fl->size){ op->flag=fl->flag; op->name=fl->name; free(fl); gotoflag3; } cout<<"内存过小,分配失败! "< flag3: cout<<"分配成功! "< flag4: ; } voidsplice(ptr&p){//若被操作的内存有相邻空闲区则将空闲区拼接合并 intx; if(p->prior->flag==false&&p->next->flag==false)x=1; if((p->prior->flag==false&&p->next->flag==true)||(p->prior->flag==false&&p->next==NULL))x=2; if((p->prior->flag==true&&p->next->flag==false)||(p->prior==NULL&&p->next->flag==false))x=3; if((p->prior->flag==true&&p->next->flag==true)||(p->prior==NULL&&p->next->flag==true)||(p->prior->flag==true&&p->next==NULL))x=4; switch(x){ case1: p->next->prior=p->prior; p->prior->next=p->next; p->prior->size=p->prior->size+p->size+p->next->size; p->prior->next=p->next->next; if(p->next->next! =NULL)p->next->next->prior=p->next->prior; free(p->next); free(p); break; case2: if(p->next==NULL){ p->prior->next=p->next; }else{ p->next->prior=p->prior; p->prior->next=p->next; } p->prior->size=p->prior->size+p->size; free(p); break; case3: if(p->prior==NULL){ top=p->next; p->next->prior=NULL; p->next->start=p->start; p->next->size=p->next->size+p->size; }else{ p->next->prior=p->prior; p->prior->next=p->next; p->next->start=p->start; p->next->size=p->next->size+p->size; } free(p); break; case4: p->name='@'; p->flag=false; break; } } voidallocate(ptr&p){//最先适应法的内存分配函数 FreeLink*fl=(FreeLink*)malloc(sizeof(FreeLink)); cout<<"请输入要分配内存的进程名"< cin>>fl->name; cout<<"请输入要分配内存的大小"< cin>>fl->size; fl->flag=true; do{ if(p->flag==false&&p->size>fl->size){ fl->start=p->start; p->start=fl->start+fl->size; p->size=p->size-fl->size; fl->next=p; fl->prior=p->prior; p->prior->next=fl; p->prior=fl; gotoa; } if(p->flag==false&&p->size==fl->size){ p->flag=fl->flag; p->name=fl->name; free(fl); gotoa; } p=p->next; } while(p! =NULL); cout<<"内存过小,分配失败! "< a: cout<<"分配成功! "< b: ; } voidrecover(ptr&p){//内存回收函数 charn=''; cout<<"请
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 存储器 分配 回收 算法 实现