オフィスのデスクでデスクトップPCを使うプログラマーたちを上方から捉えた画像

仮想メモリーとは

仮想メモリーの定義

仮想メモリーはメモリー管理技術の一つであり、負荷が高まったオペレーティング・システム(OS)が、メモリー容量の制限を超えて動作できるよう、仮想的なメモリー領域を作成できるようにします。

基本的に、多数のコンピューター・プログラムによってメモリーが不足すると、仮想メモリーによってOSはハード・ディスク・ドライブ上の領域をRAMの拡張として利用できるようになります。

この状況は、金融にたとえると分かりやすいでしょう。コンピューターの物理メモリーを、個人の当座預金口座にあるお金だと考えてみてください。資金が底をつくまでは、すべて順調に機能します。残高が底をつくと、当座貸越保護を提供している銀行は、口座の支払いを一時的に補う当座貸越(仮想メモリー)を利用できるようにします。

このような当座貸越には、明らかな制限があります。まず、銀行が負担する金額には上限があります。また、口座に追加資金が入金されないまま、その状態をどれだけ続けられるかにも期限があります。

仮想メモリーはコンピューター・システムに不可欠な要素であり、システム全体をよりスムーズに動作させますが、恒久的な解決策ではないことに注意が必要です。あくまで緊急時に一時的なメモリーを提供するための仕組みです。いわば応急処置のようなもので、その場しのぎの対策にすぎません。

仮想メモリーは現代のコンピューティング技術による仕組みですが、その根底にある考え方は、一方の資源を別の用途に振り向けるという古くからある発想(英語では "borrow from Peter to pay Paul" と表現される)を応用したものにすぎません。

仮想メモリーの仕組み

中央処理装置(CPU)は、コンピューターの中核となる処理装置であり、さまざまな種類のメモリーを使用します。RAMは高速でアクセスしやすいメモリーですが、容量には限りがあります。一方、ハード・ディスク・ドライブ(HDD)は大容量のストレージを提供しますが、アクセス速度はRAMより低速です。

CPUには実メモリーが搭載されています。実メモリーとは、データを一時的に保持し、すぐに利用できるRAMハードウェアのことです。(プログラマーは実メモリーを物理メモリーや主記憶とも呼びます。)一方、セカンダリー・メモリーは不揮発性であり、コンピューターの電源を切って電源から切り離しても、保存されたデータは保持されます。これはRAMとは異なる点であり、そのほかの性能面にもさまざまな違いがあります。

この2種類を自動車にたとえると、RAMは派手なスポーツカーのようなものです。高速で高価ですが、運転手と同乗者が乗れる程度の小さな容量しかありません。一方、セカンダリー・メモリーは、経済的なミニバンのようなものです。速度は遅いものの、実メモリーよりはるかに大きな容量を備えています。

ハードドライブ(ハード・ディスク・ドライブ(HDD)とも呼ばれます)は、ストレージ装置と読み書き装置の両方の役割を果たします。一方、ハードディスクはHDD内部の物理的なプラッターであり、磁気データが記録される場所です。

ほとんどの場合、HDDの使用はソリッドステート・ドライブ(SSD)に置き換えられています。SSDは同様の機能を果たしますが、可動部品を必要としない不揮発性メモリー・チップのフラッシュ・メモリーを使用します。SSDは、高速性、薄型設計、低消費電力という点でHDDより優れています。

仮想メモリーは、以前使用されていたものの、その後しばらく使用されていないRAM領域を一時的に利用することで機能します。OSは、ほとんど使用されていないRAMからデータを抽出し、ハード・ディスク・ドライブのスワップ・ファイル(またはページ・ファイル)に配置します。

その後、OSは空きができたRAMをすぐに利用します。RAMから「借りた」追加のメモリーによって、システム性能の低下や目立った動作速度の低下を招くことなく、複数のプログラムを実行できるようになります。

IBM Power

IBM Powerによるモダナイゼーションとオートメーション

