spin lock による排他制御
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
* spin lock による排他制御 [#da03ee90]
spin lock は単純な排他制御機能です。排他制御をしたい一連...
** spin lock の種類 [#d06751ea]
spin lock には次のような種類があります。排他制御を必要と...
|lock|unlock|CENTER:ハードウエア割り込み&sup([*3]);|CENTE...
|&ogdefs(spin_lock_irqsave());|&ogdefs(spin_unlock_irqres...
|&ogdefs(spin_lock_irq());|&ogdefs(spin_unlock_irq());|CE...
|&ogdefs(spin_lock_bh());|&ogdefs(spin_unlock_bh());|CENT...
|&ogdefs(spin_lock());|&ogdefs(spin_unlock());|CENTER:そ...
&sup([*1]); ハードウエア割り込み禁止に連動しています。
&sup([*2]); カウンタを up/down しています。カウンタが初期...
&sup([*3]); {割り込み|softirq|プリエンプション} の禁止/許...
** どのコンテキストでも使える spin_lock_irqsave() と spin...
数多く有る spin lock のうちどのコンテキストでも使える &og...
*** spin_lock_irqsave() [#rb7e778b]
&ogdefs(spin_lock_irqsave()); を呼び出し、関数から戻って...
- ローカル CPU 割り込フラグ保存 &br;
flags 変数(慣例的に名前として flags を使います)に格納され...
- プリエンプション (preemption) カウント アップ&br;
&ogdefs(preempt_disable()); を呼び禁止カウンタを増やす処...
- ローカル CPU 割り込み禁止 &br;
&ogdefs(spin_lock_irqsave()); を 呼び出したコードを実行し...
- ロック変数を操作して自分のコンテキストがロックを得た状...
*** spin_unlock_restore() [#e808539d]
&ogdefs(spin_unlock_irqrestore()); を呼び出し、関数から戻...
- ロック変数を操作して自分のコンテキストがロックを得てい...
- プリエンプション preemption カウント・ダウン&br;
&ogdefs(preempt_enable()); を呼び禁止カウンタを減らす処理...
- ローカル CPU 割り込フラグ復帰 &br;
flags に保存した値を CPU の状態フラグへ格納します。割り込...
** spin_lock_irqsave() と spin_unlock_irqrestore() の注意...
&ogdefs(spin_lock_irqsave());, &ogdefs(spin_unlock_irqres...
- 割り込み許可フラグを保存する変数 flags の渡し方に注意&br;
&ogdefs(spin_lock_irqsave());, &ogdefs(spin_unlock_irqres...
- 長時間 lock 状態にしない&br;
ロック期間中はプリエンプションも、割り込みも禁止されます...
マルチプロセッサ環境の場合、ロックを待つ処理はループで実...
- spin lock の中からコンテキスト・スイッチが強制的に発生...
&ogdefs(msleep()); の様に明らかに待つ関数は呼べません。遅...
終了行:
* spin lock による排他制御 [#da03ee90]
spin lock は単純な排他制御機能です。排他制御をしたい一連...
** spin lock の種類 [#d06751ea]
spin lock には次のような種類があります。排他制御を必要と...
|lock|unlock|CENTER:ハードウエア割り込み&sup([*3]);|CENTE...
|&ogdefs(spin_lock_irqsave());|&ogdefs(spin_unlock_irqres...
|&ogdefs(spin_lock_irq());|&ogdefs(spin_unlock_irq());|CE...
|&ogdefs(spin_lock_bh());|&ogdefs(spin_unlock_bh());|CENT...
|&ogdefs(spin_lock());|&ogdefs(spin_unlock());|CENTER:そ...
&sup([*1]); ハードウエア割り込み禁止に連動しています。
&sup([*2]); カウンタを up/down しています。カウンタが初期...
&sup([*3]); {割り込み|softirq|プリエンプション} の禁止/許...
** どのコンテキストでも使える spin_lock_irqsave() と spin...
数多く有る spin lock のうちどのコンテキストでも使える &og...
*** spin_lock_irqsave() [#rb7e778b]
&ogdefs(spin_lock_irqsave()); を呼び出し、関数から戻って...
- ローカル CPU 割り込フラグ保存 &br;
flags 変数(慣例的に名前として flags を使います)に格納され...
- プリエンプション (preemption) カウント アップ&br;
&ogdefs(preempt_disable()); を呼び禁止カウンタを増やす処...
- ローカル CPU 割り込み禁止 &br;
&ogdefs(spin_lock_irqsave()); を 呼び出したコードを実行し...
- ロック変数を操作して自分のコンテキストがロックを得た状...
*** spin_unlock_restore() [#e808539d]
&ogdefs(spin_unlock_irqrestore()); を呼び出し、関数から戻...
- ロック変数を操作して自分のコンテキストがロックを得てい...
- プリエンプション preemption カウント・ダウン&br;
&ogdefs(preempt_enable()); を呼び禁止カウンタを減らす処理...
- ローカル CPU 割り込フラグ復帰 &br;
flags に保存した値を CPU の状態フラグへ格納します。割り込...
** spin_lock_irqsave() と spin_unlock_irqrestore() の注意...
&ogdefs(spin_lock_irqsave());, &ogdefs(spin_unlock_irqres...
- 割り込み許可フラグを保存する変数 flags の渡し方に注意&br;
&ogdefs(spin_lock_irqsave());, &ogdefs(spin_unlock_irqres...
- 長時間 lock 状態にしない&br;
ロック期間中はプリエンプションも、割り込みも禁止されます...
マルチプロセッサ環境の場合、ロックを待つ処理はループで実...
- spin lock の中からコンテキスト・スイッチが強制的に発生...
&ogdefs(msleep()); の様に明らかに待つ関数は呼べません。遅...
ページ名: