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

发布者:中原读书客最新更新时间:2012-04-06 来源: 辽宁大学学报关键字:Linux  操作系统  实时性  进程调度 手机看文章 扫描二维码
随时随地手机看文章

引    言

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 ; 
        } - 
[page]

从上面的goodness() 函数可以看出普通Linux 内核的进程调度算法只是软实时的,并不是硬实时的。 尤其不能作为硬实时应用,主要有以下几个原因: 

(1) L INUX 内核的实时进程的调度算法当中,SCHED RR 和SCHED RR 调度策略的主要不同点在于,SCHED RR 进程在一个时间片运行完以后被放到运行队列的最后。 L INUX的每一个进程都有一个调度策略,在进程描述结构task struct 中规定policy 属性。 所有的进程不管采用哪一种调度策略,都放在同一个运行队列中。这样做,就对实时进程的响应产生了影响。 

(2) Linux 的内核是非抢占式的( non-preemptive) 。 

(3) Linux 的进程调度策略不是完全抢占式的。 

(4) Linux 的虚拟内存技术(virtual memory)增加了系统的不确定性。 

(5) Linux 采用的时钟中断的精度不高。 

(6) Linux 系统的一些额外操作会延迟实时进程的执行。 

综上所述,不经处理的Linux 是不适合做实时操作系统的,即便是软实时,在系统负荷重的情况下也不能保证其实时性。 但通过对Linux 内核的改造完全可以提高Linux 的实时性,甚至可以满足实时的要求。 

LINUX 实时性改造的实现方法 

实现LINUX 的实时性一般有两种方法: 一种是对普通的LINUX 的内核的数据结构、调度函数、中断方式等进行修改使其能够处理实时进程。另一种是在LINUX 内核之外,进行实时性扩展。 也就是在普通LINUX 的基础之上再设计一个用于专门处理实时进程的内核。 为了提高LINUX 的实时性,并且使之能够在嵌入式系统中更好地满足硬实时系统的要求,采用上述两种方法结合的两种方式来提高系统的实时性。 

外部实时性扩展 

对LINUX 做外部实时性扩展最主要的思想是在硬件中断与原来的LINUX 内核之间增加一个实时内核。 在原来的LINUX 内核的基础上,增加一个实时内核可以解决LINUX 原有内核的关中断的问题。 

对于实时内核来说,它始终不关闭硬件中断,可以接受所有的中断信号。 当中断信号需要实时进程来处理时,实时进程将抢占LINUX 内核,在RTLINUX中把原来的LINUX 内核作为一个普通进程来对待,并且它的优先级是最低的。 如果中断信号需要原来的LINUX 内核来处理,则由实时内核信号传递给LINUX 内核。 同时内核中提供一个标志位用来模拟原来的LINUX 内核的关中断情况。这个标志字在LINUX 打开中断的时候置1 ,关中断的时候置0。 实时内核在中断到来的时候检查这个标志位,如果是置1 的,那立刻将中断传给LINUX 内核,否则的话,将所有待处理的中断放入一个队列中,一直到LINUX 打开中断时才将它们一起传给内核。 

内部实时性改造 

对Linux 内部实时性改造有两个方面的工作: (1) 对时钟机制的改造。 (2) 在内核方面的抢占性改造。 改造的目的是为了缩短Linux 内核的响应延时。 

(1) 在时钟机制的改造方面,可以通过提高系统时钟的精度来增强系统的实时性,特别是对外部中断的响应。因为精确的时钟是操作系统进行准确的调度工作的必不可少的条件。 执行调度就要求在特定的时间进行任务切换。不精确的时钟会导致调度偏差,从而导致无法预计的结果。所以提高时钟精度,减少调度偏差是非常重要的。在操作系统中,时钟精度不高的原因之一是因为:周期性时钟中断的使用。操作系统不得不将大量的时间开销用于处理时钟中断。 Linux。 操作系统也是如此。 在Linux 中,它的中断频率被设为100Hz。即大约每10ms 产生一次定时中断。 

