c-调度算法cpu时间



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

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

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

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

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

  4. 你如何实现时钟时间,是否有任何内置功能或只使用for循环。

我希望这些问题不会问太多,但无论谁能回复我,我都会非常感激

问候

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

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

现在,如果你想衡量调度性能,那就完全不同了,这通常需要运行工作负载基准测试来在系统上运行许多进程,并检查每个进程的总体性能指标。

最新更新