首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

实时 Linux 架构剖析(2)

实时 Linux 架构剖析(2)

资源内核法另一个实时架构是资源内核法。这种方法为内核增加一个模块,为各种资源提供预留(reservation)。这种机制保证了对时分复用(time-multiplexed)系统资源的访问(CPU、网络或磁盘带宽)。这些资源拥有多个预留参数,如循环周期、需要的处理时间(也就是完成处理所需的时间),以及截止时间。
资源内核提供了一组应用程序编程接口(API),允许任务请求这些预留资源(见图 5)。然后资源内核可以合并这些请求,使用任务定义的约束定义一个调度,从而提供确定的访问(如果无法提供确定性则返回错误)。通过调度算法,如 Earliest-Deadline-First (EDF),内核可以处理动态的调度负载。
图 5. 实现资源预留的资源内核法 资源内核法实现的一个示例是 CMU 公司的 Linux/RK,它把可移植的资源内核集成到 Linux 中作为一个可加载模块。这种实现演化成商用的 TimeSys Linux/RT 产品。
标准 2.6 内核中的实时目前探讨的这些方法在架构上都很有趣,但是它们都在内核的外围运行。然而,如果对标准 Linux 内核进行必要的修改使其支持实时性,结果会怎么样呢?
今天,在 2.6 内核中,通过对内核进行简单配置使其完全可抢占(见图 6),您就可以得到软实时功能。在标准 2.6 Linux 内核中,当用户空间的进程执行内核调用时(通过系统调用),它便不能被抢占。这意味着如果低优先级进程进行了系统调用后,高优先级进程必须等到调用结束后才能访问 CPU。新的配置选项  CONFIG_PREEMPT 改变了这一内核行为,在高优先级任务可用的情况下(即使此进程正在进行系统调用),它允许进程被抢占。
图 6 允许抢占的标准 2.6 Linux 内核但这种配置选项也是一种折衷。虽然此选项实现了软实时性能并且即使在负载条件下也可使操作系统顺利地运行,但这样做也付出了代价。代价就是略微减低了吞吐量以及内核性能,原因是 CONFIG_PREEMPT 选项增加了开销。这种选项对桌面和嵌入式系统而言是有用的,但并不是在任何场景下都有用(例如,服务器)。
新的 O(1) 调度程序2.6 内核中新的 O(1)         调度程序对性能有很大的提升,即使存在很多任务的情况下也是如此。不管需要运行的任务有多少个,新的调度程序都会在有限的时间内运行。您可以在  一节中找到这种调度的更多信息以及它如何进行工作。

在 2.6 内核中另一项有用的配置选项是高精度定时器。这个新选项允许定时器以 1μs 的精度运行(如果底层硬件支持的话),并通过红黑树实现对定时器的高效管理。通过红黑树,可以使用大量的定时器而不会对定时器子系统(O(log          n))的性能造成影响。
只需要一点额外的工作,您就可以通过 PREEMPT_RT 补丁实现硬实时。PREEMPT_RT 补丁提供了多项修改,可实现硬实时支持。其中一些修改包括重新实现一些内核锁定原语,从而实现完全可抢占,实现内核互斥的优先级继承,并把中断处理程序转换为内核线程以实现线程可抢占。
结束语Linux 不仅是一个实验和描述实时算法的理想平台,目前在标准的 2.6 内核中也实现了实时功能。从标准内核中您可以实现软实时功能,再执行一些额外的工作(内核补丁)您就可以构建硬实时应用程序。
本文简要介绍了一些为 Linux 内核提供实时计算的技术。很多早期的尝试使用瘦内核方法把实时任务与标准内核分离。后来,出现了超微内核法,它与如今的虚拟化解决方案中使用的 hypervisor 非常相似。最后,Linux 内核提供了自己的实时方法,包括软实时和硬实时。
虽然本文只是对 Linux 的实时方法进行了简单介绍,但  一节中提供了更多的信息,可以从中获得额外的信息和其他有用的实时技术。
返回列表