首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何区分RTOS和Linux?

如何区分RTOS和Linux?
EN

Stack Overflow用户
提问于 2019-03-27 23:49:41
回答 2查看 986关注 0票数 1

我有一个QNX RTOS和Ubuntu 17.10在运行。问题是,除了QNX是RTOS这一事实之外,我没有任何证据证明它的行为像RT系统。我应该在每个操作系统上运行什么样的应用程序,才能清楚地区分RTOS和Ubuntu的RT响应?

我在两者上运行了一个信号处理程序(中断处理程序),看看哪一个会先捕获中断。

代码语言:javascript
复制
#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?

EN

回答 2

Stack Overflow用户

发布于 2019-03-28 08:16:16

诸如Linux之类的通用操作系统(GPOS)通常使用轮询等优先级分时调度程序,在多个进程之间“公平地”分配时间。因此,运行的进程越多,他们越忙(使用更多的可用时间片),响应就会变得越慢。

另一方面,RTOS通常具有基于抢占式优先级的调度器,使得最高优先级就绪任务立即运行,并且将继续运行,直到其暂停自身或更高优先级任务变为就绪。在这样的系统中,您必须适当地分配优先级,以保证每次都能按时运行所有任务。通常,运行时间最短和确定性最高的任务应该具有最高的优先级。至关重要的是,虽然RTOS支持实时确定性行为,但开发人员需要承担大量的责任来适当地设计任务和优先级。

您需要编写特定的测试代码。在最简单的情况下,您可能有一个在短时间周期计时器上阻塞的进程,在该任务中,获取实时传递并分析您观察到的计时抖动有多大。实时系统应该具有最小的抖动(取决于其优先级和运行的较高级别的任务或中断),并且不会受到较低优先级任务的影响,而GPOS将表现出更大的可变性,特别是在运行其他任务时。

票数 2
EN

Stack Overflow用户

发布于 2019-03-28 02:08:47

首先,理解“实时”意味着目标是最小化最坏情况下的时间。通常,这涉及牺牲平均用例时间,这意味着“实时”通常意味着“平均较慢”。

这也意味着,为了比较操作系统的“实时性”,您需要测量最坏情况下的时间(而不是平均时间)。

通过比较最坏情况下的时间(5000vs70000),您知道第一个操作系统是一个更好的实时操作系统。通过比较平均用例时间(5000次与123次),您知道第二个操作系统是一个更好的“非实时”操作系统。

请注意,大多数现代CPU(例如80x86)都不是为实时设计的。要测量实际的最坏情况,您需要同时发生多个“不太可能”的事情(例如,CPU过热并被迫进入“缓慢运行以避免熔化”模式,同时芯片组使用系统管理工作中断操作系统,同时其他CPU和/或设备碰巧正在冲击内存或总线/链路;而您正在尝试测量最坏情况的时间)。换句话说,这将需要大量的努力(和多次尝试)来安排条件,使其“恰到好处”,以达到最坏的情况。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55381378

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档