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

标签 c

在 Linux 环境下用 ANSI C 编写 CPU 调度程序时,我无法计算每个排队进程的等待时间。基本上,我需要用 4 个 cpu 运行 20+ 个进程,并测量每个进程花费的时间、平均花费的时间、CPU 消耗等。

这是我尝试编码的过程的类比:

Click me for the image

我画的图像是为了简化我的问题...... 但这是先到先服务的 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]

头文件

[http://pastebin.com/nQQNXnmq]

最佳答案

我会这样处理:

弄清楚如何对输入进行编码。该程序需要以某种方式提供输入“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/

相关文章:

c - 在C中获取当前进程CPU使用率

c - 如何在 Brew 上检测手机品牌和型号信息?

c - 如果有多个空格,如何获取字符输入?

c - 执行需要 ext lib 的 C 脚本

c - 在汇编中编写 JIT 编译器

c - C 中 ASCII char 到 int 的转换

c - 在c中标记字符串

C 下标值不是数组、指针或 vector - 是吗?

c - C中获取strstr之前和之后的文本

c - 移植 Autodesk Animator Pro 以实现跨平台