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

How would I implement a FCFS processor scheduling simulator?

本文关键字:FCFS 处理器调度 模拟器 实现 何实现      更新时间:2023-10-16

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

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

任何关于伪代码或实际代码的帮助都将不胜感激!!!读了几遍这篇文章后,我意识到我对这个问题很一般,但我很想了解如何计算这些数据。

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

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++;
}