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