×
嵌入式开发 > 详情

Linux在嵌入式系统中有关进程调度算法的实时性改进

发布时间:2020-07-07 发布时间:
|

引言

Linux 作为一种通用的操作系统,它最初的设计是用于桌面系统或者小型服务器。 要将Linux 用于嵌入式系统中,需要对Linux 内核作一些改进,使它能更好地为嵌入式系统服务。 在这些改进中,进程管理是相当重要的一块。

嵌入式系统的硬件设备与普通PC 有较大的差别。 由于要节省成本、降低功耗,嵌入式系统的CPU 可能不带MMU ,使用的存储设备ROM、Flach 、RAM 的容量较小,这些因素决定了需要改变Linux 进程管理,来适应存储系统方面的变化。进程管理中另一个与嵌入式系统密切相关的方面就是实时性了。尽管不是所有的嵌入式系统都需要具有实时能力,但实时性确实是嵌入式系统最重要的特点之一。 两者的关系如图1 所示。



图1 嵌入式系统与实时性的关系

目前市场上商用的嵌入式操作系统,如VxWork、pSOS 和QNX 等都具有良好的实时性能。因此本文主要着手讨论Linux 实时性方面的改造。

Linux 在实时应用中的不足之处

虽然目前Linux 内核在实时性方面有所增强,但它仍然不是实时操作系统,Linux 内核的设计关注于应用程序的吞吐量连同内核整体设计的完善。作为提高吞吐量的必然要求,Linux 的调度器试图提供一种“公平分配”策略来保证所有的进程可以均衡地享有CPU 的资源。 普通Linux 内核提供三种调度策略,分别为SCHEDRR、SCHEDFIFO、SCHEDOTHER。 其中第一个策略为实时进程的基于优先级的轮转法, schedfifo 为实时进程的先进先出算法,schedother 为非实时进程的基于优先级的轮转法。前两种为软实时进程调度策略,后者为普通实时进程调度策略。

普通时分进程调度策略保证了每个进程相对于其静态优先级可以公平地获取CPU 资源。 由于调度器按照优先级驱动的方式,因此软实时进程的优先级要高于普通进程,通常软实时进程的优先级在1000 以上而普通进程的优先级在0~999之间。 由调度器调用的goodness ( ) 函数保证实时进程先于普通进程获得CPU。

函数goodness() 如下:

static inline int goodness ( struct task struct 3 p ,int this
cpu ,struct mm struct 3 this mm)
int weight ;
weight=-1;
if (p->policy SCHED YIELD) goto out ;
/ 3 非实时进程3 /
if (p=>policy==SCHED OTHER)
{weight =p->counter ;
if ( ! weight) goto out ;
if (p-> mm==this mm !!! p->mm)
weight+=1 ;
weight+=20-p->nice ;
goto out ;
}
/ 3 软实时进程3 /
weight=1000+p->rt priority ;
goto out ;
return weight ;
} -





『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
五大标准轻松搞定4K超高清电视选购