Linux kernel 如果代码超出预期的时间片,则可能发生抢占,那么我们如何确保自旋锁中的代码长度/执行时间?

Linux kernel 如果代码超出预期的时间片,则可能发生抢占,那么我们如何确保自旋锁中的代码长度/执行时间?,linux-kernel,linux-device-driver,kernel-module,spinlock,Linux Kernel,Linux Device Driver,Kernel Module,Spinlock,-->重新编辑我的问题。我想想象一下我的理解力。这是照片。请在这里纠正我。所谓任务,我指的只是过程。一幅画抵得上千言万语 如果第三个进程想要获取锁,那么在多处理器中会发生什么。 因为,它是两个处理器。第三个处理器可能会尝试获取CPU A上的锁,因为CPU B正忙于轮询。这可能会导致一个问题。我的理解正确吗?因此,在使用自旋锁时,应该确保争用关键区域的进程数不应大于系统中可用的CPU数?另外,如果我的系统是单处理器的,我根本不应该使用自旋锁。因为它被编译掉了?我的理解正确吗?我们不在自旋锁内使

-->重新编辑我的问题。我想想象一下我的理解力。这是照片。请在这里纠正我。所谓任务,我指的只是过程。一幅画抵得上千言万语

如果第三个进程想要获取锁,那么在多处理器中会发生什么。
因为,它是两个处理器。第三个处理器可能会尝试获取CPU A上的锁,因为CPU B正忙于轮询。这可能会导致一个问题。我的理解正确吗?因此,在使用自旋锁时,应该确保争用关键区域的进程数不应大于系统中可用的CPU数?另外,如果我的系统是单处理器的,我根本不应该使用自旋锁。因为它被编译掉了?我的理解正确吗?我们不在自旋锁内使用sleep,这是因为我们不希望代码在睡眠期间在自旋锁()内执行抢占操作,而自旋锁()会禁用抢占。但是,如果代码执行时间超过预期的时间片,则可能发生抢占。因此,我的问题是基本的——我们是否应该在关键区域内使用短长度的代码?因为长时间的执行代码也会导致抢占,就像睡眠会导致抢占一样?

这种混乱是因为您只从“进程上下文”查看所有内容,而完全忘记了Intr上下文、premption


旋转锁禁用先占。如果CPU A具有自旋锁和休眠/调度,而CPU B需要它,那么CPU B必须等待CPU A完成其业务。这将SMP系统转变为单处理器系统;你说得对,它不会死锁。它只会使事情变得高效,因为调度不会花费很长时间来返回控制。为什么在多处理器中没有问题?SMP和单处理器都有问题。在SMP上,将其设为单处理器;我称之为问题。请看:,您有一些难以克服的概念问题。。关于什么是premption和什么是prempptive内核,请参阅本文。在单处理器机器上,锁编译后不存在;它们只是作为标记来禁用和启用内核抢占。如果内核抢占被关闭,锁将被完全编译掉