1

Linux カーネルでは、読み取り/書き込みスピン ロックを使用して、タスクのリストへのアクセスを同期します。ただし、read_(un)lock は読み取りに使用され、write_(un)lock_irq は書き込みに使用されます。書き込みのためにロックしている間、割り込みを無効にする必要があるのはなぜですか?

4

1 に答える 1

0

IRQ コンテキストで使用されたことのあるロックの場合、IRQ は保持されているときに無効にする必要があります。しかし、これを達成するにはさまざまな方法があります。

(スピンロックについて説明します。この点では、読み取り/書き込みロックは同じです)

  • spin_[un]lockIRQ を無効にしないでください。それらがすでに無効になっていることがわかっている場合にのみ使用してください(たとえば、割り込みハンドラーで)。
  • spin_[un]lock_irqIRQ を無効/有効にします。関数を呼び出す前に無効になっていないことがわかっている場合にのみ使用してください。
  • sping[un]lock_irq[save|restore]- IRQ を無効にしてから、以前の状態に戻します。IRQ の状態に関係なく使用できます (低コスト)。

表示される違いは、読み取り/書き込みの違いではなく、呼び出しコンテキストの違いによるものだと思います。

于 2013-02-06T08:28:32.170 に答える