转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 数据库 >> MySql >> 正文
基于 Linux 的实时系统         ★★★★

基于 Linux 的实时系统

作者:闵涛 文章来源:闵涛的学习笔记 点击数:1757 更新时间:2009/4/22 20:45:30

图 4 Cello 磁盘调度

Cello调度算法中应用类别无关的调度器管理时间上粗粒度的磁盘的调度,而应用相关的调度器控制着小粒度上磁盘调度。如上图中有n个应用类别,Cello使用一个应用无关的调度器C和n个类别相关的调度器 ,系统中有n+1个调度队列。类别无关的调度器C决定你了何时以及多少磁盘请求被从等待队列(pending queue)移到调度队列(scheduled queue);类别相关的调度器Si对等待队列中的请求进行排序,并根据调度队列的状态来决定磁盘请求被插入到调度队列的什么位置。

3.6. Linux -SRT

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处理时间所造成的死锁问题;这时通过该调度策略将低优先级任务的优先级置为等待资源的高优先级任务的优先级(优先级继承)来解决死锁问题。

对于使用 SCHED_QOS 调度策略的实时任务,采用RM静态优先级调度算法进行调度;另外在进行调度时,它还采用了一种双调度策略的方案,即当一个实时任务在当前的调度周期中用完自己所有的时间片之后,在下次调度周期到来之前,并非简单地不调度执行它,而是使用它进程属性中的 Fallback policy 所定义的调度策略来调度它,让它以该策略参与本轮的剩余时间的调度。

Linux -SRT 按照 POSIX 推荐的方式扩展了传统的几个用户设置进程调度属性的系统调度,让用户或者编程人员可以在后向兼容的情况下使用这些新添加的调度特性。另外为了使用的方便,它还提出了 reserve 的概念,一个 reserve 在 /proc 文件系统中有一个结点,它包含有关资源分配的情况;reserve 独立与进程,一个进程可以通过新增加的 reserve 相关的系统调用申请加入(使用)或退出一个 reserve。

3.7. Hard-hat Linux

Hardhat Linux 是 MontaVista 公司所发布的一款主要面向各种嵌入式应用的 Linux 发布 [HardHatWeb][Morgan01]。Hard-hat Linux 最大的贡献在于:为了解决 Linux 在内核态不可被抢占的问题,它开发了一种抢占式(Preemptible)的内核,有人认为它的这种方法充其量也就是一种能够被抢占(Preemptable)的内核。

其基本思想就是让调度程序获得更多的执行机会,从而减少了从一个事件发生到调度程序被执行的时间间隔。可抢占内核的补丁包修改了 spinlock 的宏定义以及中断返回处理代码,当当前进程可以被"安全"地抢占并且有一个等待处理的重新调度请求,系统就会调用调度程序进行进程调度。

那么什么情况下可以认为一个进程可以被 "安全" 地抢占?最早的 Linux 内核代码认为,一旦进入内核态执行,不管是由于陷入(trap)还是中断处理,当前执行进程都不会被切换,直到内核认为可以安全地进行重新调度为止。这种思想可以使得内核代码对一些数据结构进行操作时比较简单,即不需要使用互斥原语(比如旋转锁 spinlock)进行数据的修改保护就可以安全地存取数据。但随着内核源代码的发展,不使用保护机制的内核数据访问代码越来越少,所以在抢占式内核中,认为如果内核不是在一个中断处理程序中,并且不再 spinlock 保护的代码中,就认为可以"安全"地进行进程切换。

抢占式内核对普通 Linux 内核作了如下的一些修改:
抢占式内核给task struct数据结构增加了一个数据项:preempt_count。该数据项由宏 preempt_disable()、preempt_enable()、以及 preempt_enable_no_resched() 所使用。preempt_disable 对 preempt_count 计数进行递增,preempt_enable 对 preempt_count 进行递减。preempt_enable 宏查看当前进程的 preempt_count和need_resched 域的内容,如果 preempt_count 为 0 并且 need_resched 为 1,则调用 preempt_schedule() 函数。该函数将给当前进程的 preempt_count 项增加一个很大的值(比如让 preempt_counter=preempt_counter + 0x4000000),然后调用进程调度函数 schedule(),在schedule函数返回后从该进程 preempt_count 中再减去该值。可抢占内核也修改了 schedule 函数,它检测进程的 preempt_counter 是否很大(这是为了屏蔽一些普通调度流程中对于抢占式调度来说是冗余的那些操作),然后执行抢占式调度。
抢占式内核补丁也修改了 spinlock 的代码。在 spin_lock() 和 spin_try_lock 中增加了对于 preempt_disable 的调用,在 spin_unlock() 中增加了对于 preempt_enable 的调用。
另外抢占式内核补丁还修改了中断返回的代码,在其中增加了对于 preempt_enable 的调用。

所以我们根据上面的三个修改可以看出,内核的抢占式调度发生在如下情况:在释放 spinlock 时,或者当中断返回时,如果当前执行进程的 need_resched 被标记,则进行抢占式调度。

3.8. SILK

SILK 代表 SCOUT In Linux Kernel,它是普林斯顿大学支持 PATH 调度的垂直结构操作系统 SCOUT 在 Linux 中的一个实现[SILKWeb][Bavier01]。它将 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 的实现思想。

参考文献

[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

上一页  [1] [2] [3]  下一页


[C语言系列]C# 和 Linux 时间戳转换  [Web开发]PHP flock文件锁介绍
[Web开发]flock() Linux下的文件锁  [电脑应用]Linux下的六个免费的虚拟主机管理系统介绍
[电脑应用]Linux数据库大比拚  [操作系统]在Windows中玩转Linux操作系统
[办公软件]在RedHat Linux 9里安装gaim0.80  [办公软件]掌握 Linux 调试技术
[办公软件]理解 Linux 配置文件  [聊天工具]Real10 & Xpdf installation on Linux Box
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · Sql Server  · MySql
    · Access  · ORACLE
    · SyBase  · 其他
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台