1881.操作系统课程设计报告_第1页
1881.操作系统课程设计报告_第2页
1881.操作系统课程设计报告_第3页
1881.操作系统课程设计报告_第4页
1881.操作系统课程设计报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、一 总体设计系统名称:多级反馈队列的模拟系统开发:1).开发工具:微软visual basic6.02).开发人员:项目负责人: 成员: 3) 开发计划及时间安排: 开发步骤 计划完成的任务计划完成时间实际完成情况1确定开发的项目名称,并熟悉相关知识,确定开发工具。(由小组内的所有成员研讨决定)1-2天模拟多级反馈队列的实现,用visual basic6.0实现可视化动态的模拟2详细分配任务,并明确每个人的任务,开始实现。这一阶段主要实现怎么控制进程的自动移出和判断2-4天分配了任务在实现自动控制方面有了一定的进展3怎么实现进程时间的判断及与其相应的处理。以及对应处理时cpu的位置1天用多个不

2、同的时钟交叉控制来实现,基本完成4实现控制台程序模块的设计,包括随即生成进程序列,用户自己设定的序列及各个队列的时间1天成功完成了程序控制台的功能和界面设计,模块测试通过5测试各个模块的功能,并对其进行整体测试1天发现了一些小问题,找出原因后一一解决了二 系统分析报告:很多进程调度方法都有一定的局限性,如短进程优先的调度法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则段进程优先和基于进程长度的抢占调度算法,都将无法使用,而多级反馈队列调度算法,则不必事先知道各种进程所需的时间,而且还可以满足各种类型进程的需要,因而它是目前被公认为的一种较好的进程调度算法。在采用多级反馈队列调度

3、算法的系统中,调度算法的实施过程如下:(1) 应设置多个就绪队列,并为各个队列赋予不同的优先级,第一个队列的优先级是最高,第二个队列次之,其余各队列的优先权逐个降低,该算法赋予各个队列中进程执行时间片,例如,第二个队列的时间片要不第一个队列的时间片长一倍,第i+1个队列的时间片要比第i个队列的时间片长一倍。(2) 当一个新进程进入内存后,首先将它放入第一队列的结尾,按fcfs原则排队等待调度,当论到该进程执行时, 如它能在该时间片后内完成,便可准备撤离系统,如果它在一个时间片结束尚未完成,调度程序便将该进程转入第二个队列的结尾,再同样地按fcfs原则等待调度执行;如果它在第二队列中运行一个时间

4、片后仍未完成,再依次将它放入第三个队列,如此下去,当第一长作业(进程)从第一队列依次降到第n队列后,在第n队列中便采用取按时间片轮转的方式运行。(3) 仅当第一个队列空闲时,调度程序才调度第二个队列中的进程运行,仅当第1(i-1)队列均空闲时,才会调度第i个队列中为某进程服务时,又有新进程进入优先权比较高的队列(第1(i-1)中的任何一个队列),则此时新进程将 抢占在运行进程的处理机,即由调度程序把在运行的进程放回到第i队列的结尾,把处理机分配给新到的高有限权进程。 就绪队列1就绪队列2就绪队列3就绪队列n 至cpu 至cpu 至cpu 至cpu (时间片: )用vb模拟的时候,可以用list

5、来显示进程。三 . 系统设计报告: 1)设计原理:本系统主要可视的模拟了多级反馈队列的工作过程,多级反馈队列的工作过程如下: 2)模拟的界面如下: 3)设计的模拟实现: 用list来模拟进程队列和需要的时间(剩余时间),用时钟来控制自动运行4)设计时主要解决的问题: (1)在多级反馈队列中,最主要的是队列的优先级,第一队列的优先级最高,运行时间最短,第二级队列次之,运行时间次短,最后的一级队列运行时间最长,优先级最低。这就要求当进程在第一队列运行没有完成时,自动进入第二级,如果完成,则进入完成队列。我们用时钟来实现,给每一个队列中设置一个时钟,用来设置各个队列的时间,在外部有相应的时钟来控制来

