「PangeaOS」が、待望のアップデート v0.0.1-2-1 "Memory Defense & Allocator Awakened" をリリースしました!
今回のアップデートでは、OSがコンピュータの「物理メモリ(RAM)」を完全に掌握し、さらにRust言語の強力な動的メモリ機能(Box や Vec など)が解放されました。しかし、今回最も注目すべき技術的ブレイクスルーは、「Meshアロケータ」を見据えた「仮想空間の折り畳み(Mesh Primitive)」の実装です。
今日は、作り方やコードの羅列は少しお休みして、この「Meshアロケータ」という現代コンピュータサイエンスの魔法が、PangeaOSの心臓部でどのように実装されたのか、その仕組みを超詳細に、そして世界一わかりやすく解説していきたいと思います!
そもそも「メモリの断片化(フラグメンテーション)」ってなに?
Meshアロケータの凄さを知るためには、まずOSが長年抱えてきた「不治の病」について知る必要があります。それがフラグメンテーション(断片化)です。
OSは、アプリケーションから「メモリを貸して!」と言われると、大きなメモリの塊から必要な分だけ切り取って貸し出します。そして使い終わったら返してもらいます。
これを繰り返していると、どうなるでしょうか?
貸したり返したりをバラバラなタイミングで行うため、メモリ空間が「虫食い状態」になってしまうのです。全体の空き容量としては十分にあるのに、「連続した大きな空きスペース」が存在しないため、新しいデータが配置できなくなってしまう……。これがメモリの断片化です。
昔から、この虫食いを防ぐために様々なアルゴリズム(BuddyシステムやSlabアロケータなど)が考案されてきましたが、数学的に「どうしても防ぎきれない限界」があることがわかっていました。
マサチューセッツ大学が生んだ魔法「Mesh」
そこで登場したのが、2019年頃にマサチューセッツ大学アマースト校の研究チームが発表した「Mesh」という全く新しいアロケータ(メモリ管理システム)の概念です。
彼らはこう考えました。
「虫食いになったページ(メモリの区画)同士を見比べて、お互いの空きスペースがピッタリ噛み合うなら、2つのページを1つにガッチャンコしてしまえばいいじゃないか!」
パズルピースのように、穴と出っ張りが補完しあう2つのページを「圧縮」してしまうのです。しかし、普通にデータを移動させると、アプリケーションが覚えている「メモリアドレス(ポインタ)」が変わってしまい、プログラムがクラッシュしてしまいます。
そこでMeshが使った魔法が、「仮想メモリ(ページテーブル)のハッキング」です。
PangeaOSに実装された「Meshプリミティブ」の超詳細解説
今回、PangeaOS v0.0.1-2-1では、このMeshの魔法を実現するための土台である「Meshプリミティブ(仮想空間の折り畳み基盤)」が特権レベル(Ring 0)に実装されました。
これがOSの内部でどのように動いているのか、CPUの仕組みと合わせて詳しく見ていきましょう。
1. 物理メモリと仮想メモリの「分離」
私たちが普段プログラムを書くときに見ている「メモリアドレス」は、実は本物の物理的なRAMのアドレスではありません。OSが見せている「仮想アドレス」という幻です。
CPUの中には「MMU(メモリ管理ユニット)」という翻訳機があり、OSが管理する「ページテーブル」という辞書を使って、仮想アドレスを物理アドレスに瞬時に変換しています。
2. PMMによる「本物の物理メモリ」の確保
PangeaOSはまず、「PMM(Physical Memory Manager)」というシステムを使って、まっさらな本物の物理メモリ(物理フレーム)を1枚(4KB分)確保します。これは、ハードウェア上に実在する「ただ1つの箱」です。
3. CR3レジスタとページテーブルの掌握
ここからがOSカーネルの真骨頂です。PangeaOSは、CPUの「CR3」という特別なレジスタから、現在使われているページテーブル(翻訳辞書)を直接奪い取り、OSの完全な支配下に置きます。
4. 禁忌の「折り畳み」マッピング(Mesh Mapping)
そして、PangeaOSはページテーブルを直接書き換えて、次のような設定を行います。
仮想アドレス A(例: 0xdeadbeef000)の翻訳先を、先ほど確保した物理フレームに設定する。
全く無関係な仮想アドレス B(例: 0xcafebabe000)の翻訳先も、同じ物理フレームに設定する。
おわかりでしょうか? プログラムからは「アドレスA」と「アドレスB」という、遠く離れた全く別のメモリ領域に見えています。しかし、OSがページテーブルをハッキングしているため、どちらにアクセスしても、最終的にはハードウェア上の「同じ1つの箱(物理フレーム)」にたどり着くのです。
5. 実証された「重なり合い」
今回のv0.0.1-2-1のテストコードでは、仮想アドレスAに対してデータを書き込み、それを仮想アドレスBから読み取れるか、という実証実験が行われました。結果は見事成功。異なる2つの仮想ページが、物理的な1点に折り畳まれた瞬間です。
これが意味する未来:究極のメモリ圧縮
今回PangeaOSに実装されたこの「Meshプリミティブ」は、単なる面白い実験ではありません。
今後、システムが長時間稼働し、メモリが虫食い状態になってきたとします。
その時PangeaOSは、裏側でこっそりと「噛み合う虫食いページ(仮想ページAと仮想ページB)」を探し出します。そして、データをうまくマージした後、このMeshプリミティブを使ってページテーブルを書き換えます。
すると、プログラム側は「今まで通り仮想アドレスAとBを使っている」つもりなのに、物理的なRAMの消費量は半分に減っていることになります。ポインタを一切壊すことなく、OSの最も深い特権レベル(Ring 0)で、ノーコストで物理メモリが回収されるのです。
これこそが、次世代のベアメタルOSが目指す「特異点アーキテクチャ」の一端です。
おわりに
いかがでしたでしょうか? PangeaOS v0.0.1-2-1が成し遂げたのは、単にメモリが使えるようになったということではありません。ハードウェアの翻訳機能(MMU)をソフトウェアから完全にねじ伏せ、メモリの断片化という永遠の課題を「空間の折り畳み」によって解決するための、とてつもなく強力な基盤を手に入れたということなのです。
OS開発の歴史と、最新の学術研究が見事に融合していくこのプロジェクト。今後の進化(次はいよいよタイマー割り込みと非同期タスクの実装でしょうか?)からも、絶対に目が離せませんね!
それでは、また次回の記事でお会いしましょう!
https://github.com/forestnote/pangea-ring0-os