权威的企业网站建设,百度自动点击器怎么用,哪些网站权重高,湖南seo服务FCFS 调度算法(first come first service) l 用于作业调度#xff1a; 每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业#xff0c;将它们调入内存#xff0c;为它们分配资源、创建进程#xff0c;然后放入就绪队列。 l 用于进程调度#xff1a; 每次… FCFS 调度算法(first come first service) l 用于作业调度 每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业将它们调入内存为它们分配资源、创建进程然后放入就绪队列。 l 用于进程调度 每次调度是从就绪队列中选择一个最先进入该队列的进程为之分配处理机使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。 l FCFS算法比较有利于长作业(进程)而不利于短作业(进程) 有利于CPU繁忙型的作业而不利于I/O繁忙型的作业(进程)。 [CPU繁忙型作业是指该类作业需要大量的CPU时间进行计算而很少请求I/O。通常的科学计算便属于CPU繁忙型作业。 I/O繁忙型作业是指CPU进行处理时需频繁地请求I/O。目前的大多数事务处理都属于I/O繁忙型作业。] SJF 短作业进程Shortest Job First l 用于作业调度 作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业将它们调入内存运行 l 用于进程调度 从就绪队列中选出一个估计运行时间最短的进程将处理机分配给它使它立即执行并一直执行到完成或发生某事件而被阻塞放弃处理机时再重新调度 FCFS: 1. void FCFS() 2. { 3. /* 4. 1. 找到最先到达的进程的坐标并计算相关信息 5. 2. 依次找到接下去到达的进程 6. */ 7. 8. int startWorkTime 0; //表示开始执行时间 当前进程之前的所有服务时间之和 9. int first get_firstProcess(); //获得第一个进程 10. 11. isFinished_FCFS[first] true; 12. FinishTime[first] ArrivalTime[first] ServiceTime[first]; 13. startWorkTime ServiceTime[first]; //下一个进程的开始执行时间 14. WholeTime[first] FinishTime[first] - ArrivalTime[first]; //周转时间 完成时间 - 到达时间 15. WeightWholeTime[first] WholeTime[first]/ServiceTime[first]; //带权周转时间 周转时间/服务时间 16. 17. //接下去的进程 18. int nextProcess n; //初始化下一个进程的下标超出界限 19. 20. for (int i1;in;i) 21. { 22. nextProcess n; //每次对下一个进程的下标进行更新 23. for (int j0;jn;j) 24. { 25. if (!isFinished_FCFS[j]) //表示当前进程还未完成相关信息的计算 26. { 27. if (ArrivalTime[j]startWorkTime) //满足到达时间小于等于开始执行时间的情况下 28. { 29. if (nextProcessn) 30. { 31. nextProcess j; 32. } 33. else 34. { 35. if (ArrivalTime[nextProcess]ArrivalTime[j]) //筛选出最先到达的进程 36. { 37. nextProcessj; //获得当前进程中最先到达的进程 38. } 39. } 40. } 41. } 42. }//for(j) 43. //获得当前需要处理的进程nextProcess后对相关信息进行计算 44. isFinished_FCFS[nextProcess] true; 45. FinishTime[nextProcess] ServiceTime[nextProcess] startWorkTime; 46. startWorkTime ServiceTime[nextProcess]; //获得下一个进程对应的“开始执行时间” 47. WholeTime[nextProcess] FinishTime[nextProcess] - ArrivalTime[nextProcess]; 48. WeightWholeTime[nextProcess] (double)WholeTime[nextProcess]/ServiceTime[nextProcess]; 49. 50. }//for(i) 51. 52. //计算平均周转时间和平均带权周转时间 53. double totalWT 0; 54. double totalWWT 0; 55. for (int i0;in;i) 56. { 57. totalWTWholeTime[i]; 58. totalWWTWeightWholeTime[i]; 59. } 60. AverageWT_FCFS totalWT/n; 61. AverageWWT_FCFS totalWWT/n; 62. 63. //输出检测 64. display(); 65. cout平均周转时间AverageWT_FCFSendl; 66. cout平均带权周转时间AverageWWT_FCFSendl; 67. cout******************************************************endl; 68. } SJF: 1. void SJF() 2. { 3. //与SCSF类似相同的方法获得第一个进程 4. int startWorkTime_SJF 0; //表示开始执行时间 当前进程之前的所有服务时间之和 5. //第一个进程的处理 6. int first get_firstProcess(); //获得第一个进程 7. 8. isFinished_SJF[first] true; 9. FinishTime[first] ArrivalTime[first] ServiceTime[first]; 10. startWorkTime_SJF ServiceTime[first]; //下一个进程的开始执行时间 11. WholeTime[first] FinishTime[first] - ArrivalTime[first]; //周转时间 完成时间 - 到达时间 12. WeightWholeTime[first] (double)WholeTime[first]/ServiceTime[first]; //带权周转时间 周转时间/服务时间 13. 14. //获得下一个进程的下标 15. 16. int nextProcess_SJF n; 17. for (int i1;in;i) 18. { 19. nextProcess_SJF n; 20. for (int j0;jn;j) 21. { 22. if (!isFinished_SJF[j]) 23. { 24. if (ArrivalTime[j]startWorkTime_SJF) 25. { 26. if (nextProcess_SJFn) 27. { 28. nextProcess_SJF j; 29. } 30. else 31. { 32. if (ServiceTime[nextProcess_SJF]ServiceTime[j]) 33. { 34. nextProcess_SJF j; //获得运行时间最短的作业的下标 35. } 36. } 37. } 38. } 39. }//for(j) 40. 41. //对获得的进程进行处理 42. isFinished_SJF[nextProcess_SJF] true; 43. FinishTime[nextProcess_SJF] ServiceTime[nextProcess_SJF] startWorkTime_SJF; 44. startWorkTime_SJF ServiceTime[nextProcess_SJF]; 45. WholeTime[nextProcess_SJF] FinishTime[nextProcess_SJF] - ArrivalTime[nextProcess_SJF]; 46. WeightWholeTime[nextProcess_SJF] (double)WholeTime[nextProcess_SJF]/ServiceTime[nextProcess_SJF]; 47. 48. }//for(i) 49. 50. double totalWT 0; 51. double totalWWT 0; 52. for (int i0;in;i) 53. { 54. totalWTWholeTime[i]; 55. totalWWTWeightWholeTime[i]; 56. } 57. AverageWT_SJF totalWT/n; 58. AverageWWT_SJF totalWWT/n; 59. 60. //输出检测 61. display(); 62. cout平均周转时间AverageWT_SJFendl; 63. cout平均带权周转时间AverageWWT_SJFendl; 64. cout******************************************************endl; 65. } 1. Initial()进行初始化。
2. input()对到达时间和服务时间进行输入。
3. get_firstProcess()获得第一个进程FCFS和SJF算法的实现相同。
4. FCFS()对算法进行处理。
5. SJF()对算法进行处理。
6. choose_Algorithm();对实现算法的类别进行选择具有容错性特征。