6、判断是否转入下一级队列还是进入完成队列。 (2)在最后一级队列中,如果没有处理完,则继续进入最后一级队列的结尾,等待下一次处理,直到完成。这样,控制最后一个的时钟和以前的设计是不一样的 (3)当第i级队列为空时,处理机才能去处理i+1级队列,也就意味着可能出现抢占cpu的情况,比如:当处理机处理第三级队列中的进程的时候,意味着第一第二队列已经为空,但当此时生成一批新进程时(新进程生成时只能进入第一级队列),这时,处理机抢占进行处理第一级队列。实现的时候,管理后面队列的时钟总要判对他前面的所有的队列中是否还有进程。关于cpu的位置,我们用一个时钟控制cpu的位置,它的时钟频率很高,比控制进程处理

7、的各个时钟的都快,这样,他以很高的频率扫描判断cpu应该在的位置。 (4)程序控制台主要用来设置一些基本条件,比如各个队列的时间等。5)设计界面和具体代码: 其中:timer1 timer2 timer3 用来记录第一第二第三队列的时间,timer4用来控制cpu的位置 timer5,timer7,timer6来控制各个对列的添加和进入完成队列 设计界面如下:源代码如下:public pcb1 as stringpublic pcb0 as stringpublic time as stringpublic time0 as stringprivate sub command1_click()

8、randomizerandi = int(rnd * (9 - 5 + 1) + 5)for i = 0 to randi randomize rand = int(rnd * (10 - 1 + 1) + 1) select case rand case 1 pcb = 进程控制块1 time = 100 case 2 pcb = 进程控制块2 time = 200 case 3 pcb = 进程控制块3 time = 300 case 4 pcb = 进程控制块4 time = 400 case 5 pcb = 进程控制块5 time = 500 case 6 pcb = 进程控制块6 t

9、ime = 600 case 7 pcb = 进程控制块7 time = 700 case 8 pcb = 进程控制块8 time = 800 case 9 pcb = 进程控制块9 time = 900 end select list1.additem pcb list5.additem time next i timer5.enabled = true timer4.enabled = trueend subprivate sub command2_click()endend subprivate sub command3_click()if text1.text = thenmsgbox

10、 (请输入生成的条件!)elserandi = text1.textfor i = 0 to randi randomize randi = int(rnd * (10 - 1 + 1) + 1) timer1.interval = text2.text timer2.interval = text3.text timer3.interval = text4.text select case randi case 1 pcb = 进程控制块1 time = 100 case 2 pcb = 进程控制块2 time = 200 case 3 pcb = 进程控制块3 time = 300 cas

11、e 4 pcb = 进程控制块4 time = 400 case 5 pcb = 进程控制块5 time = 500 case 6 pcb = 进程控制块6 time = 600 case 7 pcb = 进程控制块7 time = 700 case 8 pcb = 进程控制块8 time = 800 case 9 pcb = 进程控制块9 time = 900 end select list1.additem pcb list5.additem time next i timer5.enabled = true end ifend subprivate sub form_load()if f

12、orm1.option1.value = true thentext1.enabled = falsetext2.enabled = falsetext3.enabled = falsetext4.enabled = falseend ifend subprivate sub option1_click()if option1.value = true thentext1.enabled = falsetext2.enabled = falsetext3.enabled = falsetext4.enabled = falseend ifend subprivate sub option2_c

13、lick()if option2.value = true thentext1.enabled = truetext2.enabled = truetext3.enabled = truetext4.enabled = trueend ifend sub private sub timer4_timer()if list1.list(0) then picture2.left = 360elseif list2.list(0) = then picture2.left = 5500 else picture2.left = 2800 end if end if end subprivate s

14、ub timer5_timer()if list1.list(0) then time0 = list5.list(0) pcb0 = list1.list(0) a = timer1.interval if time0 a then list1.removeitem 0 list5.removeitem 0 list2.additem pcb0 list7.additem time0 - a else list1.removeitem 0 list5.removeitem 0 list6.additem pcb0 end if else timer6.enabled = true end i

15、f end subprivate sub timer6_timer()if form1.list1.list(0) = then if list2.list(0) then time0 = list7.list(0) pcb0 = list2.list(0) a = timer2.interval if time0 a then list2.removeitem 0 list7.removeitem 0 label12.caption = pcb0 list3.additem pcb0 list8.additem time0 - a else list2.removeitem 0 list7.

