4

私はちょうど言う記事を読んでいます:

割り込みシステムを制御する理由は、一般的に同期を提供する必要があるということです。割り込みを無効にすることで、割り込みハンドラーが現在のコードをプリエンプトしないことを保証できます。さらに、割り込みを無効にすると、カーネルプリエンプションも無効になりますただし、割り込み配信を無効にすることも、カーネルプリエンプションを無効にすることも、別のプロセッサからの同時アクセスからの保護を提供しません。

だから私はただ割り込みとカーネルプリエンプションの違いを疑問に思います。

または、カーネルプリエンプションを無効にすると割り込みも無効になると言えますか?

4

2 に答える 2

14

プロセスが中断されると、カーネルはいくつかのコードを実行しますが、これはプロセスの実行内容とは関係がない場合があります。
これが行われると、2つのことが起こる可能性があります
。1。同じプロセスがCPUを再び取得します。
2.別のプロセスがCPUを取得します。現在のプロセスはプリエンプトされました。

したがって、プリエンプションは割り込み後にのみ発生しますが、割り込みによって常にプリエンプションが発生するとは限りません。

于 2012-02-28T10:08:33.890 に答える
2

それらは異なります。割り込みはカーネルのコンテキスト外でも発生する可能性があるため、カーネルがプリエンプションを処理する方法を変更しても、割り込みには影響しません。あなたの記事の文脈では、カーネルのプリエンプションは動作中の割り込みに依存しているようです(おそらくそれはある種のタイマーを使用して実装されているためです)。

于 2012-02-27T22:35:44.987 に答える