【问题标题】:Schedulling algorithm cpu time调度算法cpu时间
【发布时间】:2012-04-05 00:41:21
【问题描述】:

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

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

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

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

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

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

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

问候

【问题讨论】:

  • 请按照耶稣的回答说明...

标签: c unix process scheduling system-clock


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多