IBM Powerがアプリケーションのモダナイズにどのように役立つかについて、IBM Powerハイブリッドクラウド・プラットフォームのSTSMでIBMマスター・インベンターのJoe Cropperがデモを交えて説明します。

ページロジックとは?

データの世界では、ページは基本的な交換単位として機能します。仮想メモリー管理では、最小のデータ単位であるページを基本単位として使用します。ページは、連続した(隣接した)仮想アドレス空間のブロックです。

ページは通常、固定サイズです。当初、ページサイズは一律4 KBで、このサイズが長年にわたり業界標準とされてきました。最近では、より最新のシステムでは、最大2MBや1GB、さらにはそれ以上のサイズなど、かなり大きな固定サイズが採用されています。

仮想メモリーでは、ほとんどのページは4KBまたは8KBで、採用されているアーキテクチャーによって異なります。Microsoft Windows、Linux、AppleのmacOSはいずれも、4KBのページサイズを採用しています。UNIXの仮想メモリーのページサイズは、各システムのハードウェア・アーキテクチャー(32ビットまたは64ビット)に応じて決まります。(UNIXシステムでは通常、実行される各プロセスに3GB~4GBを割り当てます)。

通常、特定のOS内では、すべてのページは同じページサイズになります。この規則の例外は動的パーティショニングであり、需要に応じてさまざまなサイズのメモリーを提供します。ページを同一のサイズにすると、OSがすべてを連携させて適切に管理しやすくなります。

また、ページサイズが統一されていることで、割り当て済みメモリー・ブロック間に未使用領域が生じることで発生する外部フラグメンテーションを、OSが防止しやすくなります。その結果、利用可能なメモリーが断片化され、1つのまとまった領域として割り当てられなくなります。

ページを使用することで、OSはプロセスの論理メモリーをページ・フレームとして非連続な物理メモリーに対応付けることができます。ページ・フレームは、OSがメモリー・ページを格納するコンテナーとして使用する物理メモリー(RAM)のブロックです。ページ・フレームのサイズはページ自体のサイズと一致しており、4KBかそれ以上のサイズです。

CPUは、そのOS上で実行されるソフトウェア・プロセスが使用するメモリー位置への参照となる仮想メモリー・アドレスを生成します。プログラマーは、ページ・テーブルを主要なデータ構造として使用し、ページ・フレームの追跡と管理を行います。ページ・テーブル・エントリーは、仮想アドレスをOS内の物理アドレスにリンクするために使用されます。

仮想ページ番号(VPN)は、仮想アドレスの先頭20ビットを使用し、そのコンピューター・プロセスの仮想メモリー空間内にある仮想アドレス空間を識別します。ページ番号はページを識別し、メモリー管理装置(MMU)が物理メモリー・フレームまたはディスクからページを取得できるようにします。

一方、アドレスの残りの部分はページ・オフセットとして機能し、OS内におけるそのページの正確な物理的位置を、個々のバイト単位まで指定します。

スラッシングとページフォールトについて

理想的には、コンピューターのRAMだけでプログラムを実行するのに十分です。しかし、現代のコンピューティングでは、マルチタスク処理や複数のプログラムの同時実行が一般的であるため、メモリー割り当てプロセスは複雑になりやすくなります。この需要の高まりにより、OSで使用可能なメモリーには大きな負荷がかかります。

使用可能なメモリーが不足すると、仮想メモリーによってプログラムの実行が維持されます。しかし、この仕組みには通常、動作速度の低下という大きな代償が伴います。仮想メモリーは物理RAMよりも低速で動作します(ストレージドライブへのアクセスに時間がかかるためです)。そのため、OSが利用する仮想メモリーが増えるほど、ユーザーは性能の低下を感じやすくなります。

このような性能低下のことを「スラッシング」と呼びます。スラッシングは、OSがコードの実行ではなく、メモリーとの間でデータを頻繁に入れ替える処理に大半の処理能力を費やす、長時間に及ぶ非効率な状態を指す場合にも使われます。

