新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > Linux在嵌入式系统中有关进程调度算法的实时性改进

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

作者:时间:2012-04-06来源:网络收藏

引言

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

嵌入式系统的硬件设备与普通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 ;
} -

linux操作系统文章专题:linux操作系统详解(linux不再难懂)

上一页 1 2 下一页

评论


相关推荐

技术专区

关闭