我正在尝试使用循环法和fcfs为C中的schedulling算法创建一个模拟器。
我只是有几个问题,因为我试图查阅它并阅读内核命令,但我仍然感到困惑:(这个程序正在putty(linux)上完成,你有一个带时钟的进程列表执行或占用CPU时间。
我们如何让一个进程占用CPU时间?我们是否调用了sys()函数(不知道哪一个)或者当我在程序中从文本文件中读取它时我们是否想要一个进程malloc?我知道我听起来很愚蠢,但请解释一下。
您建议使用哪种最佳数据结构来存储过程(创建时间,进程ID,内存大小,作业时间)为ex(0,2,70,8)?
当一个进程在其作业时间内完成时,我们如何终止它以使其从CPU中解脱出来以确保在其可以使用cpu后的一个时钟时间进行另一个进程?
如何实现时钟时间,是否有内置函数或仅使用for循环。
我希望这些问题不会提出太多问题,但无论谁回复我,我都会非常感激。
此致
答案 0 :(得分:2)
如果你正在构建一个模拟器,你不应该实际等待那段时间,你应该通过更新计数器来“安排”并说过程p1到目前为止已经运行了750毫秒,预定3次为250毫秒,250毫秒,250毫秒等等......尝试在用户空间中实时运行调度模拟,必然会给您带来奇怪的结果,因为您的流程本身也需要安排。
例如,如果你想模拟FCFS,你可以实现一个简单的“进程”队列,并为每个队列提供一个时间片(你可以使用默认的内核时间片或你自己的时间片,并不重要)以及每一个进程将有一些总执行时间来完成,你可以基于此进行计算。例如,P1是一个过程,需要3.12秒的CPU时间才能完成(我不认为需要进行内存模拟,因为我们正在进行调度而不是缓存或其他任何考虑因素)。您只需按照惯例运行算法,但只需添加数字,这样您就可以“运行”P1,为其计数器添加时间并检查是否已完成。如果检查差异等等,你可以保持全球时间来跟踪它在挂钟时间内的运行时间。然后简单地将P1放在队列的末尾并“安排”下一个过程。
现在,如果您想要测量完全不同的调度性能,这通常涉及运行工作负载基准以在系统上运行许多进程并检查每个进程的整体性能指标。