第 3 章 メモリ管理

1. 記憶の基礎知識

1691417032694

メモリにはデータを保存できます。プログラムを実行する前に、CPU によって処理される前にプログラムをメモリに配置する必要があります。これにより、CPU とハードディスクの間の速度の競合が緩和されます。

1691417237817

命令内のアドレス パラメータは、変数 x の実際の格納アドレス (物理アドレス) を直接指定します。

1. 絶対マウントする

絶対ロード: コンパイル時に、プログラムがメモリ内のどこに配置されるかがわかっている場合、コンパイラは絶対アドレスを持つオブジェクト コードを生成しますローダは、ロード モジュール内のアドレスに従ってプログラムとデータをメモリにロードします。

絶対ロードは単一プログラム環境でのみ機能します。

2. 再配置可能ロード(静的再配置)

静的再配置: 再配置可能ロードとも呼ばれます。コンパイルおよびリンク後にロードされるモジュールのアドレスは 0 から始まります。命令で使用されるアドレスとデータが格納されるアドレスはすべて、開始アドレスからの相対的な論理アドレスです。ロード モジュールは、メモリの現在の状態に基づいてメモリ内の適切な場所にロードできます。ロード時にアドレスが「再配置」され、論理アドレスが物理アドレスに変換されます(アドレス変換はロード中に一度完了します)。

静的再配置の特徴は、ジョブをメモリにロードする際に、ジョブが必要とするメモリ空間をすべて確保する必要があり、メモリが不足するとジョブをロードできないことです。

ジョブがメモリに入ると、動作中に移動したり、メモリ領域に適用したりすることはできません。

3. 動的ランタイムローディング (動的再配置)

動的再配置: 動的ランタイム読み込みとも呼ばれます。コンパイルおよびリンク後にロードされたモジュールのアドレスは 0 から始まります。ローダは、ロード モジュールをメモリにロードした後、論理アドレスを物理アドレスにすぐに変換せず、プログラムが実際に実行されるまでアドレス変換を延期します したがって、メモリにロードされた後のすべてのアドレスは依然として論理アドレスです。この方法では、再配置レジスタのサポートが必要です。

1691418149769

リンクする 3 つの方法:

1. 静的リンク: プログラムを実行する前に、まず各ターゲット モジュールと必要なライブラリ関数を完全な実行可能ファイル (ロード モジュール) に接続し、それ以降は逆アセンブルしません。

2. ロード中のダイナミックリンク: 各ターゲットモジュールがメモリにロードされると、ロード中にリンク方法がリンクされます。

3. 実行時動的リンク: ターゲット モジュールは、プログラム実行中に必要な場合にのみリンクされます。修正・更新が容易で、対象モジュールの共有が容易な点がメリットです。

1691418255328

2. メモリ管理の概念

1691418514179

1691418629798

システム リソースの管理者として、オペレーティング システムは当然メモリも管理する必要があります。

1. オペレーティング システムは、メモリ領域の割り当てとリサイクルを担当します。

2. オペレーティング システムは、メモリ空間を論理的に拡張するための何らかのテクノロジを提供する必要があります。

3. オペレーティング システムは、プログラムの論理アドレスと物理アドレスを変換するアドレス変換機能を提供する必要があります。

4. オペレーティング システムはメモリ保護機能を提供する必要があります。各プロセスが相互に干渉することなく独自のストレージスペースで実行されるようにする

1691418755641

メモリ保護には次の 2 つのアプローチがあります。

方法 1: CPU に上下限レジスタを 1 組設定し、プロセスの上限アドレスと下限アドレスを格納します。プロセスの命令が特定のアドレスにアクセスする必要がある場合、CPU はそれが範囲外であるかどうかをチェックします。

方法 2: 再配置レジスタ (ベース アドレス レジスタとも呼ばれる) と境界アドレス レジスタ (リミット レジスタとも呼ばれる) を使用して境界外をチェックします。再配置レジスタには、プロセスの開始物理アドレスが格納されます。境界アドレスレジスタには、プロセスの最大論理アドレスが格納されます。

1691419074147

3. 補償と交換

1691498172878

テクノロジーのアイデアをカバー:

プログラムをセグメント (モジュール) に分割します。頻繁に使用されるセグメントはメモリに常駐し、使用頻度の低いセグメントは必要に応じてメモリに転送されます。

メモリは「固定領域」といくつかの「オーバーレイ領域」に分かれています。
永続的なメモリを必要とするセグメントは「固定領域」に配置され、(実行が終了しない限り) 呼び出されません。

通常使用されないセグメントは「カバレッジ領域」に配置され、必要なときにメモリに転送され、不要なときにメモリから転送されます。

上書き構造はプログラマによって宣言される必要があり、オペレーティング システムによって自動上書きが完了します。

短所: ユーザーにとって透過的ではないため、ユーザーのプログラミング負担が増大します。

交換(スワップ)テクノロジーの設計思想:

メモリ容量が不足している場合、システムはメモリ内の一部のプロセスを一時的に外部メモリにスワップアウトし、実行条件のある外部メモリ内の一部のプロセスをメモリにスワップします(プロセスはメモリとディスク間で動的にスケジュールされます)。

外部メモリから一時的にスワップアウトされて待機しているプロセスの状態はサスペンド(サスペンド)となります。

一時停止状態は、準備完了一時停止とブロッキング一時停止の 2 つの状態にさらに分割できます。

1. スワップ機能を備えたオペレーティング システムでは、通常、ディスク領域はファイル領域とスワップ領域の 2 つの部分に分割されます。

1691498814055

ファイル領域は主にファイルの保存に使用され、主に記憶領域の利用を追求するため、ファイル領域領域の管理には個別の割り当て方法が採用されます。

スワップ領域はディスク領域のごく一部しか占有せず、スワップアウトされたプロセスデータはスワップ領域に格納されます。スワップの速度はシステム全体の速度に直接影響するため、スワップ領域の管理は主にスワップインとスワップアウトの速度を追求するため、通常、スワップ領域は連続割り当て方式を採用します(後で理解できるようになります)。ファイル管理の章を勉強してください)。つまり、スワップ領域の I/O 速度は、ファイル領域の I/O 速度よりも高速です。

2. スワップは通常、多くのプロセスが実行中でメモリが不足しているときに実行され、システム負荷が減少すると一時停止されます。例:
多くのプロセスが実行されているときにページ フォールトが頻繁に発生する場合は、メモリが不足していることを意味します。この時点で、一部のプロセスをスワップアウトできます。ページ フォールト率が大幅に低下した場合は、スワップアウトを一時停止できます。 。

3. ブロックされたプロセスを最初にスワップアウトすることができ、優先度の低いプロセスをスワップアウトすることができます。優先度の低いプロセスがメモリに転送された直後にスワップアウトされるのを防ぐために、システムによってはプロセスがメモリ内に常駐することも考慮します。 .時間...

(注: PCB はメモリ内に常駐し、外部メモリからスワップアウトされません)

1691498929898

4. 継続的な割当管理方法

