58、实时Linux编程:内核锁、定时器与延迟测量

实时Linux编程:内核锁、定时器与延迟测量

1. 可抢占内核锁

在实时Linux内核中,可抢占内核锁是一个关键的改进点。PREEMPT_RT对内核锁进行了重大改变,使大部分内核锁变为可抢占的,但这部分代码尚未被纳入主线内核。

自旋锁是内核中常用的锁机制,它是一种忙等待互斥锁,在竞争情况下无需上下文切换,只要锁的持有时间较短,效率就很高。理想情况下,自旋锁的持有时间应小于两次重新调度所需的时间。然而,持有自旋锁的线程不能被抢占,否则新线程可能会进入相同代码并在尝试锁定同一自旋锁时发生死锁。因此,在主线Linux中,锁定自旋锁会禁用内核抢占,创建一个原子上下文,这可能导致低优先级线程持有自旋锁时阻止高优先级线程调度,即优先级反转问题。

PREEMPT_RT采用的解决方案是将几乎所有自旋锁替换为RT互斥锁。互斥锁虽然比自旋锁慢,但它是完全可抢占的,并且实现了优先级继承,不会出现优先级反转问题。

2. 获取PREEMPT_RT补丁

RT开发者不会为每个内核版本创建补丁集,平均每两个内核版本创建一次补丁。目前支持的最新内核版本如下:
- 5.10-rt
- 5.9-rt
- 5.6-rt
- 5.4-rt
- 5.2-rt
- 5.0-rt
- 4.19-rt
- 4.18-rt
- 4.16-rt
- 4.14-rt
- 4.13-rt
- 4.11-rt

补丁可从https://www.kernel.org/pub/linux/kernel/projects/rt获取。如果你使用的是Yocto Proj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值