1、内存分区实验报告操作系统与Linux实 验 报 告实验名称 动态分区算法实验报告姓 名 学 号 班 级 教 师 日 期 一、 实验目的1加深对可变分区的存储管理的理解; 2掌握用指针实现链表和在链表上的基本操作。二、 实验内容用循环首次适应和最佳适应算法法模拟UNIX 可变分区内存管理,实现对该内存区的分配和释放管理的功能。三、 实验原理(1)循环首次适应算法 模拟UNIX 的进程管理程序采用的是循环首次适应算法,具体算法如下: 系统每次为进程分配资源时,从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。(2)循环最
2、佳适应算法模拟UNIX 的进程管理程序采用的是最佳适应算法,具体算法如下: 系统每次为进程分配资源时,从上次找到的空闲分区的下一个空闲分区开始查找,直到找到一个能满足要求且最小的的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业。2物理设计(1)struct WORKstring NAME; /作业名称int After_SPACE; /该作业跟上一个作业之间的空闲内存空间int SPACE; /需要的内存空间int StartPoint; /作业在内存里开始的位置int EndPoint; /作业在内存里结束的位置WORK *next;WORK* FWork ; / 从内存开始0位置
3、向下数第一个作业 #define FULL_ MEM 640 /定义内存空间大小为640KB四、 开发环境Vs2010五、 程序流程图,具体步骤截图与代码注释1.程序流程图2.代码段:#include #include #include #include using namespace std;/*/* 定义作业类 */*/struct WORKstring NAME; /作业名称int After_SPACE; /该作业跟上一个作业之间的空闲内存空间int SPACE; /需要的内存空间int StartPoint; /作业在内存里开始的位置int EndPoint; /作业在内存里结束的位
4、置WORK *next;/*/* 定义基础信息 */*/#define FULL_MEM 640 / 总内存为640Kint state = 1; /提示作业申请状态(1-申请成果;0-申请失败)int First_FreeSpace = 640; /内存0到第一个作业间的空闲内存(初始化状态下,为640K即为整个内存)WORK* FWork = NULL; /第一个作业void FCFS(string File);void Best_Adaptation(string File);/*/* 界面设计 */*/void display_main()cout请输入写有你内存申请的文件:;stri
5、ng File;getline(cin,File);system(cls);cout请输入你选择的算法:endl;cout1.首次适应算法endl;cout2.最佳适应算法endl;cout3.退出n;system(cls);switch(n)case 1:cout首次适应服务endlendl;FCFS(File);break;case 2:cout最佳适应算法endlendl;Best_Adaptation(File);break;case 3:exit(0);break;void display() /输出每次作业活动的结果WORK* temp = FWork;cout作业 起始位置 终止
6、位置 占用内存大小endl;coutStartPoint = 0)coutNAME 00StartPoint EndPoint SPACEendl;elsecoutNAME StartPoint EndPoint SPACEnext;coutCurrentWork-NAME ;)ifileAction;if(Action = 申请)ifileCurrentWork-SPACE;coutNAMEActionSPACEkb CurrentWork-SPACE) /查看内存O到第一作业间是否有足够空间存放申请的作业fWork-NAME = CurrentWork-NAME;fWork-SPACE=
7、CurrentWork-SPACE;fWork-StartPoint = 0;First_FreeSpace = 0;fWork-EndPoint = fWork-StartPoint + fWork-SPACE;fWork-After_SPACE = FWork-StartPoint - fWork-EndPoint; /计算作业之间的空闲内存空间fWork-next = FWork;FWork = fWork;elsefor(fWork = FWork ; fWork!=NULL ; fWork = fWork-next)if(fWork-After_SPACE CurrentWork-S
8、PACE )CurrentWork-After_SPACE = fWork-After_SPACE - CurrentWork-SPACE;CurrentWork-StartPoint = fWork-EndPoint;CurrentWork-EndPoint = CurrentWork-StartPoint + CurrentWork-SPACE;fWork-After_SPACE = 0; /新作业进入,fWork与新作业之间的空闲内存空间变为0CurrentWork-next = fWork-next;fWork-next = CurrentWork;CurrentWork = new
9、WORK();break;else /第一次有作业申请 或 内存完全空闲时有作业申请fWork-NAME = CurrentWork-NAME;fWork-SPACE= CurrentWork-SPACE;fWork-After_SPACE = First_FreeSpace - fWork-SPACE;fWork-StartPoint = 0;fWork-EndPoint = fWork-StartPoint + CurrentWork-SPACE;fWork-next = NULL;FWork = fWork;First_FreeSpace = 0;elseiFileCurrentWork-SPACE;coutNAMEActionSPACEkbNAME = CurrentWork-NAME) if( FWork-SPACE = CurrentWork-SPACE )First_FreeSpace = CurrentWork-SPACE + First_FreeSpace + FWork-After_SPACE;FWork = FWork-next;elseFWork-SPACE = FWork-SPACE - CurrentWork-SPACE;FWork-After_SPACE = FWork-After_SPACE + CurrentWork-SPACE;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1