计算机操作系统课程设计报告存储管理——动态分区分配算法的模拟
计算机操作系统课程设计 题题目目 存储管理动态分区分配算法的模拟存储管理动态分区分配算法的模拟 专专业业 软件工程软件工程 年年级级 20122012 级级 小组成员小组成员 指导教师指导教师 时时间间 地地点点 20122012 年年 5 5 月月 目录目录 目录1 概述3 2. 课程设计任务及要求.3 1 2.1 设计任务 3 2.2 设计要求 3 2.3 课程设计任务安排 3 3. 算法及数据结构.4 3.1 算法的总体思想(流程).4 3.2 首次适应算法.4 3.2.1 功能 4 3.2.2 数据结构(包括变量的定义,要注释) 4 3.2.3 算法(流程图表示,或伪 C 表示) 5 3.3 循环首次适应算法.6 3.3.1 功能.6 3.3.2 数据结构 6 3.3.3 算法.7 3.4 最佳适应算法.8 3.4.1 功能.8 3.4.2 数据结构 8 3.4.3 算法.8 3.5 最坏适应算法10 3.5.1 功能10 3.5.2 数据结构 .10 3.5.3 算法11 4. 程序设计与实现12 4.1 程序流程图 .12 4.2 程序代码(要注释) .12 4.3 实验结果 .21 5. 结论23 6. 收获、体会和建议。23 A 的总结23 B 的总结23 7. 参考文献。24 2 概述概述 动态分区分配是根据进程的实际需要, 动态地为之分配内存空间,而在分配 时, 须按照一定的分配算法,从空闲分区表或空闲分区链中选出一分区分配给该 作业。在本实验中运用了五种分配算法,分别是 1.首次适应算法 2.循环首次适应算法 3.最坏适应算法 4.最佳适应算法 5. 快速适应算法 2.2. 课程设计任务及要求课程设计任务及要求 2.1 设计任务 要求设计主界面以灵活选择其中算法,5 种算法都要求实现。 2.2 设计要求 1)首先由系统生成当前的内存状态,要求未分配的分区数量不少于 3 个, 且空间大小随机,然后随机生成一个数,表示等待分配进程的大小。 2)然后显示上述算法由用户选择,结果显示分配后的状态。 2.3 课程设计任务安排 日期 星期三下午 星期四早上 星期四下午 星期五早上 星期五下午 研究算法 设计算法 设计算法,编写界面 编写算法 程序测试并优化 A 研究算法 参与设计 参与设计 完成部分文档 程序测试,完成文档 B 3 3.3. 算法及数据结构算法及数据结构 3.1算法的总体思想(流程) 设计程序模拟四种动态分区分配算法首次适应算法、循环首次适应算 法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为 n,空闲分区大小分别为 P 1, ,Pn,在动态分区分配过程中需要分配的进 程个数为 m(m≤n) ,它们需要的分区大小分别为 S 1, ,Sm,分别利用 四种动态分区分配算法将 m 个进程放入 n 个空闲分区,进程在空闲分区中 的分配情况。 3.2首次适应算法 3.2.13.2.1 功能功能 在首次适应算法中,是从已建立好的数组中顺序查找,直至找到第一 个大小能满足要求的空闲分区为止,然后再按照作业大小,从该分区中划出 一块内存空间分配给请求者,余下的空间令开辟一块新的地址,大小为原来 的大小减去作业大小,若查找结束都不能找到一个满足要求的分区,则此次 内存分配失败。 3.2.23.2.2 数据结构(包括变量的定义,要注释)数据结构(包括变量的定义,要注释) privateprivate staticstatic intintMaxNum 100; //空闲分区个数 privateprivate staticstatic intintn; //作业个数 privateprivate staticstatic intintm; //空闲分区大小 privateprivate staticstatic intintFreePartition[] newnew intint[MaxNum]; //作业名称 privateprivate staticstatic charcharProcessName[] newnew charchar[MaxNum]; //作业需求空间大小 privateprivate staticstatic intintProcessNeed[] newnew intint[MaxNum]; 4 //作业分配标志 privateprivate staticstatic booleanbooleanstate[] newnew booleanboolean[MaxNum]; //空闲分区个数 privateprivate staticstatic intintPartitionNum; //作业个数 privateprivate staticstatic intintProcessNum; //记录作业分配 privateprivate staticstatic charcharorder[][] newnew charchar[MaxNum][MaxNum]; 3.2.33.2.3 算法(流程图表示,或伪算法(流程图表示,或伪 C C 表示)表示) publicpublic staticstatic voidvoid First { forfori0;im;i { forforj0;jn;j { //找到第一个合适的空闲分区 if ifProcessNeed[i] FreePartition[j] k3;k//记录作业分配 { } if iforder[j][k] 0//为空 { } elseelse continuecontinue; order[j][k]ProcessName[i]; breakbreak; FreePartition[j]FreePartition[j]-ProcessNeed[i]; state[i]truetrue; 5 } } } } 3.3循环首次适应算法 3.3.13.3.1 功能功能 该算法是由首次适应算法演变而成, 在为进程分配内存空间时,不再是每次 都从第一个空间开始查找, 而是从上次找到的空闲分区的下一个空闲分区开始查 找, 直至找到第一个能满足要求的空闲分区,从中划出一块与请求大小相等的内 存空间分配给作业,为实现本算法,设置一个全局变量 f,来控制循环查找,当 fN0 时,f0;若查找结束都不能找到一个满足要求的分区,则此次内存分 配失败。 3.3.23.3.2 数据结构数据结构 privateprivate staticstatic intintMaxNum 100; //空闲分区个数 privateprivate staticstatic intintn; //作业个数 privateprivate staticstatic intintm; //空闲分区大小 privateprivate staticstatic intintFreePartition[] newnew intint[MaxNum]; //作业名称 privatep