繁体   English   中英

计算ANSI C中先到先服务的等待时间

[英]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]

头文件

[ http://pastebin.com/nQQNXnmq]

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM