Linuxカーネルの同期に関する疑問は少しあります。つまり、重要な領域を保護するために、どのような種類のロック手法が割り込みコンテキストモードとプロセスコンテキストに適していますか。割り込みコンテキストとプロセスコンテキストとの同期をとる方法
のような定義のソリューションにより、事前のおかげで.....
Linuxカーネルの同期に関する疑問は少しあります。つまり、重要な領域を保護するために、どのような種類のロック手法が割り込みコンテキストモードとプロセスコンテキストに適していますか。割り込みコンテキストとプロセスコンテキストとの同期をとる方法
のような定義のソリューションにより、事前のおかげで.....
hiya:semaphors(またはミューテックス)は、テスト・アンド・セットとOFCスピンロックが重要なコードの保護を提供する: それはどちらかだアトミック操作をgarunteeingことにより(手段のロック例では、ロックを完了し、ベーカリープロトコルなどのプロトコルを取得し、proccess(とあなたが望むもの)のpreeamptionを無効にするために、ちょうど1つの操作が必要です - ロックされた誰もその重要なコードを入力することはできませんそのようなものです)、コンテキストスイッチがあり、2つのスレッドが一緒に実行されても、そのコードにアクセスできるのは1つしかないと約束していますが、そのメモリまたはw/eを使用し、領域は同じです(CPUのpeeamptionを無効にする)スピンロック詳細はロックAQUIRE
の種類 はこれを参照:スピンロックが「ビジーウェイト」ないことhttp://www.linuxinternals.org/blog/2014/05/07/spinlock-implementation-in-linux-kernel/ 予告 - preeamptionが有効になっていると、あなたがAQUIREなかった手段をロックあなたもIRQを使用\直接コマンドを先取りするが、それは例えば かなり危険だことができ、無駄なループで
を実行する上で、計算時間を「無駄」CPU:
preempt_enable() decrement the preempt counter
preempt_disable() increment the preempt counter
preempt_enable_no_resched() decrement, but do not immediately preempt
preempt_check_resched() if needed, reschedule
preempt_count() return the preempt counter
私は本当に何も知らないので、あなたはそれを達成しようとしているkあなたのニーズに答えるのは難しいですが、私は本当に眠いセマフォを掘ります: http://www.makelinux.net/books/lkd2/ch09lev1sec4 私が提供したソリューションの残りの部分とは異なり、彼らは計算時間を節約している忙しい待っていません。
私は本当に私がこの... glに手伝ってくれることを願っています!
特にLinuxについてはわかりませんが、ほとんどのオペレーティングシステムでは、割り込みハンドラが現在の優先順位のスレッドよりも高い優先順位をreadyに設定している場合に、 "dispatch needed"フラグが設定されます。この場合、割り込みハンドラは、単に戻るのではなく、ディスパッチャ(コンテキストスイッチ用)を介して終了します。ネストされた割り込みに対処するために、どの割り込みが最初の割り込みであったかを追跡するフラグもあります。したがって、ディスパッチャを介して最初の割り込みだけがオプションで終了します。 – rcgldr
重要なことは、割り込みハンドラはスリープできないことです。タスクコンテキストはありません。したがって、リソースを割り込みハンドラと同期させる必要がある場合、ミューテックスやセマフォを使用することはできません(スリープする可能性があります)。それはスピンロックまたは等価でなければなりません。もちろん、あなたは長い間ロックを保持すべきではないことを意味します(そして、それを保持している間にブロックする可能性のあるタスクコンテキストでは何もできません)。 –
さて、あなたは確かにユニットをセマフォに投稿できます。 –