免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5931 | 回复: 5

djyos具有超高的实时性 [复制链接]

论坛徽章:
0
发表于 2012-08-23 13:53 |显示全部楼层
本帖最后由 djyos 于 2012-08-23 13:55 编辑


djyos具有无以伦比的实时性,不是通过汇编优化达到的,而是通过出色的方案设计来达到的。

使用RTOS的场合,大多都对实时性有要求,甚至有些要求极端高的实时性。一般来说,设计者会把实时性要求很高的部分功能,用中断来实现,从这个意义上,对于RTOS来说,最坏情况下的中断响应延迟,几乎就是该系统的实时性指标。现有操作系统,或多或少的会带来额外的、不确定的中断延时,使许多实时性要求很高的应用,要么不使用操作系统,要么需要增加额外的硬件来处理实时任务。djyos在最坏情况下,提供近乎裸跑的中断延迟,实现无以伦比的实时性,使得一些原来只能裸跑的应用,也可以使用操作系统。
由于中断实时性在RTOS中极端重要,本文以中断为重点,谈谈实时性。
1.     理解中断
代码,是现实问题的一个抽象,同样,设计中断系统,就要先弄清楚“什么是中断,该如何抽象”这个问题。
中断,从形式上看,是一个异步到达的(通知)事件,异步是什么意思呢?异步是相对于主程序的,即主程序不知道什么时候会来中断,也不知道中断达到时,自己运行到什么地方、处于什么状态。中断从形式上,并没有告诉我们,它是否需要处理,更没有说是否需要紧急处理。因此,把中断都看做要“需要紧急处理的事件”,是没有依据的。
由于cpu是串行执行指令的,如果靠cpu执行指令的方式查询获得事件,比如查询IO口获得上升沿事件。从事件发生到cpu查询到的延迟时间,必然跟cpu的查询周期相关,除非你的系统只有“查询并处理中断”这一件任务,否则很难做到很短。因此,紧急事件只能通过中断来获取。
所以,中断可以用三句话来概括:
1、  中断是异步事件。
2、  中断不一定是紧急事件。
3、  紧急事件必须用中断来通知。
了解了中断的三个特性,我们就知道,并不是所有中断,都需要极速响应的,事实上,绝大多数情况下,只有极少量的中断需要很高实时性的。
凡是中断就要求极速响应吗?
答案显然是否定的。许多操作系统对中断的处理,是一视同仁的,而且都把中断看成是一个需要紧急处理的事件,这显然是一个自以为是的想法,根本不知道用户需要什么,也没有理解什么是“中断”。
在操作系统支持下,需要接近裸跑的中断延迟吗?
答案显然是肯定的,但是,人们对此似乎很宽容。为什么会宽容呢?当没有汽车时,人们能够容忍马车的速度;没有火车时,人们容忍汽车的速度;没有飞机时,人们容忍火车的速度。当所有操作系统都做不到近乎裸奔的中断延迟时,人们便容忍OS给中断响应带来额外延迟。
为什么要为一些不紧急的事件(例如键盘)分配中断号呢?
设计者经常为键盘分配中断号,对于台式PC来说,键盘也许勉强算紧急事件,因为PC中有很多慢速操作;但对于使用RTOS的嵌入式控制系统来说,却并非紧急事件。为什么呢?因为键盘是人手通过机械按钮实现的,操作系统的反映,只要比人的动作快就可以了,响应太快了,反而可能导致误触发,失去按键防抖功能。那为什么不少人会把按键挂在中断线上,使用中断来响应按键操作呢?答案是,一可以简化软件设计,不需要单独启动一个键盘扫描线程;二可以减轻cpu负担,不用定期扫描键盘;三是低功耗系统特有的,可以用键盘中断来唤醒休眠的cpu
2.     设计中断系统
理解了中断,我们就可以着手设计中断系统了。
1、              能够为异步事件提供服务,既然是事件,就应该提供普通事件一样的操作系统服务,使其编码更加容易。
2、              为实时中断提供裸跑的中断延迟,即使在最坏情况下,也不能例外。
3、              用户用中断处理异步事件,是希望简化系统设计,因此,不能因为异步事件而使调度系统更加复杂。
传统操作系统,因为没有弄清楚这些问题,企图对所有中断极速响应,又企图给中断响应函数以尽可能多的服务,而两者,却是矛盾的,更多的服务,必然需要更多的关中断,导致中断延迟加长。最终的结果是:
1、  异步事件得不到操作系统的充分支持,对编写ISR程序有诸多限制。
2、  真正实时性要求很高的中断,又做不到很快响应。
3、  调度器保护临界资源时,分为关调度和关中断两级,使系统更加复杂,完全违背了用户的用中断响应异步事件以简化软件的目的。
Djyos的中断系统,可以用这张图来表示:
interrupt.jpg


