摘 要:为了使Linux适用于高实时性、高负荷和高稳定性要求的通讯设备,必须对Linux内核做出相应的修改。本文主要致力于提高Linux实时响应速度的研究工作,通过应用新的调度机制,调整任务运行空间,以保证任务在设备上高效的运行,达到高数据量的通讯要求。
关键词:Linux;实时;通信
引言
Linux作为一款开放源码的操作系统,正好可以弥补商用操作系统带来的一系列缺陷。但是Linux主要面对的是桌面计算机,在应用于嵌入式系统时有一些不能接受的缺陷,为了使Linux适用于高实时性、高负荷和高稳定性要求的通讯设备,必须对Linux内核做出相应的修改。
1 操作系统实时调度的基本概念
实时调度是实时系统的时间确定性和可预测性的保证。实时调度的核心是资源分配,即如何分配资源以保证每个实时任务在正确的时段产生正确的输出。在这里,资源主要指处理器时间资源,合理地分配时间资源就是合理地安排就绪任务的运行顺序。
实时调度分为两个阶段,第一阶段是确定每个就绪任务在就绪队列中的位置,第二阶段是在任务切换时,使就绪队列中的第一个任务获得处理器。这一过程由操作系统实时调度机制实现。
Linux的调度机制对实时任务的支持很差,这在通信系统中是不能接受的。因为Linux具有源代码开放等优点,所以对Linux内核的实时调度机制进行改造具有重要的意义。
2 Linux内核实时性改造系统设计
Linux内核实时性改造方案,包括对内核的调度机制的修改、加入可抢占机制,并提供一套运行于内核空间的线程管理机制、信号量机制。线程管理模块和信号量管理模块统称为强实时内核线程管理模块,简称KTH(Kernel Thread)。以此来大幅度提升Linux的实时性能,满足于通信设备的实时需求。
我们对Linux标准内核的改造将使用基于优先级的调度策略+抢占内核+内核线程模块的方案,如图1所示。
调度器修改思路为:不再使用Linux标准内核基于“公平”的调度策略,采用可抢占式的调度原则,优先级作为调度的唯一标准。高优先级的任务可直接抢占CPU,让低优先级任务退出运行状态;增加Linux特有的优先级数,从Linux标准内核的99级增加到256级;每个优先级下面挂一个就绪队列,采用位图算法挑选最高优先级的就绪任务运行。
图1 Linux内核实时改造方案
3 基于优先级的任务调度实现
基于优先级调度的系统中,任务的优先级决定了同一处理器上任务相对的重要程度。处于同一优先级的任务数没有限制。改进过的Linux实时内核为每个优先级维护一个FIFO的就绪队列,共256个。所有队列的链表控制结构组成一个数组,每当新的任务产生,系统将其插入到相应的就绪队列末尾等待调度。
Linux实时内核总是调度就绪状态任务中优先级最高的任务来运行,如果有几个相同优先级的任务处于就绪状态,则调度最先进入就绪状态的任务运行。调度函数首先通过位图算法找到最“适合”被调度的函数,然后进行堆栈切换,使具有高优先级立刻抢占CPU运行。任务调度器的运行流程如下:
Void Schedule(void)
{
………..
Y = UnMap(BitTblSign);
X = UnMap(BitTbl.计算机研究与发展,2002,39(4):466一472.