我如何实现FCFS处理器调度模拟器?

时间:2012-10-07 10:19:31

标签: c++ algorithm vector struct scheduling

我有一个结构矢量,结构看起来像这样:

struct myData{
    int ID;
    int arrivalTime;
    int burstTime;
};

使用此数据填充载体后:

1 5 16
4 7 12
3 12 4
2 7 8

其中每一行是一个单独的结构ID(任意,不表示到达顺序),arrivalTime和burstTime,我如何使用“for”或“while”循环来逐步执行向量索引并计算数据我可以打印出这样的东西吗?

Time 0  Processor is Idle
Time 5 Process 1 starts running
Time 21 Process 2 is running
Time 29 Process 4 is running
Time 41 Process 3 is running

我认为我可以这样做的方法是让一个整数跟踪当前时间是什么(当前时间是已经运行的进程的突发时间的总和)但我似乎无法弄清楚考虑空闲时间的算法(当处理器没有做任何事情而新任务尚未到达时)以及跟踪其他数字。为简单起见,我只是决定当两个进程同时到达时,我将处理具有较低ID号的进程。我知道我没有在这里放太多代码来证明我正在尝试做什么,但我希望我已经相当清楚地解释了它。我正在寻找这个问题的伪代码算法解决方案,但我不会对已经编码的东西说不(在C ++中?)。

作为补充说明,如果我无法清楚地说明我如何清楚地访问我的数据,那么:

cout << structVector[0].ID << "\n";
cout << structVector[0].arrivalTime << "\n";
cout << structVector[0].burstTime << "\n";

会打印出来

1
5
16

任何psuedo代码或实际代码的帮助都将非常感激!!!在阅读了几篇这篇文章之后,我意识到我对这个问题非常了解,但我希望能帮助你理解如何计算这些数据。

1 个答案:

答案 0 :(得分:1)

首先,根据到达时间对矢量进行排序。 然后,以下代码将完成您要查找的内容。

int i = 0, time = 0;

while (i < vec.size())
{
if (vec[i]. arrivalTime > time)
cout << "Time " << time << "process is idle";

time += vec[i].arrivalTime;
cout << "Time " << time << " Process " << vec[i].ID << " is running" << endl;

time += vec[i].burstTime;

i++;
}