我有一个QNX RTOS和Ubuntu 17.10在运行。问题是,除了QNX是RTOS这一事实之外,我没有任何证据证明它的行为像RT系统。我应该在每个操作系统上运行什么样的应用程序,才能清楚地区分RTOS和Ubuntu的RT响应?
我在两者上运行了一个信号处理程序(中断处理程序),看看哪一个会先捕获中断。
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <pthread.h>
void sig_hand(int sig) {
printf("signal received\n");
exit(0);
}
void *sigfun(void *arg) {
signal(SIGINT, sig_hand);
while(printf("Thread running\n"));
return NULL;
}
int main(void) {
pthread_t th;
pthread_create(&th,NULL,sigfun,NULL);
pthread_join(th,NULL);
return 0;
}我期望当一个线程继续打印Thread Running时,QNX会获取中断并比Ubuntu更快地停止线程。然而,我看不出有什么不同,而且这可能不是找出更快RT响应的正确应用程序。有没有人能给我一个更好的方法来明确区分实时操作系统和Ubuntu?
发布于 2019-03-28 08:16:16
诸如Linux之类的通用操作系统(GPOS)通常使用轮询等优先级分时调度程序,在多个进程之间“公平地”分配时间。因此,运行的进程越多,他们越忙(使用更多的可用时间片),响应就会变得越慢。
另一方面,RTOS通常具有基于抢占式优先级的调度器,使得最高优先级就绪任务立即运行,并且将继续运行,直到其暂停自身或更高优先级任务变为就绪。在这样的系统中,您必须适当地分配优先级,以保证每次都能按时运行所有任务。通常,运行时间最短和确定性最高的任务应该具有最高的优先级。至关重要的是,虽然RTOS支持实时确定性行为,但开发人员需要承担大量的责任来适当地设计任务和优先级。
您需要编写特定的测试代码。在最简单的情况下,您可能有一个在短时间周期计时器上阻塞的进程,在该任务中,获取实时传递并分析您观察到的计时抖动有多大。实时系统应该具有最小的抖动(取决于其优先级和运行的较高级别的任务或中断),并且不会受到较低优先级任务的影响,而GPOS将表现出更大的可变性,特别是在运行其他任务时。
发布于 2019-03-28 02:08:47
首先,理解“实时”意味着目标是最小化最坏情况下的时间。通常,这涉及牺牲平均用例时间,这意味着“实时”通常意味着“平均较慢”。
这也意味着,为了比较操作系统的“实时性”,您需要测量最坏情况下的时间(而不是平均时间)。
通过比较最坏情况下的时间(5000vs70000),您知道第一个操作系统是一个更好的实时操作系统。通过比较平均用例时间(5000次与123次),您知道第二个操作系统是一个更好的“非实时”操作系统。
请注意,大多数现代CPU(例如80x86)都不是为实时设计的。要测量实际的最坏情况,您需要同时发生多个“不太可能”的事情(例如,CPU过热并被迫进入“缓慢运行以避免熔化”模式,同时芯片组使用系统管理工作中断操作系统,同时其他CPU和/或设备碰巧正在冲击内存或总线/链路;而您正在尝试测量最坏情况的时间)。换句话说,这将需要大量的努力(和多次尝试)来安排条件,使其“恰到好处”,以达到最坏的情况。
https://stackoverflow.com/questions/55381378
复制相似问题