一般cpu的中断控制器,都有许多中断输入线,每个中断线对应一个中断号,由一个独立的开关控制。
每个中断线,都允许独立设置为实时中断还是异步信号,该开关可能是硬件开关,也可能是软件开关,依赖于具体硬件以及移植者的选择。
异步信号有一个独立的总使能开关,也就意味着,异步信号是可以整体关断的。
实时中断没有独立的使能开关,意味着,实时中断是不允许集体关断的。
异步信号和实时中断有一个公共的总使能开关,意味着,允许用户关闭所有中断。
Djyos中,“异步信号使能开关”同时又是关调度开关,djyos没有独立的调度开关,使得djyos的临界区保护代码更加简洁,和用户希望通过“用中断实现异步信号”来简化软件设计的目的,是相适应的。简洁的调度器,也是djyos更加可靠。由于关异步信号和关中断等同,使得异步信号处理函数可以使用操作系统提供的全部服务,更加方便易用。
操作系统运行过程中,总中断使能开关时从来不会被关闭的,所以,djyos的实时中断,达到裸跑的速度,这是架构决定的,跟中断响应的代码是否精简无关。
虽然知道中断实时性对RTOS极其重要,但许多RTOS,由于不能对中断做正确的抽象,不能从架构角度提高实时性,往往爱使用一些很复杂的技巧来提高性能。但过多的技巧,实现高性能的同时,可能带来不稳定因素。殊不知,对于实时控制系统来说,稳定性可靠性才是核心。而且,即使再巧妙的技巧,都不能对实时性的提高,带来质的变化。
3.     Djyos中断系统的特点
1、  实时中断具有裸跑的实时性,使得有些原本不能使用操作系统的应用,可以享受操作系统的服务。
2、  编写异步信号编程更加方便,像普通事件一样,允许使用所有操作系统服务。
3、  系统更加简洁可靠,与用户“用中断实现异步信号以简化软件”的目标相一致。

论坛徽章:
0
发表于 2012-08-25 20:06 |显示全部楼层
版主什么时候回来的,那本关于djyos的书写的很不错啊,拜读过

论坛徽章:
0
发表于 2012-09-07 05:50 |显示全部楼层
bench mark 才是王道, 光嘴说有啥用啊,
完全相同的平台  和retems, vxworks 一起跑跑benchmark, 不就说明问题了。

论坛徽章:
0
发表于 2012-09-24 17:12 |显示全部楼层
一起跑跑benchmark, 不就说明问题了。

论坛徽章:
0
发表于 2013-01-11 17:05 |显示全部楼层
楼主很牛逼;不知道djyos的性能怎么样;
要是楼主能够吸取QNX的设计思想,那9无疑是一个牛逼的、高效的、稳定OS了。
下面给一个QNX的文章:http://read.pudn.com/downloads92 ... %9D%A9%E5%91%BD.pdf
回复 1# djyos


   

论坛徽章:
0
发表于 2017-03-07 15:04 |显示全部楼层
你好,了解了一下你的djyos,应是一个很不错的OS。想问一个问题:djyos是基于事件进行CPU调度,而不是我们熟悉的如linux基于时间片;基于事件进行调度我觉得会不会出现应用程序卡屯的现象,比如一个进程必须等到另一个进程的事件处理完了才得到CPU控制权?谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP