估计是应对多核处理器;毕竟在多核处理器上,可以同时运行多个进程。每个核心都有自己的运行环境,包括程序计数器、寄存器和堆栈等。
这里是UP单核系统啊,多核的在SMP里
可能是这里有误,我跟踪local_irq_disable下去,最终到达内联汇编操作寄存器之类的了
- 估计是内核的调度不仅仅是简单的基于中断;
- 第二个问题,以下解释不知道能否帮助到你;
#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字才能发!