オペレーティングシステム-メモリ管理
メモリ管理は、プライマリメモリを処理または管理し、実行中にメインメモリとディスクの間でプロセスを前後に移動するオペレーティングシステムの機能です。メモリ管理は、プロセスに割り当てられているか、空きであるかに関係なく、すべてのメモリ位置を追跡します。プロセスに割り当てられるメモリの量をチェックします。どのプロセスがいつメモリを取得するかを決定します。一部のメモリが解放または割り当て解除されるたびに追跡し、それに応じてステータスを更新します。
このチュートリアルでは、メモリ管理に関連する基本的な概念について説明します。
プロセスアドレス空間
プロセスアドレス空間は、プロセスがコードで参照する論理アドレスのセットです。たとえば、32ビットアドレス指定が使用されている場合、アドレスの範囲は0〜0x7fffffffです。つまり、2 ^ 31の可能な数で、理論上の合計サイズは2ギガバイトです。
オペレーティングシステムは、プログラムへのメモリ割り当て時に論理アドレスを物理アドレスにマッピングします。メモリが割り当てられる前後のプログラムで使用されるアドレスには3つのタイプがあります-
SN | メモリアドレスと説明 |
---|---|
1 | Symbolic addresses ソースコードで使用されているアドレス。変数名、定数、および命令ラベルは、シンボリックアドレス空間の基本要素です。 |
2 | Relative addresses コンパイル時に、コンパイラはシンボリックアドレスを相対アドレスに変換します。 |
3 | Physical addresses ローダーは、プログラムがメインメモリにロードされるときにこれらのアドレスを生成します。 |
仮想アドレスと物理アドレスは、コンパイル時とロード時のアドレスバインディングスキームで同じです。仮想アドレスと物理アドレスは、実行時のアドレスバインディングスキームが異なります。
プログラムによって生成されたすべての論理アドレスのセットは、 logical address space。これらの論理アドレスに対応するすべての物理アドレスのセットは、physical address space.
仮想アドレスから物理アドレスへのランタイムマッピングは、ハードウェアデバイスであるメモリ管理ユニット(MMU)によって行われます。MMUは、次のメカニズムを使用して仮想アドレスを物理アドレスに変換します。
ベースレジスタの値は、ユーザープロセスによって生成されたすべてのアドレスに追加され、メモリに送信されるときにオフセットとして扱われます。たとえば、ベースレジスタ値が10000の場合、ユーザーがアドレスロケーション100を使用しようとすると、ロケーション10100に動的に再割り当てされます。
ユーザープログラムは仮想アドレスを扱います。実際の物理アドレスは表示されません。
静的負荷と動的負荷
静的ロードと動的ロードのどちらを選択するかは、コンピュータプログラムの開発時に行います。プログラムを静的にロードする必要がある場合は、コンパイル時に、外部プログラムやモジュールの依存関係を残さずに、完全なプログラムがコンパイルおよびリンクされます。リンカは、オブジェクトプログラムを他の必要なオブジェクトモジュールと組み合わせて、論理アドレスも含む絶対プログラムにします。
動的にロードされたプログラムを作成している場合、コンパイラーはプログラムをコンパイルし、動的に含めたいすべてのモジュールについて、参照のみが提供され、残りの作業は実行時に行われます。
読み込み時、 static loading、実行を開始するために、アブソリュートプログラム(およびデータ)がメモリにロードされます。
使用している場合 dynamic loading、ライブラリの動的ルーチンは、再配置可能な形式でディスクに保存され、プログラムで必要な場合にのみメモリにロードされます。
静的リンクと動的リンク
上で説明したように、静的リンクを使用する場合、リンカーは、プログラムに必要な他のすべてのモジュールを1つの実行可能プログラムに結合して、実行時の依存関係を回避します。
ダイナミックリンクを使用する場合、実際のモジュールまたはライブラリをプログラムにリンクする必要はありません。コンパイルおよびリンク時にダイナミックモジュールへの参照が提供されます。Windowsのダイナミックリンクライブラリ(DLL)とUnixの共有オブジェクトはダイナミックライブラリの良い例です。
スワッピング
スワッピングは、プロセスをメインメモリから一時的にスワップ(または移動)してセカンダリストレージ(ディスク)に移動し、そのメモリを他のプロセスで使用できるようにするメカニズムです。後で、システムはプロセスをセカンダリストレージからメインメモリにスワップバックします。
パフォーマンスは通常、スワッピングプロセスの影響を受けますが、複数の大きなプロセスを並行して実行するのに役立ちます。それが理由です。 Swapping is also known as a technique for memory compaction。
スワッピングプロセスにかかる合計時間には、プロセス全体をセカンダリディスクに移動してからプロセスをメモリにコピーするのにかかる時間と、プロセスがメインメモリを回復するのにかかる時間が含まれます。
ユーザープロセスのサイズが2048KBで、スワッピングが行われる標準のハードディスクでは、データ転送速度が1秒あたり約1MBであると仮定します。1000Kプロセスのメモリへの、またはメモリからの実際の転送には、
2048KB / 1024KB per second
= 2 seconds
= 2000 milliseconds
インタイムとアウトタイムを考慮すると、4000ミリ秒に加えて、プロセスがメインメモリを取り戻すために競合するその他のオーバーヘッドが必要になります。
メモリ割り当て
メインメモリには通常2つのパーティションがあります-
Low Memory −オペレーティングシステムはこのメモリに常駐します。
High Memory −ユーザープロセスはハイメモリに保持されます。
オペレーティングシステムは、次のメモリ割り当てメカニズムを使用します。
SN | メモリの割り当てと説明 |
---|---|
1 | Single-partition allocation このタイプの割り当てでは、再配置レジスタスキームを使用して、ユーザープロセスを相互に保護し、オペレーティングシステムのコードとデータを変更しないようにします。再配置レジスタには最小の物理アドレスの値が含まれますが、制限レジスタには論理アドレスの範囲が含まれます。各論理アドレスは、制限レジスタよりも小さくする必要があります。 |
2 | Multiple-partition allocation このタイプの割り当てでは、メインメモリはいくつかの固定サイズのパーティションに分割され、各パーティションには1つのプロセスのみが含まれる必要があります。パーティションが空いている場合、プロセスは入力キューから選択され、空いているパーティションにロードされます。プロセスが終了すると、パーティションは別のプロセスで使用できるようになります。 |
断片化
プロセスがロードされてメモリから削除されると、空きメモリスペースが小さな断片に分割されます。サイズが小さいためにプロセスをメモリブロックに割り当てることができず、メモリブロックが未使用のままである場合があります。この問題はフラグメンテーションとして知られています。
断片化には2つのタイプがあります-
SN | 断片化と説明 |
---|---|
1 | External fragmentation 合計メモリスペースは、要求を満たすか、プロセスをその中に常駐させるのに十分ですが、連続していないため、使用できません。 |
2 | Internal fragmentation プロセスに割り当てられたメモリブロックが大きくなっています。メモリの一部は、別のプロセスで使用できないため、未使用のままになります。 |
次の図は、断片化によってメモリが浪費される可能性があり、圧縮技術を使用して断片化されたメモリからより多くの空きメモリを作成する方法を示しています。
外部の断片化は、メモリの内容を圧縮またはシャッフルして、すべての空きメモリを1つの大きなブロックにまとめることで減らすことができます。圧縮を実行可能にするには、再配置を動的にする必要があります。
最小のパーティションを効果的に割り当てることで、内部の断片化を減らすことができますが、プロセスには十分な大きさです。
ページング
コンピュータは、システムに物理的にインストールされている量よりも多くのメモリをアドレス指定できます。この余分なメモリは実際には仮想メモリと呼ばれ、コンピュータのRAMをエミュレートするように設定されたハードのセクションです。ページング技術は、仮想メモリの実装において重要な役割を果たします。
ページングは、プロセスのアドレス空間をと呼ばれる同じサイズのブロックに分割するメモリ管理手法です。 pages(サイズは2の累乗で、512バイトから8192バイトの間です)。プロセスのサイズは、ページ数で測定されます。
同様に、メインメモリは、と呼ばれる(物理)メモリの小さな固定サイズのブロックに分割されます。 frames また、フレームのサイズはページのサイズと同じに保たれ、メインメモリを最適に利用し、外部の断片化を回避します。
アドレス変換
ページアドレスは呼ばれます logical address によって表されます page number そしてその offset。
Logical Address = Page number + page offset
フレームアドレスは呼ばれます physical address で表されます frame number そしてその offset。
Physical Address = Frame number + page offset
と呼ばれるデータ構造 page map table プロセスのページと物理メモリ内のフレームとの関係を追跡するために使用されます。
システムがフレームを任意のページに割り当てると、この論理アドレスが物理アドレスに変換され、プログラムの実行中に使用されるページテーブルへのエントリが作成されます。
プロセスを実行する場合、対応するページが使用可能なメモリフレームにロードされます。8Kbのプログラムがあるが、特定の時点でメモリが5Kbしか収容できないとすると、ページングの概念が浮かび上がります。コンピューターのRAMが不足すると、オペレーティングシステム(OS)は、アイドル状態または不要なメモリページをセカンダリメモリに移動して、RAMを他のプロセス用に解放し、プログラムで必要なときにそれらを戻します。
このプロセスは、OSがメインメモリからアイドルページを削除し続け、セカンダリメモリに書き込み、プログラムで必要なときに元に戻すプログラムの実行中も継続します。
ページングの長所と短所
これがページングの長所と短所のリストです-
ページングは外部の断片化を減らしますが、それでも内部の断片化に悩まされます。
ページングは実装が簡単で、効率的なメモリ管理手法として想定されています。
ページとフレームのサイズが等しいため、交換が非常に簡単になります。
ページテーブルには追加のメモリスペースが必要なため、RAMが小さいシステムには適さない場合があります。
セグメンテーション
セグメンテーションは、各ジョブが異なるサイズのいくつかのセグメントに分割されるメモリ管理手法であり、関連する機能を実行する部分を含むモジュールごとに1つです。各セグメントは、実際にはプログラムの異なる論理アドレス空間です。
プロセスを実行する場合、対応するセグメンテーションは非連続メモリにロードされますが、すべてのセグメントは使用可能なメモリの連続ブロックにロードされます。
セグメンテーションメモリ管理はページングと非常によく似ていますが、ここではセグメントは可変長であり、ページングページと同様に固定サイズです。
プログラムセグメントには、プログラムのメイン機能、ユーティリティ機能、データ構造などが含まれます。オペレーティングシステムはsegment map tableすべてのプロセスと空きメモリブロックのリスト、セグメント番号、サイズ、メインメモリ内の対応するメモリ位置。テーブルには、セグメントごとに、セグメントの開始アドレスとセグメントの長さが格納されます。メモリ位置への参照には、セグメントとオフセットを識別する値が含まれます。