7

オペレーティングシステムがどのように機能するかについては、ほとんど疑問がありません。

スケジューラー:スケジューラーは別のプロセスで実行されますか(他のプロセスと同様)。新しいプロセスでスワップするときに正確に何が起こるか(プロセッサレジスタとメモリテーブルが更新されることを知っていますが、私の質問はそれらがどのように更新されるかです。別のレジスタ(sc、pc)を指すようにレジスタ(sc、pc)を更新するプログラムを作成できますか?処理する)。

4

1 に答える 1

9

プロセススケジュールは別のプロセスで実行可能ですが、1つのプロセスからスケジューリングプロセスにスワップして(カーネルに対して複数のシステムコールを実行する必要がある)、次に戻る必要があるため、このような設計は非常に非効率的です。システムコールを必要とせず、コンテキストを複数回交換する必要がないカーネルにスケジューラを配置するのとは対照的に、新しいプロセス。したがって、スケジューラーは通常、カーネルの排他的領域にあります。

発生する手順は次のとおりです。

  1. スケジューラーは、(さまざまな異なるアルゴリズムを介して)次のタイムスロットで実行されるプロセスを決定します。

  2. スケジューラーは、メモリー管理ユニット(MMU)に、次に実行するプロセスにページテーブルを使用するように指示します(これは、テーブルを指すようにレジスターを設定することによって行われます)。

  3. スケジューラは、Nクロックサイクル後に割り込みを生成するようにプログラマブル割り込みタイマー(PIT)をプログラムします。

  4. スケジューラーは、プロセスが最後に実行されたときからレジスターの状態を復元します(または、新しいプロセスのデフォルト値にレジスターを設定します)。

  5. スケジューラーは、プロセスで実行されなかった最後の命令のアドレスにジャンプします。

  6. Nクロックサイクル後、割り込みが発生し、オペレーティングシステムは、スケジューラによって処理されるように登録されているPITが原因であると認識します。

  7. スケジューラーはレジスター(スタックポインターなどを含む)の状態を保存し、割り込みが発生した場所のプログラムカウンターを取得し(そして次にジャンプするアドレスとして保存し)、ステップ1に戻ります。

これは、それを実行する方法の一例にすぎず、低レベルの詳細の多くはアーキテクチャ固有です。基本的に、すべてのレジスタ(プログラムの状態)はRAM内の任意の場所に保存でき(たとえば、それぞれがレジスタ用のスペースを持つプロセスを表す構造のリンクリストなど)、仮想アドレス空間(ページテーブルで定義)は任意に設定できます。交換しました。

だから本質的にあなたの質問:

「別のプロセスを指すようにレジスタを更新するプログラムを作成できますか?」

簡単に言えば、それでも答えは正しいです。確かにできます。

于 2012-08-02T01:50:55.457 に答える