0

我正在尝试使用循环和 fcfs 为 C 中的调度算法制作一个模拟器。

我只是有几个问题,因为我试图查找它并阅读内核命令,但我仍然很困惑:(这个程序是在 putty(linux) 上完成的,你有一个带有时钟的进程列表执行或占用cpu时间。

  1. 我们如何让一个进程占用 CPU 时间?我们是调用 sys() 函数(不知道是哪一个),还是当我在程序中从文本文件中读取它时,我们是否打算 malloc 一个进程?我知道我可能听起来很愚蠢,但请解释一下。

  2. 您建议用于存储 ex (0,2,70,8) 的进程(创建时间、进程 ID、内存大小、作业时间)的最佳数据结构是什么?

  3. 当一个进程在其工作时间内完成时,我们如何终止它以使其从CPU中释放出来,以确保其他进程在它可以使用cpu之后的时钟时间?

  4. 您如何实现时钟时间,是否有任何内置函数或仅使用 for 循环。

我希望这些不是问太多问题,但谁能回复我,我将不胜感激。

问候

4

1 回答 1

2

如果您正在构建一个模拟器,您实际上不应该等待那么长的时间,您应该通过更新计数器并说进程 p1 到目前为止总共运行了 750 毫秒,计划 3 次,分别为 250 毫秒、250 毫秒、250 毫秒等,来“安排”。 .. 尝试在用户空间中实时运行调度模拟势必会给您带来奇怪的结果,因为您的进程本身也需要调度。

例如,如果你想模拟 FCFS,你可以实现一个简单的“进程”队列,并给它们每个时间片(你可以使用默认的内核时间片或你自己的,没关系),这些进程中的每一个都会有完成一些总执行时间,您可以根据此进行计算。例如,P1 是一个进程,需要 3.12 秒的 CPU 时间才能完成(我认为不需要内存模拟,因为我们正在进行调度而不是缓存或其他任何考虑)。您只需像往常一样运行算法,但只是添加数字,因此您“运行”P1,将时间添加到它的计数器并检查它是否完成。如果是检查差异等...并且您可以保留全局时间以跟踪它在挂钟时间中运行了多长时间。

现在,如果您想测量完全不同的调度性能,这通常涉及运行工作负载基准以在系统上运行许多进程并检查每个进程的整体性能指标。

于 2012-04-05T00:49:13.403 回答