ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:81.34KB ,
资源ID:4459078      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4459078.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机操作系统课程设计报告《存储管理动态分区分配算法的模拟》.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机操作系统课程设计报告《存储管理动态分区分配算法的模拟》.docx

1、计算机操作系统课程设计报告存储管理动态分区分配算法的模拟计算机操作系统课程设计题 目: 存储管理动态分区分配算法的模拟 专 业: 软件工程 年 级: 2012级 小组成员: 指导教师: 时 间: 地 点: 2012年 5 月 概述动态分区分配是根据进程的实际需要,动态地为之分配内存空间,而在分配时,须按照一定的分配算法,从空闲分区表或空闲分区链中选出一分区分配给该作业。在本实验中运用了五种分配算法,分别是:1.首次适应算法2.循环首次适应算法3.最坏适应算法4.最佳适应算法5. 快速适应算法2. 课程设计任务及要求2.1 设计任务要求设计主界面以灵活选择其中算法,5种算法都要求实现。2.2 设

2、计要求1)首先由系统生成当前的内存状态,要求未分配的分区数量不少于3个,且空间大小随机,然后随机生成一个数,表示等待分配进程的大小。2)然后显示上述算法由用户选择,结果显示分配后的状态。2.3 课程设计任务安排日期AB星期三下午研究算法研究算法星期四早上设计算法参与设计星期四下午设计算法,编写界面参与设计星期五早上编写算法完成部分文档星期五下午程序测试并优化程序测试,完成文档 3. 算法及数据结构3.1算法的总体思想(流程)设计程序模拟四种动态分区分配算法:首次适应算法、循环首次适应算法、最佳适应算法和最坏适应算法的工作过程。假设内存中空闲分区个数为n,空闲分区大小分别为P1, ,Pn,在动态

3、分区分配过程中需要分配的进程个数为m(mn),它们需要的分区大小分别为S1, ,Sm,分别利用四种动态分区分配算法将m个进程放入n个空闲分区,进程在空闲分区中的分配情况。3.2首次适应算法3.2.1 功能在首次适应算法中,是从已建立好的数组中顺序查找,直至找到第一个大小能满足要求的空闲分区为止,然后再按照作业大小,从该分区中划出一块内存空间分配给请求者,余下的空间令开辟一块新的地址,大小为原来的大小减去作业大小,若查找结束都不能找到一个满足要求的分区,则此次内存分配失败。3.2.2 数据结构(包括变量的定义,要注释!) private static int MaxNum = 100; /空闲分

4、区个数 private static int n; /作业个数 private static int m; /空闲分区大小 private static int FreePartition = new intMaxNum; /作业名称 private static char ProcessName = new charMaxNum; /作业需求空间大小 private static int ProcessNeed = new intMaxNum; /作业分配标志 private static boolean state = new booleanMaxNum; /空闲分区个数 private

5、static int PartitionNum; /作业个数 private static int ProcessNum; /记录作业分配 private static char order = new charMaxNumMaxNum;3.2.3 算法(流程图表示,或伪C表示)public static void First() for(i=0;im;i+) for(j=0;jn;j+) /找到第一个合适的空闲分区 if(ProcessNeedi = FreePartitionj) & (!statei) for(k=0;k3;k+) /记录作业分配 if(orderjk = 0) /为空

6、orderjk=ProcessNamei; break; else continue; FreePartitionj=FreePartitionj-ProcessNeedi; statei=true; 3.3循环首次适应算法3.3.1功能 该算法是由首次适应算法演变而成,在为进程分配内存空间时,不再是每次都从第一个空间开始查找,而是从上次找到的空闲分区的下一个空闲分区开始查找,直至找到第一个能满足要求的空闲分区,从中划出一块与请求大小相等的内存空间分配给作业,为实现本算法,设置一个全局变量f,来控制循环查找,当f%N=0时,f=0;若查找结束都不能找到一个满足要求的分区,则此次内存分配失败。3

