[英]First Come First Serve Multiprocessor (6 processors) scheduler in C code
[英]Calculating Wait Time for a First Come First Serve in ANSI C
在针对Linux环境的ANSI C中对CPU调度进行编程时,我无法计算每个排队进程的等待时间。 基本上,我需要以4 cpus运行20多个进程,并测量每个进程花费的时间,平均花费的时间,CPU消耗等。
这是我尝试编写的过程的类比:
我绘制的图像试图简化我的问题...但这是先到先服务的CPU调度员,计数器A是CPU突发,计数器B是设备突发,行1是就绪队列,行2是设备队列。 ..
到现在为止,我已经能够将任务输出到一个数组中,但是对于我的任务,我需要找出每个人需要等待多长时间,每个流程的周转时间及其平均时间。
每个人结构都有一个“ arrivalTime”并且可以随时更改每个人结构在每个计数器“ timeRequired []”上也有一个所需的时间数组,它是交替的,索引0代表计数器A,索引1代表计数器B,索引2再次代表A。 每个人的结构都有一个timeRequired [],“ arrayPointer”的数组指针
我画的照片说的是秒,但实际上是任何时间单位,一个整数,我真的不需要实际的时钟...
到目前为止,我要做的是创建2个线程函数,其中1个用于counterA,1个用于counterB,当A完成为某人服务时,A会将人员塞入B行,而当B完成某人时,它将塞入人员。它进入A线。
我觉得一切都已经准备就绪,但是我真的不知道从现在开始我需要做什么来计算他们的等待时间...
还是有比使用线程更简单的解决方案?
教授给了我们2个档案
辅助方法
[ http://pastebin.com/qF7nQsUR]
头文件
gettimeofday(2)。
过程结构中的某处
struct timeval bornon; /* time this process was born */
然后在您的分配路径中调用gettimeofday
if (gettimeofday(&process->bornon, NULL) == -1)
err(1, "ohnoes! gettimeofday!");
然后在处理完成后再次调用它
struct timeval doneon;
int secs, usecs;
gettimeofday(&doneon, NULL);
secs = doneon.tv_secs - process->bornon.tv_secs;
usecs = doneon.tv_usecs - process->bornon.tv_usecs;
然后进行秒/微秒的转换。
我会这样处理:
弄清楚如何编码输入。 该程序需要以某种方式使输入“人1需要...”可用。
这些定义可以起作用:
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;
}
这些数组可以描述每个领带在做什么
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.