您的位置首页>企业动态>

Linux操作系统实时性有哪一些制约因素

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux操作系统实时性有哪一些制约因素问题。虽然Linux系统功能强大,实用性强,但是

音频解说

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux操作系统实时性有哪一些制约因素问题。

虽然Linux系统功能强大,实用性强,但是很容易进行软件的二次开发,提供程序员熟悉的标准API。但由于Linux系统从一开始就被设计为GPOS (General Operating System),其目的是为了构建一个完整稳定的开源操作系统,尽可能缩短系统的平均响应时间,提高吞吐量,关注操作系统的整体功能需求,达到更好的平均性能。(在操作系统中,我们可以简单地将吞吐量理解为系统在单位时间内可以处理的事件总数。)嵌入式定制。

因此,在设计Linux进程调度算法时,主要考虑的是公平性,即调度器将可用资源尽可能平均分配给所有需要处理器的进程,并保证每个进程都在运行。但是这种设计目标与实时进程的需求背道而驰,所以标准的Linux并不能提供强大的实时性能。

Linux系统由于实时性较差,在嵌入式应用中存在一定的局限性,主要受到内核抢占、进程调度方式、中断处理机制和时钟粒度的限制,具体如下:

(1)工艺调度。

Linux系统提供符合POSIX标准的调度策略,包括FIFO调度策略(SCHED_FIFO)、带时间片轮换的实时调度策略(SCHED_RR)和静态优先级抢占调度策略(SCHED_OTHER)。Linux进程的默认调度策略是SCHED_OTHER。这种调度方式虽然可以使进程公平地使用CPU等资源,但无法保证时间要求严格或优先级高的进程会在低优先级之前执行,严重影响系统的实时性。然后,将实时进程的调度策略设置为SCHED_FIFO或SCHED_RR,看似让Linux系统具备了根据进程优先级进行实时调度的能力,但问题是Linux系统在用户模式下支持抢占调度策略,而在内核模式下并不完全支持抢占调度策略。这样,在Linux内核状态下运行的任务(包括系统调用和中断处理)就不能被其他优先级更高的任务抢占,从而导致优先级反转的问题。

(2)内核抢占机制。

Linux系统进程可以分为两种模式:用户模式和内核模式。当进程以用户模式运行时,高优先级的进程可以抢占进程,很好地完成任务。但是,当一个进程在内核模式下运行时,即使其他高优先级进程也不能抢占该进程。当一个进程通过系统调用以内核模式运行时,实时任务必须等待系统调用返回,才能获得系统资源。这与实时系统要求的高优先级任务是矛盾的。

当然,自从Linux内核2.6版本发布以来,这种情况已经得到了显著的改善。Linux版以后的内核是抢占式的,也就是说进程无论是在内核模式还是用户模式下都可能被抢占。2.6之后的Linux2.6内核提供了以下三种抢占模式供用户选择。

抢占_NONE——没有强制抢占。总体平均延迟较低,但偶尔会出现一些较长的延迟。它最适合以总吞吐率为主要设计标准的应用。

减少延迟的第一阶段。它将额外的显示抢占点放在内核代码的一些关键位置,以减少延迟。但这是以整体吞吐量为代价的。

prempt/prempt _ desktop ——这种模式使得内核在除了关键部分之外的任何地方都是可抢占的。此模式适用于需要软实时性能的应用,如音频和多媒体。这也是以整体吞吐量为代价的。

(3)中断屏蔽。

Linux在处理中断时总是关闭中断,这样可以更快更安全地完成自己的任务。但是,在此期间,即使具有较高优先级的实时进程被中断,系统也无法响应,必须等到当前中断任务处理完毕。在这种情况下,中断延迟和调度延迟会增加,从而降低Linux系统的实时性。

(4)时钟粒度粗。

时钟系统是计算机的重要组成部分,相当于整个操作系统的脉搏。系统提供的最小时间间隔称为时钟粒度,与进程响应的延迟成正比,即粒度越粗,延迟越长。但是,时钟粒度越小越好。就相同的硬件环境而言,更小的时间粒度将导致系统开销增加和整体吞吐量降低。

在Linux2.6内核中,时钟中断的频率范围为50~1200Hz,周期不小于0.8ms,显然不满足要求响应精度在几十微秒的应用要求。在嵌入式Linux系统中,为了提高整体吞吐量,时钟频率一般设置为100HZ或250HZ。

nt: 2em;">另外,系统时钟负责软定时,当软定时器逐渐增多时会引起定时器冲突,增加系统负荷。

(5) 虚拟内存管理

Linux采用虚拟内存技术,进程可以运行在比实际空间大得多的虚拟空间中。在分时系统中,虚拟内存机制非常适用,然而对于实时系统这是难以忍受的,频繁的页面换进换出会使得系统进程运行无法在规定时间内完成。

对于此问题,Linux系统提供内存锁定功能,以避免在实时处理中存储页被换出。

(6) 共享资源的互斥访问差异

多个任务互斥地访问同一共享资源时,需要防止数据遭到破坏,系统通常采用信号量机制解决互斥问题。然而,在采取基于优先级调度的实时系统中,信号量机制容易造成优先级倒置,即低优先级任务占用高优先级任务资源,导致高优先级任务无法运行。

虽然从2.6.12版本之后,Linux内核已经可以在较快的x86处理器上实现10毫秒以内的软实时性能。但如果想实现可预测、可重复的微秒级的延时,使Linux系统更好地应用于嵌入式实时环境,则需要在保证Linux系统功能的基础上对其进行改造。

来源:朗锐智科

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。