7、.3.2 数据结构private static int MaxNum = 100; /空闲分区个数 private static int n; /作业个数 private static int m; /空闲分区大小 private static int FreePartition = new intMaxNum; /作业名称 private static char ProcessName = new charMaxNum; /作业需求空间大小 private static int ProcessNeed = new intMaxNum; /作业分配标志 private static boole

8、an state = new booleanMaxNum; /空闲分区个数 private static int PartitionNum; /作业个数 private static int ProcessNum; /记录作业分配 private static char order = new charMaxNumMaxNum;3.3.3算法public static void CycleFirst() i=0; j=0; while(in) & (jm) if(ProcessNeedi = FreePartitionj) & (!statei) for(k=0;k3;k+) /记录作业分配

9、if(orderjk=0) orderjk=ProcessNamei; break; else continue; FreePartitionj=FreePartitionj-ProcessNeedi; statei=true; i+; else j+; 3.4最佳适应算法3.4.1功能最佳适应分配算法是每次为作业分配内存时,扫描整个数组,总是把能满足条件的,又是最小的空闲分区分配给作业,避免“大材小用”。该算法要求将所有的空闲分区按其容量以从小到大的顺序形成一空闲分区链。这样,第一次找到的能满足要求的空闲区必然是最佳的。3.4.2 数据结构private static int MaxNum

10、= 100; /空闲分区个数 private static int n; /作业个数 private static int m; /空闲分区大小 private static int FreePartition = new intMaxNum; /作业名称 private static char ProcessName = new charMaxNum; /作业需求空间大小 private static int ProcessNeed = new intMaxNum; /作业分配标志 private static boolean state = new booleanMaxNum; /空闲分区

11、个数 private static int PartitionNum; /作业个数 private static int ProcessNum; /记录作业分配 private static char order = new charMaxNumMaxNum;3.4.3算法public static void Best() for(i=0;i temp) k+; temp=FreePartitionk; for(j=0;jn;j+) /按最佳适应算法找到符合的空闲区 if(ProcessNeedi FreePartitionj) & (!statei) temp=FreePartitionj;

12、 k=j; else continue; for(d=0;d3;d+) /记录作业分配 if(orderkd=0) orderkd=ProcessNamei; break; else continue; FreePartitionk=FreePartitionk-ProcessNeedi; statei=true; 3.5最坏适应算法3.5.1功能最坏适应分配算法选择空闲分区的策略正好与最佳适应算法相反。是每次为作业分配内存时,扫描整个数组,总是把能满足条件的,又是最大的空闲分区分配给作业。对中小作业有利,同时查找效率很高。3.5.2 数据结构private static int MaxNum

13、 = 100; /空闲分区个数 private static int n; /作业个数 private static int m; /空闲分区大小 private static int FreePartition = new intMaxNum; /作业名称 private static char ProcessName = new charMaxNum; /作业需求空间大小 private static int ProcessNeed = new intMaxNum; /作业分配标志 private static boolean state = new booleanMaxNum; /空闲分

14、区个数 private static int PartitionNum; /作业个数 private static int ProcessNum; /记录作业分配 private static char order = new charMaxNumMaxNum;3.5.3算法public static void Worst() for(i=0;im;i+) temp=FreePartition0; k=0; for(j=0;jn;j+) /按最坏适应算法找到合适的空闲分区 if(ProcessNeedi = FreePartitionj) & (temp FreePartitionj) & (

15、!statei) temp=FreePartitionj; k=j; else continue; for(d=0;d3;d+) /记录作业分配 if(orderkd=0) orderkd=ProcessNamei; break; else continue; FreePartitionk=FreePartitionk-ProcessNeedi; statei=true; 4. 程序设计与实现4.1 程序流程图4.2 程序代码(要注释)D_ProcessPartition.javaimport java.io.BufferedInputStream;import java.io.FileInp

