0

私は最近、Robert Love による Linux Kernel Development を読み始めまし。私の質問をよりよく理解するために、本からの以下の抜粋を読んでください。

番号は割り込みを識別し、カーネルはこの番号を使用して特定の割り込みハンドラーを実行し、割り込みを処理して応答します。たとえば、入力すると、キーボード コントローラーは割り込みを発行して、キーボード バッファーに新しいデータがあることをシステムに知らせます。カーネルは着信割り込みの割り込み番号を記録し、正しい割り込みハンドラーを実行します。割り込みハンドラーはキーボード データを処理し、キーボード コントローラーに次のデータの準備ができていることを知らせます...

現在、私は自分のマシンでデュアル ブートを使用しており、Windows で何かを入力すると (実際には多くの場合)、ナイト クローラーモードと呼ばれるモードで入力していることに気付きます。これは、入力していて画面に何も表示されず、しばらくするとテキスト全体が一度に表示され、おそらくバッファがすべてを吐き出すときです。

現在、Linux でこれが起こっていることはわかりません。Linuxには割り込みコンテキストが存在し、Windows には存在しないためですか?

ところで、Windowsに割り込みコンテキストがあるかどうかはまだわかりません.Googleはそれに関連する結果を私に与えませんでした.

4

2 に答える 2

0

すべてのOSには割り込みコンテキストがあり、これはCPUアーキテクチャの機能/制約です。基本的に、これはコンピュータハードウェアでの「動作方法」です。ただし、OS(およびそのOS内のドライバー)が異なれば、割り込みで何が機能し、どれだけの作業が行われるかについて、戻る前にさまざまな選択が行われます。それはあなたのウィンドウズ体験に関係しているかもしれませんし、そうでないかもしれません。キーを押して画面出力に変換するためのコードはたくさんあり、割り込み処理はごく一部にすぎません。

于 2012-09-11T17:31:18.730 に答える
0

番号は割り込みを識別し、カーネルはこの番号を使用して特定の割り込みハンドラーを実行し、割り込みを処理して応答します。たとえば、入力すると、キーボード コントローラーは割り込みを発行して、キーボード バッファーに新しいデータがあることをシステムに知らせます。カーネルは着信割り込みの割り込み番号を記録し、正しい割り込みハンドラーを実行します。割り込みハンドラーキーボード データを処理し、キーボード コントローラーにデータの準備ができていることを知らせます。

これはかなり貧弱な説明です。USBキーボードの場合は状況が異なる可能性がありますが、これは、マザーボード上の「8042」互換チップセットがIRQラインでCPUに信号を送る古いPS/2接続で何が起こるかを議論しているようです.CPUはコードを実行します割り込みテーブルの場所9に格納されているアドレスにあります(伝統的に、物理メモリのアドレス0から始まるポインターの配列ですが、メモリからアドレスを変更できますが、前回このようなもので遊んだとき、PCにはまだ1MB未満のRAMがあり、異なるメモリ レイアウト モードを使用)。

そのディスパッチ プロセスはカーネルとは何の関係もありません...それはハードウェアの仕組みです。(キーボード コントローラーは割り込みを生成しないように要求され、OS/ドライバー ソフトウェアが定期的に "ポーリング" して、新しいイベント データが利用可能かどうかを確認できますが、それを実際に使用するのは非常にクレイジーです)。

それでも、割り込みテーブルのコード アドレスはカーネルまたはキーボード ドライバーを指しカーネル/ドライバー コードはキーボード コントローラーの I/O ポートからキーボード イベント データを読み取ります。これらのハードウェア割り込みハンドラーの主な目標は、デバイスからデータを取得し、可能な限り迅速にバッファーに格納することです。これは、発生していた処理に割り込みから戻ることを保証するためと、キーボード コントローラーが処理することしかできないためです。一度に 1 つのイベント - 次のイベントの前にバッファに読み込む必要があります。

次に、OS/ドライバーは、何らかの入力可用性信号をアプリケーション ソフトウェアに提供するか、アプリケーション ソフトウェアがさらにキーボード入力を読み取ろうとするのを待つかのいずれかになりますが、「準備ができたらいつでも」方法でそれを行うことができます。いずれにせよ、アプリケーションが入力を読み取って応答を開始する時間があると、予想外に長い時間がかかることを意味することが発生する可能性があります: 余分なキーストロークが、実行に長い時間がかかる複雑な改ページ改作アルゴリズムをトリガーする可能性があります。 、またはキーストロークにより、プログラムがディスクにスワップアウトされたコードを実行することになります(「仮想メモリ」についてはウィキペディアを確認してください)。この場合、ハードディスクがプログラムの一部をメモリに読み込んだ後にのみ、プログラムが走り続けることができます。ウィンドウの移動、グラフィックス クリッピング アルゴリズムなどを含む何千ものエッジ ケースがあり、完了までに長い時間がかかるキーボード処理コードの原因となる可能性があります。その間に他のキーストロークが発生した場合、それらはキーボード ドライバーによって読み込まれます。そのバッファは、スロー/ブロッキング処理が完了した後にのみアプリケーションによって「認識」されます。すべてのキーストロークの結果としてバッファ内にある処理は、はるかに迅速に完了する可能性があります。たとえば、プログラムの一部がディスクからスワップインされた場合、その部分は残りのキーストロークを処理する準備ができている可能性があります。キーボードドライバーによってそのバッファーに読み取られ、スロー/ブロッキング処理が完了した後にのみアプリケーションによって「認識」されます。すべてのキーストロークの結果としてバッファ内にある処理は、はるかに迅速に完了する可能性があります。たとえば、プログラムの一部がディスクからスワップインされた場合、その部分は残りのキーストロークを処理する準備ができている可能性があります。キーボードドライバーによってそのバッファーに読み取られ、スロー/ブロッキング処理が完了した後にのみアプリケーションによって「認識」されます。すべてのキーストロークの結果としてバッファ内にある処理は、はるかに迅速に完了する可能性があります。たとえば、プログラムの一部がディスクからスワップインされた場合、その部分は残りのキーストロークを処理する準備ができている可能性があります。

Linux が Windows よりも優れているのはなぜですか? 主な理由は、オペレーティング システム、ドライバー、およびアプリケーションが「無駄のない」ものになる傾向があるためです...ソフトウェアの肥大化が少なく (C++ と C# .NET など)、無駄なメモリが少なく、スワッピングと遅延が少なくなります。

于 2012-09-12T01:11:05.823 に答える