1691498982970

継続的割り当て: 連続的なメモリ空間をユーザー プロセスに割り当てる必要があることを意味します。

単一の連続した割り当て

単一の連続割り当て方式では、メモリはシステム領域とユーザー領域に分割されます。1691499134222

システム領域は通常、メモリの低アドレス部分に配置され、オペレーティング システム関連のデータの保存に使用され、ユーザー領域はユーザー プロセス関連のデータの保存に使用されます。

メモリ内に存在できるユーザー プログラムは 1 つだけであり、ユーザー プログラムはユーザー領域全体のスペースを独占的に占有します。

利点: 実装が簡単、外部断片化がない、上書きテクノロジを使用してメモリを拡張できる、メモリ保護は必ずしも必要ありません (例: 初期の PC オペレーティング システム MS-DOS)。

短所: シングルユーザー、シングルタスクのオペレーティング システムでのみ使用可能、内部断片化があり、メモリ使用率が非常に低い。

固定パーティション割り当て

1960 年代には、マルチプログラミングをサポートするシステムが登場しました。複数のプログラムを互いに干渉することなくメモリにロードするために、ユーザー空間全体をいくつかの固定サイズのパーティションに分割し、各パーティションには 1 つのジョブのみがロードされる、これが最も初期の構成です。複数のプログラムを実行できる最も単純なメモリ管理方法。

1691499329295

パーティションは同じサイズです。

柔軟性には欠けますが、1 台のコンピュータを使用して複数の同一のオブジェクトを制御する状況には非常に適しています (たとえば、製鉄所に n 個の同一の製鋼炉がある場合、メモリを n 個の等しいサイズの領域に分割して n 個のオブジェクトを格納できます)。製鉄炉制御プログラム)

パーティションのサイズは次のように異なります。

柔軟性が向上し、さまざまなサイズのプロセスのニーズに対応します。システム内で頻繁に実行されるジョブのサイズに応じて分割します (例: 複数の小さなパーティション、適切な数の中程度のパーティション、少数の大きなパーティションに分割)

オペレーティング システムは、各パーティションの割り当てとリサイクルを実現するために、データ構造、つまりパーティション記述テーブルを確立する必要があります。各テーブル エントリはパーティションに対応し、通常はパーティション サイズごとに配置されます。各エントリには、対応するパーティションのサイズ、開始アドレス、およびステータス (割り当てられているかどうか) が含まれます。

1691499500807

ユーザープログラムをメモリにロードする際、オペレーティングシステムのカーネルプログラムは、ユーザープログラムのサイズに応じてテーブルを検索し、サイズを満たす未割り当てのパーティションを見つけてプログラムに割り当て、ステータスを変更します。 「割り当て済み
に。

利点: 実装が簡単で、外部の破片がありません。

欠点: a. ユーザー プログラムが大きすぎる場合、すべてのパーティションがニーズを満たすことができない可能性があります。現時点では、問題を解決するには上書きテクノロジを使用する必要がありますが、パフォーマンスが低下します。b. 内部フラグメンテーションが発生します。が生成され、メモリ使用率は低くなります。

動的パーティション割り当て

動的パーティション割り当ては、可変パーティション割り当てとも呼ばれます。この割り当て方法では、メモリ パーティションを事前に分割するのではなく、プロセスがメモリにロードされるときに、プロセスのサイズに応じてパーティションが動的に作成され、パーティションのサイズはプロセスのニーズに正確に適合します。プロセス。したがって、システム パーティションのサイズと数は可変です。(例:コンピュータのメモリサイズが64MB、システム領域が8MB、ユーザー領域が合計56MBだとします。…)

動的パーティション割り当てには内部の断片化はありませんが、外部の断片化はあります。

プロセスに割り当てられたメモリ領域の一部が使用されていない場合の内部断片化。

外部断片化とは、メモリ内の一部の空きパーティションが小さすぎて使用できないことを指します。

メモリ内の総空き領域が元々特定のプロセスの要件を満たす可能性がある場合、そのプロセスは連続したメモリ領域全体を必要とするため、これらの「フラグメント」はプロセスの要件を満たすことができません。
外部の断片化は、圧縮技術によって解決できます。

1. システムはメモリ使用量を記録するためにどのようなデータ構造を使用する必要がありますか?

1691499790711

空きパーティションテーブル:

各空きパーティションはテーブル エントリに対応します。テーブル エントリには、パーティション番号、パーティション サイズ、パーティション開始アドレスなどの情報が含まれます。

空きパーティションチェーン:

順方向ポインタと逆方向ポインタは、それぞれ各パーティションの先頭と最後に設定されます。パーティションサイズなどの情報も先頭に記録できます。

1691499869265

2. 多くの空きパーティションが需要を満たすことができる場合、どのパーティションを割り当てに選択する必要がありますか?

新しいジョブをメモリにロードするときは、空きパーティション テーブル (または空きパーティション チェーン) からパーティションを選択し、特定の動的パーティション割り当てアルゴリズムに従ってジョブに割り当てる必要があります。割り当てアルゴリズムはシステムのパフォーマンスに大きな影響を与えるため、広範囲に研究されています。

次のセクション

3. パーティションの割り当てとリサイクル操作を実行するにはどうすればよいですか?

1691500585510

動的パーティション割り当てアルゴリズム

動的パーティション割り当てアルゴリズム: 動的パーティション割り当て方法では、多くの空きパーティションが需要を満たすことができる場合、どのパーティションを割り当てに選択する必要がありますか?

1691500653322

ファーストフィットアルゴリズム

アルゴリズムのアイデア: 毎回低いアドレスから検索を開始し、サイズを満たすことができる最初の空きパーティションを見つけます。

実装方法: 空きパーティションはアドレスの昇順に配置されます。メモリが割り当てられるたびに、空きパーティション チェーン (または空きパーティション テーブル) が順番に検索され、サイズが要件を満たす最初の空きパーティションが見つかります。

最適アルゴリズム

アルゴリズムの考え方: 動的パーティション割り当ては連続的な割り当て方法であるため、各プロセスに割り当てられる領域は連続した全体領域である必要があります。したがって、「大きなプロセス」が来たときに連続して大きな空き領域が存在するようにするには、できるだけ多くの大きな空き領域を残す、つまり小さな空き領域を優先して使用することができます。

実装方法: 空きパーティションは容量が大きい順にリンクされます。メモリが割り当てられるたびに、空きパーティション チェーン (または空きパーティション テーブル) が順番に検索され、サイズが要件を満たす最初の空きパーティションが見つかります。

欠点: 毎回最小のパーティションを選択して割り当てると、小さくて使いにくいメモリ ブロックがどんどん残ってしまいます。したがって、この方法では外部からの破片が大量に発生します。

最悪適合アルゴリズム

Largest Fit アルゴリズム (Largest Fit) アルゴリズムのアイデアとも呼ばれます
。最適な適応アルゴリズムの問​​題、つまり、使用が困難な小さなフラグメントが多すぎる問題を解決するために、最大の連続空き領域を最初に使用できます。割り当てのたびに、割り当て後の残りの空き領域が少なくなりすぎず、より使いやすくなります。