16、utStream;import java.io.FileNotFoundException;import java.util.Random;import java.util.Scanner;public class D_ProcessPartition private static int MaxNum = 100; /空闲分区个数 private static int n; /作业个数 private static int m; /空闲分区大小 private static int FreePartition = new intMaxNum; /作业名称 private static cha

17、r ProcessName = new charMaxNum; /作业需求空间大小 private static int ProcessNeed = new intMaxNum; /作业分配标志 private static boolean state = new booleanMaxNum; /空闲分区个数 private static int PartitionNum; /作业个数 private static int ProcessNum; /记录作业分配 private static char order = new charMaxNumMaxNum; /? private stati

18、c char ch = new charMaxNum; /临时变量 private static int temp; /算法选择 /1-首次适应算法 /2-循环首次适应算法 /3-最佳适应算法 /4-最坏适应算法 private static int option=0; /for循环中使用 private static int i; private static int j; private static int k; private static int d; private static Scanner stdin; public String D_ProcessPartition(int

19、 option,int n) throws FileNotFoundException String xinxi=; String zuoyexinxi=; String suanfaString=; /输入数据 xinxi=input(n); /选择算法 /1-首次适应算法 /2-循环首次适应算法 /3-最佳适应算法 /4-最坏适应算法 switch(option) case 1: suanfaString=首次适应算法; First(n); zuoyexinxi=对作业用首次适应算法进行空间分配:n+output(n); break; case 2: suanfaString=循环首次适应

20、算法; CycleFirst(n); zuoyexinxi=对作业用循环首次适应算法进行空间分配:n+output(n); break; case 3: suanfaString=最佳适应算法; Best(n); zuoyexinxi=对作业用最佳适应算法进行空间分配:n+output(n); break; case 4: suanfaString=最坏适应算法; Worst(n); zuoyexinxi=对作业用最坏适应算法进行空间分配:n+output(n); break; /返回数据在JTA上显示出来 String all=你选择了+suanfaString+nn+xinxi+nn+zu

21、oyexinxi; return all; /输入数据 public static String input(int n) throws FileNotFoundException /算法选择 /1-首次适应算法 /2-循环首次适应算法 /3-最佳适应算法 /4-最坏适应算法 String result=; /请依次输入空闲分区大小(KB) for(i=0 ; in ; i+) FreePartitioni = RandomTest(); result=result+FreePartitioni+ ; result=随机的+n+个空闲分区大小为:+result+n+随机的作业大小为:; /请输

22、入作业个数,按题目要求默认为1 可设置 m = 1; /固定的作业名称 ProcessNamei = Process.charAt(0); chi = ProcessNamei; /按题目要求随机作业大小(KB) for(i=0;im;i+) ProcessNeedi = RandomTest(); statei=false; result=result+ProcessNeedi; return result; public static int RandomTest() int min=1; Random random = new Random(); int s = random.nextI

23、nt(MaxNum)%(MaxNum-min+1) + min; System.out.println(s); return s; /1首次适应算法 public static void First(int n) for(i=0;im;i+) for(j=0;jn;j+) /找到第一个合适的空闲分区 if(ProcessNeedi = FreePartitionj) & (!statei) for(k=0;k3;k+) /记录作业分配 if(orderjk = 0) /为空 orderjk=ProcessNamei; break; else continue; FreePartitionj=F

24、reePartitionj-ProcessNeedi; statei=true; /2循环首次适应算法 public static void CycleFirst(int n) i=0; j=0; while(in) & (jm) if(ProcessNeedi = FreePartitionj) & (!statei) for(k=0;k3;k+) /记录作业分配 if(orderjk=0) orderjk=ProcessNamei; break; else continue; FreePartitionj=FreePartitionj-ProcessNeedi; statei=true; i+; else j+; /3最佳适应算法 public static void Best(int n) for(i=0;i temp) k+; temp=FreePartitionk; for(j=0;jn;j+) /按最佳适应算法找到符合的空闲区 if(ProcessNeedi FreePartitionj) & (!statei) temp=FreePartitionj; k=j; else continue;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1