- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试用 Java 编写一个 CPU 调度模拟器。这些进程按顺序处理,使得突发时间(处理时间)最少的进程应首先处理。在开始之前,我在指定名称、突发时间和到达时间的 ArrayList 中输入所有进程。如果所有进程同时进入,代码在逻辑上工作正常。
问题是进程有不同的到达时间。我如何编辑代码以考虑此到达时间。
我只需要编辑代码部分,使我的流程具有最少的突发时间(相对于到达时间)
public Process removeSJ(){ // removes & returns the process with the min. burst time
int minBurstTime = processes.get(0).getBurstTime(); // processes is ArrayList of Processe objects
int minIndex = 0;
for (int i=1 ; i<processes.size(); i++){
int curBurstTime = processes.get(i).getBurstTime();
if ( (curBurstTime < minBurstTime)){
minBurstTime = curBurstTime;
minIndex = i;
}
}
numberOfProcesses--;
return (processes.remove(minIndex));}
示例输出
The processor schedules process : P2
arrival time = 8 , burst time = 1 , waiting Time = 0
Turnaround time = 1
The processor schedules process : P3
arrival time = 5 , burst time = 3 , waiting Time = 1
Turnaround time = 4
The processor schedules process : P1
arrival time = 1 , burst time = 9 , waiting Time = 4
Turnaround time = 13
****** Average Turnaround Time = 6 ******
最佳答案
您不仅需要搜索最小的突发时间,还需要搜索最近的可用时间。为此,您必须跟踪“处理器下次可用时间”nextAvailableTime
。由于处理器在您启动时是空闲的,因此您可以从 nextAvailableTime
= 0 开始。
然后:
寻找到达时间最短(最近)的进程。您会发现共享该到达时间的所有进程。 但是如果有到达时间<= nextAvailableTime
的进程,则全部选择。在这种情况下,哪个到达时间最早并不重要,因为任何到达时间 <= nextAvailableTime
的进程都必须等待处理器可用。
无论您选择哪一组进程,请找出突发时间最短的进程。
安排该过程。该过程将在其到达时间或 nextAvailableTime
开始。将突发时间添加到开始时间,这将是新的 nextAvailableTime
。
这在您的小示例中的工作方式:
有一个进程的到达时间为 1,并且没有其他进程同时到达,因此您可以安排它。这意味着下一个可用时间将是 10 点。
由于处理器将在时间 10 可用,因此现在将有两个进程在等待,到达时间分别为 5 和 8。选择突发时间最短的进程 P2。这将在时间 10 + 1 = 11 完成,这将是下一个可用时间。
现在只剩下一个进程,P3。它的到达时间是 5,所以它会等待。安排它。
注意:我的第一个回答涉及设置一个“事件队列”,这是一个按时间排序的列表,其中包含模拟器需要注意的事件。在这种情况下,事件将是流程到达和流程完成。这个解决方案比您解决此问题所需的要复杂一些。但这是一个更通用的解决方案。如果您开始添加更多因素,例如多个进程或某些必须尽快安排的具有紧急优先级的进程,我概述的简单解决方案可能不够好。
关于java - 按最短作业优先 (SJF) 的流程调度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40954317/
typedef struct{ int tL; //Arrival time int rafaga,id,tE,tP; //burst,id,waitTime,TimeAround } pro
我正在尝试用 Java 编写一个 CPU 调度模拟器。这些进程按顺序处理,使得突发时间(处理时间)最少的进程应首先处理。在开始之前,我在指定名称、突发时间和到达时间的 ArrayList 中输入所有进
在基层队列的多级反馈调度中,进程以循环方式循环,直到它们完成并离开系统。基级队列中的进程也可以按照先到先得的原则进行调度。为什么不能使用最短作业优先 (SJF) 算法而不是先来先服务 (FCFS) 算
在 C 语言中,假设为每个算法提供了完全相同的一组进程,先到先得、最短作业优先和循环法之间的周转时间是否相等?或者调度算法之间会有所不同吗? 最佳答案 通常,实现先来先服务 (FCFS) 和最短作业优
我有一个结构 vector ,结构看起来像这样: struct myData{ int ID; int arrivalTime; int burstTime; }; 用这些数据
下面是我的问题的两个相关函数,但请询问您是否需要任何其他函数来帮助我解决这个问题。该程序模拟具有指数间隔时间、指数服务时间和 FCFS 调度规则的单个服务器队列。这是一个分配,我打算通过按 CPU_t
我是一名优秀的程序员,十分优秀!