(2) 在内核抢占性方面的改造有两种方法:一种是抢占点的方法。另一种是抢占式内核的设计。所谓抢占就是内核在某个合适的地方调用schedule() 函数来检查是否有高优先级的任务已经处于ready 状态并让这个高优先级任务运行。为了提高系统的实时性,抢占的选择要合理,既不能时间间隔太短,也不能太长,因此,在设置抢占点的时候要测试内核中的运行路径,在较长的运行路径中插入schedule() 。 进行调度,这个地方就是抢占点。 

另一种是抢占式内核的设计,即允许处于系统调用状态的用户进程被刚刚唤醒的高优先级进程所抢占。 但是这种抢占方式并不是在内核代码的所有地方都是安全的,如在临界区就不能抢占。 

结    论 

综上所述,不经改进的Linux 操作系统是不适合做实时操作系统的,即便是软实时,在系统负荷重的情况下也不能保证其实时性。 但通过对Linux 的改造可以完全提高Linux 的实时性,甚至可以满足硬实时的要求。

关键字:Linux  操作系统  实时性  进程调度 引用地址:Linux在嵌入式系统中有关进程调度算法的实时性改进

上一篇:μC/OS2Ⅱ中优先级调度算法的改进及实现
下一篇:LwIP协议在μC/OS操作系统中的实现

推荐阅读最新更新时间:2024-05-02 21:59

