关于 Linux 系统内核抢占补丁的原理说明
在内核中运行时并不是处处不可抢占的,内核中存在一些空隙,在这时进行抢占
是安全的,内核抢占补丁的基本原理就是将 可并行的代码段看成是可以进行内核抢占
的区域。
内核正好细化了多 下的内核线程同步机构,对不可并行的指令块用
和 作了细致的表示,该补丁的实现可谓水到渠成。具 体的方法就是在进
程的任务结构上增加一个 变量作为内核抢占锁,它随着 和
一起加锁和解锁。当 为 时表示可以进行内核调度。内核调度
器的入口为 ,它将当前进程标记为 !"#$$ $% 状态再调
用 ,在 !"#$$ $% 状态,不会将进程从运行队列中删除。
下面是内核抢占补丁的主要代码示意:
&'()*''+,
-.将 & 中的 /&0 用作
1/&0 被移到了别
的位置
2,.从异常返回
.2234567
7$ ##$4 89
:8918&
;34567<)*=!>$>65 18&
:?@34!$A&18&18.
2A&:
?@34!$A&B18&18.
2A&
.
:?@34!$A&18.2A&:
?@34!$A&B18.2A&
.2
C&2A
.2234567#$$
89.异常的入口没有禁止内核调度
的指令1与 2
匹配一下
.2
$4 #?2.硬件中断的返回
7$ ##$4 89
.2234567#$$