操作系统

您所在的位置:网站首页 操作系统动态分区分配算法代码 操作系统

操作系统

2023-11-20 00:18| 来源: 网络整理| 查看: 265

一、需求分析 1、程序设计的任务和目的

通过这次实验,加深对动态分区分配算法的理解,进一步掌握首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的实现方法。

2、输入的形式和输入值的范围

空闲分区个数n,空闲分区大小P1, … ,Pn,进程个数m,进程需要的分区大小S1, … ,Sm,算法选择1-首次适应算法,2-循环首次适应算法,3-最佳适应算法,4-最坏适应算法。

3、输出的形式

最终内存空闲分区的分配情况。

4、程序所能达到的功能

模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, … ,Pn,在动态分区分配过程中需要分配的进程个数为m(m≤n),它们需要的分区大小分别为S1, … ,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,给出进程在空闲分区中的分配情况。

5、测试数据,包括正确的输入及其输出结果和含有错误的输入及其输出结果 正确用例 输入 请输入空闲分区个数PartitionNum:9 请输入空闲分区1大小FreePartition[1]:16 请输入空闲分区2大小FreePartition[2]:16 请输入空闲分区3大小FreePartition[3]:8 请输入空闲分区4大小FreePartition[4]:32 请输入空闲分区5大小FreePartition[5]:64 请输入空闲分区6大小FreePartition[6]:32 请输入空闲分区7大小FreePartition[7]:8 请输入空闲分区8大小FreePartition[8]:16 请输入空闲分区9大小FreePartition[9]:64 请输入进程个数ProcessNum:6 请输入进程1需要的分区大小progress[1].ProcessNeed:7 请输入进程2需要的分区大小progress[2].ProcessNeed:18 请输入进程3需要的分区大小progress[3].ProcessNeed:9 请输入进程4需要的分区大小progress[4].ProcessNeed:20 请输入进程5需要的分区大小progress[5].ProcessNeed:35 请输入进程6需要的分区大小progress[6].ProcessNeed:8 请选择想要先使用的算法(1-首次适应分区算法(FirstPartition),2-循环首次适应分区算法(CycleFirstPartition),3-最佳适应分区算法(BestPartition),4-最坏适应分区算法(WorstPartition)):1 输出 您选择的是1-首次适应分区算法(FirstPartition) 进程分配情况如下表: Partition 1 Partition 2 Partition 3 Partition 4 Partition 5 Partition 6 Partition 7 Partition 8 Partition 9 Assigned 16 8 0 18 55 0 0 0 0 Available 0 8 8 14 9 32 8 16 64 Process 1 Process 2 Process 3 Process 4 Process 5 Process 6 ProcessNum 1 4 1 5 5 2 错误用例(输入值过大,分区大小无法处理分配,循环首次适应分区(CycleFirstPartition)算法会进入死循环) 输入 请输入空闲分区个数PartitionNum:3 请输入空闲分区1大小FreePartition[1]:32 请输入空闲分区2大小FreePartition[2]:64 请输入空闲分区3大小FreePartition[3]:128 请输入进程个数ProcessNum:3 请输入进程1需要的分区大小progress[1].ProcessNeed:50 请输入进程2需要的分区大小progress[2].ProcessNeed:100 请输入进程3需要的分区大小progress[3].ProcessNeed:150 输出 您选择的是2-循环首次适应分区算法(CycleFirstPartition) Process finished with exit code 1 二、概要设计 1、抽象数据类型的定义 int FreePartition[MaxNumber];//空闲分区大小 int PartitionNum;//空闲分区个数 int ProcessNum;//进程个数 int isAlgorithm;//算法选择 //定义进程的数据结构 typedef struct { int FirstPartition;//首次适应分区 int CycleFirstPartition;//循环首次适应分区 int BestPartition;//最佳适应分区 int WorstPartition;//最坏适应分区 int ProcessNeed;//进程需要的分区大小 } Progress; 2、主程序的流程 int main() { PartitionAlgorithm partitionAlgorithm{}; partitionAlgorithm.Input(); return 0; } 3、各程序模块之间的层次(调用)关系 int main() { virtualMemoryPageReplacementAlgorithm virtualMemoryPageReplacementAlgorithm{}; virtualMemoryPageReplacementAlgorithm.Input(); return 0; } //输入函数调用InputAlgorithm函数选择输入函数 void Input() { ··· InputAlgorithm(); } //调用IsAlgorithm函数进行算法存储确认 void InputAlgorithm() { ··· IsAlgorithm(); } //算法确认后按照确认结果调用不同算法函数,若确认失败,要求重新输入 void IsAlgorithm() { ··· switch (isAlgorithm) { case 1: AlgorithmFirstPartition(); case 2: AlgorithmCycleFirstPartitionS(); case 3: AlgorithmBestPartition(); case 4: AlgorithmWorstPartition(); default: InputAlgorithm(); } } //算法函数仅以FirstPartition为例,在完成算法处理后调用Print函数输出本算法运算结果,并调用NextAlgorithm函数询问下一算法使用 void AlgorithmFirstPartition() { ··· //验证方法:验证空闲分区是否足够分配 Test(progressCopy); Print(progressCopy, freePartition); NextAlgorithm(); } //输出最终内存空闲分区的分配情况 void Print(Progress pg[MaxNumber], int fp[MaxNumber]) { ··· } //询问后续,若有则重新调用算法确认函数循环流程,若触发终止条件结束进程 void NextAlgorithm() { ··· IsAlgorithm(); } 三、详细设计

实现程序模块的具体算法

1、FirstPartition算法 //调用FirstPartition算法进行调度计算 void AlgorithmFirstPartition() { //复制进程 Progress progressCopy[MaxNumber]; for (int i = 1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3