Linux Realtime

何谓实时系统:

POSIX 1003.b 定义:系统能够在限定的响应时间内提供所需的服务

Donald Gillies 的定义: 计算的正确性不仅取决于程序的逻辑正确性,也取决于产生结果的时间快慢。

分类:

【hard realtime(HRT)】在不满足响应时限、响应不及时或反应过早的情况下都会导致灾难性的后果

【soft realtime(SRT)】在不满足响应时限时,系统性能退化,但并不会导致灾难性的后果

【best effort(BE)】工作速度没有特定限制,快一点更好些

实时指标:

】Response time

】Latency

】Deadline

其中

HRT对以上三者都有硬性要求,否则服务完全失效。如工业控制,航天航空,军事应用等。

SRT无法提供服务质量。如多媒体实时需求。

BE,如一些字处理器,PC的常规应用。

影响实时的因素:

硬件--MPU的设计: Cache结构设计,上下文切换速度,异常处理,内嵌寄存器等。

软件--OS设计理念:kernel的可抢占、重入性,硬件支持程度,实时调度算法。

Linux的缺陷--Desktop,Server型OS,实时性有限。主要体现在:内核的可重入、可抢占性,系统时钟粒度,实时调度算法。

突破Linux缺陷的方法:

1】、增加kernel可抢占性

一般的kernel的不可抢占性使实时任务无法提供任务的调度权,可以通过修改源码,缩小禁止中断、内核加锁的范围。

2】、细化时钟粒度

一般的kernel无法提供高精度时钟,也即无法高精度分辨RT任务的到来,RTC可提供高精度。

3】、调度算法

一般的kernel是基于优先级的调度算法,无法满足HRT、QoS等的任务需求。可向调度器增加hook或改造调度器来改善。

实时调度算法概览:

三种模式:

TD--time driven: 被静态精确计算过的运行时任务计时,适合小型嵌入式系统、自动控制、传感器领域等。

具有稳定、已知输入的简单系统,通常提供数据处理的预测性。其本身是一种设计时就确定下来的离线的静态调度算法。在系统的设计阶段,对于任务的开始、切换、结束都事先做好安排。

有良好的任务可预测性,但缺乏灵活性,会出现CPU空闲但却有任务需要执行的情况。

PD--priority driven:静态优先级进程调度算法:静态分配给进程优先级,根据应用的属性进行。例如:任务周期,用户优先级,预先策略等等。RM(rate-monotonic)--根据任务的执行周期长短来决定调度优先级,小周期任务具有较高优先级。

动态优先级进程调度算法:根据进程的资源需求动态分配进程的优先级。许多非实时系统采有此种算法,如短作业优先调度算法。实时算法中EDF(earliest deadline first)较普遍--给就绪队列中的各任务的Deadline来分配优先级,Deadline最近的任务具有最高优先级。

基本可以说以上两类算法提供了硬实时调度。

SD--shared driven:基于CPU使用比例的进程调度算法,让他们的执行时间和他们的权重成正比。方法有两种:(1)、调节任务队列在调度队列队首的频率,(2)、根据权重分配时间片,并逐次调度队列中的进程投入运行。

主要类别:轮转法、公平共享、公平队列、彩票调度法(Lottery)。

缺点:没有优先级之分,任务共享资源,系统处于过载状态时,所有任务都按比例变慢,所以一般采用一种动态调节进程权重的方法。

基础是GPS(general processor sharing);算法有WFQ(weighted fair queueing);WF2Q;qlinux使用H-SFQ等。

适合实现资源预留,保障多媒体等软实时性能的算法模式,实现的前提要求系统提供某种静态优先级算法,以实现资源预留。

其一般内容包括:accounting, policing/enforcement,admission control。

linux上的实时多媒体性能

1】、linux-SRT (Cambridge Univ.)

采用高精度时钟,支持QoS,没有修改调度算法,通过在现行kernel中增加调度类来实现QoS(由于文档描述粗糙,可靠性收到怀疑)。

2】、Qlinux (Massachusetts Univ. 、Texas Univ. 、Ensim Corp.)

致力于支持高性能多媒体功能的linux,采用H-SFQ(hierachical start-time queueing),提供CPU,network,disk的QoS服务。

3】、linux/RK(Carnegie-Mellon Univ.、Timesys Corp.)

致力于资源预留的linux实现,通过实现资源预留管理模块、在内核调度相关代码中插入hook,达到预留CPU,network资源,并且向系统特殊任务实现QoS的目的。

4】、KURT-linux(Kansas Univ.)

提供高精度时钟&一种特殊的实时任务保障体制(文档缺少),提供的实时机制对多媒体性能没有什么特别。

5】、Red-linux(California Univ.)

整合了三种(TD、PD、SD)实时模式。

【注1】关于RTlinux/RTAI: 主要用于工控,但缺少学术价值,专利许可严密,最重要的是已经有理论支持(网上的adeos模型可以取代他)。

【注2】关于linux内核时间粒度:scheduling time slice的最大值为10ms; 时钟粒度主要取决于RTC。