実装方法: 空きパーティションは容量の大きい順にリンクされます。メモリが割り当てられるたびに、空きパーティション チェーン (または空きパーティション テーブル) が順番に検索され、サイズが要件を満たす最初の空きパーティションが見つかります。

欠点: 毎回最大のパーティションを選択して割り当てると、割り当て後に残る空き領域が大きくなり、使いやすくなりますが、この方法では、より大きな連続空き領域がすぐに使い果たされてしまいます。「大きなプロセス」が後で到着すると、使用可能なメモリ パーティションがなくなります。

近隣適応アルゴリズム

アルゴリズムのアイデア: 最初の適応アルゴリズムは、毎回チェーンの先頭から検索します。これにより、低アドレス部分に小さな空きパーティションが多数発生する可能性があり、各割り当て検索ではこれらのパーティションを経由する必要があるため、検索オーバーヘッドが増加します。毎回、前回の検索の最後から検索を開始すれば、上記の問題は解決できます。

実装方法: 空きパーティションはアドレスの昇順に配置されます (循環リンク リストに配置できます)。メモリが割り当てられるたびに、空きパーティション チェーン (または空きパーティション テーブル) が最後の検索の終わりから検索され、サイズが要件を満たす最初の空きパーティションが見つかります。

最初の適応アルゴリズムは、アドレスが低い小さなパーティションを取得する必要があるたびに、最初から検索する必要があります。ただし、このルールは、低アドレス部分に需要を満たすことができる小さなパーティションがある場合、低アドレス部分の小さなパーティションが使用される可能性が高く、また、大きなパーティションが保持される可能性が高いことも決定します。高アドレス部分 (最終的には最適適応アルゴリズムの利点)

近接適応アルゴリズムのルールにより、低アドレス部分と高アドレス部分の空きパーティションが同じ確率で使用される可能性があり、その結果、高アドレス部分の大きなパーティションが使用され、分割される可能性が高くなります。小さなパーティションに分割され、最終的には大きなパーティションができなくなります。パーティション化が可能です (最大適応度アルゴリズムの欠点)

総合すると、4 つのアルゴリズムのうち、最初の適応アルゴリズムの方が効果が優れています。

1691501446869

5. 非連続割当管理方法

1691501566448

連続割り当て: ユーザープロセスには連続メモリ空間を割り当てる必要があります。

不連続な割り当て: ユーザー プロセスには、分散したメモリ領域が割り当てられる可能性があります。

5.1 基本的なページングストレージ管理

基本的なページングストレージ管理

メモリ空間を同じサイズのパーティションに分割し (例: 各パーティションは 4KB)、各パーティションは「ページ フレーム」です (ページ フレーム = ページ フレーム = メモリ ブロック = 物理ブロック = 物理ページ)。各ページフレームには「ページフレーム番号」という番号が付いており(ページフレーム番号=ページフレーム番号=メモリブロック番号=物理ブロック番号=物理ページ番号)、ページフレーム番号は0から始まります。

プロセスの論理アドレス空間もページ フレームのサイズに等しい部分に分割され、各部分は「ページ」または「ページ」と呼ばれますまた、各ページには「ページ番号」という番号が付いており、ページ番号も0から始まります。

1691502103955

ヒント: 初心者は混乱しやすいです——

ページ、ページ対ページ フレーム、ページ フレーム、物理ページ

ページ番号、ページ番号とページ フレーム番号、ページ フレーム番号、物理ページ番号

オペレーティング システムは、ページ フレーム単位で各プロセスにメモリ領域を割り当てます。プロセスの各ページはページ フレームに配置されます。言い換えれば、プロセスのページとメモリのページ フレームの間には 1 対 1 の対応関係があります。
各ページは連続して保存する必要はなく、隣接しないページ フレームに配置することができます。

重要なデータ構造 - ページテーブル

プロセスの各ページがメモリ内のどこに格納されているかを知るために、オペレーティング システムはプロセスごとにページ テーブルを作成する必要があります。注: ページ テーブルは通常、PCB (プロセス コントロール ブロック) 内に存在します。

1691502674723

1. プロセスはページ テーブルに対応します
2. プロセスの各ページはページ テーブル エントリに対応します
3. 各ページ テーブル エントリは「ページ番号」と「ブロック番号」で構成されます
4. ページ テーブルはプロセス ページを記録しますおよび実際に保存されているメモリ ブロック間のマッピング関係

1. 各ページ テーブル エントリはどれくらいの大きさですか? それは何バイトを占めますか?

例: システムの物理メモリ サイズが 4GB で、ページ サイズが 4KB であると仮定すると、各ページ テーブル エントリは少なくとも何バイト必要ですか? メモリ ブロック サイズ = ページ サイズ = 4KB = 212B

合計 4GB のメモリは 232/212=220 のメモリ ブロックに分割されます。

メモリブロック番号の範囲は0~220-1である必要があります。

メモリ ブロック番号は少なくとも 20 ビットで表現する必要があります

ブロック番号を表すには少なくとも3Bを使用する必要があります(3*8=24 ビット)

ページ番号は暗黙的であるため、各ページ テーブル エントリは 3B を占有し、ページ テーブル全体を格納するには少なくとも 3*(n+1)B が必要です。

重要な重要な重要なテスト ポイント: コンピューター内のメモリ ブロックの数 → ページ テーブル エントリのブロック番号が少なくとも何バイトを占めるか

注: ページ テーブルにはメモリ ブロック番号のみが記録され、メモリ ブロックの開始アドレスは記録されません! メモリ
ブロックの開始アドレス J = J*メモリ ブロック サイズ

ページ テーブルの各ページ テーブル エントリがメモリ アドレス X から連続して格納されているとします。ページ番号 i のページ テーブル エントリを見つけるにはどうすればよいでしょうか? ページ テーブル エントリ番号 i の格納アドレス = X+3*i

1691503341255

ページ テーブル エントリは継続的に格納されるため、ページ番号は暗黙的であり、(配列に似た) ストレージ スペースを占有しません。

2. ページテーブルを介して論理アドレスから物理アドレスへの変換を実現するにはどうすればよいですか?

特徴: プロセスの各ページは個別に保存されますが、内部ではページが連続的に保存されます。

論理アドレス A にアクセスしたい場合は、

①論理アドレスAに対応する「ページ番号」Pを求める

②メモリ内のページpの開始アドレスを見つける(ページテーブルを調べる必要がある)

③論理アドレスAの「ページ内オフセット」Wを求める

論理アドレス A に対応する物理アドレス = メモリ内のページ p の開始アドレス + ページ内のオフセット w

例: 特定のコンピュータ システムでは、ページ サイズは 50B です。プロセスの論理アドレス空間サイズが 200B の場合、論理アドレス 110 に対応するページ番号とページ オフセットはいくつになりますか?

1691504259538

1691504536563

