软件截图:
只实现了三种算法,先进先出,时间片轮转(多线程),抢占式优先级,贴点代码,省得被说是水文。
抢占式优先级核心调度:
2 if (processRegister != freeProcess && CpuPanel.getCpu().getPSW() != 3 ) {
3 boolean isNeedScheduling = false ;
4
5 int excuteProcessPriority = processRegister.pcb.getPriority();
6 if (readyQueue.getItems().length > 0 ) {
7 excuteProcessPriority -- ;
8 }
9 processRegister.pcb.setPriority(excuteProcessPriority);
10 executeField.setText(processRegister.pcb.getSign() + " -优先级: "
11 + processRegister.pcb.getPriority());
12
13 Object[] readyProcessList = readyQueue.getItems();
14 for ( int i = 0 ; i < readyProcessList.length; i ++ ) {
15 int readyProcessPriority = ((Process) readyProcessList[i]).pcb
16 .getPriority();
17 readyProcessPriority ++ ;
18 ((Process) readyProcessList[i]).pcb
19 .setPriority(readyProcessPriority);
20 if (processRegister.pcb.getPriority() < ((Process) readyProcessList[i]).pcb
21 .getPriority()) {
22 isNeedScheduling = true ;
23 }
24 }
25 showReadyQueen();
26
27 if (isNeedScheduling) {
28 for ( int i = 1 ; i < readyProcessList.length; i ++ ) {
29 for ( int j = 0 ; j < readyProcessList.length - i; j ++ ) {
30 if (((Process) readyProcessList[j]).pcb.getPriority() < ((Process) readyProcessList[j + 1 ]).pcb
31 .getPriority()) {
32 swap(readyProcessList, j, j + 1 );
33 }
34 }
35 }
36 processRegister.pcb.setPSW( 0 );
37 processRegister.pcb.setPC(CpuPanel.getCpu().PC);
38 processRegister.pcb.setDIndex(CpuPanel.getCpu().getDIndex());
39 readyQueue.enterQueen(processRegister);
40
41 processRegister = (Process) readyProcessList[ 0 ];
42 try {
43 readyQueue.getOutQueen(readyProcessList[ 0 ]);
44 } catch (NullQueueException e) {
45 e.printStackTrace();
46 }
47 executeField.setText(processRegister.pcb.getSign() + " -优先级: "
48 + processRegister.pcb.getPriority());
49 showReadyQueen();
50 showBlockQueen();
51 registerProcess(processRegister);
52 CpuPanel.run();
53 }
54 }
55 }
这样的代码,不需要加注释,也一样很容易理解。
在写的过程中看了一个仁兄的代码,结果让我大跌眼镜,不但功能是糊弄老师的,而且没有封装性,命名也不规范,还用异常来控制
程序的逻辑,错误拼写一堆。还好是我这个明白人看的出来,如果让学弟学妹们看到岂不是误导别人嘛。老师还拿那个程序当范例。哎~~~
时间片轮转必须要多线程才算标准实现,单线程实现的看都不必看了。
对程序精益求精的人,真是不多了。我之所以在学校自己单干项目的缘由也可想而知了,别的人写的代码功能是能实现,但是实在是不敢恭维。
本来是打算把书上的算法都实现一遍的,不过因为临近考试,所以我就简单叙述下思路。
4.最短运行期优先:将每次申请设备前都需要占用CPU执行一段时间,但是使用设备不占用CPU,所以可以把程序的申请设备的几个占用时间段
记录到一个数组或者队列中,每执行一条指令,判断一边就绪进程和执行进程的下一次运行时间,然后选出最短运行时间的进程,调度执行。
5.最高响应比优先:道理和上面的算法的差不多,不过需要记录一个等待执行的时间,也就是加一个字段模拟。然后计算出响应比,然后排序,选择
响应比最高的进程调度执行。
6.前后台调度:前台时间片,后台先进先出,只需要加一个字段,记录前后台,然后加个判断就完了。
7.多级反馈队列轮转:给队列加一个级别字段,每调度两次就把级别减一,初始进程级别最高。时间片到时根据级别查找级别最高的进程,直接出队列
调度执行。
本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2009/12/17/1625931.html,如需转载请自行联系原作者