开源linux硬实时,Linux内核能做到硬实时吗?

短篇快速阐述一个问题。Linux内核可以做到硬实时吗?

不能?

为什么?

因为Linux从调度一个实时进程到该实时进程实际投入运行之间的时间不可控,因此无法给予有硬实时需求的可预期延迟。

调度了一个实时进程,仅仅意味着它可以运行,并不意味着它实际运行了。两方面权衡,一方面调度一个进程说的是在该进程自己的立场上它可以运行了,另一方面,它能不能投入运行还要取决于当年正在运行的进程是否允许它立即运行,也即站在其它进程的立场上,是否同意RT进程运行。请看下面的例子:

0818b9ca8b590ca3270a3433284dd417.png

进程A进入了一个spin lock保护的临界区,这意味着该CPU在current离开临界区之前无法发生进程切换了,但是并不阻止中断的发生,假设中断发生了,且在中断处理中唤醒了RT进程B,此时的B虽然是实时进程,但仍然不能运行,因为临界区不允许进程切换,中断结束,RT进程B待命,等待进程A离开临界区之后,立即投入运行!如果临界区很宽,那么RT进程B将会等待相当久的一段时间…

那么如何对Linux内核增加硬实时保证呢?

很简单,首先,将中断线程话,保证它不再占用任意上下文,这保证了即便是中断被RT进程抢占了,也不会连累无辜的被它占用了内核栈的进程,其次,将普通进程中使用的spin lock改成可以睡眠的mutex,这样就可以保证在唤醒RT进程后立即使其投入运行。Linux的实时补丁就是干这个的。

小Tips:

spin lock需要关中断吗?

如果中断程序中需要锁该自旋锁,那么只需要关掉本地中断即可。要明白,中断时针对CPU的,而自旋锁是针对一个标志位的,关掉了本地中断可以保证本地CPU不会再触动自旋锁的标识,但是其它CPU依然可以在锁的标志位上自旋等待,这并不会造成死锁,因为本地CPU总会释放锁的。

A:这皮鞋能便宜点吗?

B:不能,这个进价贵。

A:你不是人。

A:这鞋子能跳舞吗? B:【呱唧,呱唧,….】 A:不一般,我喜欢,日泰皮鞋!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值