您当前的位置:五五电子网电子知识单片机-工控设备嵌入式系统-技术利用linux开发的面向实时和嵌入式应用的操作系统 正文
利用linux开发的面向实时和嵌入式应用的操作系统

利用linux开发的面向实时和嵌入式应用的操作系统

点击数:7244 次   录入时间:03-04 11:57:28   整理:http://www.55dianzi.com   嵌入式系统-技术

    对于一个操作系统而言,精确的定时机制虽然可以提高任务调度器的效率,但会增加CPU处理定时中断的时间开销。RTLinux对时间精度和时钟中断处理的时间开销进行了折中考虑。不是像Linux那样将8254定时器设计成10ms产生一次定时中断的固定模式,而是将定时器芯片设置为终端计时中断方式。根据最近的进程的时间需要,不断调整定时器的定时间隔。这样不仅可以获得高定时精度,同时中断处理的开销又最小。

    5.RTLinux的主要功能

    RTLinux提供了一整套对硬实时进程的支持函数集。在此,对在嵌入式系统中的实现加以阐述。

    a.中断仿真

    在中断控制硬件与LINUX核心之间放置一个软件仿真层。具体做法是,在LINUX源码中出现cli、sti和IRet的所有地方都用仿真宏:S_CLI、S_STI和S_IRET来替换。所有的硬件中断就都被仿真器所截获。

    当需要关中断时,就将仿真器中的一个变量置0。不论何时若有中断发生,仿真器就检查这个变量。如果是1(LINUX已开中断),就立即调用LINUX的中断处理程序;否则,LINUX中断被禁止,中断处理程序不会被调用,而是在保存着所有挂起中断的信息的变量的相应位置1。当LINUX重新开中断,所有挂起中断的处理程序都会被执行。这种仿真方式可以称之为"软中断"。

    b.实时任务

    实时任务是在一个由核心控制的调度程序的调度下执行的用户定义的程序。

    RT-LINUX最初将实时任务设计成ELF格式的目标文件。这一设计方案的最大缺点就是性能比较差。原因在于,第一,486的缓存是虚拟的。所以每当页表目录的基址寄存器改变时,TLB(转换后备缓冲器)就会失效。由于实时任务的上下文转换频繁,所以TLB的频繁失效就导致系统性能的严重下降。第二,486的保护级别变换耗时不少。比如,陷入更高级别时需要71个循环,而其它指令一般少于10个循环。

    解决的办法就是使用可加载模组技术,所有的实时任务都同处于一个地址空间-内核地址空间,不仅避免了频繁的TLB失效,同时也消除了变换保护级别的消耗,而且任务转换也变得相当容易。

    c.进程调度

    实时系统的进程调度的主要任务就是满足实时任务在时间上的要求。调度算法的种类很多,没有一个策略是放之四海而皆准的,因此采用哪种算法要取决于具体应用。

    RT-LINUX采用的方法是允许用户编写自己的调度程序,并可以编译成模组的形式。这样就可以方便地试验不同的策略和算法对于某一特定应用的适合性,从中选出最优。

    RT-LINUX自带的是一个基于优先数的抢占式调度程序。此调度程序将LINUX当作具有最低优先数的实时任务。因此,LINUX只在实时系统无任何实时任务是才运行。在从LINUX切换到实时任务时,系统记下软中断的状态并禁止软中断。在切换回来实,再恢复软中断的状态。

    d.时钟

    调度程序需要精确的时钟才能准确操作。调度通常是在特定的时刻进行任务切换。时钟的偏差会引起预定调度的偏差,导致产生被称为任务发布抖动的现象。这是一种应该尽量避免的不良现象。

    RT-LINUX的解决办法是,将IBM PC兼容机中的时钟芯片Intel 8254设置为中断开启终端计数模式。在这种模式下,精度可以达到1毫秒。这样在降低中断处理的影响的同时,获得了较高的时钟精度。

    e.IPC

    由于标准LINUX核心可以被实时任务在任意时刻抢占,所以实时任务无法安全地调用LINUX的程序。但是总要有一个信息交换的机制。

    在RT-LINUX中所用的信息交换方式是RT-FIFO(实时队列)。它与UNIX的管道非常相似,都是一个无结构的数据流。通过RT-FIFO,LINUX的进程之间,实时进程之间,以及LINUX的核心与实时进程之间可以交换信息。

    对于一个普通的进程来说,RT-FIFO就是一个特殊的字符文件。这些文件必须自建:

    # for i in 0 1 2 3; do mknod /dev/rtf$i c 63 $i; done



上一页  [1] [2] 


本文关键字:嵌入式  开发  操作系统  Linux  嵌入式系统-技术单片机-工控设备 - 嵌入式系统-技术

《利用linux开发的面向实时和嵌入式应用的操作系统》相关文章>>>