導入

コンピューティングでは、仮想メモリメカニズムは 1960 年代に開発され、特にプログラムを実行できるようにすることを目的として、大容量メモリ(ハードディスクタイプ、または以前はドラム) の使用に基づいていました。中央メモリが必要以上に少ないハードウェア環境(または、別の見方をすると、中央メモリが保持できる以上のプログラムを実行することになります!)
仮想メモリにより次のことが可能になります。
- マルチプログラミング率を高めるため。
- メモリ保護メカニズムを実装する。
- プロセス間でメモリを共有します。

歴史的
1962 年に出版された James Kilburn による参考記事では、ページ仮想メモリ管理システムを備え、フェライト トロイドを備えた中央メモリの拡張としてドラムを使用した最初のコンピュータであるAtlasについて説明しています。
現在、特定のスーパーコンピューターやリアルタイム組み込みシステムを除き、すべてのコンピューターに仮想メモリ管理メカニズムが備わっています。
セグメンテーション
セグメンテーションにより、ユーザーの記憶とより一貫した記憶のビューが提供されます。実際、メモリを一連のページとして考慮せず (またはほとんどありません!)、プログラムのコード、データ、スタック、一連のデータなど、特定の用途に特化したスペースまたは領域として考慮します。サブルーチン、モジュール、配列など。セグメンテーションはこの組織を反映しています。
各論理オブジェクトはセグメントによって指定されます。セグメントでは、動作を使用してアドレス指定が行われます。このペア (セグメント、ディスプレイスメント) は、 limitとbaseの 2 つのフィールドを含むセグメント テーブルを使用してメモリアドレスに変換されます。ベースはセグメントの開始アドレスであり、同じセグメントの最後のアドレスを制限します。
断片化の問題
ページ分割されたシステムでは、ページの終わりでスペースが失われるという内部断片化の問題が発生します。セグメント化されたシステムでは、外部フラグメンテーションの問題が発生します。セグメント間のスペースが狭すぎて新しいフラグメントを収容できないため、このスペースが無駄になります。
メモリを圧縮することによって、つまり、これらの変更をセグメント テーブルに反映しながら、セグメントが連続するようにセグメントを移動することによって、この問題を回復することが可能です。ただし、この操作にはコストがかかります。

セグメントの共有
次の図に示すように、プロセス間でセグメントを共有することができます。この場合、2 つのプロセス Ed1 と Ed2 は同じコード セグメント (プログラム) を共有しますが、データのセグメントは互いに素でサイズが異なります。
セグメント化されたシステムでの保護
この保護は、ページングされたシステムの場合と同様に、セグメント テーブルにビットを追加することによって保証されます。
セグメント化されたメモリアーキテクチャを備えたマイクロプロセッサの例
最もよく知られている例は、Intel 8086 とその 4 つのレジスタです。
- CS、コードセグメント: 現在のプログラムを含むセグメントを指します。
- DS、データセグメント: 現在実行中のプログラムのデータを含むセグメントを指します。
- ES、 Extra Segment :プログラマに使用が委ねられているセグメントを指します。
- SS、スタックセグメント: スタックを含むセグメントを指します。
8086 の後継製品も次のように分類されています。
- 80286 は、16 MiB の物理メモリと1 GiBの仮想メモリ、つまり64 KiBの 16,384 セグメントを管理できます。
- 80386 4 GiBの物理メモリ、 64 TiBの仮想メモリ、または4 GiBの 16,384 セグメント。
