目次
目次
1. 仮想メモリの概念
(1) 従来のストレージ管理方式の特徴
① 単発:ジョブは実行を開始する前に一度にメモリにロードする必要があります。ジョブが非常に大きい場合は、メモリに完全にロードできず、大きなジョブを実行できません。また、多数のジョブを実行する必要がある場合、メモリにすべてのジョブを収容できないため、少数のジョブしか実行できず、マルチプログラミングの同時実行性が低下します。
②常駐性:一度メモリにロードされたジョブは、ジョブが終了するまでメモリ内に残ります。実際、一定期間において、正常に実行するためにアクセスする必要があるのはジョブのデータのごく一部だけであり、一時的に使用されていないメモリ内に存在するデータは貴重なメモリ リソースを浪費します。
(2) 地域性の原則
①時間的局所性:プログラム内の命令を実行すると、すぐにまた実行される可能性が高く、あるデータにアクセスすると、そのデータはすぐに再度アクセスされる可能性が高い。(プログラム内にループが多いため)
②空間的局所性:プログラムが特定の記憶装置にアクセスすると、すぐに近くの記憶装置にもアクセスされる可能性が非常に高くなります。(大量のデータが連続してメモリに格納され、プログラムの命令も順次メモリに格納されるため)
上記の特性に基づいて、キャッシュ テクノロジは時間局所性を利用して最近使用した命令とデータをキャッシュ メモリに保存し、CPU とメモリの速度の不一致の問題を解決し、コンピュータ システムのパフォーマンスを向上させます。仮想メモリ技術は、ローカル空間に応じて「内部メモリと外部メモリ」の2階層のメモリ構造を構築し、キャッシュとメモリの論理的な拡張を実現します。
(3) 仮想メモリの定義と特徴
局所性の原理に基づき、プログラムをロードする際に、プログラムのすぐに使用される部分をメモリにロードし、一時的に使用されない部分を外部メモリに残すことで、プログラムの実行を開始できます。プログラムの実行中、アクセスされた情報が内部メモリにない場合、オペレーティング システムは必要な情報を外部ストレージから内部メモリに転送し、プログラムの実行を継続します。
メモリ空間が十分でない場合、オペレーティング システムはメモリ内の一時的に使用されていない情報を外部メモリにスワップアウトする必要があります。ユーザーの観点からは、実際のメモリよりもはるかに大きなメモリ、つまり仮想メモリがあるように見えます。
仮想メモリのサイズは、メモリと外部メモリの単純な追加ではなく、コンピュータのアドレス構造によって決まります。仮想メモリには次の 4 つの主な特徴があります。
①離散性。それは、仮想メモリ管理技術を導入する前提となる不連続性です。
②複数回。ジョブはメモリへの複数の呼び出しに分割されます。
③互換性がある。ジョブの実行中に交換およびスワップアウトすることができます。
④仮想性。メモリ容量を論理的に拡張できます。
(4) 仮想メモリ技術の実装
①ページングストレージ管理のリクエスト
②分割ストレージ管理を依頼する
③リクエストセクションページの保管管理
2. リクエストページの管理
デマンドページングは、一部のジョブをメモリ上にロードできるページングストレージ管理をベースに、デマンドページング機能(メモリ上にページが存在せず、ページング機能を介して転送される)とページ置換機能(一時的に未使用のページを外部メモリに交換する)を追加し、仮想メモリ機能をサポートします。現在、デマンド ページング システムは、仮想メモリを実装するために最も一般的に使用されている方法です。コンピュータ システムには、一定量のメモリと外部ストレージが必要ですが、それに加えて、ページ テーブル メカニズム、ページ フォルト割り込みメカニズム、およびアドレス変換メカニズムも必要です。
(1) ページテーブルの仕組み
基本ページング システムとは異なり、リクエスト ページング システムでは一度にページをメモリにロードする必要がないため、アクセスするページがメモリにない場合があります。この問題を見つけて解決するために、基本ページング ページ テーブルに基づいて 4 つのフィールドが追加されます。
(2) ページフォルト割り込み機構
デマンド ページング システムでは、アクセスされるページがメモリ内にない場合にページ フォールトが発生し、オペレーティング システムのページ フォールト ハンドラーによって処理されます。このとき、ページ欠落プロセスはブロックされてブロッキング キューに入れられ、ページングが完了するとウェイクアップされてレディ キューに戻されます。
メモリ内に空きブロックがある場合は、プロセスに空きブロックを割り当て、不足しているページをブロックにロードし、ページ テーブル内の対応するページ テーブル エントリを変更します。
メモリ内に空きブロックがない場合、ページ置換アルゴリズムによってページが選択されて削除されますが、メモリ中にページが変更された場合は、外部メモリに書き戻す必要があります。変更されていないページは、外部ストレージに書き戻す必要はありません。
[注意] : 1 命令中に複数のページ フォルト割り込みが発生する可能性があります。ページ フォルト割り込みは内部割り込みです (内部割り込みと外部割り込みの違いに注意してください)。
(3) アドレス変換の仕組み
基本的なページング管理に基づいて、要求ページングのアドレス変換プロセスに 3 つの新しいステップが追加されます。
①リクエストページング(ページテーブルエントリが見つかった場合の判定)
②ページ置換(ページの転送が必要ですが、空きメモリブロックがない場合)
③リクエストページテーブルの新規追加項目の修正が必要
3. ページ置換アルゴリズム
一時的に未使用の情報をメモリから外部メモリにスワップする場合、どのページをスワップアウトするかを決定するためにページ置換アルゴリズムが必要です
(1) 最適な代替 OPT
ページ フォールト率を最小限に抑えるために、今後使用されないページ、または長期間アクセスされないページを削除することを選択します。しかし、OS は次にどのページにアクセスするかを予測できないため、実際には OPT は実現できません。
[例]: システムが特定のプロセスに 3 つのメモリ ブロックを割り当てると仮定し、次のページ番号参照文字列 (これらのページは順番にアクセスされます) を考慮します: 7,0、1,2,0,3,0,4,2,3,0,3,2、1,2,0,1、7,0,1、OPT アルゴリズムを使用してアクセス プロセス中のページ フォールトの数とページ フォールト率を計算します。
(2) 先入れ先出しページ置換FIFO
最も早くメモリに入ったページ(または最も長くメモリに残ったページ)が削除されるたびに、メモリにロードされた順序に従ってページがソートされ、置換時に先頭ページを選択できるようになります。
[例]: システムがプロセスに 3 つのメモリ ブロックを割り当てると仮定し、次のページ番号引用文字列を考慮します: 3,2,1,0,3,2,4,3,2,1,0,4、FIFO アルゴリズムに従ってページ フォールト率を計算します。
(3) 交換用 LRU が最近長期間使用されていない
最近使用されておらず、最も長い間使用されていないページが削除されるたびに、ページ テーブル エントリのアクセス フィールドを使用して、ページが最後に訪問してからの経過時間を記録することができ、既存のページの中で最も大きな値を持つページが削除対象として選択されます。
[例]: システムがプロセスに 4 つのメモリ ブロックを割り当てると仮定し、次のページ番号参照文字列を検討します: 1,8, 1, 7,8,2, 7,2, 1,8,3,8,2, 1,3,1, 7,1,3, 7、LRU アルゴリズムを使用してページ フォールト率を計算します。
(4) クロック交換 CLOCK
①シンプルな時計
各ページにアクセス ビットを設定し、リンク ポインタを介してメモリ内のページを循環キューにリンクします。ページがアクセスされると、そのアクセス ビットは 1 になります。ページをリタイアする必要がある場合は、ページのアクセス ビットを確認するだけです。0 の場合はスワップアウトするページを選択します。1 の場合は 0 に設定し、当面はスワップアウトせず、次のページのチェックを続けます。最初のスキャン ラウンドのすべてのページが 1 の場合、これらのページのアクセス ビットを順番に 0 に設定し、2 回目のスキャンを実行します (単純な CLOCK アルゴリズムにより削除されたページが選択され、最大 2 ラウンドのスキャンが実行されます)。
[例]:システムがプロセスに 5 つのメモリ ブロックを割り当てると仮定し、次のページ番号参照文字列を考慮します: 1、3、4、2、5、6、3、4、7
②クロックの向上
単純なクロック置換アルゴリズムでは、ページが最近アクセスされたかどうかのみが考慮されます。ただし、削除されたページが変更されて古くなった場合にのみ、I/O を実行して外部メモリに書き戻す必要があります。したがって、ページが最近アクセスされたかどうかを考慮することに加えて、ページが変更されたかどうかも考慮する必要があります。他のすべての条件は同じです。I/O 操作を避けるために、変更されていないページを最初に削除する必要があります。変更ビット = 0 はページが変更されていないことを示し、変更ビット = 1 はページが変更されたことを示します。各ページの状態は(アクセスビット、変更ビット)の形で表現できます。たとえば、(1, 1) は、ページが最近アクセスされ、変更されたことを示します。
置換される可能性のあるすべてのページを循環キューに配置します。
第 1 ラウンド: 現在の位置から最初の(0,0)フレームまでのスキャン (ページが最近アクセスまたは変更されていないことを示し、最も削除されたページであることを示します) が置換に使用されます。このスキャンのラウンドではフラグ ビットは変更されません。
2 番目のラウンド: 1 番目のスキャンが失敗した場合は、再スキャンして最初の(0,1)フレーム (ページが最近アクセスされていないが、変更されており、適切な削除ではないことを示します) を見つけて置換します。このラウンドでは、スキャンされたすべてのフレーム アクセス ビットが 0 に設定されます。
3 ラウンド目: 2 ラウンド目のスキャンが失敗した場合は、再スキャンして置換用の最初の(0, 0)フレームを見つけます。このラウンドのスキャンではフラグ ビットは変更されません。
4 番目のラウンド: 3 番目のラウンドのスキャンが失敗した場合は、再スキャンして置換用の 最初の(0,1)フレームを見つけます。
改良された CLOCK 置換アルゴリズムにより、削除されたページが選択され、最大 4 ラウンドのスキャンが実行されます。
4. ページ割り当て戦略
(1) ページ割り当て置換戦略
常駐セット: ページング ストレージ管理でプロセスに割り当てられた物理ブロックのセットを要求します。通常、プロセスの合計サイズよりも小さいです。
常駐セットが小さすぎると、頻繁にページ フォールトが発生し、システム パフォーマンスに影響を与えます。常駐セットが大きすぎると、マルチプログラミングの同時実行性が低下します。
①固定パーティションの部分置換: プロセスの種類、またはプログラマやシステム管理者の提案に従って、各プロセスに固定ページ数のメモリ空間を割り当てます。実行中は変化しません。ページが欠落している場合も、このプロセス ページの範囲内で置き換えられます。
②可変パーティションのグローバル置換: 初めに、各プロセスに一定数の物理ブロックが割り当てられます。オペレーティング システムは、空き物理ブロックのキューを維持します。プロセスでページフォルトが発生すると、空き物理ブロックからブロックが取得されてプロセスに割り当てられますが、空き物理ブロックがない場合は、ロックされていないページを選択して外部メモリからスワップアウトし、その物理ブロックをページ欠落プロセスに割り当てます。呼び出されるページは、システム内のどのプロセスのページであってもよいため、選択されたプロセスが所有する物理ブロックが減少し、ページフォールト率が増加します。
③可変パーティションの部分置き換え: 初めは各プロセスに一定数の物理ブロックが割り当てられます。プロセス内でページフォルトが発生すると、プロセス自身の物理ブロックのうちの 1 つだけが外部メモリからスワップアウトできます。プロセスが動作中にページを頻繁に欠落する場合、システムは、プロセスのページ フォールト率の傾向が適切になるまで、さらにいくつかの物理ブロックをプロセスに割り当てます。逆に、プロセスのページ フォールト率が動作中に特に低い場合は、プロセスに割り当てられる物理ブロックを適切に減らすことができます。
[注]: 変数割り当てのグローバル順列は、ページ フォールトがある限り新しい物理ブロックを割り当てます。変数割り当てのローカル順列は、ページ フォールトの頻度に応じてプロセスの物理ブロックを動的に増減します。
(2) ページング戦略
①いつ電話するか
1)プレページング戦略: 局所性の原則によれば、一度に 1 ページだけを転送するよりも、一度に複数の隣接するページを転送する方が効率的です。ただし、一度に読み込まれるページが多すぎると、CPU の使用率も低下する可能性があります。したがって、予測に基づいた事前ページング戦略を採用し、近い将来にアクセスが予想されるページを事前に調整する必要があります。現時点では、このページング戦略の成功率はわずか 50% であるため、この戦略は主にプロセスの最初の転送に使用され、プログラマはどのページを最初に転送するかを指定します。
2)デマンドページング戦略: プロセスが動作中にページフォールトを検出すると、失われたページをメモリに転送します。この戦略によって転送されるページは確実にアクセスされるため、実装は簡単ですが、一度に 1 ページしか転送されず、多くのページが送受信されると過剰な I/0 オーバーヘッドが消費されます。
[注]:プリロードは実行前にロードされ、デマンド ページングは実行中に必要に応じてロードされます。通常、2 つのページング戦略が同時に存在します。
②乗り換え先
リクエスト ページング システムでは、通常、外部メモリはスワップ領域とファイル領域の 2 つの部分に分割され、前者はスワップ ページの格納に使用され、後者はファイルの格納に使用されます。
したがって、この問題は次の 3 つのアプローチで構成されます。
1) システムに十分なスワップ領域がある場合、すべてのページをスワップ領域から転送できます (ただし、プロセスを実行する前に、ファイル領域からスワップ領域にコピーする必要があります)
2) システムに十分なスワップ領域が不足している場合、変更されていないファイルはすべてファイル領域からインポートされ、スワップアウト時にディスクに書き戻す必要はなく、次回にファイルから転送する必要がありますが、変更される可能性のあるファイルについては、スワップアウト時にスワップ領域に書き戻し、次回スワップ領域から転送します。
3) NIX モード: 未実行のページはすべてファイル領域から転送され、実行済みでスワップアウトされたページについては、次回の転送時にスワップ領域から転送されます。
5. ジッターとワーキングセット
(1) ジッタ
スワップアウトされたばかりのページの場合は、すぐにメモリにスワップされ、スワップインされたばかりのページは、すぐにメモリからスワップアウトされます。この頻繁なページ スワップ動作はジッターと呼ばれます。
ジッターの主な理由は、プロセスに割り当てられている物理ブロックが少なすぎることと、プロセスによって頻繁にアクセスされるページ数が使用可能な物理ブロックの数よりも多いため、プロセスが実行時間よりもスワップに多くの時間を費やし、プロセスがジッター状態にあることです。
(2) ワークセット
ワーキング セットとは、一定期間内にプロセスによって実際にアクセスされたページの集合を指します (常駐セットと区別することに注意してください。通常、ワーキング セットより小さくありません)。ワーキング セットは時間とウィンドウ サイズによって決まります。システムによって設定されたワーキング セット ウィンドウ サイズが 4 であると仮定すると、次の図の 2 つの時点でのワーキング セットは次のようになります。