RT-Linux的一个有趣的方面是设计者使Linux内核可抢先的方法。象其 他Unix类型的操作系统一样,Linux内核能长时间地屏蔽中断。当然, 正是这一点使Linux成为非实时操作系统。解决这个问题有两种途径。 一是重新设计内核使之可抢先。但是Linux内核又大又复杂,不便于经 常修改。设计它的程序员头脑中根本没有实时应用的概念。因此,把实 时性强加到已存在的代码上是不可行的。于是RT-Linux设计者用另一种 途径来使Linux可抢先。他们将中断分为两组:由Linux控制的为一组, 另一组由RT-Linux控制。RT-Linux中断象RT-Linux任务一样受到约束, 它们不能进行Linux调用。所以没有理由使它们不能中断Linux内核。毕 竟,如果不改变内核也就别指望影响内核里的任何东西。另一方面,L inux中断不允许中断内核。因此RT-Linux形成了一个虚拟中断机制,使 Linux本身永远不能屏蔽中断。Linux用“cli”和“sti”宏指令来屏蔽 和使能中断。在标准Linux里,这些宏只是简单地执行相应的x86处理器 指令。RT-Linux修改了这些宏,执行cli时不是屏蔽中断,而是简单地 重定向到某些RT-Linux代码。如果这是一个RT-Linux中断,允许它继续 ;如果是一个Linux中断,则只是设置一个标准位。然后当执行了sti开 中断后,那些悬而未决的Linux中断才继续执行。这样,Linux仍然不能 中断它自己,但是RT-Linux可以。
RT-Linux很简单,只提供了实现一个实时系统所需的不能再少的功能。 但是系统设计者正是得益于这种简单性。大部分应用应该在Linux进程 中实现,因为Linux本身稳定可靠,并且为广大用户所熟悉,即使有了 麻烦也能找到帮助。实时任务只包括必要的功能来实现实时I/O,以及 从Linux进程接收或发送数据。RT-Linux的简单性有两个好处:第一, 简单所以不容易出错误;第二,即使真的出了错也容易找到并改正。这 些因素很重要,因为实时系统只是Linux应用的一小部分,有关用RT-L inux开发代码的帮助相当少。其实,如果用得好,当前RT-Linux已实现 的功能足够满足绝大多数实时系统的要求。
很明显,Linux并非适合所有嵌入式PC的最佳平台。因为它的大小,一 个完整的GUI系统必须以磁盘为基础,或者连接到网络使其能够引导。 大量嵌入式应用程序运行需要磁盘以及Linux内置的GUI和网络特性,并 且数量还在增长。例如,许多医疗设备必须使用有吸引力的用户界面才 有竞争力,工业机器控制必须既有GUI又有网络。如果愿意花大价钱购 买高端RTOS则是另一个问题,而Linux提供了获得这些特性的免费途径 。不但免费,Linux比那些RTOS供应商的产品更新更快,一般它们提供 的新特性都要在台式电脑OS有了之后。
除了使Linux用在有磁盘的嵌入式系统之外,使它可以从EPROM引导的工 作也在进行。通过仅仅安装那些对特定应用必须的组件,很多情况下用 Linux可以构成无磁盘系统。例如,一个包括网络(但不包括X Window s)的Linux系统已经成功地放置在仅2.7MB的EPROM上。因此,实践中独 立的无磁盘嵌入式系统也可以用Linux来开发。另外,Linux具有从网络 引导的能力,一个包括X Windows的整个系统可以从位于网络上某个位 置的磁盘引导。