【发布时间】:2016-09-27 02:47:12
【问题描述】:
只是为了阻止任何 cmet 产生“你为什么需要知道这个??”:这只是一个我很好奇的谜题,而不是出于任何实际原因我需要做的事情。
给定一个典型的 POSIX 系统[1],您将如何设计一个实验来确定 CPU 密集型进程的调度量[2]?
[1]:但不能让您通过系统调用或 /proc 接口查询此信息
[2]:“调度时间量”定义为进程在其调度时间结束且操作系统允许其他进程运行之前在 CPU 上运行而不会阻塞或让步的时间量。
【问题讨论】:
-
请注意,更高优先级的进程通常会在它想要的时候立即运行(否则就没有更高的优先级了)。也许在您的最后一段中,您的意思是“......在其预定时间结束并且操作系统允许另一个相同优先级的进程运行之前。”
-
@JeremyFriesner 我认为在典型的系统中,进程在它们的时间片到期之前不会被抢占。我弄错了吗?它是如何在 Linux 或 FreeBSD 中工作的?无论如何,我已经编辑了这个问题。
-
通常一个进程将继续运行,直到 (a) 它的时间片过期(另一个具有相同优先级的进程准备好运行),或者 (b) 另一个具有更高优先级的进程准备好运行跑步。 (另一种方法,即准备运行的高优先级进程因为较低的进程正在运行而没有运行,这被称为优先级反转,这是调度程序设计人员试图避免的事情)
-
@JeremyFriesner 在一个 1 核系统上,如果一个高优先级的 CPU 绑定线程永远旋转,除非调度程序发现它需要降低优先级,否则没有其他线程可以运行?这似乎是错误的,但我不是专家。
-
在具有静态优先级的系统中,这正是可能发生的事情。这很常见,例如在实时系统中,如果高优先级线程从不放弃 CPU,那么您可能必须重新启动计算机才能重新获得对它的控制权。当然,有一个错误的程序使您的计算机无法控制并不是一个非常理想的行为,这就是为什么一些非实时操作系统(尤其是 Unix/Linux)如果它未能自愿放弃 CPU(例如通过阻塞)很长时间。 (见:informit.com/articles/article.aspx?p=101760)
标签: multithreading scheduling experimental-design