結論: 各ページのサイズが 2kB で、論理アドレスが 2 進数で表される場合、最後の K ビットはページ内のオフセットであり、残りはページ番号です。

1691504857372

ページングストレージ管理の論理アドレス構造は次のとおりです。1691504972734

アドレス構造には 2 つの部分が含まれます。前半部分はページ番号、後半部分はページ内のオフセット w です。上図の例では、アドレス長は 32 ビットで、ビット 0 ~ 11 が「ページ内オフセット」または「ページ内アドレス」、ビット 12 ~ 31 が「ページ番号」です。

「ページ内オフセット」を表す K ビットがある場合、このシステムのページのサイズが 2k メモリ単位であることを意味します。

「ページ番号」を表す M ビットがある場合、このシステムではプロセスに最大 2M ページが許可されることを意味します。

1691505139420

1691505183324

基本的なアドレス変換メカニズム

基本的なアドレス変換メカニズム (論理アドレスを物理アドレスに変換するために使用される一連のハードウェア メカニズム) の原理とプロセスを理解して暗記することに重点を置きます。

基本的なアドレス変換メカニズムでは、プロセスのページ テーブルを使用して論理アドレスを物理アドレスに変換できます。

通常、ページ テーブル レジスタ (PTR) がシステムに設定され、メモリ内のページ テーブルの開始アドレス F とページ テーブルの長さ M が保存されます。プロセスが実行されていない場合、ページ テーブルの開始アドレスとページ テーブル長はプロセス制御ブロック (PCB) に配置され、プロセスがスケジュールされると、オペレーティング システム カーネルによってページ テーブル レジスタに配置されます。

注: ページ サイズは 2 の整数乗です。

ページ サイズを L とすると、論理アドレス A から物理アドレス E への変換プロセスは次のようになります。

1691584814477

① ページ番号 Р とページ オフセット w を計算します(10 進数を使用して手動で計算する場合、P=A/L、W=A%L になります。ただし、実際にコンピュータが動作しているときは、論理アドレス構造は固定されているため、コンピュータのハードウェアページ番号とページ内のオフセットのバイナリ表現をより速く取得できます)

② ページ番号 P とページテーブル長 M を比較します。P>=M の場合は範囲​​外割り込みが発生し、そうでない場合は実行を継続します。(注: ページ番号は 0 から始まり、ページ テーブルの長さは少なくとも 1 であるため、P=M の場合も範囲外になります)

③ページテーブルのページ番号Pに対応するページテーブルエントリのアドレス=ページテーブル開始アドレスF+ページ番号p×ページテーブルエントリ長 メモリブロック番号であるページテーブルエントリの内容bを取り出します。(ページ テーブル エントリの長さ、ページ テーブルの長さ、ページ サイズの違いに注意してください。ページ テーブルの長さは、このページ テーブル内のページ テーブル エントリの総数、つまりページの総数を指します。ページ テーブル長さは、ページ テーブル エントリが占める各ストレージ スペースの量を指します。ページ サイズは、ページが占めるストレージ スペースの量を指します)

④E= b*L+Wを計算し、得られた物理アドレスEを用いてメモリにアクセスします。(メモリブロック番号とページオフセットを2進数で表現した場合、その2つを連結したものが最終的な物理アドレスとなります)

例:ページサイズ L が 1K バイトで、ページ番号 2 に対応するメモリブロック番号 b=8 の場合、論理アドレス A=2500 を物理アドレス E に変換します。

等価説明: あるシステムはバイトアドレス指定されており、論理アドレス構造では、ページ オフセットは 10 ビットを占めます (ページのサイズが 210B = 1KB、ページ番号 2 に対応するメモリ ブロック番号が b = 8 であることを示します) . 論理アドレス A=2500 は物理アドレス E に変換されます。

① ページ番号とページ内オフセットを計算します
ページ番号 P=A/L= 2500/1024=2; ページ内オフセット W=A%L= 2500%1024= 452

②質問の条件によれば、ページ番号2は境界をまたがず、格納されているメモリブロック番号はb=8となります。

③物理アドレス E= b*L+W= 8* 1024+425 = 8644

ページングストレージ管理(ページ管理)を行うシステムでは、各ページのサイズが決まれば論理アドレス構造も決まります。したがって、ページ管理におけるアドレスは 1 次元になります。つまり、論理アドレスが与えられる限り、システムはページ番号とページ オフセットを自動的に計算することができ、ページ オフセットがこの論理アドレス内で何ビットを占めるかをシステムに明示的に伝える必要はありません。

1691585655820

結論: 理論的には、ページ テーブル エントリの長さ 3B でメモリ ブロック番号の範囲を表すことができますが、ページ テーブルのクエリを容易にするために、多くの場合、1 つのページ テーブル エントリが各ページに収まるように、より多くのバイトを占有することが許可されます。ページテーブルエントリの整数。

1691585852418

高速テーブルによるアドレス変換メカニズム

1691585953539

変換ルックアサイド バッファ (TLB) とも呼ばれる高速テーブル (特殊なハードウェア) は、アクセス速度がメモリよりもはるかに速いキャッシュです (TLB はメモリではありません!)。最近アクセスされたページ テーブル エントリのコピーを保存するために使用されます。 . 、アドレス変換を高速化できます。これに対応して、メモリ内のページ テーブルはスロー テーブルと呼ばれることがよくあります。

1691586487080

高速テーブルの導入後のアドレス変換プロセス

① CPU が論理アドレスを与え、ハードウェアがページ番号とページ内のオフセットを計算し、そのページ番号を高速テーブル内のすべてのページ番号と比較します。

② 一致するページ番号が見つかった場合は、アクセス対象のページテーブルエントリが高速テーブルにコピーがあることを意味し、そのページに対応するメモリブロック番号を直接取り出し、メモリブロック番号とページオフセットを結合して物理アドレスを形成し、最後に物理アドレスに対応するメモリユニットにアクセスします。したがって、高速テーブルがヒットした場合、特定の論理アドレスにアクセスするのに必要なメモリ アクセスは 1 回だけです。

③ 一致するページ番号が見つからない場合は、メモリ内のページ テーブルにアクセスし、対応するページ テーブル エントリを見つけて、ページが保存されているメモリ ブロック番号を取得し、メモリ ブロック番号をメモリ内のオフセットと連結する必要があります。ページを作成して物理アドレスを形成し、最後に物理アドレスに対応するメモリユニットにアクセスします。したがって、高速テーブルがミスした場合、特定の論理アドレスにアクセスするには 2 回のメモリ アクセスが必要になります (注: ページ テーブル エントリを見つけた後、後で再度アクセスできるように、そのエントリを同時に高速テーブルに保存する必要があります。ただし、高速テーブルががいっぱいである場合、古いページ テーブル エントリは特定のアルゴリズムに従って置き換える必要があります)

高速テーブルのクエリはページ テーブルのクエリよりもはるかに高速であるため、高速テーブルがヒットする限り、多くの時間を節約できます。

