1

たとえば、ディスク I/O の完了を待機しているプロセスは、転送中のデータに対応するバッファ ヘッダーのアドレスでスリープします。ディスク ドライバーの割り込みルーチンは、転送が完了したことを通知すると、バッファー ヘッダーでウェイクアップを呼び出します。割り込みは、その時点で実行されていたプロセスのカーネル スタックを使用し、ウェイクアップはそのシステム プロセスから行われます。

私が強調した段落の最後の行について説明していただけますか。これは、何らかのイベントが発生するのを待っていてスリープ状態になっているプロセスを目覚めさせることです。このパラはGalvinのものです。ところで、UNIX オペレーティング システムを学習するための良い本やリンクを教えてください。

ありがとう。

4

4 に答える 4

1

モーリスバッハのUnixオペレーティングシステムの設計は、この主題に関する最もよく知られた包括的な本です。

于 2009-04-19T15:09:08.510 に答える
1

割り込みが受信された時点で実行のプロセスがあります。カーネルは、それを処理するために他のプロセス コンテキストに切り替えることはありません。これには時間がかかります。現在のコンテキストで必要なことを実行するだけであり、次にスケジュールするときに、待機中のプロセスの準備ができていることをスケジューラに知らせます。続行します。

多くの優れた内部関係の本があります。The Design and Implementation of the FreeBSD Operating Systemなど、 McKusick らのさまざまなが好きです。

于 2009-04-19T14:43:17.403 に答える
0

Eric Raymond の'The Art of Unix Programming'は、Unix の哲学と文化を理解するために読む必要があります。その設計の背後にある理由を実際に知り、評価するために。

于 2009-04-19T15:43:39.457 に答える
0

I/O 完了割り込みは、ディスクが転送の終了を知らせるとすぐに実行されます。これは、カーネルが現在何をしているかに関係なく行われます。通常、割り込みハンドラは非常に小さく、自己完結型です。したがって、別のスレッドへの完全なコンテキスト スイッチを実行する代わりに、現在のランタイム環境 (スタック、CPU 状態など) を再利用する方が高速です。マイナス面としては、割り込みハンドラーは、別の場所にフラグを設定したり、作業項目をキューに入れたりするなど、非常に限られたことしか実行できないことを意味します。また、実行中のプロセスが妨げられないように、後で非常に慎重にクリーンアップする必要があります。

于 2009-04-19T14:45:04.967 に答える