ハードウェア

コンピューターのメモリ管理を担う「仮想記憶」の仕組みとは?


コンピューターを選ぶとき、「RAMは多い方がいい」という意見を耳にしたことがあるかもしれません。RAMはコンピューターの主記憶装置として使用され、CPUが直接アクセスする高速なメモリです。そのRAMを扱う上で重要な仕組みである「仮想記憶」について、数学やIT、金融などを扱うブログ「Internal Pointers」が解説しています。

An introduction to virtual memory - Internal Pointers
https://www.internalpointers.com/post/introduction-virtual-memory

現代のコンピューターは、記憶媒体として主記憶であるRAMと補助記憶装置であるHDDやSSDを備えているのが一般的です。データを大量に保存する場所としてはHDDやSSDが適していますが、CPUが直接アクセスするには読み書き速度が遅すぎるという欠点があります。そうしたCPUと補助記憶装置間のデータのやりとりを仲介し、速度差を解決してくれる高速なメモリがRAMです。

RAMはメモリアドレスと呼ばれる単位でプログラムやデータを保持しており、それぞれのメモリアドレスには番号が与えられています。プログラムやデータが保存されているメモリアドレスの範囲はアドレス空間と呼ばれ、CPUはメモリアドレスを頼りにプログラムやデータを読み書きすると説明されています。


ジョージ・メイソン大学ピーター・J・デニング氏の論文(PDF)によると、コンピューターが登場して間もない時代のプログラマーは、RAMのメモリアドレスを直接指定してプログラムを実行していたとのこと。しかし、複数のプログラムをひとつのコンピューターで同時に実行するマルチタスクが登場したことにより、メモリ管理が複雑になったそうです。プログラマーのメモリ管理を簡略化するため、メモリ管理を自動で行う仕組みとして生まれたのが「仮想記憶」だと説明されています。

「仮想記憶」は仮想的なアドレスと実際のRAMのアドレスである物理アドレスを紐付けることで、ユーザー側が実際のRAMのアドレス空間を気にすることなくプログラムすることを可能にした仕組み。イリノイ大学シカゴ校説明によると、プログラムは別々に仮想アドレス空間を持っているため、プログラムごとに物理アドレス空間の配置を気にする必要がないとのこと。また、仮想記憶は物理メモリの容量による制限を解決してくれることもメリットとしてあげられています。


仮想記憶では、メモリを一定のメモリアドレスで区切ったブロック単位で紐付けを行っており、仮想アドレスのブロックをページ、物理アドレスのブロックをフレームと呼びます。このページとフレームを紐付け、テーブルのかたちにしたものがページテーブルで、CPUのメモリ管理ユニット(MMU)はページテーブルを参照して、仮想アドレスから物理アドレスへの変換を行うとのこと。


MMUは、仮想アドレスが属するページの情報と、それに対応するフレーム内のどこに目的の物理アドレスがあるかを示すページ内オフセットを参考にして、仮想アドレスから物理アドレスへの変換を行います。RAM容量の不足により新しくフレームが割り当てられない場合など、プログラムがアクセスした仮想アドレスに物理アドレスが紐付いていない場合はページフォールトが生じ、MMUはOSにページフォールトの発生を伝える仕組みとのこと。

こうした仮想アドレスと物理アドレスの紐付けを、RAMだけでなくHDDやSSDに対しても行うことでRAMの容量を確保しよう、と考えたのがページングです。ページングにより、OSは仮想アドレス空間を物理アドレス空間よりも大きく確保し、ページフォールトが起こった場合は一時的に補助記憶装置にプログラムやデータを待避させることが可能になったと解説されています。

しかし、補助記憶装置にプログラムやデータを保持するページングを行った場合、読み書き速度の遅い補助記憶装置からRAMへプログラムを読み込まなければならないため、OSの読み書き速度は低下してしまいます。RAMの容量不足などで新しくフレームを割り当てることができず、絶え間なく発生するページフォールトに対応するためにコンピューターが処理能力を費やした結果、アプリケーションの動作が不可能になることをスラッシングと呼びます。IT系メディアの「ITPro Today」によると、スラッシングは、RAM容量を増やしたり、ページファイルのサイズを最適化することで対処することが可能とのこと。


また、仮想記憶はプログラム間のメモリ保護も行うとのこと。メモリの保護機能は一般的にMMUによって行われ、プログラムが所有していない仮想記憶にアクセスすると、セグメンテーション違反やアクセス違反といった無効なページフォールトを発生させます。OSはMMUから無効なページフォールトの通知を受け取り、プログラムを終了させることで、メモリを保護すると説明されています。

コンピューターのメモリ消費を測定する際は、それが仮想的なものか、それとも物理的なものか、補助記憶装置にページングされていないかなど、考慮することが数多くあると語られています。

この記事のタイトルとURLをコピーする

・関連記事
PCのメモリやストレージの価格がどう変化してきたのか一発で分かるグラフ - GIGAZINE

放置しておくだけでメモリの使用を激減させてくれるフリーソフト「Reduce Memory」 - GIGAZINE

メモリとストレージの性質を兼ね備える夢のデバイス「ユニバーサルメモリ」がついに実現か - GIGAZINE

本当のところPCにメモリを何GB積めば良いのか?パフォーマンスを徹底的に比較するとこうなる - GIGAZINE

コンピューティングの進化を支えてきた「メモリ(RAM)」は今後どのように進化していくのか? - GIGAZINE

in ソフトウェア,   ハードウェア, Posted by darkhorse_log

You can read the machine translated English article here.