局所性の原理により、一般に、高速テーブルのヒット率は 90% 以上に達することがあります。

例: あるシステムでは、基本的なページング ストレージ管理を使用し、高速テーブルによるアドレス変換メカニズムを採用しています。高速テーブルに 1 回アクセスするには 1us、メモリに 1 回アクセスするには 100us かかります。高速テーブルのヒット率が 90% の場合、論理アドレスにアクセスするのにかかる平均時間はどれくらいですか?
(1+100)*0.9+(1+100+100)*0.1=111 us
システムによっては高速テーブルをサポートしており、遅いテーブル テーブルは同時に検索されます。その場合、平均消費時間は (1+100)*0.9+(100+100)*0.1=110.9 us になります。高速テーブル メカニズムが使用されていない場合、テーブルへのアクセス
は論理アドレスには 100+100= 200us が必要です。高速テーブル メカニズムの導入後は、論理アドレスへのアクセスが大幅に高速化されたことは明らかです。

1691586964244

局所性原理

時間的局所性: プログラム内の命令が実行されると、すぐに再度実行される可能性が高く、特定のデータにアクセスされた場合、そのデータはすぐに再度アクセスされる可能性が高くなります。(プログラム内にループが多いため)

空間的局所性: プログラムが特定のストレージ ユニットにアクセスすると、すぐに近くのストレージ ユニットにもアクセスされる可能性が非常に高くなります。(大量のデータがメモリに継続的に保存されるため)

前のセクションで紹介した基本的なアドレス変換メカニズムでは、論理アドレスにアクセスするたびに、メモリ内のページ テーブルをクエリする必要があります。局所性の原理により、同じページ テーブル エントリが連続して何度も見つかる場合があります。

1691587102398

TLB と通常のキャッシュの違い - TLB にはページ テーブル エントリのコピーのみが存在しますが、通常のキャッシュには他のさまざまなデータのコピーが存在する可能性があります。

5.2 2 レベルのページテーブル

1691587196435

ページ番号に基づいてページテーブルを問い合わせる方法:ページに対応するページテーブルエントリの格納場所 K = ページテーブルの開始アドレス + K*4

すべてのページ テーブル エントリが連続的に格納されている場合にのみ、この方法を使用してページ テーブル エントリを見つけることができます。

局所性の原則によれば、多くの場合、プロセスは一定期間内に特定のページにアクセスするだけで正常に実行されます。したがって、ページ テーブル全体をメモリ内に常駐させる必要はありません。

1. プロセスをメモリに継続的に保存する必要があるという問題をどのように解決すればよいでしょうか?

プロセスのアドレス空間をページングし、各ページの保存場所を記録するページ テーブルを作成する

同じ考え方で、連続して保存する必要があるページテーブルをページに分割することで、「ページテーブルを連続して保存する必要がある」という問題を解決することもできます。

1691587770864

1691588022781

1691588108623

注意すべきいくつかの詳細

1. マルチレベルのページ テーブル メカニズムが使用されている場合、各レベルのページ テーブルのサイズは 1 ページを超えることはできません。

1691588441945

2. 2 レベルのページ テーブルのメモリ アクセス時間の分析 (高速テーブル メカニズムがないと仮定)

最初のメモリアクセス:メモリ内のページディレクトリテーブルにアクセスします。

2 番目のメモリ アクセス:メモリ内の 2 次ページ テーブルにアクセスします。

3回目のメモリアクセス: ターゲットメモリユニットにアクセスします。

1691588624586

5.3 基本的な分割ストレージ管理方法

1691588715381

プロセスのアドレス空間: プログラム自体の論理関係に従っていくつかのセグメントに分割され、各セグメントにはセグメント名があり (低級言語では、プログラマはセグメント名を使用してプログラミングします)、各セグメントは先頭からアドレス指定されます。 0から。

メモリ割り当て規則: セグメント単位で割り当て、各セグメントはメモリ内の連続した空間を占有しますが、セグメントが隣接している必要はありません。

1691588938870

セグメントシステムの論理アドレス構造は、セグメント番号(セグメント名)とセグメント内アドレス(セグメント内オフセット)から構成されます。のように:

1691588996533

セグメント番号の桁数によって、各プロセスを分割できるセグメントの最大数が決まります。

セグメント内のアドレス ビットの数によって、各セグメントの最大長が決まります。

上記の例では、システムがバイトアドレス指定されている場合、

セグメント番号は 16 ビットを占めるため、このシステムでは、各プロセスには最大 216 = 64K のセグメントがあります。

セグメント内のアドレスは 16 ビットを占めるため、各セグメントの最大長は 216 = 64KB になります。

1691589146221

問題: プログラムは複数のセグメントに分割されており、各セグメントは個別にメモリにロードされます。プログラムが正常に実行できるようにするには、物理​​メモリ内で各論理セグメントの格納場所を見つける必要があります。この目的のために、「セグメントテーブル」と呼ばれるセグメントマッピングテーブルをプロセスごとに確立する必要がある。

1691589376128

1691589631611

5.4 セグメンテーションとページング管理の比較

ページは情報の物理的な単位です。ページングの主な目的は、個別の割り当てを実現し、メモリ使用率を向上させることです。ページングは​​システム管理にのみ必要であり、完全にシステムの動作であり、ユーザーには見えません。

セグメントは情報の論理単位です。セグメンテーションの主な目的は、ユーザーのニーズをより適切に満たすことです。通常、セグメントには論理モジュールに属する一連の情報が含まれます。セグメントはユーザーに表示され、ユーザーはプログラミング時に明示的にセグメント名を指定する必要があります。

ページ サイズは固定されており、システムによって決定されます。セグメントの長さは固定されておらず、ユーザーが作成したプログラムによって異なります。

ページングされたユーザー プロセスのアドレス空間は 1 次元であり、プログラマはアドレスを表すニーモニックを与えるだけで済みます。

セグメント化されたユーザー プロセスのアドレス空間は 2 次元であるため、アドレスを特定する場合、プログラマはセグメント名とセグメント内のアドレスの両方を指定する必要があります。

1691590036456

セグメンテーションにより、ページングよりも情報の共有と保護が容易になります。

変更できないコードは純粋なコードまたはリエントラント コード (重要なリソースではない) と呼ばれ、そのようなコードは共有できます。変更可能なコードは共有できません(たとえば、コードセグメント内に多くの変数があり、さまざまなプロセスによる同時アクセスによりデータの不整合が発生する可能性があります)

1691590214824

論理アドレスにアクセスするには、何回のメモリ アクセスが必要ですか? ページング (単一レベルのページ テーブル): 最初のメモリ アクセス - メモリ内のページ テーブルをチェックし、2 回目のメモリ アクセス - ターゲット メモリ ユニットにアクセスします。合計2回のアクセス

セグメンテーション: 最初のメモリ アクセス - メモリ内のセグメント テーブルをチェックし、2 回目のメモリ アクセス - ターゲット メモリ ユニットにアクセスします。合計2回のアクセス

