1

我需要将现有的基于 WIN32/Linux 的应用程序移植到 OS X,并且想估计是否有任何潜在的障碍。

该应用程序具有“软”实时约束。

具体来说,它具有高优先级线程,需要以(可能)高速率(低至 1 毫秒)唤醒,进行一些检查,然后大部分时间几乎立即退出。

目的超出了这个消息的范围,但是设计是不可更改的(真的不可更改),所以请不要评论它如何更改以及它是否有效(它是)。

线程的逻辑结构是:

for (;;)
{
    wait(event_object, timeout);
    ... do something ...
}

当 event_object 发出信号或超时到期时,线程需要唤醒。超时可能因情况而异,但可能低至 1 毫秒。

WIN32 版本的应用程序使用 timeBeginPeriod() 来影响系统调度程序并在涉及线程的情况下更改调度量。

您能否告知这是否也可以在 OS X 下实现,即 OS X 是否“真正可抢占”。

这归结为两个问题:

1) 如果高优先级线程变得可计算(因为 event_object 得到信号或超时到期),当前执行的低优先级线程将立即被抢占还是仅在下一个 100 Hz (kern.clockrate) 时钟滴答时被抢占。

2) 各种 OS X “等待”函数(例如 pthread_cond_timedwait)的实际计时器分辨率是多少?是 1/100(即 10 毫秒)还是 1 毫秒或更低?或者它是否依赖于某些东西并且可以通过编程方式进行更改(就像 Windows 中的 timeBeginPeriod 一样)?

重申一下,该应用程序是“软”实时的。如果线程没有一直按它的方式运行是可以的(没有飞机会坠毁或病人死亡),但需要的是它通常在大多数情况下按需要安排。

感谢您的意见。

4

0 回答 0