オペレーティングシステム-プロセスの初期実現

オペレーティングシステム-プロセスの最初の実現

1.プロセス=実行中のプログラム。アプリケーションの目的は問題を解決することであり、生成された実行可能ファイルには実行中のプロセスがあり、プロセスの目的はタスクを完了することです。

考えてみてください-コンピュータにはプロセッサが1つしかないので、同時に複数のタスクを実行するにはどうすればよいですか?上の図から、
古代のコンピュータシステムを
オペレーティングシステム-プロセスの初期実現
見ることができます。プロセッサは一度に1つのタスクしか実行しないため、task1の実行時に終了すると、タスク待機キューから実行を継続します。古代に存在したデメリット-実行中のタスクが外部デバイスの相互作用を必要とする場合、プロセッサはほぼK-line状態にあり、他のタスクは実行できず、待機することしかできません。

A.タスク定義(プロセス定義)

オペレーティングシステム-プロセスの初期実現
顕微鏡ビュー(オペレーティングシステム)では、タスクには上の図の内容が含まれています。マルチタスクを実現するためには、以下の実行条件を完了する必要がありますオペレーティングシステム-プロセスの初期実現
。ほとんどの場合、タスクの数はプロセッサの数よりも多いため、本来の意味でのタスクの並列実行は不可能ですが、各プロセッサは並行して実行できます。時間の単位でタスクが実行され、最後にプロセッサが複数のタスク間で実行を切り替えます。

B.コンピューター内でタスクを表す方法は?

C言語構造-この場所はプロセスの表現(前のタスク定義に対応)を表し、rvはレジスタの値を表し(プロセスの状態を保存)、スタックはスタック、コード、およびデータを表します(プログラムがロードされます)メモリに)説明する
オペレーティングシステム-プロセスの初期実現
タスクを後に詳しくの実行状態を次の図構造に格納されたメモリ内のレジスタの値で示されている
オペレーティングシステム-プロセスの初期実現
(特権レベル変換のスタック情報保存が存在するであろうTSS各レジスタの値)-実行が低特権レベルから0特権レベルに転送される場合、スタックを切り替えるためにTSSが必要です。この表は右側の構造に対応します。下図の右側の構造は、最初の4バイトが前のスタック情報を表していることを示し、以下は、各特権レベルのスタック情報、未使用[22]を示しています。これは、レジスタが途中で使用されていないことを意味します。
オペレーティングシステム-プロセスの初期実現

プロセスの実装に必要な原材料1.LDT
-x86システムのタスクはプライベートセグメント記述子を使用します
2.実行に必要なTSS-特権レベルのアップグレード-スタック情報の表示
3.RegValue-タスクの実行
中にコンテキスト情報を保存します4.Stack -x86プライベートスタックシステム内のタスクの数
5.GDT-LDTおよびTSSに対応するタスクをGDTに登録する必要があります

ここで発生する質問-LDTとTSSをGDTに動的に登録する方法は?GDTに記述子を設定するには、GDTの開始アドレスを取得する必要があります。このアドレスを取得する方法
解決策は次のとおりです(共有メモリ)-ローダーはスワップメモリ​​に異なるアドレスを書き込み、カーネルはそれを取得できますスワップメモリ​​のニーズアドレスの
オペレーティングシステム-プロセスの初期実現
詳細コードは、次のリンクに配置されています。リンク:https://pan.baidu.com/s/1LbsIhwyjzTY_4sBV96RuDw抽出コード:y0zy
このコンテンツをコピーしたBaiduNetdisk携帯電話アプリを開きます。操作がより便利で、
操作結果は図のようになります
オペレーティングシステム-プロセスの初期実現

プロセスの最初の実現の下で

質問-コンテキストを実行してプロセスの実行を再開するにはどうすればよいですか?プロセスを3つの特権レベルで実行する方法

1.コンテキストデータを復元します-タスクデータ構造のレジスタ値を介してコンテキストを復元します。いくつかのespレジスタは、一般レジスタを復元するためにpop命令を記憶します(アセンブリのスタック操作命令とRegValueを介してレジスタの値を設定します)構造変数)、各ポップ上位アドレスに4バイト。新しいタスクの開始は特別なタスクスイッチと見なすことができ、スイッチのターゲットタスクのコンテキスト情報で渡されるレジスタの値は次のようになります。 0。

オペレーティングシステム-プロセスの初期実現
オペレーティングシステム-プロセスの初期実現

2.特権レベルの転送(高-低)

コールゲートでは、retfが高特権レベルから低特権レベルに戻ります。同様に、iret命令も高特権レベルから低特権レベルに戻ることができます。ここでの操作は、espをターゲットメモリ位置(eip、cs、eflags、esp、ss)にポイントすることであり、実行の特権を剥奪するiret命令を使用
して、割り込みが割り込みからいつ戻るか、いつ戻るかを知ることができます。割り込みが発生すると、最下位の特権レベルから高特権レベルに転送できます。割り込みが戻ったら、高特権レベルから低特権レベルに転送します。
オペレーティングシステム-プロセスの初期実現

3.割り込みアクセスプログラムが戻るとスタックが変化します-iretコマンドによって操作されるレジスタ

オペレーティングシステム-プロセスの初期実現

4.コードの実行プランは次のとおりです。

オペレーティングシステム-プロセスの初期実現

5.プロセス開始「機能」

パラメータはタスクデータ構造のアドレスです。esp+ 200/202
オペレーティングシステム-プロセスの初期実現
、オフセット詳細コードが次のリンクに配置されることを意味します。https://pan.baidu.com/s/1altDhV-kJNWamUcc4r5oEw抽出コード:h2ao

オペレーティングシステム-プロセスの初期実現

おすすめ

転載: blog.51cto.com/13475106/2657911