もう1つの現象として、「ページフォールト」があります。ページフォールトは、実行中のプログラムが、その時点で物理RAMにマッピングされていないデータページへアクセスしようとしたときに発生します。

これによりハードウェア割り込みが発生し、OSカーネルのページ・フォールト・ハンドラーが動作します。OSカーネルは二次ストレージから必要なデータを取得します。その後、OSは通常のプログラム動作に戻る前に、すべての仮想アドレスと対応する物理アドレスを管理するページ・テーブルを更新します。

ページフォールトにはいくつかの種類があり、重大度に応じて分類されます。

  • マイナー・ページフォールト:マイナー(または「ソフト」)ページフォールトとは、特定のページが物理メモリ内に存在していても、そのプロセスのページ・テーブルや共有メモリーにまだマッピングされていない状況を指します。
  • メジャー・ページフォールト:ページフォルトは、目的のページがRAMに全く存在しない場合にメジャー・ページフォルトとなります。つまり、ページをディスクから読み込む必要があり、結果として読み込み処理に時間がかかります。
  • 無効ページフォールト: 最も深刻なページフォールトは、不正なメモリーアクセスを防止するために発生します。その結果として発生するセグメンテーションフォールトにより、通常はプログラムが停止します。

デマンド・ページング方式

OSが処理を合理化する方法の1つは、デマンド・ページングです。この手法では、最初にプログラム全体を読み込むのではなく、その時点で必要なページだけを読み込みます。

その利点として、システムはこの方法でより多くのプログラムを実行できます。欠点としては、ストレージからページを取得するためにプログラムの実行が頻繁に中断されることで、ページフォールト(場合によってはスラッシング)が発生しやすくなることです。

さまざまなアルゴリズムベースの方法が、デマンド・ページングと組み合わせて使用されます。これらのページ置換アルゴリズムは、それぞれ異なる方法でこの問題に対処します。

  • 一部のシステムでは、最近最も使用されていない(LRU)方式を採用しています。このキャッシュ削除アルゴリズムは、「使わなければ失う」という考え方で説明できます。LRUは、項目が未使用のままになっている時間に基づいてキャッシュ内のデータを削除することで、メモリー使用量の最適化に役立ちます。キャッシュが最大容量に達すると、キャッシュに長期間アクセスされない項目がキャッシュから削除されます。
  • 先入れ先出し(FIFO)は、最初に読み込まれたページから順に置き換える方式を指します。キャッシュがいっぱいになると、そのページが最初に削除されます。
  • セカンドチャンス方式は、FIFO方式を拡張した方式であり、削除対象のページが最近使用されていないことを確認してから置き換えます。
  • 最適」とは、その名のとおり、(非常に優れた)アルゴリズムが将来使用される可能性が最も低いページを予測し、そのページを後で削除できるようにマークする、理想的なページ置換方式を指します。最適方式はこのような複雑な予測を必要とするため、実際の実装よりも、理論的な議論や計画を目的とした用途で利用されることが一般的です。
Phill Powell

Staff Writer

IBM Think

Ian Smalley

Staff Editor

IBM Think

関連ソリューション
IBM Storage Fusion

AI、VM、コンテナ・ワークロードのストレージ、保護、オーケストレーションを統合することで、より高速かつ高いレジリエンスを備えたオペレーションを実現します。

IBM Storage Fusionはこちら
ハイブリッドクラウド時代のストレージ仮想化

IBM Spectrum Virtualizeで、オンプレミスとクラウドをシームレスにつなぎ、データをより柔軟に管理します。

Spectrum Virtualize for Public Cloudの詳細はこちら
IBMインフラストラクチャー・サービス

IBM Systemsのサーバーおよびストレージに関する包括的な技術的専門知識

IBMインフラストラクチャー・サービスはこちら
次のステップ

統合データ・サービスと仮想化でインフラストラクチャーを強化し、ハイブリッド環境全体で柔軟かつ高性能なワークロードを実現します。

  1. IBM Storage Fusionの詳細はこちら
  2. IBM 仮想化ソリューションの詳細はこちら