www.138139.cn

返回总目录 上一页 目录页 下一页

。它将 SCOUT 操作系统作为 Linux 的一个模块来实现。


   SILK 系统的主要目的就是为一些网络 QoS 提供支持,它支持对于网络包处理的显式的调度,并且这个调度是以 PATH 为单位进行的。PATH 概念的新颖之处在于,不像传统的基于任务的调度方式,它从另外一个角度进行系统的资源调度,即以网络的数据流及其处理为单位进行调度。详细来说,一个 PATH 由一串当数据流流经系统时进行数据处理或者数据转换的代码模块组成,并且对应的数据流所消耗的资源也归该 PATH。研究表明,PATH 这种体系结构特别适用于有 QoS 要求的分布式多媒体系统以及软件路由设备中。下图对于什么是 PATH 作了一个图示,它说明了一个 TCP PATH:



























































图 5 一个TCP PATH

在实现上,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 之间进行调度。

对于内核中协议处理以及中断处理的调度,解决办法基本上是一种延迟处理的技术,即到来的协议包在网卡中断处理中仅仅将它拷贝到一个队列中,只有当上层的应用程序请求数据包时才进行协议处理,并将对协议的处理时间记到对应的进程中。另外SILK对于那些网络路由结点,由于路由等的处理并没有对应的上层应用程序,所以SILK在内核的网络处理之间进行明确的调度。

所以,总的来说,从发展方向上来说,实时 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 的实现思想。

址163164.cn 微信1631640 QQ3149886

返回总目录 上一页 目录页 下一页