2012-04-05 51 views
0

我想在C中使用循环法和fcfs为调度算法制作模拟器。调度算法cpu时间

我只是有几个问题,因为我试图查看它并阅读内核命令,但即时通讯仍然困惑:(此程序正在腻子(Linux)上,你有一个时间的进程列表时钟执行或占用CPU时间。

  1. 我们如何做一个进程占用CPU的时间吗?我们调用SYS()函数(不知道是哪一个)还是我们意味着malloc的过程时我在我的程序中从文本文件读取它?我知道我可能听起来很愚蠢,但请解释。

  2. 你认为最好的数据结构是使用f或者对于ex(0,2,70,8)的过程存储(创建时间,进程ID,内存大小,作业时间)?

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

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

我希望这些都不是问太多的问题,但谁可以找回我,我真的很感激。

问候

+0

请按照耶稣回答的内容澄清...... – 2012-04-05 01:02:00

回答

2

如果你正在构建你不应该实际等待的时间量模拟器,你应该“时间表”通过更新计数器和说的过程P1已运行到750ms之间的总到目前为止,计划的3倍对于250ms,250ms,250ms等等......试图在用户空间中实时运行调度模拟必然会给你带来奇怪的结果,因为你的过程本身也需要进行调度。例如,如果要模拟FCFS,可以实现一个简单的“进程”队列,并为它们分别提供一个时间片(可以使用缺省的内核时间片或您自己的,并不重要),并且每个片段这些过程将有一些完成的执行时间,你可以根据这个做计算。例如P1是一个过程,需要的CPU时间3.12秒来完成(我不认为需要内存模拟,因为我们正在做的调度和缓存没有或任何其他考虑)。你只需像往常一样运行算法,但只是添加数字,所以你“运行”P1,增加时间到它的计数器并检查它是否完成。如果是检查差异等......并且您可以保留全球时间来跟踪墙上时钟运行的时间。然后简单地将P1放在队列的末尾,并“安排”下一个过程。

现在如果你想衡量调度性能那是完全不同的,这通常涉及到运行工作量基准,以在系统上运行许多程序和检查每个整体性能指标。