
どちらもプロセスのスワップインとスワップアウトを伴うようです。
ページングでは、既存のプロセスのページをスワップアウトし、それをディスク (仮想メモリだと思います) の別のページに置き換えますが、コンテキスト切り替えの場合も、まずプロセスを PCB に保存し、次に別の PCB をメモリに復元することでプロセスをスワップアウトします。
この 2 つの違いは何でしょうか? 私の現在の推測/理解は次のとおりです。
コンテキストの切り替えはプロセス全体に関係するため、すべてのページが一度にスワップアウトされる可能性があります。
したがって、プロセス制御ブロックまたは PCB にはページが含まれます (含まれていない場合、2 つはどのように関連していますか?)。
答え1
共通点よりも相違点の方が多いと思います。
コンテキスト スイッチングは、基本的に、プログラム コードを実行するために必要な CPU コンテキストを指します。これには、CPU レジスタの値、フラグ、命令ポインタとスタック ポインタ、優先度レベル、仮想メモリの設定 (ページ テーブル) などが含まれます。
実際のメモリプロセスのメモリ全体をスワップアウトすると遅くなるため、通常はそうしません。システムが複数のプログラムを同時にメモリに格納でき、プログラムがメモリのどの部分が自分のものであるかを知る方法を持っている場合、別のプロセスに切り替えるときにプロセスのメモリ全体をスワップアウトする必要はありません。
(Wikipediaによると、彼らはかつてスワップアウトただし、1960 年代にはプロセス全体が完了していました。
ページングとは、通常、実行中のプロセスからは見えない方法で、メイン メモリと二次ストレージ間でメモリのブロック (「ページ」) を移動するプロセスです。
比較的新しいシステムでは、プロセス間のコンテキスト切り替えにはページ テーブルの再読み込みが含まれますが、通常はすべてがメモリに収まるため、ページングはまったく必要ありません。一方、スワップを必要とするほどのメモリを使用する場合、単一のプロセス内でもページングが発生する可能性があります。
つまり、コンテキスト切り替えとページングはむしろ直交しており、どちらもマルチタスク仮想メモリ OS の概念なのです。
答え2
コンテキスト スイッチングはページングとは関係ありません。コンテキスト スイッチングにより、2 つの異なるプログラムを同時に実行できます。コンテキストとは、ユーザー空間またはカーネル空間のコードが実行されるものであり、スイッチングはユーザー空間からカーネル空間へ、またはその逆へ移動します。
ページングは、メモリ ページを他の用途に使用するために、メモリ ページをそのスペースにスワップ アウトするメモリ ページを配置するためのスワップ スペースがある場合にのみ発生します。スワップ スペースがない場合、ページングは発生しませんが、コンテキストの切り替えは発生します。
コンテキストがユーザー空間からカーネル空間コードに切り替えられると (その後、別のアプリの別のユーザー空間コードに切り替えられる可能性もあります)、必ずしもページングは行われません。つまり、元のプロセスのメモリは自動的にスワップアウトされません。そのため、2 番目のプロセスが実行されている間もメモリが引き続き使用されます。