割り込み時のリソースロック

割り込み時のリソースロック

パケットルーティングの複数のポイントにnetfilterフックを持つカーネルモジュールがあり、これらのフックは共有リソースを使用します。このモジュールには、これらのリソースにも影響を与える書き込み可能な文字デバイスがあります。

他のハンドラがこれらのリソースにアクセスするときにロックを使用する必要があるかどうかはわかりません。割り込みは眠れないという内容を読みました。これは、ハンドラ(フックハンドルと読み取りハンドラ)が順次実行されることを保証できることを意味しますか、それとも別の機能が同じリソースへの同時アクセスを防ぐためにロックを使用する必要がありますか?

ありがとうございます。

ベストアンサー1

作成した内容と使用されているデータ構造に応じて話すことは困難ですが、次のようになります。

割り込みは眠れないという内容を読みました。これは、ハンドラ(フックハンドルと読み取りハンドラ)が順次実行されることを保証できることを意味しますか、それとも別の機能が同じリソースへの同時アクセスを防ぐためにロックを使用する必要がありますか?

割り込みのスリープが許可されていないのは事実ですが、このデータ構造に接続されている割り込みが同時に別のCPUで実行されている可能性があり、現在処理中の割り込みの上に他の割り込みが積み重ねられる可能性があることも考慮する必要があります。 、一時的に使用するCPUをオフにします。どちらの場合も、デッドロック状況と両方のスレッドが書き込み/読み取りに競合する状況を処理する必要があります。

はい。書いた内容に基づいた一種の同期メカニズムが必要ないと信じる理由はありません。状況によっては、そのCPUで追加の割り込みを無効にすると(percpu変数など)、同期がより簡単になる可能性があります。

適切なメカニズムは、何へのアクセスを保護したいのか、どのくらい長くて高価なのかによって異なります。しかし、割り込みを行っているので、実際には非遮断プリミティブだけを選択できるという点で多少制限があります。

おすすめ記事