已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1东莞理工学院城市学院计算机操作系统课程设计题题目:目:通用动态分区分配存储管理系统演示通用动态分区分配存储管理系统演示专专业:业:软件工程软件工程年年级:级:2012级级小组成员:小组成员:指导教师:指导教师:时时间:间:2014.12.242014.12.26地地点:点:东莞理工学院城市学院计算机与信息科学系制东莞理工学院城市学院计算机与信息科学系制2014年年12月月21.概述概述.32.课程设计任务及要求课程设计任务及要求.42.1设计任务.42.2设计要求.43.算法及数据结构算法及数据结构.53.1算法的总体思想.53.2进程的初始化模块.63.3循环首次适应算法模版.103.4最佳适应算法模版.103.5最坏适应算法模版.113.6主函数模块.114.程序设计与实现程序设计与实现.164.1程序流程图.164.2实验结果.164.3时间安排.175.结论结论.196.收获、体会和建议收获、体会和建议.207.参考文献参考文献.2131.概述概述动态分区分配存储管理在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小,使其没有内碎片。而为了实现动态分配。通常是将系统中的空闲分区链接成一个链。所谓顺序搜索,就是指依次搜索空闲分区链上的空闲分区,去寻找一个起大小能慢去要求的分区。基于顺序搜索的动态分区分配算法有四种,而本课题则重点在于实现其中三种,分别是循环首次适应算法,最佳适应算法,最坏适应算法。42.课程设计任务及要求课程设计任务及要求2.1设计任务设计任务动态分区分配存储管理2.2设计要求设计要求1.实现以下三种算法:1.循环首次适应算法2.最佳适应算法3.最坏适应算法2.内存中有0-100M的空间为用户程序空间,最开始用户空间是空闲的3.作业数量、作业大小、进入内存时间、运行时间需要通过界面进行输入4.可读取样例数据(要求存放在外部文件中)进行作业数量、作业大小、进入内存时间、运行时间的初始化5.根据作业进入内存的时间,采用简单的先进先出原则进行从外存到内存的调度,作业具有等待(从外存进入内存执行)、装入(在内存可执行)、结束(运行结束,退出内存)三种状态。(为了简化,不考虑CPU的调度与切换,运行时间为作业在内存中驻留的时间)6.能够自动进行内存分配与回收,可根据需要自动进行紧凑与拼接操作,所有过程均有动态图形变化的显示53.算法及数据结构算法及数据结构3.1算法的总体思想算法的总体思想循环首次适应算法最佳适应算法6最坏适应算法3.2进程的初始化模块进程的初始化模块3.2.1功能用于由用户读入数据或随机生成数据以后,产生内存数据和作业数据,并根据已有算法选择一种进行对作业数据的分配进内存。3.2.2内存初始化算法packageEXimportjava.util.publicclassrandomMemorymemorym随机生成内存各个分区状态的构造函数publicrandomMemory()intsum=0index=0sum内存里分区大小的总和index分区的个数memorytempintindex1创建一个足够大的数组存放随机生成的数,用于生成各个分区的大小,假定内存为512Kintspa=newint255Randomr=newRandom()for(inti=0i511)假如已超过内存容量,则直接将内存大小减去之前已生成的内存大小总和,表示最后一个分区spai=512-(sum-space)表示最后一个分区的大小index+breakelse否则存入spa数组spai=space7index+temp=newmemoryindex存储内存分区状态的临时数组intj=0代表分区的起始地址for(inti=0iindexi+)intrand=r.nextInt(2)随机生成是否已分配的状态(0,1)tempi=newmemory(i+1spaijrand)j+=spai起址为前一个元素的起址加上前一个元素的大小,j初始为0,供给第一个分区index=temp.length-1由于随机生成的内存分区状态因此可能存在两个甚至多个相邻的空闲内存分区把这些相邻的合并在一起for(inti=0i=indexi+)if(tempi.getm4()=0)index1=ij=i+1intvalue=tempi.getm2()while(j=indextempj.getm4()=0)value+=tempj.getm2()j+if(value!=tempi.getm2()tempi.setm2(value)while(j=index)temp+i=tempj+tempi.setm1(i+1)index=iindex代表此时合并后数组长度改变后的值i=index1最后把有效的内存分区数组赋给mm=newmemoryindex+1for(inti=0i=indexi+)mi=tempi含参数的构造函数publicrandomMemory(memorytemp)m=temp显示内存分区的状态publicstaticmemoryFree(memorym)将内存分区数组中空闲分区存入数组先用for循环统计空闲分区数intfreeLength=0for(inti=0im.lengthi+)if(mi.getm4()=0)0代表未分配,即空闲分区freeLength+生成空的数组准备存入空闲分区信息memoryf=newmemoryfreeLengthintk=0for(inti=0im.lengthi+)if(mi.getm4()=0)假如有未分配分区则存入数组fk=newmemory(mi.getm1()mi.getm2()mi.getm3()mi.getm4()8k+returnf将空闲分区数组返回将数组进行排序的方法,用于最佳及最坏适应算法的空闲分区排序publicstaticvoidup(memoryf)对分区的大小进行从小到大排序for(inti=0if.lengthi+)for(intj=(i+1)jf.lengthj+)if(fj.getm2()fi.getm2()memoryx=fifi=fjfj=xpublicstaticvoiddown(memoryf)对分区的大小进行从大到小排序for(inti=0if.lengthi+)for(intj=(i+1)jfi.getm2()memoryx=fifi=fjfj=x判断该内存里是否有可回收的分区publicstaticbooleanhuishou(memorym)for(inti=0im.lengthi+)if(mi.getm4()=1)returntruereturnfalse判断该内存里是否还有空闲的分区publicstaticbooleankongxian(memorym)for(inti=0im.lengthi+)if(mi.getm4()=0)returntruereturnfalseclassmemoryprivateintm1分区的序号privateintm2分区的大小privateintm3分区的起始地址privateintm4是否已分配的标志构造函数publicmemory(intaintbintcintd)m1=am2=bm3=cm4=dpublicintgetm1()returnm19publicintgetm2()returnm2publicintgetm3()returnm3publicintgetm4()returnm4publicvoidsetm1(inta)m1=apublicvoidsetm2(inta)m2=apublicvoidsetm3(inta)m3=apublicvoidsetm4(inta)m4=a3.2.3作业初始化算法packageEXimportjava.util.publicclassrandomprocessprocessp随机构造作业状况的构造函数publicrandomprocess(intn)定义一个长度为n的数组pp=newprocessnRandomr=newRandom()通过for循环将每一次用Random类生成的随机数存入pfor(inti=0ipd.p.length)JOptionPane.showMessageDialog(Frame输入错误)returnif(select=1)fitIndex=NextFit(selectProcessfitIndex)elseif(select=2)BestFit(selectProcess)elect=3)WorstFit(selectProcess)publicclassb1ButtonListenerimplementsActionListenerpublicvoidactionPered(ActionEventev)select=1publicclassb2ButtonListenerimplementsActionListenerpublicvoidactionPered(ActionEventev)select=2publicclassb3ButtonListenerimplementsActionListenerpublicvoidactionPered(ActionEventev)select=3privatevoidwait()Frame=newJFrame()JPanelPanel=newJPanel()JButtonsendButton=newJButton(确认)Field=newJTextField(10)Panel.add(Field)Panel.add(sendButton)Frame.getContentPane().add(BorderLayout.CENTERPanel)Frame.setSize(200100)Frame.setLocationRelativeTo(null)Frame.setVisible(true)privatevoidfenpeiProcess()Frame=newJFrame()JRadioButtonb1=newJRadioButton()JRadioButtonb2=newJRadioButton()JRadioButtonb3=newJRadioButton()ButtonGroupgroup=newButtonGroup()JPanelintro=newJPanel()JLabelintroJl=newJLabel()intro.add(introJl)introJl.setText(分配算法选择)Frame.add(intro)15b1.setText(1、循环首次适应算法)b2.setText(2、最佳适应算法)b3.setText(3、最坏适应算法)b1.addActionListener(newb1ButtonListener()b2.addActionListener(newb2ButtonListener()b3.addActionListener(newb3ButtonListener()group.add(b1)group.add(b2)group.add(b3)p为第二个JPanelJPanelp=newJPanel()设置第二个JPanel上的jl1JLabel初始显示信息JLabeljl1=newJLabel()jl1.setText(输入待分配的作业序号)添加该JLabel到p上p.add(jl1)添加该JPanelFrame.add(p)p1为第三个Panel,此JPanel由于要显示5个算法的单选键,所以设置为5行的GridLayout布局JPanelp1=newJPanel()p1.setLayout(newGridLayout(41)p1.add(b1)p1.add(b2)p1.add(b3)Frame.add(p1)JPanelPanel=newJPanel()Field=newJTextField(5)Panel.add(Field)JButtonsendButton=newJButton(确认)sendButton.addActionListener(newSendButtonListener()Panel.add(sendButton)Frame.add(Panel)Frame.setLayout(newFlowLayout()设置窗口大小,Frame.setSize(400220)大小不可更改Frame.setLocation(300400)显示Frame.setVisible(true)设置窗口右上角的关闭按钮事件为结束程序Frame.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE)164.程序设计与实现程序设计与实现4.1程序流程图4.2实验结果生成数据17写入外部TXT文件分配184.3时间安排时间人员工作内容工作情况周三下午一同去寻找资料,分别向网络,图书馆还有以前做过的作业等等寻找完成周四上午由于我们决定使用JAVA进行作业,所以开始进行界面的设计以及代码的参考完成进行界面的搭建周四下午进行代码的修改未完成继续进行界面的搭建完成周五上午继续进行算法的修改未完成进行报告的书写与系统的测试周五下午进行系统的修改完成195.结论结论在内存生成的时候,使用者有两种方式进行生成,分别随机内存生成和直读入内存数据,而在作业生成的时候,使用者同样也有两种方式进行生成,分别是随机作业生成和读入作业生成,最后进行分配,得出结果206.收获、体会和建议收获、体会和建议何松生:通过两天半的课程设计,不得不说也有了一个比较大的收获,虽然在代码的实现的时候,我做的并不是关于算法的设计,当然,这并不是我不做,而是觉得在这方面我还是有些不足,如果时间是足够的话,或许我会尝试去试一试,但是由于时间的不足,还要顾及到我们这个团队,所以也只能去做一个简单的界面搭建了,不过在和队友一起分析这种算法中,我也同时加深了对动态分配管理的理解。当然所有的一切都不是一条坦荡的大道,我们也有不懂的,就比如说在做最佳适应算法和最坏适应算法的时候,我们就对如何用代码去实现找到最小或最大的空闲区,而又最省时间的方法时就遇到了困难,当然还有其它的种
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2027届黔东南南苗族侗族自治州岑巩县数学三上期末达标检测试题含解析
- 2027届岱山县四上数学期末达标测试试题含解析
- 6.5美丽中国加快建设 教学设计 2026-2027学年统编版道德与法治 九年级上册
- 安康市汉阴县2027届四年级数学第一学期期末统考模拟试题含解析
- 奎屯市2027届四上数学期末预测试题含解析
- 《职业生涯设计》中职全套教学课件
- GB-T 47755-2026《燃气-蒸汽联合循环发电机组效能指标评价与效能优化导则》
- 2026中国物流行业绿色物流发展研究及行业竞争力提升策略报告
- 2026中国速溶咖啡行业市场现状供需分析及投资评估规划分析研究报告
- 2026中国渔业行业市场竞争格局及投资布局规划分析研究报告
- 2025-2026学年小学一年级(下)期末数学试卷
- 2026年共产党党章知识竞赛试题库(附答案)
- 施工现场临时排水施工方案
- 2026年军队考核笔押题宝典考试题库及参考答案详解(综合卷)
- 2026安徽师范大学工作人员招聘29人笔试备考题库及答案解析
- 防范钓鱼网站链接诈骗:从识别到防御的全面指南
- 仓库员工考试试题及答案
- 《住院患者身体约束的护理》团体标准
- 第七届村民委员会任期工作报告
- 供应商管理制度范本
- 《子痫前期-子痫》课件
评论
0/150
提交评论