2016-12-03 2 views
1

プロセスp1が独自のアドレス空間(スタック、ヒープ、テキスト)で実行されているとします。コンテキストスイッチが発生したとき、私はすべての現在のCPUレジスタがPCBにプッシュされていることを理解しています。プロセスをロードする前にp2。次にTLBはフラッシュされ、p2アドレスマッピングがロードされ、それ自身のアドレス空間で実行を開始します。 私が知りたいと思うのはp1のアドレス空間です。プロセスをロードする前にディスクにコピーしてページテーブルを更新しますかp2linuxの2つのプロセス間でコンテキスト切り替え中に何が起こるのですか?

答えて

1

コンテキストスイッチの詳細は、基本となるハードウェアによって異なります。しかし、コンテキストスイッチは基本的には異なるシステム間でも同じです。

あなたが抱えている間違いは、「現在のCPUレジスタがすべてプロセスp2をロードする前にスタックにプッシュされていることを理解しています」です。レジスタは、プロセッサによって定義された構造を有するPROCESS CONTEXT BLOCK(またはPCB)と通常呼ばれるメモリ領域に格納されます。ほとんどのプロセッサは、プロセスコンテキスト(すなわち、そのレジスタ)をロードしてこの構造に保存するための命令を有する。インテルの場合、異なるレジスタセット(FPU、MMXなど)のため、複数の命令を複数のブロックに保存する必要があります。

発信プロセスをディスクに書き込む必要はありません。システムがより多くのメモリを必要とする場合は、ページアウトされる可能性がありますが、メモリ内に完全に存在し、実行準備ができている可能性があります。

コンテキストスイッチは、あるプロセッサの保存されたレジスタ値を別のプロセッサに交換するだけです。

+0

これはまさに私が求めていた説明です。ありがとう。あなたのコメントについての質問「システムがより多くのメモリを必要とする場合はページアウトされるかもしれませんが、メモリ内に完全に残る可能性があります」私が正しく理解すれば、p1は現在スリープ状態にあり、p2は実行中で、p1のアドレス空間は必要な場合にのみスワップアウトされます。 p1ページからのスワップが発生した場合、OSはスワップアウトページがプロセスp1に属していることと、p1ページテーブルをどのように更新するのかをOSはどのように知っていますか? – user1762571

+0

オペレーティングシステムは空きページのデータベースを管理しています。ページがP1の作業セットから削除されると、空きページに追加されます。ページテーブルの更新は、解放プロセスの一部です。通常、OSは「解放された」ページだけを残して、P1がそれらを再度必要とし、それらが使用されていない場合、ページテーブルをディスクに読み込まずに更新することによってページを再び有効にすることができる。 OSはプロセスをページアウトして、利用可能なページを知ります。 – user3344003

+0

申し訳ありませんまだ私は完全にそれを得ることはありません。空きページがある場合、OSがp1のページを交換するのではなく、空きページを使用できないのはなぜですか?どの時点でも、メモリは複数のプロセスのページを保持することがあります。 OSは物理メモリアドレスだけを使用してページの所有者をどのように識別できますか? – user1762571

関連する問題