2011-04-21 13 views
2

お世話になりましたが、割り込みが無効になっていると、すべてのプロセス/スレッドスケジューリングが無効になるのは本当ですか?私が知っているのは、クロック割り込みや他の割り込みを含む割り込みです。 CPUスケジューリング(例えば、ラウンドロビン)はクロック割込みに基づく。これが無効になっていると、スケジューリングも無効になり、現在のスレッドはCPUを有効にするまで実行を継続します。私が間違っているなら、私を修正してください。割り込みを無効にするとCPUスケジューリングが自動的に無効になりますか?

RR(リアルタイムシステムを考慮)の代わりに純優先順位ベースのスケジューリングで、優先順位の低いスレッドが割り込みを無効にした場合、優先順位の高いスレッドが到着します。

これは私にオペレーティングシステムの保護について考えるようになります。何人かのユーザーが割り込みを無効にするために意図的にウイルスを書き込むとどうなりますか?おそらく、彼はユーザーモードでそれをすることはできません。カーネルモードで動作するプログラムを書いてその悪いことをしたらどうでしょうか?彼はこれをすることができますか?

私はすべてのプラットフォームで一般的なルールを期待していません。だから、あなたが知っているプラ​​ットフォームで状況が何であるか教えてください。ありがとう。

+0

一般に、カーネルモードの悪いものに制限はありません。カーネルモードのものであれば、コントロールレジスタをゴミ箱にすることができます(例:ページテーブルのベースアドレスをガベージ値に変更する)。そのため、ドライバを追加するには管理者になる必要があります。ある場合は、どのオペレーティングシステムとアーキテクチャがあるかを明記する必要があります。 – doug65536

+0

組み込みシステムで一般的に使用されるプロセッサには、ウォッチドッグタイマが含まれます。 x86はNMIに接続されたウォッチドッグタイマーも使用できます。しかし、悪意のあるプログラムはウォッチドッグタイマを無効にし、割り込みを無効にすることができます。 – doug65536

答えて

3

実際、あなたの質問に対する答えはアーキテクチャに依存しています。私たちがi386やx86_64について話していると仮定しましょう。これらは最近、最も普及しているプロセッサアーキテクチャです。

ユーザーモードプログラムでは、CPL(現在の権限レベル)0が必要なため割り込みフラグをクリアできません。ユーザーモードプログラムにはCPL 0はありません。たとえば、ユーザーモードプログラムはCPL 2で実行され、したがって、割り込みを無効にしてスケジューリングを無効にするウイルスを書き込むことはできません。 Windowsでは、私が間違っていないと、プログラムはCPL 1で動作します。

一方、カーネルの実行コード(任意のオペレーティングシステム)では、管理者権限が必要です。管理権限が必要です。カーネルモードでの割り込みは意味をなさない。

これはあなたの質問にお答えします。

+0

カーネルモードで割り込みを無効にすることの1つは、他のスレッド(たとえば、優先度の高い自動ウイルススレッド)がCPUを占有してウイルスを殺して、ウイルスが必要なときに実行するのに十分な時間がないことが保証されていることです。それは理にかなっていますか? –

+0

はい、意味があります。 –

+0

ユーザモードプログラムは、Linux i386では、CPL = 3では実行されず、2で実行されます。ルート・プロセスは、iopl()システム・コールを使用してIOPLレベルを3に下げることができるため、CPL = 3のプロセスでは、IOPLに敏感なCLIおよびSTI命令を使用できます。 –

関連する問題