web-dev-qa-db-ja.com

ページングとコンテキスト切り替えの違いは何ですか?

どちらもプロセスの交換を伴うようです。

ページングでは、既存のプロセスのページをスワップアウトして、ディスク(私が信じる仮想メモリ)から別のページに置き換えますが、コンテキストスイッチングの場合は、最初にPCBに保存してから、別のプロセスを復元することによってプロセスをスワップアウトします。 PCBメモリに。

2つの違いは何ですか?これが私の現在の推測/理解です:

  1. コンテキストの切り替えはプロセス全体に関するものであるため、すべてのページが一度にスワップアウトされる可能性があります。

  2. したがって、プロセス制御ブロックまたはPCBにはページが含まれます(含まれていない場合、2つはどのように関連していますか?)。

1
winnie99

共通点よりも違いがあると思います。

コンテキストスイッチングは基本的に、プログラムコードが実行する必要のあるCPUコンテキストを指します。これには、CPUレジスタの値、フラグ、命令ポインタとスタックポインタ、優先度レベル、仮想メモリの設定(ページテーブル)などが含まれます。

プロセスの実際のmemoryを含める必要はなく、プロセスのメモリを完全にスワップアウトすると時間がかかるため、通常は含めません。システムが複数のプログラムを同時にメモリに格納でき、プログラムがメモリのどの部分を使用するかを知る方法がある場合、別のプロセスに切り替えるときにプロセスのメモリ全体を交換する必要はありません。 。

(ウィキペディアによると、彼らは1960年代に スワップアウト プロセス全体を使用していました。)

ページングは​​、メモリのブロック(「ページ」)をメインメモリと一部のセカンダリストレージの間で移動するプロセスであり、通常は実行中のプロセスからは見えません。

現代風のシステムでは、プロセス間のコンテキスト切り替えにはページテーブルの再読み込みが含まれますが、通常はすべてがメモリに収まるため、ページングを行う必要はありません。一方、スワップを必要とするのに十分なメモリを使用している場合は、単一のプロセス内でもページングが発生する可能性があります。

つまり、実際には、コンテキストの切り替えとページングは​​かなり直交しており、どちらもマルチタスク仮想メモリOSの概念にすぎません。

3
ilkkachu

コンテキストの切り替えはページングとは関係ありません。ページングにより、2つの異なるプログラムを同時に実行できます。コンテキストは、ユーザースペースまたはカーネルスペースのコードが実行されているものであり、切り替えはユーザースペースからカーネルスペースまたはその逆に移行しています。

ページングは​​、メモリページを他の目的に使用するために、スワップアウトするメモリページをそのスペースに配置するためのスワップスペースがある場合にのみ発生します。スワップスペースがない場合、ページングは​​ありませんが、コンテキストの切り替えはあります。

コンテキストがユーザースペースからカーネルスペースコードに(そして場合によっては別のアプリの他のユーザースペースコードに)切り替えられる場合、ページングは​​必ずしも実行されません。つまり。元のプロセスメモリは自動的にスワップアウトされません。したがって、2番目のプロセスの実行中は、引き続きメモリを使用します。

1
crass