1. 并发访问
编写内核代码或驱动代码时需要留意共享资源的保护,防止共享资源被并发访问。所谓并发访问,是指多个内核路径同时访问和操作数据,就有可能发生相互覆盖共享数据的情况,造成被访问数据的不一致。内核路径可以是-一个内核执行路径、中断处理程序或者内核线程等。并发访问可能会造成系统不稳定或产生错误,且很难跟踪和调试。
有一个原则要记住:是保护资源或者数据,而不是保护代码。
内核中产生并发访问的并发源主要有如下4种:
-
中断和异常:中断发生后,中断处理程序和被中断的进程之间有可能产生并发访问。
-
软中断和tasklet:软中断或者tasklet 随时可能会被调度执行,从而打断当前正在执行的进程上下文。
-
内核抢占:调度器支持可抢占特性,会导致进程和进程之间的并发访问。
-
多处理器并发执行:多处理器上可以同时运行多个进程。
2. 使用内存屏障的原因
睡眠者: CPU1在更改当前进程current->state 后,插入一个内存屏障指令,保证加载唤醒标记load event_indicated 不会出现在修改curren