Linux -SRT是剑桥大学David Ingram的博士论文项目 [SRTWeb][Ingram00],基本上是一个实验性的东西,自从 Ingram 在 2000 年从剑桥毕业以后,该项目就再没有人维护。跟 Q Linux 一样, Linux -SRT 属于软实时的 Linux。
在 Linux -SRT 中可以给一个任务分配一定百分比的 CPU 时间,它通过 RM 算法实现了一种基于速率的调度机制来保证给所有多媒体应用的 QoS 需求;另外由于 CPU 并非唯一影响多媒体应用的资源,对于那些做图形显示的应用,X 服务器中的资源调度也十分关键,所以 Linux -SRT 对 XFree86 最了扩展,让 X 服务器可以对来自不同X客户的图形显示请求进行优先级排序;另外为了方便用户管理各个进程的 CPU 分配情况, Linux -SRT 提供了一个图形界面的程序。下面对于 Linux -SRT 对于普通 Linux 所作的修改做一具体说明。
Linux -SRT 也提高了系统的定时精度。但它并没有采用惯用的将时钟芯片置于单次触发模式的做法,而是简单地修改了 Linux 内核中HZ的定义,将 Linux 的时钟频率由每秒 100 次提高到了 1024。
另外 Linux -SRT 在原有的 Linux 系统中的 SCHED_OTHER、SCHED_FIFO、SCHED_RR 这三个调度策略的基础上,给 Linux 增加了一些新的调度策略:SCHED_PAUSE、SCHED_IDLE、SCHED_QOS、SCHED_VAR;策略为 SCHED_PAUSE 的进程在调度时被调度程序忽略,不参与调度执行;使用 SCHED_QOS 调度策略的进程能够得到有保证的 CPU 执行时间;使用 SCHED_IDLE 策略的进程优先级最低,它被分配给那些只在系统空闲时才能够被调度执行的进程,比如一些批处理程序;SCHED_VAR 是一个可变优先级的策略,它被用于解决由于临界资源访问时所产生的优先级倒置问题,即一个高优先级的任务等待低优先级任务占用的某种临界资源,但低优先级任务又得不到CPU处理时间所造成的死锁问题;这时通过该调度策略将低优先级任务的优先级置为等待资源的高优先级任务的优先级(优先级继承)来解决死锁问题。
Hardhat Linux 是 MontaVista 公司所发布的一款主要面向各种嵌入式应用的 Linux 发布 [HardHatWeb][Morgan01]。Hard-hat Linux 最大的贡献在于:为了解决 Linux 在内核态不可被抢占的问题,它开发了一种抢占式(Preemptible)的内核,有人认为它的这种方法充其量也就是一种能够被抢占(Preemptable)的内核。
在实现上,SILK 系统将 Linux 系统中的网络子系统替换成了自己的协议栈。 Linux 应用程序通过 Socket 来创建和使用 PATHs,几乎不用对应用程序本身作任何修改。
图 6 说明了 SILK 系统的结构。在图的左半部分,SILK 模块和网络设备驱动、SOCKET 接口层、以及包过滤接口 netfilter 通过标准的方式交换数据。SILK 还修改了 Linux 任务的调度参数,以便影响 Linux 进程调度程序的调度决策。图的右半部分示意了 SILK 中的两个 PATH。SILK 模块有自己的CPU调度器,它和 Linux 系统中的 CPU 调度器进行合作和协调。这个合作由图中的 Linux thread 代表,通过执行这个线程,SILK 将控制转给 Linux 调度程序。
图 6 SILK 系统结构示意图
SILK 在操作系统中提供了一个新的 SOCKET 协议族以便上层应用程序调用下层的 SCOUT PATH。为了在 Linux 进行网络包处理之前截获 IP 包,SILK 通过 Linux 2.4 内核的 netfilter 接口插入了一个 netfilter hook,所有到来的IP包会被重定向到该 hook 上,如果SILK找到一个对应于该网络包的 PATH,就让 Linux 内核丢弃该包,而由 SILK 对包进行处理。
关于 CPU 调度,SILK 有着自己的CPU调度程序和线程包,它们和 Linux 系统的调度程序并存,在有 SILK 的 Linux 系统中,我们一般把由 SILK 调度的归属于某个 PATH 的处理叫做 SILK 线程(thread),而普通的由 Linux 调度程序调度的东西都叫做任务(task);SILK 在一个 Linux 内核任务的基础上实现它的线程调度,这个内核任务当 SILK 进行初始化的时候创建,并且将该内核任务的优先级设为优先级最高的实时任务,所以 SILK 的内核任务几乎是只要它就绪就可以投入运行,并且只有当该内核任务主动初让 CPU 时 Linux 系统中的其他普通任务才能够得以运行。SILK 将 CPU 出让给普通的 Linux 任务是通过调度 SILK thread 中的一个叫做 Linux thread 的线程来实现的,该 Linux thread 本质上就是在 SILK 的调度空间中代表 Linux 的普通调度程序。SILK 在调用 Linux thread 之后,代表SILK的内核任务就被 Linux 的进程调度程序设置为非就绪状态,直到它运行一个其他的进程之后,高优先级得 SILK 内核任务就又得到 CPU。所以这种实现机制可以让 SILK在调度 Linux thread 时,Linux 调度程序可以有机会调度一个其他的进程执行。
4. 实时 Linux 实现方案的总结
总结上述的各种实时 Linux 的实现,它们针对不同的设计目标,从不同的侧重点解决了通用 Linux 操作系统对实时性支持的问题。
针对 Linux 系统定时粒度过大的问题,一般的解决办法都是将实时时钟编程为单次触发的状态,然后利用 CPU 的时钟计数寄存器提供高达 CPU 时钟频率的定时精度。像 RT- Linux 和 Kurt- Linux 采用的就是这种方法。
对于 Linux 进程在进入内核态时不能被抢占的问题,目前的解决办法有 RED- Linux 在内核函数中插入抢占点的方法,另外 Hardhat 也通过修改 spinlock 的宏定义以及中断返回处理代码,实现了一种可抢占的内核;
对于 Linux 驱动程序中的封中断的方法,RT- Linux 所使用的软件模拟中断控制器的方法可以有效地解决这个问题;
对于 Linux 系统中缺乏实时调度机制和调度算法的问题,目前有很多新颖的操作系统调度框架和调度算法都有 Linux 实现,比如 RED- Linux 所定义的一个通用的实时调度框架;Q Linux 所采用的分层式的 CPU 调度框架,及新颖的调度算法如 H-SFQ,以及 Cello 磁盘调度算法等;SILK 所使用的将对一个包的网络处理抽象成 PATH,然后在 PATH 之间进行调度。
所以,总的来说,从发展方向上来说,实时 Linux 的发展有如下四个思路: 提供对于硬实时的支持,具体办法有:提高时钟精度,解决封中断和内核态不能被抢占的问题,代表系统 RT- Linux 、Kurt- Linux ,其实大部分实时 Linux 都使用了类似与 RT- Linux 的提高时钟精度和软件中断管理器的思想;总的来说,让内核支持硬实时和使用传统的 Linux 的丰富的系统调用之间存在着矛盾,以至于像 RT- Linux 就是单独实现了一个独立的小的硬实时操作系统;但由于软件模拟终端控制器、提高时钟精度、以及可抢占内核等思想的引入,这个矛盾慢慢地得到化解。 提供对于实时多媒体应用的支持,举措:引入新颖的调度算法(网络包调度,进程调度,磁盘调度),代表系统:Q Linux 、 Linux -SRT; 引入新颖的调度框架以及资源管理思想以更好地支持网络系统中的 QoS 要求,比如SILK中的垂直结构的操作系统调度的思想,Q Linux 中的分级调度的思想,以及 RED- Linux 所提出来的一个通用的调度框架和 Linux /RK 中所使用的资源预留的思想; 方便的任务 QoS 管理接口函数和管理程序的实现,比如 Linux /RK 提出的操作系统中各种资源的资源预留的概念; Linux -SRT 中为了用户方便地使用新增加的实时调度支持而增加了 API,以及提出的 reserve 的概念等;
在实际的系统中,具体使用那种实时 Linux 技术,需要根据具体的系统需求而定。如果目标系统是像机床控制或者导弹飞行姿态控制这样的硬实时系统,那基于 RT- Linux 是一个不错的方案;如果一个系统对于实时性的要求不是那么严格,但又不是软实时系统,那么可以借鉴 Kurt- Linux 的想想以及一些为了提高 Linux 响应速度而提出的可抢占内核的想法;如果目标系统是一个像实时多媒体系统这样的软实时应用,或者一个希望能够在高负载状态下提供更好的吞吐率的服务器系统,那么 Q Linux 和 RED- Linux 的思想提供了很好的参考;如果是将 Linux 应用于像路由器这样的网络结点中,可以借鉴 SILK 的实现思想。
参考文献
[Wang99] Yu-Chung Wang and Kwei-Jay Lin, Implementing a General Real-Time Scheduling Framework in the RED- Linux Real-Time Kernel, IEEE Real-Time Systems Symposium, 1999
[Gopalan01] Kartik Gopalan, Real-Time Support in General Purpose Operating Systems, Tech Report, 2001
[Krishna01] C.M.Krishna, Kang G.Shin, Real-time Systems, Tsinghua Press, 2001
[Nieh01] Jason Nieh, Chris Vaill, Hua Zhong, Virtual-Time Round-Robin: An O(1) Proportional Share Scheduler, Proceedings of the 2001 USENIX Annual Technical Conference, 2001
[RT Linux Web] http://www.rt Linux .org/ or http://fsmlabs.com/
[Barabanov97] Michael Barabanov, A Linux -based Real-Time Operating System, A Master Thesis, New Mexico Institute of Mining and Technology, Socorro, New Mexico, 1997
[KurtWeb] http://www.ittc.ku.edu/kurt/
[Srinivasan] Balaji Srinivasan, A Firm Real-Time System Implementation using Commercial Off-The-Shelf Hardware and Free Software, Master Thesis, Department of Electrical Engineering and Computer Science, University of Kansas, Feb, 1998
[REDWeb] http:// Linux .ece.uci.edu/RED- Linux/
[RKWeb] http://www-2.cs.cmu.edu/~rajkumar/ Linux -rk.html
[Rajkumar98] Raj Rajkumar, Kanaka Juvva, Anastasio Molano and Shui Oikawa, Resource Kernels: A Resource-Centric Approach to Real-Time Systems, In Proceedings of the SPIE/ACM Conference on Multimedia Computing and Networking January 1998
[Oikawa98] Shui Oikawa and Raj Rajkumar, Linux /RK: A Portable Resource Kernel in Linux , In IEEE Real-Time Systems Symposium Work-In-Progress, Madrid, December 1998
[Q Linux Web] http://lass.cs.umass.edu/software/qLinux/
[Goyal96] P. Goyal and X. Guo and H.M. Vin, A Hierarchical CPU Scheduler for Multimedia Operating Systems, Proceedings of 2nd Symposium on Operating System Design and Implementation (OSDI''''96), Seattle, WA, pages 107-122, October 1996.
[Druschel96] Peter Druschel, Gaurav Banga, Lazy Receiver Processing(LRP): A Network Subsystem Architecture for Server Systems, Proceedings of the 2nd Symposium on Operating System Design and Implementation (OSDI''''96), Seattle, WA, Pages 261-275, October 1996
[Shenoy98] P Shenoy and H M. Vin, Cello: A Disk Scheduling Framework for Next Generation Operating Systems, Proceedings of ACM SIGMETRICS Conference, Madison, WI, pages 44-55, June 1998.
[SRTWeb] http://www.srcf.ucam.org/~dmi1000/ Linux -srt/
[Ingram00] David Ingram, Integrated Quality of Service Management, Ph.D. Thesis, Jesus College, U