ページング システムと同様に、セグメント化システムにも高速テーブル メカニズムを導入して、最近アクセスされたセグメント テーブル エントリを高速テーブルに入れることができ、これにより 1 回のアクセスが節約され、アドレス変換が高速化されます。

1691590472850

5.5セグメントページ管理方式

1691590531680

1691590594311

1691590721077

セグメントページシステムの論理アドレス構造は、セグメント番号、ページ番号、ページ内アドレス(ページ内オフセット)で構成されます。のように:

1691590761720

セグメント番号の桁数によって、各プロセスを分割できるセグメントの最大数が決まります。

ページ番号のページ数によって、各セグメントの最大ページ数が決まります。

ページ内オフセットにより、ページ サイズとメモリ ブロック サイズが決まります。

1691590857661

「セグメンテーション」はユーザーに表示され、プログラマはプログラミング時にセグメント番号とセグメント内のアドレスを明示的に指定する必要があります。各段落の「ページネーション」はユーザーには見えません。システムは、セグメント内のアドレスに従ってページ番号とページ オフセットを自動的に分割します。
したがって、セグメントページ管理のアドレス構造は 2 次元になります。

各セグメントはセグメントテーブルエントリに対応し、各セグメントテーブルエントリはセグメント番号、ページテーブル長、ページテーブル格納ブロック番号(ページテーブル開始アドレス)で構成されます。各セグメント テーブル エントリは長さが等しく、セグメント番号は暗黙的です。

各ページはページ テーブル エントリに対応し、各ページ テーブル エントリはページ番号とページが格納されているメモリ ブロック番号で構成されます。各ページ テーブル エントリの長さは等しく、ページ番号は暗黙的です。

1691591062370

1691591209220

1691591307966

6.仮想メモリ管理

1692273240635

6.1 仮想メモリの基本概念

1692273266535

1692273294948

1 回限り: ジョブは、実行を開始する前に一度にメモリにロードする必要があります。これにより、次の 2 つの問題が発生します: ① ジョブが非常に大きい場合、メモリにロードできず、大きなジョブを実行できなくなります。 ② 大量のジョブを実行する必要がある場合、メモリが収容できないためです。すべてのジョブを実行すると、少数のジョブしか実行できなくなり、複数のプロセスが発生し、プログラムの同時実行性が低下します。

常駐性: ジョブがメモリにロードされると、ジョブの実行が終了するまでメモリ内に残ります。実際、一定期間内にジョブを正常に実行するためにアクセスする必要があるのは、ジョブのデータのほんの一部だけであるため、一時的に使用されない大量のデータがメモリ内に残り、貴重なメモリ リソースが無駄になります。

時間的局所性: プログラム内の命令が実行されると、すぐに再度実行される可能性が高く、特定のデータにアクセスされた場合、そのデータはすぐに再度アクセスされる可能性が高くなります。(プログラム内にループが多いため)

空間的局所性: プログラムが特定のストレージ ユニットにアクセスすると、すぐに近くのストレージ ユニットにもアクセスされる可能性が非常に高くなります。(大量のデータがメモリに継続的に格納され、プログラム命令もメモリに順次格納されるため)

局所性の原理に基づいて、プログラムをロードするときに、プログラムのすぐに使用される部分はメモリにロードされ、一時的に使用されない部分は外部メモリに残してプログラムを開始できます。実行中。

プログラムの実行中、アクセスされた情報がメモリにない場合、オペレーティング システムは必要な情報を外部メモリからメモリに転送し、プログラムの実行を継続します。

十分なメモリ領域がない場合、オペレーティング システムは、メモリ内で一時的に使用されていない情報を外部ストレージにスワップアウトする責任を負います。

オペレーティング システムの管理下で、ユーザーには実際のメモリよりもはるかに大きなメモリがあるように見えますが、これが仮想メモリです。

1692273592148

仮想メモリには次の 3 つの主な特徴があります。

複数回:ジョブ実行時に一度にメモリにロードする必要はなく、複数回に分けてメモリにロードすることができます。

互換性: ジョブの実行中にメモリ内に留まる必要はありませんが、ジョブの実行プロセス中にジョブを交換したり交換したりすることができます。

仮想性: ユーザーから見えるメモリ容量が実際の容量よりもはるかに大きくなるように、メモリ容量を論理的に拡張します。

仮想メモリ技術の実装方法

仮想メモリ テクノロジを使用すると、ジョブをメモリに複数回ロードできます。連続割り当てを使用すると、実装が不便になります。したがって、仮想メモリの実装は、メモリ管理方法の個別の割り当てに基づく必要があります。

1692273880203

主な違い:

プログラムの実行中、アクセスされた情報がメモリにない場合、オペレーティング システムは必要な情報を外部メモリからメモリに転送し、プログラムの実行を継続します。

十分なメモリ領域がない場合、オペレーティング システムは、メモリ内で一時的に使用されていない情報を外部ストレージにスワップアウトする責任を負います。

オペレーティング システムはリクエスト ページング(またはリクエスト セグメンテーション) 機能を提供する必要があります

オペレーティング システムはページ置換(またはセグメント置換) 機能を提供する必要があります

1692274043806

6.2 リクエストページングの管理方法

リクエスト ページングストレージ管理と基本的なページングストレージ管理の主な違いは次のとおりです。

プログラムの実行中、アクセスされた情報がメモリにない場合、オペレーティング システムは必要な情報を外部メモリからメモリに転送し、プログラムの実行を継続します。(オペレーティング システムはリクエスト ページング機能を提供する必要があります。不足しているページを外部メモリからメモリに転送します)

十分なメモリ領域がない場合、オペレーティング システムは、メモリ内で一時的に使用されていない情報を外部ストレージにスワップアウトする責任を負います。(オペレーティング システムは、外部メモリから一時的に未使用のページを交換するページ置換機能を提供する必要があります)

1692274241750

1692274387014

ページフォールト割り込みメカニズム

1692274567402

1692274583616

ページ フォールト割り込みは、現在実行中の命令がアクセスしようとしているターゲット ページがメモリに転送されないために生成されるため、内部割り込みになります。

命令の実行中に、複数のページフォルト割り込みが発生する可能性があります。(例: A を B にコピー、つまり論理アドレス A のデータを論理アドレス B にコピーし、A と B が異なるページに属している場合、2 つの割り込みが発生する可能性があります)

1692274688603

アドレス変換局

1692274826577

1692275094845

6.3 ページ置換アルゴリズム

(どのページをスイッチインし、どのページをスイッチアウトするかを決定します)

1692275174644

最適置換アルゴリズム

最適置換アルゴリズム (OPT、Optimal): 毎回削除対象として選択されるページは、今後使用されないか、長期間アクセスされないページとなるため、ページ フォールト率が最低になります。

1692275526342

プロセス全体でページフォルト割り込みが 9 回発生し、ページ置換が 6 回発生しました。
注: ページが欠落している場合、ページの置換が行われない場合があります。利用可能な空きメモリ ブロックがある場合、ページ置換は必要ありません。

ページ欠落率=9/20= 45%

