UP系统自旋锁的抢占问题


(1)如图,在UP系统上,我关了中断了,系统就不能调度了,为啥还要关闭抢占?

估计是应对多核处理器;毕竟在多核处理器上,可以同时运行多个进程。每个核心都有自己的运行环境,包括程序计数器、寄存器和堆栈等。

这里是UP单核系统啊,多核的在SMP里

可能是这里有误,我跟踪local_irq_disable下去,最终到达内联汇编操作寄存器之类的了

再请教下,内核这样声明函数的思想是什么,好奇怪啊

  1. 估计是内核的调度不仅仅是简单的基于中断;
  2. 第二个问题,以下解释不知道能否帮助到你;
#ifdef __CHECKER__
#define __acquires(x)  __attribute__((context(x,0,1)))
#endif

acquires() 宏与锁有关,检查锁在使用前确保锁为 0,然后将其设置为 1. 
__acquires() 与 __releases() 成对使用,用于检查在某个函数中,是否 正确的上锁和解锁操作。
在实际使用中,__acquires(x) 和__releases(x) 必须成对 使用才算合法,否则编译时会有 sparse 工具报错, 而 spin_lock 和 spin_unlock 正需要这样的检查,也必须成对使用。
所以正是利用了这个 “属性”,可以在内核编译期 间发现 spin_lock 和 spin_unlock 未配对使用的情况。
而在实际编译后运行的代码 中,是不用 __attribute((context()) 这个东东的。 
该 “属性” 仅用于代码的静 态检查,用于编译阶段.

理解了,谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢谢!要15字才能发!