图 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所定义的一个通用的实时调度框架;QLinux所采用的分层式的CPU调度框架,及新颖的调度算法如H-SFQ,以及Cello磁盘调度算法等;SILK所使用的把对一个包的网络处理抽象成PATH,然后在PATH之间进行调度。
对于内核中协议处理以及中断处理的调度,解决办法基本上是一种延迟处理的技术,即到来的协议包在网卡中断处理中仅仅把它拷贝到一个队列中,只有当上层的应用程序请求数据包时才进行协议处理,并把对协议的处理时间记到对应的进程中。另外SILK对于那些网络路由结点,由于路由等的处理并没有对应的上层应用程序,所以SILK在内核的网络处理之间进行明确的调度。
所以,总的来说,从发展方向上来说,实时Linux的发展有如下四个思路:
提供对于硬实时的支持,具体办法有:提高时钟精度,解决封中断和内核态不能被抢占的问题,代表系统RT-Linux、Kurt-Linux,其实大部分实时Linux都使用了类似与RT-Linux的提高时钟精度和软件中断管理器的思想;总的来说,让内核支持硬实时和使用传统的Linux的丰富的系统调用之间存在着矛盾,以至于像RT-Linux就是单独实现了一个独立的小的硬实时操作系统;但由于软件模拟终端控制器、提高时钟精度、以及可抢占内核等思想的引入,这个矛盾慢慢地得到化解。
提供对于实时多媒体应用的支持,举措:引入新颖的调度算法(网络包调度,进程调度,磁盘调度),代表系统:QLinux、Linux-SRT;
引入新颖的调度框架以及资源管理思想以更好地支持网络系统中的QoS要求,比如SILK中的垂直结构的操作系统调度的思想,QLinux中的分级调度的思想,以及RED-Linux所提出来的一个通用的调度框架和Linux/RK中所使用的资源预留的思想;
方便的任务QoS管理接口函数和管理程序的实现,比如Linux/RK提出的操作系统中各种资源的资源预留的概念;Linux-SRT中为了用户方便地使用新增加的实时调度支持而增加了API,以及提出的reserve的概念等;
共4页: 上一页 [1] [2] 3 [4] 下一页
|