最適な置換アルゴリズムにより、ページ フォールト率を最小限に抑えることができますが、実際には、次にどのページがアクセスされるかはプロセスの実行中にしかわかりません。オペレーティング システムは、ページのアクセス シーケンスを事前に予測できません。したがって、最適な置換アルゴリズムは実現できません。

先入れ先出し置換アルゴリズム

先入れ先出し置換アルゴリズム (FIFO): 毎回削除対象として選択されるページは、最も早くメモリに入ったページです。

実装方法:メモリ上に転送されたページを転送順にキューに並べ、ページを入れ替える場合はキューの先頭のページを選択するだけです。キューの最大長は、システムがプロセスに割り当てるメモリ ブロックの数によって異なります。

1692275823763

メモリブロック割り当て時のページフォールト数:9回

1692275901132

メモリブロックを4つ割り当てた場合、ページフォルト数:10

Belady の異常 - プロセスに割り当てられる物理ブロックの数が増加すると、ページ フォールトの数が減少するのではなく増加します。

Belady 例外を生成するのは FIFO アルゴリズムのみです。さらに、FIFo アルゴリズムは実装が簡単ですが、最初に入力されたページが最も頻繁にアクセスされる可能性があるため、プロセスの実際の実行ルールには適していません。したがって、アルゴリズムのパフォーマンスが劣ります

最も最近使用されていない置換アルゴリズム ((LRU))

最近使用された置換アルゴリズム (LRU、最も最近使用されていない): 毎回削除されるページは、最も長い間使用されていないページです。

実装方法: 対応するページ テーブル エントリを各ページに割り当て、アクセス フィールドを使用して、ページが最後にアクセスされてからの経過時間 t を記録します。ページを削除する必要がある場合は、既存のページの中で t 値が最も大きいページ、つまり最も長い間使用されていないページを選択します。

1692276069762

1692276146437

手動で質問を行う場合、ページを削除する必要がある場合は、この時点でメモリ内のいくつかのページ番号を逆にチェックできます。逆スキャン中に表示される最後のページ番号が、削除されるページです。

1692276216475

このアルゴリズムの実装には特殊なハードウェア サポートが必要であり、アルゴリズムのパフォーマンスは優れていますが、実装が難しく、高価です。

クロック置換アルゴリズム

最適な置換アルゴリズムは最高のパフォーマンスを発揮しますが、実装することはできません。

先入れ先出し置換アルゴリズムは実装が簡単ですが、アルゴリズムのパフォーマンスは劣ります。

最近使用されていない置換アルゴリズムは、OPT アルゴリズムのパフォーマンスに最も近い優れたパフォーマンスを持っていますが、その実装には特別なハードウェア サポートが必要であり、アルゴリズムのオーバーヘッドが高くなります。

クロック置換アルゴリズムは、パフォーマンスとコストのバランスがとれたアルゴリズムであり、CLOCK アルゴリズム、または最近使用されていない (NRU、最近使用されていない) アルゴリズムとも呼ばれます。

シンプルな CLOCK アルゴリズムの実装方法: 各ページにアクセス ビットを設定し、リンク ポインタを介してメモリ内のページを循環キューにリンクします。ページにアクセスすると、そのアクセス位置は 1 になります。ページを削除する必要がある場合は、ページのアクセス ビットを確認するだけです。o の場合は入れ替えるページを選択し、1 の場合は 0 に設定し、一時的に入れ替えずに次のページの確認を続けます。1 回目のスキャンですべてのページが 1 の場合、アクセス ビットが 0 に設定された後、2 回目のスキャンが実行されます (2 回目のスキャンではアクセス ビットが o であるページが存在する必要があるため、単純な CLOCK アルゴリズムによって除外ページが選択され、最大 2 ラウンドのスキャンを実行します)

1692276453684

クロック置換アルゴリズムの改善

シンプルなクロック置換アルゴリズムでは、ページが最近アクセスされたかどうかのみが考慮されます。実際、削除されたページが変更されていない場合、I/O 操作を実行して外部ストレージに書き戻す必要はありません。削除されたページのみ、変更後に外部ストレージに書き戻す必要があります。

したがって、オペレーティング システムは、ページが最近アクセスされたかどうかを考慮するだけでなく、ページが変更されたかどうかも考慮する必要があります。他の条件が等しい場合は、I/O 操作を回避するために、変更されていないページを最初に削除する必要があります。これが改良されたクロック置換アルゴリズムのアイデアです。

変更ビット = 0 はページが変更されていないことを示し、変更ビット = 1 はページが変更されたことを示します。

説明の便宜上、各ページのステータスは (アクセス ビット、変更ビット) の形式で表現されます。たとえば、(1,1) は、ページが最近アクセスされ、変更されたことを示します。

アルゴリズム ルール: 置換される可能性のあるすべてのページを循環キューに配置します。

第 1 ラウンド: 現在の位置から最初の (0,0) フレームまでをスキャンして置換します。このスキャンではフラグは変更されません (最優先: 最近アクセスされておらず、変更されていないページ)

第 2 ラウンド: 最初のスキャンが失敗した場合は、再スキャンして、置換する最初の (0,1) フレームを見つけます。このラウンドでは、スキャンされたすべてのフレーム アクセス ビットが 0 に設定されます。(2番目に優先: 最近アクセスされていないが変更されたページ)

3 ラウンド目: 2 ラウンド目のスキャンが失敗した場合は、再スキャンして、置換する最初の (0,0) フレームを見つけます。このスキャンのラウンドでは、フラグ ビットは変更されません。(第 3 優先: 最近アクセスしたが変更されていないページ)

4 ラウンド目: 3 ラウンド目のスキャンが失敗した場合は、再スキャンして、置換する最初の (0,1) フレームを見つけます。(4 番目の優先事項: 最近アクセスしたページと変更されたページ)

2 ラウンド目ですべてのフレームのアクセス ビットが 0 に設定されているため、フレームは 3 ラウンド目と 4 ラウンド目のスキャン後に確実に選択されるため、改良された CLOCK 置換アルゴリズムでは、最大 4 ラウンドのスキャンを実行して、フレームを選択します。消去のページ。

1692277110615

6.4 ページ割り当て戦略

1692277858199

常駐セット: リクエスト ページング ストレージ管理においてプロセスに割り当てられた物理ブロックのセットを指します。

仮想ストレージ テクノロジを使用するシステムでは、常駐セットのサイズは通常、プロセスの合計サイズよりも小さくなります。

極端な例として、プロセスの合計ページ数が 100 の場合、プロセスの常駐セット サイズが 100 であれば、プロセスをすべてメモリ上に置くことができ、動作中にページ フォールトが発生する可能性は低くなります。常駐セットのサイズが 1 の場合、プロセスの実行中にページ フォールトが非常に頻繁に発生します。

常駐セットが小さすぎる場合、ページ フォールトが頻繁に発生し、システムはページ フォールトの処理に多くの時間を費やし、実際にプロセスの進行に費やされる時間はほとんどなくなります。