对于arm来说,提供的high-res clock主要是通过RTC的高精度,而对于MIPS、PPC、x586这样的处理器还提供了基于总线仲裁的计数器,通常叫做TSC(timer stamp counter)来提高时钟精度。

就通常情况,时钟的频率是系统总线时钟频率的1/4。

【注3】关于抢占:抢占可以发生在任何进程的时间片内,而不必等到此进程时间片完成。

【注4】关于MontaVista Corp. : 开发了用于替换linux标准调度算法的算法,可以实现SRT ,提供high-res clock 。参见:

在MontaVista网站上有一个测试系统调用时间片的Demo,可以试试。

【注5】 the high-res timer Project :

阅读(914) | 评论(0) | 转发(0) |

linux real时间,Linux Realtime相关推荐

  1. linux '$^t' 时间,Linux C时间函数 time_t struct tm

    Linux C时间函数 time_t struct tm #include 关于时间的类型: time_t long型,表示从1970年1月1日到现在经过的秒数. struct tm { int tm ...

  2. 怎么查看linux自动校验时间,linux校验时间

    一. 基本方法: date -s "2018-09-02 04:23:45" clock -w 把时间写入cmos(一个RAM芯片) hwclock 查看硬件时间 hwclock ...

  3. 使用命令修改linux的时间,Linux使用date命令修改日期时间详解

    Linux 时间修改 不重启修改时区 一.修改linux的时间 root使用date指令:date -s 1.只修改日期,不修改时间,输入: Linux代码 date -s 2007-08-03 2. ...

  4. linux superblock 时间,Linux命令(八)

    1.文件系统:windows的FAT,win2000以后的NTFS文件系统,Linux的正规文件系统为EXT2(Linux second extended file system,Ext2fs)传统方 ...

  5. linux est 时间,Linux 时间标准简介

    系统如何设置时间 开机时根据硬件时钟来设置系统时钟. 如果开启了 NTP 服务, 会根据网络时间来校正系统时钟,确保时间准确. 关机时会根据系统时钟来设置硬件时钟(localtime 标准除外). 时 ...

  6. linux est 时间,Linux中的时区设置

    我通过将zoneinfo文件复制到/ etc / localtime,在我的Linux机器上将时区设置为GMT 6,但是date命令仍然将时间显示为UTCtime-6.任何人都可以向我解释这种行为吗? ...

  7. linux cfs时间,Linux调度的实现(CFS)——虚拟时间计算

    公平调度(CFS)基本概念与性质 公平调度:每个进程能获得1/n的处理器时间,n指可运行的进程的数量: (允许每个进程运行一段时间,循环轮转,选择运行最少的进程作为下一个运行进程.) 每个进程都按照它 ...

  8. linux timewait 时间,linux下释放TIME_WAIT方法

    今天服务网站明显过慢查年了一下服务器联接数,纠结于怎么搞定TIME_WAIT # netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c 68 CLOSE_WA ...

  9. 如何查看linux重启时间,Linux系统怎么查看最后重启时间

    平常我们不会去注意系统的最后重启时间,但在特殊的情况下我们还是会去查看的,那么Linux系统怎么查看最后重启时间呢?就让学习啦小编来告诉大家Linux系统查看最后重启时间的方法吧,希望对大家有所帮助. ...

最新文章

  1. 新的sublime text已经上传网盘,地址写在下面
  2. novaclient的api调用流程与开发
  3. (第六场)Singing Contest 【模拟】
  4. python做数据分析难么_做统计学习,数据分析应该学Python还是R?
  5. pyecharts离线使用说明
  6. eclipse没有日志_技术进展 | 加强公共DHT抵抗eclipse攻击!
  7. spring定时任务的配置使用
  8. 二叉树遍历代码_二叉树的题,就那几个框架,枯燥至极
  9. JS 中 Date() 的其他操作集锦
  10. Event 事件对象 (target)帆软修改提示框样式
  11. Kubernetes快速入门
  12. R语言1-面板数据分析全过程 附代码用途
  13. 计算机专业在房管局,计算机故障 昨天房产局无法办过户
  14. 腾讯手机充值小程序/话费充值/指定充值号码
  15. lambda表达式demo笔记
  16. 计算机防火墙无法关闭,为什么我电脑的防火墙关不了(win7电脑防火墙怎么关)
  17. ROC曲线和PR曲线,AP,mAP
  18. 如何免费下载文献(无需翻墙)
  19. Android MediaPlayer 音乐播放器扫描 本地音乐、上一曲、下一曲切歌、播放本地音乐
  20. Python learning- Lists Dictionaries

热门文章

  1. Census Transform
  2. lvgl页面管理 简单实现
  3. 0910-12学习记录-OFDM细节描述
  4. Python+Opencv身份证号码区域提取及识别实现
  5. Cocos2dx游戏开发系列笔记10:解刨《战神传说》
  6. 如何合理控制亚马逊FBA头程物流费用?
  7. Java基础加强-(注解,动态代理,类加载器,servlet3.0新特性)
  8. PCB制造输出中各种后缀的GerBer文件说明
  9. 一文读懂 NB-IoT 的现状、挑战和前景
  10. ibatis 中if-else使用