模拟进程管理小结,编码规范的重要性

简介:

软件截图:

 

 

只实现了三种算法,先进先出,时间片轮转(多线程),抢占式优先级,贴点代码,省得被说是水文。

抢占式优先级核心调度:

 

复制代码
 1  public   static   void  priorityOperating() {
 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,如需转载请自行联系原作者

目录
打赏
0
0
0
0
51
分享
相关文章
|
9月前
|
Linux环境变量:不可或缺的系统组成部分
Linux环境变量:不可或缺的系统组成部分
83 0
防御性设计和开发
“防御性编程(Defensive programming)是防御式设计的一种具体体现,它是为了保证,对程序的不可预见的使用,不会造成程序功能上的损坏。它可以被看作是为了减少或消除墨菲定律效力的想法。”
902 0
防御性设计和开发
自动化测试在软件生命周期中的重要性
随着软件开发周期的加速,自动化测试成为确保软件质量和缩短上市时间的关键因素。本文旨在探索自动化测试如何在不同阶段提升效率与质量,并分析其在当前软件开发生态中的不可替代性。
探索式测试:一种高效软件质量保证方法
在软件开发的复杂性不断增加的背景下,传统的测试方法已不能完全满足快速迭代和高质量标准的要求。探索式测试(Exploratory Testing)作为一种灵活且高效的软件测试实践,正逐渐成为质量保证过程中不可或缺的一部分。本文将深入探讨探索式测试的核心理念、实施策略以及与传统测试方法相比的优势,旨在为读者提供一套完整的探索式测试框架及其在实际项目中的应用示例。
探索式测试:一种高效的软件质量保证方法
在快速迭代的软件发展时代,探索式测试以其灵活性和高效性成为重要的质量保证手段。本文深入探讨了探索式测试的定义、优势、实施策略及面临的挑战,旨在为读者提供一套系统的探索式测试实践指南。
|
9月前
构建安全可靠的系统:第六章到第十章
构建安全可靠的系统:第六章到第十章
275 0