编程接口指南

延长响应时间的因素

本节所述的问题会在不同程度上延长系统的响应时间。这种延长可能会非常严重,以至导致应用程序错过临界期限。

实时处理也会破坏运行实时应用程序的系统上其他应用程序各方面的操作。由于实时进程具有较高的优先级,因此可能会长时间阻止分时进程运行。这种现象会导致交互式活动(如显示器和键盘响应时间)明显减慢。

同步 I/O 调用

SunOS 中的系统响应不提供 I/O 事件的时限。这意味着不应在任何执行时间性强的程序段中包含同步 I/O 调用。即使允许具有较长时限的程序段也不能执行同步 I/O。海量存储 I/O 即是这样一个示例,它会导致在执行读写操作时将系统挂起。

常见应用程序错误是执行 I/O 以从磁盘中获取错误消息文本。应该通过独立进程或独立线程以此方式执行 I/O 操作。此类独立进程或独立线程不应该实时运行。

中断服务

中断优先级与进程优先级无关。一组进程操作引起的硬件中断服务无法继承为这些进程设置的优先级。因此,高优先级实时进程所控制的设备不必具有高优先级中断处理。

共享库

通过使用动态链接的共享库,分时进程可以节省大量内存。此类型的链接通过文件映射的形式实现。动态链接库例程将导致隐式读取。

调用程序时,实时程序可以将环境变量 LD_BIND_NOW 设置为非 NULL 值。通过设置此环境变量的值,可以在避免动态绑定的同时使用共享库。此过程还会强制在开始执行程序之前绑定所有动态链接。有关更多信息,请参见《链接程序和库指南》

优先级倒置

分时进程可以通过占用实时进程所需的资源来阻塞实时进程。当优先级较低的进程阻塞优先级较高的进程时,便会出现优先级倒置。术语阻塞是指进程必须等待一个或多个进程放弃对资源的控制的情况。如果此阻塞时间延长,则实时进程可能会错过其最终期限。

请考虑下图所示的情况,其中高优先级进程需要共享资源。优先级较低的进程占用资源并被中优先级的进程抢占,从而阻塞高优先级进程。其中可涉及任意数量的中间进程。必须执行完所有中间进程以及优先级较低的进程的关键部分。这一系列执行操作可能需要任意长时间。

图 10–1 无限制的优先级倒置

上下文说明了此图形。

此问题及其处理方法在《多线程编程指南》中的“互斥锁属性”中介绍。

严格锁定

页面的锁定计数达到 65535 (0xFFFF) 时,此页面便会永久锁定到内存中。值 0xFFFF 通过实现来进行定义并可能会在将来发行版中发生更改。无法解除锁定以此方式锁定的页面。