在 Linux 环境下用 ANSI C 编写 CPU 调度程序时,我无法计算每个排队进程的等待时间。基本上,我需要用 4 个 cpu 运行 20+ 个进程,并测量每个进程花费的时间、平均花费的时间、CPU 消耗等。
这是我尝试编码的过程的类比:
我画的图像是为了简化我的问题...... 但这是先到先服务的 CPU 调度程序, 计数器 A 是 CPU 突发,计数器 B 是设备突发, 第 1 行是就绪队列,第 2 行是设备队列...
到目前为止,我可以将任务输出到数组中,但是对于我的作业,我需要找出每个人等待的时间、每个进程的周转时间以及他们的平均值次。
每个人的结构都有一个“arrivalTime”并且可以随时更改 每个人结构体还有一个每个计数器所需时间的数组“timeRequired[]”,它是交替的,索引0用于计数器A,索引1用于计数器B,索引2又用于A。 每个 person 结构体都有一个 timeRequired[], "arrayPointer"的数组指针
我画的图说的是秒,但实际上是任何时间单位,一个整数, 我真的不需要实际的时钟...
到目前为止我所做的是创建了 2 个线程函数,1 个用于 counterA,1 个用于 counterB, 当A完成服务完队列中的一个人后,A会将这个人塞到B队列中, 当B完成一个人时,它会将其塞到A行中。
我觉得一切都已经准备好了,但我真的不知道从现在开始我需要做什么来计算他们的等待时间......
或者有比使用线程更简单的解决方案吗?
教授给了我们2个文件
辅助方法
[http://pastebin.com/qF7nQsUR]
头文件
最佳答案
我会这样处理:
弄清楚如何对输入进行编码。该程序需要以某种方式提供输入“person 1 need...”。
这些定义可以起作用:
struct need {
int person_id, counter_id, duration
};
struct need needs[] = {
{ 1, COUNTER_A, 500 },
{ 1, COUNTER_B, 200 },
...
};
接下来,您需要随时跟踪每个人的位置。
这个结构可以描述一个人现在在做什么:
struct person_activity {
int person_id;
struct need *activity;
int start_time;
}
这些的数组可以描述每个人在任何平局中所做的事情
关于使用 ANSI C 计算先到先服务的等待时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9479296/