printk 描述声明 (我引用如下) ``printk() 可能会导致隐式 I/O,如果访问的内存已被交换出去,因此可能在此处发生抢占。此外,printk() 将设置中断使能标志,因此永远不要在受 cli() 保护的代码中使用它。因为它会导致 I/O,所以在受保护的代码中使用它是不安全的,即使它没有设置中断使能标志。'' 这是错误的!首先,printk 访问的是内核内存,内核内存永远不会被交换出去。因此,没有导致隐式 I/O 的风险。其次,printk 不使用 sti(); 它使用 save_flags()/restore_flags(),因此在中断例程中使用它是安全的(尽管它会对您的中断延迟产生可怕的影响,所以您显然只将其用于调试)。 |