マルチタスクの仕組み

80386でマルチタスクはどのように機能すると思いますか? 。 私の意見では、提案された回答オプションはどれも正しいものではありませんが、これは事実です:



プロセッサは、スレッドまたはプロセスについて何も知りません。 割り込みが発生するまで、命令を順番に実行するだけです。 割り込み処理は、実行可能コードで指定されていないプロシージャ呼び出しになります。 この手順(オペレーティングシステムの一部)は、必要に応じてプロセスとスレッドを切り替えます。 ほとんどの場合、割り込み手順は単に終了し、割り込みスレッドは何も気付かずに作業を続けます。



このプロセスの手順はエレガントで有益です。



各スレッドには独自のスタックがあり、現在実行中のプロシージャの状態を保存するメモリ領域です。 プロシージャが呼び出されると、プロセッサの状態がスタックに書き込まれ、プロシージャを終了した後、そこからプロセッサレジスタに読み込まれます。 最も重要な状態要素は、実行可能なコマンドのアドレスです。 さらに重要な状態要素はスタックポインターです。これは、状態データの書き込みまたは読み取りが行われるアドレスです。 スタックポインター自体はスタックに書き込まれません。



複数のワイヤが、外部デバイス(タイマーを含む)からプロセッサにつながっています。 これらのワイヤのいずれかの信号は、プロセッサに割り込み手順を実行させ、その開始アドレスは、ワイヤの番号に等しいインデックスで割り込みテーブルに指定されます。



スタックの切り替えは次のように行われます:スイッチを作成することを決定したオペレーティングシステムプロシージャは、レジスタの内容を保存します-現在のスタックのヘッダーのスタックポインターは、他のスタックのヘッダーからポインターの値を抽出し、レジスタに書き込みます。その後、通常のexitコマンドが実行されます。 つまり、スタックを変更すると、レジスタの内容、つまりスタックポインタが置き換えられます。



プロセスを切り替えると、仮想メモリレジスタがさらに過負荷になります。



このプレゼンテーションの多くの詳細(たとえば、割り込みの優先順位)は省略されています。詳細は関連する文献に記載されています。



ソビエトの用語はアメリカとは異なっていました。 ダイクストラの仕事に従って、ストリームはプロセスと呼ばれ、プロセスはタスクと呼ばれました。



All Articles