arm-linux-gcc 裸机程序开发(二)
NANDFLASH启动与标准库问题 把u-boot的start.S移植到我的程序上,这样程序可以用supervivi的D功能下载到内存中运行了,但是还不够。因为程序在内存里,如果掉电程序就没有了,所以我们得将程序固化在flash里面。这里我们要固化在NandFlash里,这就要求程序可以能够NandFlash启动。这里我参考了mini2440的nandlfash读写程序nand.c,里面有一个函数CopyProgramFromNand就是将Nandflash里的程序复制到内存里。在这之前我一直用u-boot默认的下载地址0x33f80000,这个是为了u-boot引导内核方便而定的,因为内核要下载到前面的内存中,既然我的程序没
[单片机]
恩智浦推出新一代安全高能效i.MX 91系列,为广泛的边缘应用扩展Linux功能
i.MX 9 系列的新成员简化了高性价比边缘设备的开发过程,助力构建需要安全性、高性能表现以及Linux支持的可扩展、高可靠性的平台 中国上海——2023年6月1日—— 恩智浦半导体(NXP Semiconductors N.V.,)正式发布i.MX 91应用处理器系列。 凭借恩智浦二十多年来在开发多市场应用处理器方面的领先优势,i.MX 91系列提供了安全、多功能、高能效的优化组合,可满足下一代基于Linux®的物联网和工业应用的需求。 产品重要性 新发布的协议改变了物联网和工业市场新产品类别的方向,如面向未来智能家居的可互操作安全连接标准Matter,或面向电动汽车充电器的ISO 15118-20标准。此类新产品通
[嵌入式]
嵌入式Linux系统中触摸屏驱动的研究
引言 随着计算机相关技术的发展,嵌入式系统的应用越来越广泛,与人们生活紧密结合。触摸屏设备因其友善的人机交互性,操作方便灵活,输入速度快,被广泛的应用于嵌入式领域中。嵌入式Linux系统具有开发源代码、内核稳定、可裁减性等特点,吸引着众多商业公司和自由软件开发者的目光,成为嵌入式系统领域不可或缺的操作系统之一。触摸屏是一种输入设备,操作简单易学,不占额外的空间,可靠性高,是最常用的便携式系统的输入设备。特别是电阻式触摸屏结构简单,成本低,透光效果好,工作环境和外界完全隔离,不怕灰尘和水气,同时具有高解析度,高速传输反应,一次校正,稳定性高,不漂移等特点,因而广泛用于工业控制领域及在室内使用。 1 硬件平台 S3C241
[嵌入式]
第三部分 linux busybox最小文件系统的移植
1、源码包下载 首先要说明移植文件系统无非就是添加一些文件夹(有的需要加入一些配置文件)而已,这里是利用Busybox( http://www.busybox.net/downloads/ )创建/bin 和/sbin等目录的文件。 至于以上两种名字的含义,google很详细了。 言归正传,正式开始。 首先下载完成后将这两个压缩包可以用cuteftprro工具拷贝到linux文件夹下, 然后解压,tar –xvf busybox-1.23.2.tar.bz2 本版本的busybox是1.23.2本版本的所支持的内核、gcc、使用方法等的版本信息在加压后的busybox-1.23.2的文件夹下readme有详
[单片机]
第三部分 <font color='red'>linux</font> busybox最小文件系统的移植
风河与飞思卡尔共同推出面向MPC5121e 的Linux解决方案
全球领先的设备软件优化(DSO)厂商风河系统公司(Wind River)与飞思卡尔半导体(Freescale)日前共同推出全新的enablement平台,以满足嵌入式市场不断增长的发展需求。本次推出的联合平台专门针对简化和加速嵌入式计算应用开发而设计,其核心由飞思卡尔的MPC5121e多核处理器和风河的Wind River Linux平台构成。 这一基于MPC5121e的平台通过将飞思卡尔硬件开发工具包与风河面向32位MPC5121e处理器(基于Power Architecture技术)的软件优化产品相捆绑而构建,包括风河商用级Linux或Wind River VxWorks平台(二者任选)、Wind River Workbenc
[嵌入式]
Bruce:ARM+Linux代表了嵌入式未来趋势
“因为ARM是全球最大的IP授权公司,手机领域所有芯片公司都是基于ARM架构的,所以我们需要让市场及行业内的人了解ARM的最新技术。”ARM公司的James Bruce如是说。前不久,他刚刚参加完2009年(第三届)移动互联网研讨会,在Ophone和智能终端分论坛上,其发表了题为“The Architecture for Android”的演讲。 现在,ARM正在与包括Android在内的所有Linux联盟合作,致力于从芯片级至操作系统级两方面统一,降低产品的开发门槛。“ARM+Linux 代表了未来的趋势,标准化的硬件+软件的组合,可以令更多OEM厂商愿意去做差异化设计。”Bruce说。 毫不夸张的说,在A
[嵌入式]
Bruce:ARM+<font color='red'>Linux</font>代表了嵌入式未来趋势
ARM-Linux s3c2440 之中断分析(一)
硬件篇: S3C2440 是arm920T架构,先温习一下s3c2440中的中断控制器原理和相关硬件构架。 中断控制器(InterruptControler): S3c2440A的中断控制器有60个中断源,如DMA中断,UART中断,IIC中断等,60个中断源在寄存器中用相应的位来表示。当有多个中断要求到来时,经过仲裁过程后,中断控制器向CPU请求FIQ或者IRQ中断。仲裁过程根据硬件中的优先级模块来决定,其结果最后写进中断未决(intterrupt pending)寄存器中,通过中断未决寄存器的值可以清楚哪个中断发生了。 S3c2440中断控制器流程图: 挂起 中断模式(InterruptMode): AR
[单片机]
ARM-<font color='red'>Linux</font> s3c2440 之中断分析(一)
SmartArm3250下的Linux系统安装
目前正在研究SmartArm3250的Linux驱动方面,所以首先就要在开发板上安装(也可以称为下载)Linux系统,按照书上的步骤,遇到一些小问题,通过多次试验和总结,现在可以熟练的安装Linux系统了,总结一下,其中包含个人的见解和自己找到的资料。 首先,介绍一下安装Linux的大致步骤。开发板就像一个裸机一样,什么都没有(当然有硬件),首先要安装一个类似于电脑中BIOS一样的东西,还 有一个引导操作系统的东西,然后就是装入内核镜像,不是.iso文件哦,是编译内核生成的一个东东,最后就是一个文件系统,类似于电脑中的各个分区,也可 以理解成光是C盘的各种东西,而与电脑中安装系统的不同之处在于,这个文件系统是自己手动安装上去的
[单片机]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved