目次
メモリの使用状況を記録するためにシステムで一般的に使用される 2 つのデータ構造があります。
記憶の理解
- メモリ:メモリは、データを格納するために使用されるハードウェアです。プログラムを実行する前に、CPU で処理する前にメモリに配置する必要があります。
- メモリには小さな部屋があり、それぞれの小さな部屋はストレージ ユニットです; これらの小さな部屋に番号を付けると、これがメモリのアドレスになります (メモリ アドレスは 0 から始まり、各アドレスはストレージ ユニットに対応します)。
- メモリ記憶装置のサイズを決定します:コンピュータがバイト単位でアドレス指定される場合、各記憶単位のサイズは 1 バイト、つまり 1B (8 バイナリ ビット) です; ワード長が 16 ビットのコンピュータがアドレス指定される場合、各記憶単位のサイズは 1 ワード (各ワード サイズは 16 ビット、つまり 2 バイト)
- コンピュータには 4GB のメモリがあることを理解してください。これは、メモリが 4*2^30 バイトを保存できることを意味します。バイトでアドレス指定する場合、つまり 4*2^30 の小さな部屋なので、多くの小さな部屋を 1 つずつ識別するには 2^32 のアドレスが必要になるため、アドレスは 32 バイナリ ビットで表す必要があります。
プロセスのしくみ
命令
高級言語で記述したコードはコンパイルされて同等の機械語命令を形成します. これらの命令は機械語 (バイナリ) で記述されており, CPU によって認識されます. CPU は命令に従っていくつかの処理を完了します. いくつかの処理を完了します.当社が指定する操作。
命令の各位置の意味
CPU は、命令の最初の数桁 (たとえば、命令 1 の 1 桁目: CPU にデータ送信を実行するように指示するオペレーション コード) に従って何を行うかを判断します。次の 2 つのデータ セットは 2 つのパラメーターです。 、これは、CPUにメモリユニットをに変換させることです.01001111のデータが取り出され、アドレス00000011のレジスタに入れられます)
プロセスの簡単な理解: CPU がメモリ内のデータをレジスタに移動した後、レジスタは操作を実行してからメモリに戻します。
知らせ:
- 通常、変数はデータ セグメントに格納され、命令はプログラム セグメントに格納されます。
- 上記の例では、変数xが実際に格納されているアドレス(物理アドレス)を命令が直接与えていますが、実際に機械語命令を生成すると、プロセスのデータがどこに配置されるかがわからないため、コンパイルされた命令は通常は論理アドレス(相対アドレス)を使用
プログラムの作成からプログラムの実行まで
コンパイル:コンパイラによってユーザー ソース コードを複数のターゲット モジュールにコンパイルします (高級言語を機械語に翻訳します)。
リンク:リンカーは、コンパイルされたオブジェクト モジュールのセットと必要なライブラリ関数をリンクして、完全なロード モジュールを形成します。
Loading (loading):ローダーはロード モジュールをメモリにロードして実行します。
リンクする 3 つの方法
- 静的リンク:プログラムを実行する前に、各ターゲット モジュールとそれらに必要なライブラリ関数を完全な実行可能ファイルにリンクし (モジュールをロードします)、逆アセンブルしません。
- ロード時の動的リンク:各ターゲット モジュールがメモリにロードされるときに、リンク方法が同時にロードされ、接続されます。
- ランタイム動的リンク:ターゲット モジュールは、プログラムの実行で必要な場合にのみリンクされます。その利点は、変更や更新が容易であり、ターゲット モジュールを共有するのに便利なことです。
3通りのロード方法(論理アドレスから物理アドレスへの変換)
絶対にロードされた
意味:コンパイル時に、プログラムが配置されるメモリ内の特定の場所がわかっている場合、コンパイラは絶対アドレスのオブジェクト コードを生成します。ロード・プログラムは、ロード・モジュール内のアドレスに従って、プログラムおよびデータをメモリーにロードします。
静的再配置
意味:再配置可能ロードとも呼ばれます。コンパイル・リンク後のロードモジュールのアドレスは0から始まり、命令で使用するアドレスとデータが格納されるアドレスは、先頭アドレスからの相対論理アドレスです。ロードモジュールは、メモリの現在の状況に応じて、メモリの適切な場所にロードできます。ロード時にアドレスを再配置し、論理アドレスを物理アドレスに変換(アドレス変換はロード時に一度完了)
動的再配置
意味:動的ランタイム ローディングとも呼ばれます。コンパイル・リンク後のロードモジュールのアドレスは0から始まります。ローダがロード モジュールをメモリにロードした後、すぐに論理アドレスを物理アドレスに変換するのではなく、プログラムが実行されるまでアドレスの変換を延期します。したがって、メモリにロードされた後のすべてのアドレスは依然として論理アドレスです。この方法では、再配置レジスタのサポートが必要です
理解:ローダーは、ロード モジュールをメモリに配置するときに命令のアドレスを変更しません。これらのアドレス変更は、実行されるまで予約する必要があります。システムは、プログラムのアドレスを格納するために再配置レジスタを設定します。開始位置(100 など) CPU が命令の実行時に特定のアドレスのメモリ ユニットにアクセスする場合、論理アドレスの値と再配置レジスタの値が加算されます。命令 1 が実行されると、メモリ ユニットは実際の物理アドレスは 180 です
メモリ管理
- オペレーティング システムは、メモリ領域の割り当てと回復を担当します。
- オペレーティング システムは、メモリ空間を論理的に拡張するためのテクノロジを提供する必要があります。
- オペレーティング システムは、プログラムの論理アドレスと物理アドレスの変換を担当するアドレス変換機能を提供する必要があります。
- オペレーティング システムは、メモリ保護機能を提供して、各プロセスが互いに干渉することなく独自のストレージ スペースで実行されるようにする必要があります。
メモリ保護の 2 つの方法
- プロセスの上限アドレスと下限アドレスを格納するために、CPU には上限レジスタと下限レジスタのペアが設定されます。プロセスの命令が特定のアドレスにアクセスしたい場合、CPU は範囲外かどうかをチェックします。
- 再配置レジスタ (ベース アドレス レジスタとも呼ばれます) と境界アドレス レジスタ (リミット レジスタとも呼ばれます) を使用して、範囲外をチェックします。再配置レジスタにはプロセスの開始物理アドレスが格納され、境界アドレス レジスタにはプロセスの最大論理アドレスが格納されます。
メモリ空間の拡張
オーバーレイ技術
序文:初期のコンピュータ メモリは非常に小さかった. たとえば、IBM によって発売された最初の PC は最大 1 MB のメモリをサポートしていたため、サイズが不足することがよくありました. その後、人々はオーバーレイ技術を導入して、プログラムのサイズが物理的な総容量を超えるという問題を解決しました.記憶の質問
オーバーレイ技術の考え方:プログラムを複数のセグメントに分割し、よく使用されるセグメントをメモリに常駐させ、使用頻度の低いセグメントを必要に応じてメモリに転送します。
理解:プログラム x が次の呼び出し構造を持っていると仮定すると、モジュール A はモジュール B とモジュール C を順番に呼び出します (モジュール B/C はモジュール A によって異なる時間間隔でのみ呼び出すことができます) 同様に、B->D、C-> E/F; B/C モジュールには同時にアクセスできないため、モジュール A を固定エリアに配置できるため、B/C はカバレッジ エリアを共有できます。
知らせ:
- メモリは、固定領域といくつかのカバレッジ領域に分割されます
- 永続的なメモリを必要とするセグメントは固定領域に配置され、呼び出された後は (操作が終了しない限り) 呼び出されません。使用頻度の低いセグメントはオーバーレイ領域に配置され、必要なときにメモリに呼び出されます。使用していないときに呼び出される
- フットプリントのサイズは、セグメント内のより大きなモジュールが必要とするメモリに基づいています
- オーバーレイ テクノロジのプログラムの呼び出し構造は、プログラマが宣言する必要があり、オペレーティング システムは自動的にそれを上書きします; 欠点: ユーザーにとって不透明であり、ユーザー プログラミングの負担が増加します。
スイッチング技術
技術的なアイデア:メモリ スペースが不足している場合、システムはメモリ内の一部のプロセスを外部ストレージから一時的にスワップし、外部ストレージ内の実行準備ができている一部のプロセスをメモリにスワップします (プロセスはメモリとストレージの間で動的にスケジュールされます)。ディスク)
知らせ:
- プロセスの PCB がメモリに常駐する必要がある理由:プロセスが外部ストレージからスワップアウトされた後、何らかの方法でプロセスの場所を外部ストレージに記録する必要があります。プロセスは、対応する PCB に記録されます. オペレーティング システムは、PCB に記録された情報に従ってこれらのプロセスを管理できます。
- ファイル領域とスワップ領域:スワップ機能を備えたオペレーティング システムでは、ディスク領域は通常、ファイル領域とスワップ領域の 2 つの部分に分割されます; 領域管理は離散割り当て方式を採用します: スワップ領域はファイル領域のごく一部しか占有しませんスワップアウトされたプロセスデータはスワップ領域に格納されます。スワップの速度はシステム全体の速度に直接影響するため、スワップ領域の管理は主にスワップインとスワップアウトの速度を追求するため、通常、スワップ領域は連続的に割り当てられます。つまり、スワップ領域の I/O 速度は、ファイル領域の I/O 速度よりも高速です。
- いつスワップするか:スワップは通常、多くのプロセスが実行されていてメモリが不足しているときに実行され、システム負荷が減少すると一時停止します。たとえば、多くのプロセスが実行されているときにページ フォールトが頻繁に発生する場合は、メモリが不足していることを意味し、この時点で一部のプロセスをスワップ アウトできます。ページ フォールトが大幅に減少した場合は、スワップ アウトを一時停止できます。
- スワップアウトする特定のプロセス:ブロックされたプロセスを最初にスワップアウトできます; 優先度の低いプロセスを最初にスワップアウトできます; メモリ滞留時間
メモリ空間の割り当てと回復
連続配分
連続的な割り当て:ユーザー プロセスの割り当てを指し、連続したメモリ空間でなければなりません
連続パーティション割り当て方法の分類
- 単一の連続した割り当て
- 固定パーティション割り当て
- 動的パーティション割り当て
単一の連続した割り当て
はじめに:単一連続割り当てでは、メモリはシステム領域とユーザー領域に分割されます。システム領域は通常、メモリの下位アドレス部分にあり、オペレーティング システム関連のデータを格納するために使用されます。ユーザー領域は、ユーザー プロセス関連のデータを格納するために使用されます。メモリ内に存在できるユーザー プログラムは 1 つだけであり、ユーザー プログラムはユーザー領域空間全体を排他的に占有します。
長所と短所
- 利点:単純な実装、外部断片化がない、オーバーレイ テクノロジを使用してメモリを拡張できる、メモリ保護が必ずしも必要ではない
- 短所:シングルユーザー、シングルタスクのオペレーティング システムでしか使用できない、内部の断片化、メモリ使用率が非常に低い
固定パーティション割り当て
序文: 1960年代にマルチプログラミングをサポートするシステムが登場しました.マルチプログラミングを互いに干渉することなくメモリにロードするために,ユーザー空間全体をいくつかの固定サイズのパーティションに分割しました.それぞれに1つのジョブのみがインストールされます.マルチプログラムを実行できる最も初期で最も単純なメモリ管理方法を形成するパーティション
固定パーティションの割り当て方法の分類
- 同じサイズのパーティション:柔軟性はありませんが、1 台のコンピューターが複数の同じオブジェクトを制御する場合に適しています
- さまざまなサイズのパーティション:さまざまなサイズのプロセスのニーズを満たすための柔軟性の向上; システムで頻繁に実行されるジョブのサイズに応じて分割
パーティションの説明表
序文:
- オペレーティング システムは、メモリ内の各パーティションのアイドル状態または割り当てを記録します。オペレーティング システムは、各パーティションの割り当てと回復を実現するために、データ構造 (パーティション記述テーブル) を確立する必要があります。各テーブル エントリ (行) はパーティションに対応し、通常はパーティション サイズで並べられます。各エントリには、対応するパーティションのサイズ、開始アドレス、ステータス (割り当てられているかどうか) が含まれます。
- ユーザープログラムをメモリにロードする場合、OS カーネルプログラムは、ユーザープログラムのサイズに応じてテーブルを検索し、サイズを満たすことができる未割り当てパーティションを見つけてプログラムに割り当て、ステータスを変更します。すでに配布する
固定パーティション割り当てのメリットとデメリット
- 長所:実装が簡単で、外部の断片化がありません。
- 短所:ユーザー プログラムが大きすぎる場合、すべてのパーティションが要件を満たすことができない場合があります.このとき、オーバーレイ技術を使用して解決する必要がありますが、これによりパフォーマンスが低下し、内部フラグメンテーションが発生し、メモリが不足します.利用率が低い。
動的パーティション割り当て
意味:動的パーティション割り当ては、可変パーティション割り当てとも呼ばれます. この割り当て方法は、メモリパーティションを事前に分割するのではなく、プロセスがメモリにロードされるときにプロセスのサイズに応じて動的にパーティションを確立し、パーティションのサイズを作成します.プロセスのニーズにジャストフィット. . したがって、システム パーティションのサイズと数は可変です。
メモリの使用状況を記録するためにシステムで一般的に使用される 2 つのデータ構造があります。
- 空きパーティションテーブル
- フリーパーティションチェーン
空きパーティションテーブル
フリー パーティション テーブル:各フリー パーティションは、エリア コード、パーティション サイズ、パーティションの開始位置などのアドレス情報を含むラベル アイテム (行) に対応します。
フリーパーティションチェーン
空きパーティションのチェーン:各パーティションの先頭と末尾にそれぞれ前方ポインタと後方ポインタが設定されます。先頭部分には、パーティションのサイズや空きパーティションの開始アドレスなどの情報も記録できます
知らせ:
- 多くの空きパーティションが割り当て要件を満たしている場合、特定の動的パーティション割り当てアルゴリズムに従って、空きパーティション テーブル (空きパーティション チェーン) からパーティションが選択され、ジョブに割り当てられます。
- パーティションの割り当てと再利用では、空きパーティション テーブルまたは空きパーティション チェーンのエントリを論理的に変更する必要があります (増加または減少またはマージ)。
内部フラグメンテーションと外部フラグメンテーション
- 内部フラグメンテーション:プロセスに割り当てられたメモリ領域のうち、使用されていない部分がある場合を内部フラグメンテーションと呼びます(空きパーティションを使用できます)。
- 外部断片化:使用するには小さすぎるメモリ内のいくつかの空きパーティションを指します (空きパーティションは使用できません。ここでは、多くの空きパーティションを使用できないが、すべての空きパーティションを合計してプロセスにメモリ領域を割り当てる場合、コンパクト テクノロジは外部フラグメンテーションの問題を解決するために使用されます)
注:コンパクト テクノロジは、各プロセスの位置をずらし、それらをすべてまとめて、より大きな連続した空き領域を移動することです; このようにして、プロセスのメモリ割り当て要件を満たすことができます; ただし、圧縮後、開始各プロセスのアドレスが変更される必要があります。
動的パーティション割り当てアルゴリズム
序文:動的パーティション割り当て方式では、需要を満たすことができる多くの空きパーティションがある場合、どのパーティションを選択して割り当てるべきですか?
離散パーティション割り当て方法
序文:連続割り当て方式では、プロセスが連続したメモリ領域全体を占有する必要があるため、プロセスを隣接していない多くのパーティションに分散して、メモリをより完全に使用できるようにすることが可能かどうかを考える必要があります。圧縮などの高価な操作の場合、この考えに基づいて、不連続な割り当て方法 (離散割り当て方法) が生成されます。
離散割り当て方式:一部の離散メモリ空間をユーザー プロセスに割り当てることができます
ケース:あるシステムが次のように固定分割割り当て方式を採用しているとします. このとき, 23MB のサイズのプロセス A を割り当てる必要があります. 連続分割方式で割り当てることは明らかに不適切です. したがって, 不連続な割り当て方法を使用できます
解決策:プロセスが複数の領域を占有できるようにしてから、プロセスを 10MB + 10MB + 3MB に分割し、これら 3 つをパーティションに入れることができます (これらのパーティションは不連続にすることができます)。
離散パーティション割り当て方法の内容
- 基本的なページング ストレージ管理
- 基本的なセグメント化されたストレージ管理
- セグメント化されたページング ストレージ管理
基本的なページング ストレージ管理
アイデア:メモリを均等な小さなパーティションに分割し、パーティション サイズに応じてプロセスを小さな部分に分割します。
基本的な考え方
- ページ フレーム:メモリ パーティションを同じサイズのパーティションに分割します。各パーティションはページ フレーム、またはページ フレーム、メモリ ブロック、物理ブロックです。
- ページ フレーム番号:各ページ フレームには番号があります。つまり、ページ フレーム番号 (ページ フレーム番号、メモリ ブロック番号、物理ブロック番号) ページ フレーム番号は 0 から始まります。
- ページ:プロセスのアドレス空間を、ページ、ページと呼ばれるページフレームのサイズに等しい領域に分割します
- ページ番号:各ページにも番号、つまりページ番号があり、ページ番号も0から始まります
知らせ:
- プロセスのページはページ フレームほど大きくない場合があるため、ページ フレームを大きくしすぎることはできません。
- オペレーティング システムは、ページ フレーム単位で各プロセスにメモリ空間を割り当て、プロセスの各ページはページ フレームに配置されます。つまり、プロセスのページは、メモリのページ フレームと 1 対 1 で対応します。
- 各ページは連続して格納する必要も、順番に並べる必要もありません。また、隣接しないページ フレームに配置することもできます。
アドレス変換
序文:
- 動的再配置のアイデア:各モジュールの開始位置を記録する必要があります。各モジュールは連続して格納されるため、モジュールの開始位置 + 実際にアクセスしたいメモリ ユニットの論理アドレスを最終的な物理アドレスに使用できます。
- この論理アドレスは、メモリ内のモジュールの開始アドレス + 開始位置に対するターゲット メモリ ユニットのオフセットとして理解できます。
ページング ストレージ アドレス変換のアイデア:ページは個別に格納されますが、各ページを連続したストレージ モジュールと見なすことができますが、ページ内のこれらのメモリ ユニットは実際には連続しています。したがって、モジュールがわかっている場合、メモリ内の開始アドレスは何ですか、およびページの開始アドレスに対するこのモジュールのオフセットは、この論理アドレスに対応する実際の物理アドレスを簡単に計算できます
特定の属性の計算
- ページ番号 = 論理アドレス / ページ長 (除算の整数部分を取る)
- ページ内オフセット = 論理アドレス % ページ長 (除算の余りを取る)
- メモリ内のページの開始位置:オペレーティング システムは、プロセスの各ページの開始位置を記録するために、ある種のデータ構造を使用する必要があります。
注:ページ番号、ページ オフセット、およびページ サイズの計算を容易にするために、コンピュータは通常、2 の整数倍である必要があります。
注:最初の 20 個の赤い文字の 10 進数のペアをページ番号 (ページ数 + ページ オフセット) として計算します。
結論:各ページのサイズが 2^kB で、論理アドレスが 2 進数で表現されている場合、最後の k ビットはページ内のオフセットであり、残りはページ番号です。
ページングメモリ管理のための論理アドレス構造
知らせ:
- ページ内のオフセットを表す K ビットがある場合、システム内のページのサイズは 2^k メモリ単位であることを意味します。
- ページ番号を表す M ビットがある場合、このオペレーティング システムでは、プロセスが最大 2^m ページを持つことが許可されていることを意味します。
ページテーブル
序文:メモリ内の各ページの開始位置を知るために、オペレーティング システムはプロセスごとにページ テーブルを作成する必要があります。
知らせ:
- プロセスはページ テーブルに対応し、プロセスの各ページはページ テーブル エントリに対応します。
- 各ページ テーブル エントリは、ページ番号とブロック番号で構成されます
- ページ テーブルには、プロセス ページと実際のメモリ ブロック (ページ フレーム) の対応が記録されます。
- 各ページ テーブル エントリの長さは同じで、ページ番号は暗黙的です (ページ テーブル ストレージの開始アドレスとページ テーブル エントリの長さを知るだけで、各ページの格納場所を見つけることができます)。ページテーブルエントリに対応する番号)
ベースアドレス変換メカニズム
序文:基本的なアドレス変換メカニズムは, プロセスのページテーブルの助けを借りて, 論理アドレスを物理アドレスに変換する. 通常, ページテーブルレジスタ (PTR) はシステムに設定され, ページテーブルの開始アドレス F をメモリに格納し,ページテーブルの長さM。プロセスが実行されていないときは、ページ テーブルの開始アドレスとページ テーブル長が PCB に配置され、プロセスがスケジュールされると、オペレーティング システム カーネルはそれらをページ テーブル レジスタに配置します。
ケース:ページ サイズを L とすると、論理アドレス A から物理アドレス E への変換プロセスは次のようになります。
具体的なプロセス
- 論理アドレス(ページ長)からページ番号とページ内オフセットを算出
- ページ番号が範囲外かどうかを確認する
- ページ番号が正当な場合、ページ番号とページテーブルの先頭アドレスに基づいて、ページ番号に対応するページテーブルエントリが計算され、メモリブロック番号が取得されます。
- メモリ ブロック番号とページ オフセットを使用して、最終的な物理アドレスを計算します。
- アクセス先のメモリ位置
知らせ:
- プロセスをスケジュールする必要がある場合 (プロセッサ上で実行する必要がある場合)、プロセスの切り替えに関連するカーネル プログラムは、プロセスの実行環境を復元します. プロセス環境に関連する情報は、もともと PCB に格納されており、その後、カーネルプログラムは、この情報を対応するレジスターに入れます。
- 実際のアプリケーションでは、通常、ページ フレームは整数個のページ テーブル エントリに適合します。
- ページ テーブル エントリの検索を容易にするために、ページ テーブルは通常、連続したメモリ ブロックに配置されます。
高速テーブルによるアドレス変換メカニズム
局所性の原則
- 時間局所性:プログラム内の特定の命令を実行すると、その命令はすぐに再実行される可能性が高く、特定のデータにアクセスすると、そのデータはすぐに再アクセスされる可能性が高くなります (大量のループがプログラム )
- 空間的局所性:プログラムが特定のストレージ ユニットにアクセスすると、近くのストレージ ユニットがすぐにアクセスされる可能性が非常に高くなります (多くのデータがメモリに継続的に格納されるため)。
基本的なアドレス変換メカニズムでは、論理アドレスにアクセスするたびに、メモリ内のページ テーブルを照会する必要があります。局所性の原則により、同じページ テーブル エントリが連続して複数回見つかる場合があります。この場合、この機能を使用して、ページ テーブルへのアクセス数を減らすことができます。
ファストウォッチとは
意味:連想レジスタとも呼ばれる高速テーブルは、メモリのアクセス速度よりもはるかに高速なキャッシュ メモリの一種で、現在アクセスされている複数のページ テーブル エントリを格納して、アドレス変換のプロセスを高速化するために使用されます。これに対応して、メモリ内のページ テーブルはしばしばスロー テーブルと呼ばれます。
高速テーブルにアクセスするためのアドレス変換プロセス
- CPU が論理アドレスを提供し、ページ番号がハードウェアによって計算され、ページのオフセットが高速テーブルのすべてのページ番号と比較されます。
- 一致するページ番号が見つかった場合は、アクセスするページ テーブル エントリが高速テーブルにコピーを持っていることを意味し、そのページに対応するメモリ ブロック番号を直接取り出し、メモリ ブロック番号とオフセットを連結します。ページを使用して物理アドレスを形成し、最後に物理アドレスに対応するメモリ ユニットにアクセスします (したがって、高速テーブルがヒットした場合、特定の論理アドレスにアクセスするために必要なメモリ アクセスは 1 回だけです)。
- 一致するページ番号が見つからない場合は、メモリ内のページ テーブルにアクセスして、対応するページ テーブル エントリを見つける必要があります (同時に、ページ テーブル エントリを高速テーブルに格納して、後で再度アクセスできるようにします。高速テーブルがいっぱいの場合、特定のアルゴリズムに従って古いページ テーブル エントリを置き換える必要があります)、ページに格納されているメモリ ブロック番号を取得し、メモリ ブロック番号とページ内のオフセットを接合して物理アドレスを形成します。最後に、物理アドレスに対応するメモリユニットにアクセスします(したがって、高速テーブルがミスした場合、論理アドレスにアクセスするには2回のメモリアクセスが必要です)
ケース分析
プロセスの最初の 2 つの命令が(ページ番号、ページ内のオフセット) - (0, 0) (0, 4) に格納され、CPU がこれらの 2 つの命令を順番に実行するとします。
理解:
- 最初の命令を実行します: PC に (0, 0) を格納すると、この論理アドレスはページ番号とページ オフセットに分割され、ページ番号の有効性がチェックされ、ページ番号の正当性が確認された後、次のようになります。ページ番号を使用して高速テーブルにクエリを実行し、このページ番号に対応するページ テーブル エントリが高速テーブルに存在するかどうかを確認し (高速テーブルは最初は空です)、クエリ ブロック テーブル ミス; テーブルのページ テーブル エントリ(システムは、低速テーブルのページ テーブル エントリを照会した後、ページ テーブル エントリを高速テーブルに自動的にコピーします)、メモリ番号を取得し、メモリ番号とページ内のオフセットに従って物理アドレスを取得します。アクセス先のメモリ位置
- 2 番目の命令を実行します: PC に (0, 4) を格納すると、この論理アドレスはページ番号とページ オフセットに分割され、ページ番号の正当性がチェックされます。ページ番号の正当性を確認した後、ページ番号を使用して高速テーブルにクエリを実行し、高速テーブルにこのページ番号に対応するページ テーブル エントリがあるかどうかを確認します。確認したいのは以前にコピーされたページ 0 であるため、メモリを直接取得できます。高速テーブルからブロック番号; メモリ番号とページ内オフセットから物理アドレスを取得し、目的のメモリユニットにアクセス
高速テーブルと低速テーブルのまとめ
2 レベルのページ テーブル
単一レベルのページ テーブルに関する問題
- 質問 1:ページ テーブルは連続して保存する必要があるため、ページ テーブルが大きい場合は、連続するページ フレームを多く占有する必要があります。
- 質問 2:プロセスが特定の特定のページに一定期間アクセスするだけでよいため、ページ テーブル全体をメモリに保持する必要はありません。
問題1を解く
長いページ テーブルは、各メモリ ブロックが 1 つのグループに収まるようにグループ化できます。また、個別に割り当てられたページ テーブル用に別のページ テーブルが作成されます。これは、ページ ディレクトリ テーブル、外部ページ テーブル、または最上位ページ テーブルと呼ばれます。
特定のケース
32 ビット論理アドレス空間、ページ テーブル エントリ サイズは 4B、ページ サイズは 4KB であるため、ページ アドレスは 12 ビットを占有し、各ページは 4K/4=1K=1024 ページ テーブル エントリを格納できると計算できます。プロセスがあります 2^20 ページがあり、グループ化してメモリ ブロックに分割する必要があるページが多すぎます
簡単な理解:
- CPU は論理アドレスを与え、論理アドレスを第 1 レベルのページ番号、第 2 レベルのページ番号、およびページ内のオフセットに分割します。
- PCB からページ ディレクトリ テーブルの初期アドレスを読み取り、第 1 レベルのページ番号と第 2 レベルのページ テーブルに対応するメモリ ブロック番号から第 2 レベルのページ テーブルを見つけます。
- 第 2 レベルのページ番号から第 2 レベルのページ テーブルのページ テーブル エントリを見つけて、メモリ ユニットが配置されているメモリ ブロック番号を取得します。
- メモリユニットの物理アドレスは、メモリブロック番号とページ内のオフセットによって取得されます
- メモリアクセス物理アドレスを介してターゲットメモリユニットにアクセスします
問題 2 を解く
ページにアクセスする必要がある場合にのみ、ページをメモリに転送できます (仮想メモリ技術) ページ テーブル エントリにフラグ ビットを追加して、ページがメモリに転送されたかどうかを示すことができます。
注:アクセスしたいページがメモリ内にない場合、ページ フォルト割り込み (内部割り込み) が生成され、ページが外部ストレージからメモリに転送されます。
基本的なセグメント化されたストレージ管理
段落の意味
序文:プロセスのアドレス空間は、プログラム自体の論理的な関係に従っていくつかのセグメントに分割され、各セグメントにはセグメント名があります (低水準言語では、プログラムはセグメント名を使用してプログラムします)。 0からプログラミングを開始
メモリ割り当てルール:セグメント単位で割り当て、各セグメントはメモリ内の連続したスペースを占有しますが、セグメントは隣接していない可能性があります
注:各セグメントは論理機能モジュールに従って分割され、セグメント名もユーザーによって定義されるため、ユーザーのプログラミングはより便利になり、可読性が高くなります。
セグメント化されたシステムの論理アドレス構造
知らせ:
- セグメンテーション方式の論理アドレス構造は、セグメント番号(セグメント名)とセグメント内アドレス(セグメント内オフセット)で構成されます。
- セグメント番号の桁数によって、各プロセスをいくつのセグメントに分割できるかが決まります
- セグメント内のアドレスのビット数によって、各セグメントの最大長が決まります
セグメントテーブル
意味:プログラムは複数のセグメントに分割され、各セグメントは個別にメモリにロードされます. プログラムが正常に動作するためには、物理メモリから各セグメントの格納場所を見つけることができる必要があります. このために、セグメント テーブルと呼ばれるセグメント マッピング テーブルをプロセスごとに確立する必要があります。
知らせ:
- セグメント テーブルは、メモリ内の各論理セグメントの格納場所を記録します。
- 各セグメントは、メモリ内のセグメントの開始位置 (ベース アドレスとも呼ばれる) とセグメント長を記録するセグメント テーブル エントリに対応します。
- 各セグメント テーブル エントリの長さは同じです (通常、各セグメント テーブル エントリの長さは 6B です)。
- セグメント テーブルのセグメント番号は、セグメント テーブルの開始アドレスとセグメント テーブル エントリの長さから推測できるため、暗黙的です。
セグメントメモリのアドレス変換
はじめに:プロセスをスケジュールする必要がある場合 (プロセッサ上で実行する必要がある場合)、プロセスの切り替えに関連するカーネル プログラムは、プロセスの実行環境を復元します. プロセス環境に関連する情報は、もともと PCB に格納されています。カーネルプログラムは、この情報をレジスタの対応するものに入れます
変換プロセス:
- システムは、論理アドレスに従って、セグメント番号 S とセグメント内のアドレス W を取得します。
- セグメント番号が範囲外かどうかを判断します。S>=M の場合、範囲外割り込みが生成されます。それ以外の場合は、実行を継続します。
- セグメント番号とセグメントテーブルの開始アドレスに従って、対応するセグメントテーブルエントリを検索し、セグメントテーブルエントリの内容を読み取ります
- セグメント内のアドレスがセグメント長を超えていないか確認してください。W>=C の場合、範囲外割り込みが生成されます。それ以外の場合は、実行を続行します。
- セグメントベースアドレスB+セグメントアドレスWにより、物理アドレスを取得し、メモリユニットにアクセス
注:セグメント番号は 0 から始まり、セグメント テーブルの長さは少なくとも 1 です。
セグメンテーションとページング管理
- ページは情報の物理的な単位であり、ページングの主な目的は、個別の割り当てを実現し、メモリ使用率を向上させることです。ページングはシステム管理にのみ必要であり、完全にシステムの動作であり、ユーザーには表示されません
- セグメントは情報の論理単位であり、セグメント化の主な目的はユーザーのニーズを満たすことです。セグメントには、通常、論理モジュールに属する情報のグループが含まれています。セグメントはユーザーに表示され、ユーザーはプログラミング時にセグメント名を表示する必要があります。
- ページのサイズは固定され、システムによって決定されます。セグメントの長さは固定されておらず、ユーザーが作成したプログラムに依存します。
- ページ化されたユーザー プロセスのアドレス空間は 1 次元であり、プログラマーはアドレスを表すニーモニックを指定するだけで済みます。
- セグメント化されたユーザー プロセスのアドレス空間は 2 次元であるため、プログラマーがアドレスを識別するときは、セグメント名とセグメント内のアドレスの両方を指定する必要があります。
- セグメンテーションは、ページングよりも情報の共有と保護が容易です。
- ページ化されたアクセス論理アドレスとセグメント化されたアクセス論理アドレスの両方で、2 つのメモリ フェッチが必要です。
- セグメンテーションはページングに似ています. セグメンテーションシステムに高速テーブルメカニズムを導入して、最近アクセスされたセグメントテーブルエントリを高速テーブルに配置することもできます.これにより、アクセスが1つ節約され、アドレス変換が高速化されます.
セグメント共有
知らせ:
- 共有を実現するには、各プロセスのセグメント テーブル エントリが同じセグメントを指すようにするだけで済みます。
- 変更できないコードは、純粋なコードまたは再入可能コード (重要なリソースではない) と呼ばれ、そのようなコードは共有できます。変更可能なコードは共有できません (たとえば、コード セグメントには多くの変数があり、さまざまなプロセスによる同時同時アクセスはデータの不整合を引き起こす可能性があります)。
ページシェア
序文: ページングよりもセグメンテーションの方が情報の共有と保護が容易
注:ここのページは論理モジュールに従って分割されていないため、共有が困難です (情報保護メカニズムは同じです。オレンジ色は他のプロセスからのアクセスを許可しません。緑色は他のプロセスからのアクセスを許可します)。
セグメントページ管理
ページングとセグメンテーションの長所と短所
セグメントページ管理
要約:
- 論理モジュールに従ってプロセスをセグメントに分割し、各セグメントをページングします
- 次に、メモリ空間を同じサイズのメモリ ブロック/ページ フレーム/ページ フレーム/物理ブロックに分割します。
- プロセスの各ページを各メモリ ブロックに個別にロードする
セグメントページシステムの論理アドレス構造
知らせ:
- セグメントページ管理論理アドレス構造は、セグメント番号、ページ番号、ページアドレス (ページオフセット) で構成されます。
- セグメント番号の桁数によって、各プロセスを最大でいくつのセグメントに分割できるかが決まります
- ページ番号の桁数によって、セグメントあたりの最大ページ数が決まります
- ページ内のオフセットによってページ サイズが決まります。メモリ ブロックのサイズはどれくらいですか
段落固有のプロセス
要約:
- プロセッサは、プロセス上で実行する前に、PCB からセグメント テーブルの開始アドレスとセグメント テーブルの長さの情報を読み取り、それらをセグメント テーブル レジスタに格納します。
- 論理アドレスからセグメント番号、ページ番号、ページオフセットを取得
- セグメント番号が範囲外かどうかを判断します。S>=M の場合、範囲外割り込みが生成されます。それ以外の場合は、実行を続行します。
- セグメント番号が有効になると、セグメント番号とセグメントテーブルの開始アドレスに従って、セグメント番号に対応するセグメントテーブルエントリが取得されます。
- ページ番号が範囲外かどうか。ページ番号 >= ページ テーブルの長さの場合、範囲外割り込みが発生し、それ以外の場合は実行を続行します。
- ページ番号が有効になると、ページ番号に基づいて特定のメモリ ブロック番号が取得されます。
- メモリブロック番号とページオフセットに従って、対応する物理アドレスを取得してメモリユニットにアクセスします
注:セグメント ページ タイプは 3 回アクセスされます. もちろん、高速テーブル メカニズムも導入できます. セグメント番号とページ番号は、ブロック テーブルをクエリするためのキーワードとして使用されます. 高速テーブルがヒットした場合、必要なメモリ アクセスは 1 回だけです。
仮想メモリ
従来のストレージ管理
従来のストレージ管理方法の特徴
- ワンショット:ジョブは、実行を開始する前に一度にメモリにロードする必要があります。これにより、次の 2 つの問題が発生します: 1. ジョブが非常に大きい場合、ジョブをメモリに完全にロードできず、大きなジョブの実行に失敗する; 2. 多数のジョブを実行する必要がある場合、少数のジョブのみを実行する必要があるメモリがすべてのジョブに対応できないため、のジョブを実行でき、マルチチャネル処理が発生します。プログラムの同時実行性が低下します。
- 永続性:ジョブがメモリにロードされると、ジョブの実行が終了するまでメモリに残ります。実際、この期間中、正常に実行するためにアクセスする必要があるのはジョブのデータのごく一部のみであり、その結果、大量の一時的に使用されていないデータがメモリに残り、貴重なメモリ リソースが浪費されます。
局所性の原則の適用
キャッシュ技術の考え方:近い将来頻繁にアクセスされるデータを高速なメモリに置き、一時的に使用されないデータを低速なメモリに置きます。
仮想メモリの定義
- 局所性の原則に基づき、プログラムをメモリにロードする際に、プログラムのすぐに使用する部分をメモリにロードし、一時的に使用しない部分を外部メモリに残すことができます。プログラムが実行を開始できるように
- プログラムの実行中、アクセスされた情報がメモリに存在しない場合、オペレーティングシステムは必要な情報を外部ストレージからメモリに転送し、その後プログラムを実行し続けます。
- メモリスペースが十分でない場合、オペレーティングシステムは、メモリ内で一時的に使用されていない情報を外部メモリからスワップアウトする責任があります
- オペレーティング システムの管理下では、仮想メモリである実際のメモリよりもはるかに大きなメモリがあるように見えます。
仮想メモリの特徴
- 多重度:ジョブの実行中にすべてのジョブを一度にメモリにロードするのではなく、複数回に分けてメモリにロードすることができます
- スワップ可能性:ジョブの実行中に常にメモリに常駐する必要はありませんが、ジョブの実行中にジョブをスワップインおよびスワップアウトできます。
- 仮想性:メモリ容量を論理的に拡張し、ユーザーに表示されるメモリ容量が実際の容量よりもはるかに大きくなるようにします
仮想メモリ技術の実装方法
序文:仮想メモリ技術により、ジョブを複数回メモリにロードできます。連続配分方式を採用すると、実装が不便になります。したがって、仮想メモリ技術の実装は、離散割り当てのメモリ管理方法に基づく必要があります。
仮想メモリ技術と従来の個別割り当ての違い
- デマンド ページング/セグメント:プログラムの実行中に、アクセスされた情報がメモリにない場合、オペレーティング システムは必要な情報を外部ストレージからメモリに転送し、その後プログラムを実行し続けます。
- ページ/セグメントの置換:メモリ空間が不十分な場合、オペレーティング システムは、メモリ内で一時的に使用されていない情報を外部メモリからスワップ アウトする役割を果たします。
リクエストのページネーション管理方法
ページテーブルの仕組み
序文:
- 基本的なページング管理と比較して、リクエスト ページング管理では、リクエスト ページングを実装するために、オペレーティング システムは、各ページがメモリに転送されたかどうかを知る必要があり、転送されていない場合は、ページが格納されている場所も知る必要があります。外部メモリに
- メモリ空間が不十分な場合、ページ置換を実装するために、オペレーティング システムは特定のインジケータを使用してどのページをスワップ アウトするかを決定する必要があります。一部のページが変更されていない場合、それらを外部メモリに書き戻す時間を無駄にする必要はありません。一部のページが変更された場合、外部ストレージ内の古いデータを上書きする必要があるため、オペレーティング システムは各ページが変更されたかどうかも記録する必要があります。
ページング ストレージ管理ページ テーブルの新しいフィールドを要求する
- ステータスビット:メモリに転送されたかどうか (0: いいえ、1: 転送されました)
- アクセス フィールド:置換アルゴリズムがページを交換することを選択した場合の参照用に、最近の訪問回数を記録するか、最後の訪問の時間を記録できます (訪問回数の少ないページを交換することを選択できます)。
- 変更ビット:メモリにロードされた後にページが変更されたかどうか
- 外部メモリ アドレス:ページが外部メモリに格納されている場所
ページフォルト割り込みメカニズム
- デマンド ページング システムでは、アクセスされたページがメモリ内にない場合は常にページ フォールト割り込みが生成され、オペレーティング システムのページ フォールト割り込みハンドラーによって割り込みが処理されます。
- このとき、ページ欠落プロセスはブロックされてブロッキング キューに入れられ、ページングが完了すると、ウェイクアップされてレディ キューに戻されます。
- メモリに空きブロックがある場合は、プロセスに空きブロックを割り当て、不足しているページをこのブロックにロードし、ページ テーブル内の対応するページ テーブル エントリを変更します。
- メモリに空きブロックがない場合は、ページ置換アルゴリズムによって削除するページが選択されます. メモリ期間中にページが変更された場合は、外部メモリに書き戻す必要があり、変更されていないページは削除されません.外部メモリに書き戻す必要があります。
知らせ:
- ページフォルト割り込みは、現在実行中の命令がアクセスしたいターゲットページがメモリに転送されていないために発生するため、内部割り込みです。
- 命令の実行中に、複数のページ フォールト割り込みが発生する場合がある
要求ページング アドレス変換メカニズム
プロセス:
- プロセッサはプロセス上で実行する前に、PCB からページ テーブルの開始アドレスとページ テーブルの長さの情報を読み取り、それらをセグメント テーブル レジスタに格納します。
- 論理アドレスからページ番号とページオフセットを取得する
- ページ番号の正当性をチェックして、ページ番号が範囲外であるかどうかを確認します (ページ テーブルの長さと比較して)
- ページ番号が範囲外でない場合は、高速テーブルにページ番号に対応するページ テーブル エントリがあるかどうかをクエリし、高速テーブルがヒットした場合は、対応する物理アドレスを直接取得できます。
- ページテーブルの開始アドレスとページ番号に応じて、対応するページテーブルエントリが取得されます. このとき、ステータスビットをチェックして、ページがメモリに既に存在するかどうかを確認します. メモリに存在しない場合は、ページフォルトの終了メカニズムはページ フォールト割り込み信号を生成します. その後、オペレーティング システムのページ フォールト割り込みハンドラーによって処理されます (ページング、ページ置換などを含む). ページが転送された後、ページ テーブル エントリのデータ変更する必要があります。高速テーブルがいっぱいの場合は、特定のアルゴリズムに従って古いページ テーブル エントリを置き換える必要があります)
- ページテーブルエントリからメモリブロック番号とページ内オフセットを取り出し、メモリブロック番号とページ内オフセットを連結して物理アドレスを形成し、最後に物理アドレスに対応するメモリユニットにアクセスします。
注:要求ページング管理方法では、特定のページに対応するページ テーブル エントリが高速テーブルにある場合、そのページがメモリ内にある必要があることを意味し、対応するページ テーブル エントリも削除する必要があります。
ページ置換アルゴリズム
序文:プログラムの実行中、アクセスされた情報がメモリにない場合、オペレーティング システムは必要な情報を外部ストレージからメモリに転送し、プログラムを実行します; メモリ スペースが十分でない場合, オペレーティングシステムはメモリを一時的に使用する責任があります. 利用できない情報は外部ストレージからスワップアウトされます. ページ置換アルゴリズムは実際に外部ストレージからスワップアウトするページを選択するために使用されます.
注:ページのスワップ インとスワップ アウトにはディスク IO が必要であり、これには大きなオーバーヘッドがかかります。そのため、優れたページ置換アルゴリズムではページ フォールト率を低く抑える必要があります。
最良の順列アルゴリズム
考え:ページを削除することを選択するたびに、ページ フォールト率を最小限に抑えるために、そのページは将来使用されないか、長期間アクセスされないページになります。
注:最適な置換アルゴリズムは、ページ フォールト率が最も低いことを保証できますが、実際には、プロセスが実行されたときにのみ、次にどのページがアクセスされるかがわかります。オペレーティング システムはページのアクセス順序を事前に予測できないため、最適な置換アルゴリズムを実現できません。
FIFO順列アルゴリズム
アイデア:毎回選択されるページは、最初にメモリに入るページです
実装方法:メモリに転送されたページを、転送された順序に従ってキューに配置し、ページをスワップアウトする必要がある場合は、キューの先頭にあるページを選択します。キューの最大長は、システムがプロセスに割り当てるメモリ ブロックの数によって異なります。
Belady の異常:プロセスに割り当てられた物理ブロックの数が増加すると、ページ フォールトの数は減少せず、代わりに増加します (FIFO アルゴリズムのみがこの異常を生成します)。
最も使用頻度の低い順列アルゴリズム
思考:毎回削除されるページは、最近最も長く使用されていないページです
実装方法:各ページに対応するページ テーブル エントリで、アクセス フィールドを使用して、ページが最後にアクセスされてから経過した時間 t を記録します; ページを削除する必要がある場合は、t 値が最大の既存のページを選択します。最近使用されていないページ
注:このアルゴリズムの実装には、特別なハードウェア サポートが必要です. アルゴリズムは高性能ですが、実装が難しく、オーバーヘッドが大きくなります.
時計交換アルゴリズム
序文: 最適な順列アルゴリズムは最高のパフォーマンスを発揮しますが、実現できません; 先入れ先出し順列アルゴリズムは実装が簡単ですが、アルゴリズムのパフォーマンスは劣っています; 使用されていない順列アルゴリズムのパフォーマンス最長時間は良好であり、OPT アルゴリズムのパフォーマンスに最も近いですが、ハードウェア サポートを実装するには特別な専門知識が必要であり、アルゴリズムのオーバーヘッドが高くなります。
クロック置換アルゴリズム:パフォーマンスとオーバーヘッドのバランスがとれたアルゴリズム。クロック アルゴリズムまたは最近使用されていないアルゴリズムとも呼ばれます。
簡単なクロック アルゴリズムの実装:各ページにアクセス ビットを設定し、リンク ポインターを介してメモリ内のページを循環キューにリンクします。ページがアクセスされると、そのアクセス ビットは 1 になります。ページを廃止する必要がある場合、ページのアクセス ビットのみをチェックする必要があります。0 の場合は、ページをスワップ アウトすることを選択します。1 の場合は、0 に設定し、今のところスワップ アウトせず、次のページのチェックを続けます。最初のスキャン ラウンドのすべてのページが 1 の場合、これらのページのアクセス ビットが順番に 0 に設定された後、2 回目のスキャンが実行されます (2 回目のスキャンでは、アクセス ビットが 0 のページが存在する必要があるため、単純なクロック アルゴリズムは削除されたページを選択します)。最大で 2 回のスキャンが行われます)
改善された時計交換アルゴリズム
序文:
- 単純なクロック置換アルゴリズムでは、ページが最近アクセスされたかどうかのみが考慮されます。実際、削除されたページが変更されていない場合、外部ストレージに書き戻すために IO 操作を実行する必要はありません。
- したがって、オペレーティング システムは、ページがアクセスされたかどうかを考慮するだけでなく、ページが変更されたかどうかも考慮する必要があります。他の条件が同じ場合、変更されていないページが最初に削除され、IO 操作が回避されます。これが改善されたクロック置換アルゴリズムのアイデアです。
- 変更ビット 0 は、ページが変更されていないことを意味し、変更ビット 1 は、ページが変更されたことを意味します。
- 説明の便宜上、各ページのページ ステータスは、(アクセス ビット、変更ビット) の行形式で表されます。たとえば、(1, 1) は、ページが最近アクセスされ、変更されたことを意味します。
アルゴリズム ルール:置き換えられる可能性のあるすべてのページを循環キューに配置する
ページ置換アルゴリズムの概要
ページ割り当て戦略
常駐セット
常駐セット:ページングストレージ管理でプロセスに割り当てられた全物理ブロックの回収を依頼
知らせ:
- 仮想ストレージ技術を使用するシステムでは、メモリ使用率を論理的に改善するために、常駐セットのサイズは一般にプロセスの合計サイズよりも小さくなります。
- 常駐セットが小さすぎると、ページ フォールトが頻繁に発生し、システムはページ フォールトの処理に多くの時間を費やし、プロセスの進行に実際に使用される時間はほとんどなくなります。
- 常駐セットが大きすぎると、マルチプログラミングの同時実行性が低下し、リソース使用率が低下します。したがって、適切な常駐セット サイズを選択する必要があります。
ページ割り当て
- 固定割り当て:オペレーティング システムは、プロセスの実行中に変更されない固定数の物理ブロックを各プロセスに割り当てます。つまり、常駐セットのサイズは不変です
- 可変割り当て:最初に各プロセスに一定数の物理ブロックを割り当て、プロセスの実行中に状況に応じて適切に増減できます。可変常駐セット
交換戦略
- 部分置換:ページ フォールトが発生した場合、プロセスの物理ブロックのみを選択して置換できます。
- グローバル置換:オペレーティング システムによって予約された空き物理ブロックをページ フォールト プロセスに割り当てるか、他のプロセスによって保持されている物理ブロックを外部メモリに置き換えてから、ページ フォールト プロセスに割り当てることができます。
割り当てスワップ戦略
ページをロードするタイミング
- 事前ページング戦略:局所性の原則によれば、一度に 1 ページずつ読み込むよりも、複数の隣接するページを一度に読み込む方が効率的である場合があります。ただし、事前に転送されたページのほとんどがアクセスされていない場合は、非効率的です。そのため、近い将来にアクセスされる可能性のあるページを予測して事前にメモリに転送することは可能ですが、現状の予測成功率は50%程度にとどまっています。したがって、この戦略は主にプロセスの最初の呼び出しで使用され、プログラマーはどの部分を最初に呼び出す必要があるかを指摘します (実行する前に呼び出します)。
- デマンド ページング戦略:プロセスが操作中にページ フォールトを検出すると、欠落しているページをメモリに転送します。この戦略で転送されたページは確実にアクセスされますが、一度に 1 ページしか転送できないため、ページングごとにディスク IO 操作が必要になるため、IO オーバーヘッドが大きくなります (実行時にロードされます)。
ページの読み込み元
システムには十分なスワップ領域があります
ページは、メモリとスワップ領域の間で送受信されます。これにより、ページの送受信が迅速に行われます。プロセスを実行する前に、プロセス関連のデータをファイル領域からスワップ領域にコピーする必要があります
システムに十分なスワップ領域スペースがありません
変更されないすべてのデータは、ファイル領域から直接転送されます. これらのページは変更されないため、スワップアウト時にディスクに書き戻す必要はなく、必要なときにファイル領域から転送できます.次の時間。変更される可能性のある部分については、スワップアウト時にディスクスワップ領域に書き戻し、次に必要になったときにスワップ領域から転送する必要があります
UNIX 方式
実行前のプロセスに関連するすべてのデータはファイル領域に配置されるため、未使用のページはファイル領域から転送できます。使用済みページをスワップアウトする必要がある場合は、スワップ領域に書き戻し、次に必要になったときにスワップ領域から転送します
ジッター(こぶ)現象
意味: The page just swapped out will be swapped into memory immediately, and the page just swapped in will be swapped out of external memory immediately. この頻繁なページング動作は、ジッターまたはスラッシングと呼ばれます。
知らせ:
- ジッターの主な理由は、プロセスによって頻繁にアクセスされるページの数が、使用可能な物理ブロックの数よりも多い (プロセスに十分な物理ブロックが割り当てられていない) ことです。
- プロセスに割り当てられた物理ブロックが少なすぎると、プロセスが不安定になります。プロセスに割り当てられた物理ブロックが多すぎると、システム全体の同時実行性が低下し、特定のリソースの使用率が低下します。
- 各プロセスにいくつの物理ブロックが割り当てられているかを調べるために、デニングはプロセス ワーキング セットの概念を提案しました。
ワーキング セット:特定の時間間隔中にプロセスが実際にアクセスするページのコレクション
理解:ワーキング セットのサイズは、ウィンドウのサイズよりも小さい場合があります. 実際のアプリケーションでは、オペレーティング システムは、プロセスのワーキング セットのサイズをカウントし、そのサイズに応じてプロセスにいくつかのメモリ ブロックを割り当てることができます。ワーキングセット。たとえば、ウィンドウ サイズが 5 の場合、一定期間の監視の後、プロセスの最大ワーキング セットが 3 であることがわかります。これは、ワーキング セットに適切な制限があり、3 つを超えるメモリ ブロックを割り当てることができることを意味します。プロセスの要件を満たすためにプロセスに 操作に必要です。一般に、レジデント セットのサイズはワーキング セットのサイズよりも小さくすることはできません。そうしないと、プロセスの実行中に頻繁にページ フォールトが発生します。
知らせ:
- 一般的に言えば、常駐セットのサイズはワーキング セットのサイズよりも小さくすることはできません。そうしないと、プロセスの実行中に頻繁にページが失われます。
- 局所性の原則に基づいて、プロセスが一定期間内にアクセスしたページと、近い将来アクセスされるページに関連性があることがわかります.したがって、セットに基づいてページ置換アルゴリズムを設計できます.プロセスによって最近アクセスされたページ (ワーキング セット) の数 - 除外するワーキング セットに含まれていないページを選択します