由于调度器会用于确定何时运行进程以及运行多长时间,因此其行为会严重影响系统的性能。
缺省情况下,所有用户进程都是分时进程。进程只能通过 priocntl(2) 调用来更改类。
所有实时进程的优先级都高于分时进程的优先级。如果任何实时进程都可以运行,则不能运行分时进程或系统进程。有时无法放弃 CPU 控制权的实时应用程序可能会完全禁止其他用户和基本内核内务处理对其进行使用。
除了控制进程类和优先级之外,实时应用程序还必须控制影响其性能的其他因素。性能方面最重要的因素包括 CPU 处理能力、主存储器量和 I/O 吞吐量。这些因素相互作用相互影响。sar(1) 命令包含用于报告所有性能因素的选项。
具有严格实时约束的应用程序可能需要阻止将进程换出或换页到辅助存储器。下图说明了 UNIX 进程状态以及状态之间转换的简要概况。
活动进程通常处于图中的五种状态之一。箭头指示了进程状态如何进行变化。
如果将进程指定给 CPU,则进程将处于运行状态。如果另一个优先级较高的进程进入可运行状态,则调度器将使该进程脱离运行状态。当一个进程用尽其整个时间片之后,如果另一个具有相同优先级的进程进入可运行状态,则也会抢占该进程。
如果进程位于主存储器中并且准备运行,但是未指定给 CPU,则此进程在内存中处于可运行状态。
如果进程位于主存储器中,但是需要等待特定的事件完成才能继续执行,则此进程在内存中处于休眠状态。例如,进程在等待 I/O 操作完成、解除锁定已锁定的资源或者计时器到期时,将处于休眠状态。事件发生时,将向进程发送唤醒调用。如果进程进入休眠状态的原因不复存在,则进程将进入可运行状态。
当进程的地址空间已写入辅助存储器并且此进程未等待特定的事件时,此进程处于可运行状态且被换出。
如果进程正在等待特定的事件,并且其整个地址空间均已写入辅助存储器,此进程处于休眠状态且被换出。
如果计算机中没有足够的主存储器容纳其所有活动进程,则此计算机必须将部分地址空间交换或换页到辅助存储器。
如果系统的主存储器不足,系统会将某些进程的个别页面写入辅助存储器,从而使这些进程仍可继续运行。当正在运行的进程访问这些页面时,此进程将休眠,同时将页面读回到主存储器中。
当系统遇到更严重的主存储器不足时,系统会将某些进程的所有页面都写入辅助存储器,并将已写入辅助存储器的页面标记为已交换。仅当系统调度器守护进程选择将此类进程读回到内存中时,才能调度这些进程。
当进程可以再次运行时,换页和交换都会造成延迟。对于具有严格的时间安排要求的进程而言,这种延迟是不可接受的。
为了避免交换延迟,实时进程永远不能进行交换,尽管某些实时进程可以进行换页。程序可以通过将其文本和数据锁入到主存储器中来阻止换页和交换。有关更多信息,请参见 memcntl(2) 手册页。可以锁定的内存量受限于已配置的内存量。另外,锁定过多内存可能会对未将文本和数据锁入内存的进程造成无法忍受的延迟。
实时进程与其他进程之间的性能权衡取决于局部需求。在某些系统中,可能需要进行进程锁定才能保证必需的实时响应。
有关实时应用程序延迟的信息,请参见分发延迟。