問題タブ [preemption]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - Linux でコードの 2 点間でプリエンプションが発生したかどうかを確認する
Linux カーネル上でアプリケーション (単純な C コード) を実行しています。コードの 2 点間の時間を測定しています。これら 2 つのポイントの間で、他のプロセスまたはスケジューラ自体がアプリケーションをプリエンプトしたかどうかを知りたいです。これを見つける方法はありますか。
c - プリエンプションを無効または有効にするのに「barrier()」で十分なのはなぜですか?
Linux カーネル コードから、preempt_enable()
とpreempt_disable()
はただbarrier()
:
理解できません。barrier()
プリエンプションを無効または有効にするのにa だけで十分なのはなぜですか?
linux-kernel - タイマー割り込みによるプロセスの横取り
同じ CPU コアで実行されている 2 つのプロセス (PA と PB) があります。プロセス B はマルチスレッドです。プロセス B のスレッドによって 2 マイクロ秒ごとにプロセス A がプリエンプトされるようにします。
タイマー割り込み (またはその他のもの) を記述して、一定時間 (マイクロ秒単位) 後にプロセス A をプリエンプトすることはできますか?
operating-system - 「プロセスプリエンプション」の正確な定義は何ですか?
ウィキペディアは次のように述べています。
コンピューティングにおけるプリエンプションとは、コンピューター システムによって実行されているタスクを、その協力を必要とせずに、後で再開することを意図して一時的に中断する行為です。
他の情報源は次のように述べています。
[...] プリエンプションとは、プロセッサをあるプロセスから強制的に奪い、別のプロセスに割り当てることを意味します。[オペレーティング システム (Self Edition 1.1)、Sibsankar Haldar ]
プログラムのプリエンプションは、実行中に割り込みが発生し、スケジューラが実行のために他のプログラムを選択したときに発生します。[オペレーティング システム: 概念ベースのアプローチ、2E、DM Dhamdhere ]
したがって、私が理解したのは、プロセスが (ハードウェア割り込み、つまり I/O 割り込みまたはタイマー割り込みによって) 中断され、割り込みを処理した後に呼び出されたスケジューラが実行する別のプロセスを選択した場合、プロセスのプリエンプションがあるということです( CPU スケジューリング アルゴリズム)。スケジューラーが中断されたプロセスを選択した場合、プロセスのプリエンプションはありません (割り込みが必ずしもプリエンプションを引き起こすとは限りません)。
しかし、次の方法でプリエンプションを定義する他の多くの情報源を見つけました。
プリエンプションとは、プログラムから CPU の割り当てを強制的に解除することです。[オペレーティング システム: 概念ベースのアプローチ、2E、DM Dhamdhere ]
同じ本がプリエンプションの 2 つの異なる定義を報告していることがわかります。後者では、CPU を別のプロセスに割り当てる必要があることは言及されていません。この定義によれば、プリエンプションは「中断」の別名にすぎません。ハードウェア割り込みが発生すると、プロセスが中断される (「実行中」状態から「準備完了」状態に切り替わる) か、横取りされます。
だから私の質問は: 2 つの定義のどちらが正しいですか? 私はかなり混乱しています。
process - 優先順位の逆転で、高優先度のプロセスが中優先度のプロセスをプリエンプトできないのはなぜですか?
Silberschatz/Galvin 著の「Operating System Principles」(第 9 版) とウィキペディアの優先順位の逆転に関する記事では、優先順位の逆転では、優先順位の高いプロセスは優先順位の低いプロセスが保持するリソースを使用できないと述べています。優先度が中程度のプロセスは、優先度が低いプロセスを横取りし、そのリソースを取得します。しかし、そうである場合 (つまり、優先度に基づくプリエンプションが許可されている場合)、優先度の高いプロセスが優先度の低いプロセス自体をプリエンプトしてリソースを取得できないのはなぜでしょうか?
以下は、本とウィキペディアの記事で言及されていることです。
それぞれ高優先度と低優先度の 2 つのタスク H と L を考えます。どちらも共有リソース R の排他的使用を取得できます。L が R を取得した後に H が R を取得しようとすると、L がリソースを解放するまで H がブロックされます。適切に設計されたシステムで専用リソース (この場合は R) を共有するには、通常、H (優先度の高いタスク) が長時間ブロックされたままにならないように、L が R をすぐに放棄する必要があります。ただし、優れた設計にもかかわらず、中程度の優先度 (p(L) < p(M) < p(H)、p(x) はタスク (x) の優先度を表す) の 3 番目のタスク M が実行可能になる可能性があります。 L による R の使用。この時点で、M は L より優先度が高いため、L を先取りし、L が R をすぐに放棄できなくなり、H (最も優先度の高いプロセス) が実行できなくなります。