メモリ管理(オペレーティングシステム)
オペレーティングシステムでは、 メモリ管理はコンピューターのプライマリメモリを管理する機能です。:pp-105–208
メモリー管理機能は、各メモリー位置の状態( 割り当て済みまたは空き)を追跡します。競合するプロセス間でメモリをどのように割り当てるか、どのメモリを取得するか、受信するタイミング、および許可されるメモリ量を決定します。メモリが割り当てられると、どのメモリ位置が割り当てられるかが決まります。メモリが解放または未割り当てになるタイミングを追跡し、ステータスを更新します。
これは、オペレーティングシステムによって割り当てられたメモリをプロセスが管理する方法であるアプリケーションメモリ管理とは異なります。
メモリ管理技術
単一の連続した割り当て
単一割り当ては、最も単純なメモリ管理手法です。通常、オペレーティングシステム用に予約されている小さな部分を除いて、すべてのコンピューターのメモリは、単一のアプリケーションで使用できます。 MS-DOSは、この方法でメモリを割り当てるシステムの例です。単一のアプリケーションを実行する組み込みシステムでもこの手法を使用できます。
単一の連続した割り当てを使用するシステムは、メモリの内容を交換してユーザーを切り替えることにより、マルチタスクを実行できます。 MUSICオペレーティングシステムの初期バージョンでは、この手法が使用されていました。
パーティション分割
パーティション割り当ては、プライマリメモリを複数のメモリパーティションに分割します。通常、メモリの連続した領域です。各パーティションには、特定のジョブまたはタスクのすべての情報が含まれる場合があります。メモリ管理は、ジョブの開始時にパーティションをジョブに割り当て、ジョブの終了時にパーティションの割り当てを解除することで構成されます。
パーティション化された割り当てには、通常、ジョブが互いに干渉したりオペレーティングシステムに干渉したりするのを防ぐためのハードウェアサポートが必要です。 IBM System / 360は、 ロックとキーの手法を使用していました。他のシステムは、パーティションの制限を含むベースおよび境界レジスタを使用し、無効なアクセスにフラグを立てました。 UNIVAC 1108 ストレージ制限レジスタには、命令とデータ用に個別のベース/バウンドセットがありました。システムは、メモリインターリーブを利用して、 iバンクとdバンクと呼ばれるものを別々のメモリモジュールに配置しました。
パーティションは、初期プログラムロード(IPL)またはブート時に 、またはコンピューターオペレーターによって定義されるstaticか、特定のジョブに対して自動的に作成されるdynamicのいずれかです。 固定数のタスクを使用した IBM System / 360オペレーティングシステムのマルチプログラミング (MFT)は静的パーティションの例であり、可変数のタスクを使用したマルチプログラミング (MVT)は動的の例です。 MVTと後続バージョンでは、 領域という用語を使用して、動的パーティションを他のシステムの静的パーティションと区別します。:73
パーティションは、Burroughs Corporation B5500などのハードウェアタイプのメモリ 、またはPDP-10やGE-635などのベースおよび境界レジスタを使用して再配置可能です。再配置可能なパーティションは、連続した物理メモリの大きなチャンクを提供するために圧縮できます。圧縮は、メモリの「使用中」領域を移動して、プロセスの終了によって引き起こされるメモリの「ホール」または未使用領域を排除し、より大きな連続した空き領域を作成します。
一部のシステムでは、追加のメモリを解放するために、パーティションをセカンダリストレージにスワップアウトできます。 IBMのタイムシェアリングオプション (TSO)の初期バージョンでは、ユーザーを単一のタイムシェアリングパーティションに入れ換えました。
ページメモリ管理
ページ割り当ては、コンピューターのプライマリメモリをページフレームと呼ばれる固定サイズの単位に分割し、プログラムの仮想アドレス空間を同じサイズのページに分割します 。ハードウェアメモリ管理ユニットは、ページをフレームにマップします。物理メモリは、アドレス空間が連続しているように見えながら、ページ単位で割り当てることができます。
通常、ページメモリ管理では、各ジョブは独自のアドレススペースで実行されます。ただし、単一のアドレス空間内ですべてのプロセスを実行するIBM iや単一の16MiBですべてのジョブを実行したIBM OS / VS2 SVSなど、単一のアドレス空間内ですべてのプロセスを実行する単一のアドレス空間オペレーティングシステムがあります仮想アドレス空間。
システムが必要に応じてプライマリメモリとセカンダリメモリの間でページを移動できる場合、ページメモリをデマンドページ化できます。
セグメント化されたメモリ管理
セグメントメモリは、ユーザーのプログラムに「線形で連続したアドレス空間」を提供しない唯一のメモリ管理技術です。p.165 セグメントとは、通常、コードプロシージャやコードなどの情報の論理グループに対応するメモリ領域です。データ配列。セグメントには、通常、メモリ内のセグメントの物理アドレス、サイズ、およびアクセス保護ビットやステータス(スワップイン、スワップアウトなど)などの他のデータを含むセグメントテーブルの形式のハードウェアサポートが必要です。
メモリ参照は特定のセグメントに関連しており、ハードウェアはアプリケーションがそのセグメントに定義されていないメモリを参照することを許可しないため、セグメンテーションは他のスキームよりも優れたアクセス保護を可能にします。
ページングの有無にかかわらず、セグメンテーションを実装することができます。ページングのサポートがない場合、セグメントは、必要に応じてメモリのスワップインおよびメモリアウトが行われます。ページングのサポートでは、通常、ページはスワッピングの単位であり、セグメンテーションは追加のセキュリティレベルを追加するだけです。
セグメント化されたシステムのアドレスは、通常、セグメントIDと、セグメントベースアドレスに対するオフセットで構成され、オフセットゼロとして定義されます。
Intel IA-32(x86)アーキテクチャにより、プロセスは、それぞれ最大4GiBの最大16,383セグメントを持つことができます。 IA-32セグメントは、ページングハードウェアによって提供される仮想アドレス空間であるコンピューターの線形アドレス空間の下位区分です。
Multicsオペレーティングシステムは、おそらくセグメントメモリを実装する最も有名なシステムです。 Multicsセグメントは、最大256ページのコンピューターの物理メモリの下位区分です。各ページのサイズは1K 36ビットワードであり、最大セグメントサイズは1MiB(Multicsで使用される9ビットバイト)です。プロセスには最大4046個のセグメントを含めることができます。
ロールアウト/ローリン
ロールアウト/ロールインは、実行中のプログラムの非共有コードとデータ全体を補助メモリ(ディスクまたはドラム)にスワップアウトして、別のタスクのために主記憶域を解放するコンピュータオペレーティングシステムのメモリ管理技術です。プログラムは、「デマンドエンドまたは…長いイベントを待っているとき」に展開されます。ロールアウト/ロールインは、ユーザーの「思考時間」がスワップを行う時間と比較して比較的長いタイムシェアリングシステムで一般的に使用されていました。
ページングやセグメンテーションなどの仮想ストレージとは異なり、ロールアウト/ロールインは特別なメモリ管理ハードウェアを必要としません。ただし、システムにメモリマップやベースおよび境界レジスタなどの再配置ハードウェアがない限り、プログラムを元のメモリ位置にロールバックする必要があります。ロールアウト/ロールインは、主に仮想メモリに置き換えられました。
ロールアウト/ロールインは、可変タスク数(MVT)を使用したOS / 360マルチプログラミングのオプション機能でした
ロールアウト/ロールインにより、特定のジョブを元の指定された領域を超えて一時的に動的に拡張できます。ジョブにさらにスペースが必要な場合、ロールアウト/ロールインは、ジョブが使用するために未割り当てのストレージを取得しようとします。そのような未割り当てのストレージがない場合、別のジョブがロールアウトされます(つまり、補助ストレージに転送されます)。そのため、その領域は最初のジョブで使用されます。最初のジョブによって解放されると、この追加のストレージは、(1)未割り当てのストレージとして(それがソースだった場合)、または(2)メインストレージに戻される(ロールイン)ジョブを受信するために再び使用可能になります。
OS / 360のロールイン/ロールアウトはバッチジョブにのみ使用され、ロールインは領域を借用するジョブステップが終了するまで発生しないことに注意してください。