16、removeitem 0 list6.additem pcb0 end if else timer7.enabled = true end if end if end subprivate sub timer7_timer()if form1.list1.list(0) = then if list2.list(0) = then if list3.list(0) then time0 = list8.list(0) pcb0 = list3.list(0) a = timer3.interval if time0 a then list3.removeitem 0 list8.removei

17、tem 0 list3.additem pcb0 list8.additem time0 - a else list3.removeitem 0 list8.removeitem 0 list6.additem pcb0 end if else msgbox (进程完毕) end ifend ifend ifend sub四 。系统模块说明 系统共有三个模块:程序控制模块,具体实现模块和处理机模块 功能如下: 程序控制模块:实现生成进程的条件,包括两种方式:随机和设定,随机生成的时候,生成要设置的所有的条件,设定时,要按照后面给出的条件来设定。cpu处理模块:由一个时钟来控制cpu的位置,它的

18、频率很高,基本上可以达到与新进程同步具体实现模块:实现多级反馈队列的模拟。当一个新进程进入内存后,首先将它放入第一队列的结尾,按fcfs原则排队等待调度,当论到该进程执行时, 如它能在该时间片后内完成,便可准备撤离系统,如果它在一个时间片结束尚未完成,调度程序便将该进程转入第二个队列的结尾,再同样地按fcfs原则等待调度执行;如果它在第二队列中运行一个时间片后仍未完成,再依次将它放入第三个队列,如此下去,当第一长作业(进程)从第一队列依次降到第n队列后,在第n队列中便采用取按时间片轮转的方式运行。仅当第一个队列空闲时,调度程序才调度第二个队列中的进程运行,仅当第1(i-1)队列均空闲时,才会调

19、度第i个队列中为某进程服务时,又有新进程进入优先权比较高的队列(第1(i-1)中的任何一个队列),则此时新进程将 抢占在运行进程的处理机,即由调度程序把在运行的进程放回到第i队列的结尾,把处理机分配给新到的高有限权进程。 五 . 系统分调和总调报告 1) 分调报告:主要是指具体实现模块和控制模块。 具体实现模块:(1) 当timer4的频率太快时,生成的进程刚进入第一队列就会处理完毕,这时体现不出真正的模拟,这是可以将其频率设的慢一点,这时,他不断的进行判断测试,当发现第一个为空时,才激活控制第二个队列的timer5来工作。(2) 在最后的队列中和以前的不一样,开始时的时候把它设置的和前面一样

20、,出现了还没有运行完成就加入完成队列。显然是个错误。将其纠正后,正常运行(3) 比如在处理第三队列的进程时,新进入队列,则转向处理第一队列,这时,其他的队列的时钟则为不可用。后面的时钟必须判断前面的队列是否为空。(4) 当进程运行完毕后,弹出进程完毕的对话框,它也是由时钟控制的,即只要全部队列为空,就一直循环的探出对话框。这一点我没有时间解决控制模块:单独与此模块,主要是测试几个设计的视线是否正常(1) 当单选在随机生成的时候,所有的文本框均不可用,刚开始的时候,我把它们的可用设为真,有时可用,有时相反。这时应该把它们置位假,而单选默认在随机生成,(2) 当选择设置时,其范围不能超出后面所给的,否则会出现混乱2)总调报告:总调时主要解决两个问题;一是如何把设置和随机产生的条件赋予队列,另一个是怎么使cpu处于正常的位置;(1) 第一个其实很简单,只要将所生成的东西赋值与pcb0 tim0即可,他们是用来记录相应的条件的。(2) 这个问题有点复杂,因为cpu和队列是完全不相干的两个方面,要实现机会是同步转化基本不可能,我采取了这样的策略:将各个时钟的频率置得很慢,这样可以一方面更好的显示处理的过程,另一方面,将cpu的时钟置得很大,这样timer4不停的扫描,只要前面有新加的进程,它会在最短时间内转过去,原来的进程停止(这是由具体实现模块实现的)六. 系统

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论