常駐セットが大きすぎると、複数プログラムの同時実行性とリソース使用率の低下につながります。したがって、適切な常駐セット サイズを選択する必要があります。

固定割り当て: オペレーティング システムは、各プロセスに固定数の物理ブロックを割り当てます。この物理ブロックは、プロセスの実行中に変更されません。つまり、常駐セットのサイズは一定であり、割り当ては可変です。最初に一定数の物理ブロックが各プロセスに割り当てられ、プロセスの実行中に状況に応じて適切に増減できます。つまり、常駐セットのサイズは可変です

部分置換: ページフォルトが発生した場合、プロセス自身の物理ブロックのみを置換対象として選択できます。グローバル置換: オペレーティング システムによって予約された空き物理ブロックをページ フォールト プロセスに割り当てることも、他のプロセスが保持する物理ブロックを外部メモリに置き換えてからページ フォールト プロセスに割り当てることもできます。

1692278090778

固定割り当ての部分置換: システムは各プロセスに特定の数の物理ブロックを割り当てますが、これは実行全体を通じて変更されません。プロセスの実行中にページ フォールトが発生した場合、プロセスのメモリ内のページから 1 ページだけを選択して交換し、必要なページをロードできます。この戦略の欠点は、各プロセスに物理ブロックをいくつ割り当てるべきかを最初に決定するのが難しいことです。(この戦略を採用するシステムは、プロセスのサイズ、優先度、またはプログラマが指定したパラメータに基づいて、プロセスに割り当てられるメモリ ブロックの数を決定できます)

変数割り当てのグローバル置換: 各プロセスには、最初に特定の数の物理ブロックが割り当てられます。オペレーティング システムは、空き物理ブロックのキューを維持します。プロセス内でページフォルトが発生した場合、空き物理ブロックが取り出してプロセスに割り当てますが、空き物理ブロックがない場合は、外部メモリからロックされていないページを選択してスワップアウトし、物理ブロックをスワップアウトします。ページフォールトが発生したプロセスに割り当てられます。この戦略を使用すると、プロセス内でページ フォールトが発生するたびに新しい物理ブロックが取得され、空き物理ブロックがなくなった場合にのみ、システムはロックされていないページを選択して呼び出すようになります。転送対象として選択されるページは、システム内の任意のプロセスのページである可能性があるため、選択されたプロセスが所有する物理ブロックが減少し、ページ フォールト率が増加します。

可変割り当て部分置換: 開始時に各プロセスに一定数の物理ブロックが割り当てられます。プロセス内でページ フォールトが発生した場合、プロセス自身の物理ブロックのうち 1 つだけが外部メモリからスワップ アウトできます。プロセスの実行中に頻繁にページミスが発生する場合、プロセスのページミス率の傾向が適切なレベルに達するまで、システムはさらにいくつかの物理ブロックをプロセスに割り当てます。逆に、プロセスのページミス率が特に低い場合は、システムはプロセスにさらに物理ブロックを割り当てます。プロセスに与えられる物理ブロック。

変数割り当てグローバル置換: ページが欠落するたびに新しい物理ブロックを割り当てます
変数割り当てローカル置換:ページ フォールトの頻度に応じて、プロセスの物理ブロックを動的に増減します。

ページをロードするタイミング

1. 事前ページング戦略: 局所性の原則によれば、複数の隣接するページを一度にロードする方が、一度に 1 ページをロードするよりも効率的である可能性があります。しかし、事前に読み込まれたページのほとんどがアクセスされていない場合、それは非効率的です。そのため、近い将来にアクセスされる可能性のあるページを事前に予測してメモリに読み込むことは可能ですが、現状の予測成功率は50%程度にとどまっています。したがって、この戦略は主にプロセスの最初の呼び出しに使用され、プログラマはどの部分を最初に呼び出す必要があるかを指定します。

2. 要求ページング戦略: プロセスが動作中に欠落ページを検出すると、欠落ページがメモリーに転送されます。この戦略で転送されたページには確実にアクセスされますが、一度に 1 ページしか転送できず、各ページ転送にはディスク I/O 操作が必要なため、I/O オーバーヘッドが大きくなります。

1692278526654

1692278560149

1692278595846

ジッター(バンプ)現象

ちょうどスワップアウトされたページはすぐにメモリからスワップアウトされ、ちょうどスワップインされたページはすぐに外部メモリからスワップアウトされます。この頻繁なページ スケジューリング動作はジッター、またはスラッシングと呼ばれます。スラッシングの主な理由は、プロセスによって頻繁にアクセスされるページ数が使用可能な物理ブロックの数よりも多いことです (プロセスに十分な物理ブロックが割り当てられていない)。

ワーキングセット

常駐セット: リクエスト ページング ストレージ管理でプロセスに割り当てられたメモリ ブロックのセットを指します。

ワーキング セット: 一定期間中にプロセスによって実際にアクセスされたページのセットを指します。

1692278752133

ワーキング セット サイズはウィンドウ サイズよりも小さい場合があります。実際のアプリケーションでは、オペレーティング システムはプロセスのワーキング セット サイズをカウントし、ワーキング セット サイズに基づいてプロセスにいくつかのメモリ ブロックを割り当てることができます。例: ウィンドウ サイズが 5 で、一定期間監視した後、特定のプロセスの最大ワーキング セットが 3 であることがわかりました。これは、プロセスの局所性が高く、3 つを超えるメモリ ブロックを割り当てることができることを意味します。プロセスの実行要件を満たすプロセス。

一般に、常駐セットのサイズをワーキング セットのサイズより小さくすることはできません。小さくしないと、プロセス中にページ フォールトが頻繁に発生します。

1692278888186

6.5 メモリマップされたファイル

1692278943660

メモリ マップド ファイル - オペレーティング システムによって上位レベルのプログラマに提供される機能 (システム コール>

プログラマがファイル データにアクセスしやすくする

複数のプロセスで同じファイルを共有するのに便利

従来のファイル アクセス方法:
オープン システム コール - ファイルをオープンします
。 シーク システム コール - 読み取りおよび書き込みポインタを特定の位置に移動します。
読み取りシステム コール - 読み取りおよび書き込みポインタが指す位置からデータを読み取ります (ディスクからディスクに読み取ります)。メモリ)
write システム コール - メモリ内の指定されたデータをディスクに書き込みます (読み書きポインタに基づいて書き戻す場所を決定します)。

メモリマップトファイルのアクセス方法:
open システムコール 1 - ファイルをオープン
mmap システムコール 1 - ファイルをプロセスの仮想アドレス空間にマッピング
メモリにアクセスすることでファイルデータにアクセス ファイルデータの読み書きは、メモリにアクセスすることで
自動的に完了しますプロセスがファイルを閉じると、オペレーティング システムはファイルの変更されたデータを自動的にディスクに書き込みます。

1692279280193

1692279297634

3.2_5_メモリマップされたファイル_bilibili_bilibili

おすすめ

転載: blog.csdn.net/m0_57385165/article/details/132353767