単一レベル記憶

単一レベル記憶は、コンピュータが使っている記憶装置について、アプリケーションソフトウェアに対して主記憶装置と補助記憶装置の区別を意識させずに、ただ一つの巨大なアドレス空間で管理する仮想記憶のメモリ管理技術である。

入出力が非常に高速、プログラム実行の際に磁気ディスク装置から主記憶装置へのロードが不要、ユーザー  から見て、磁気ディスク装置の管理が単純になる、などの特長がある。

単一レベル記憶は、Multics、IBMの System/38 、AS/400 などで採用されている。

1. 概要
-----

仮想記憶方式のコンピュータであることは前提とする。

そういったコンピュータにおけるメモリ管理の方式として、セグメント方式やページ方式、そしてそれらの組み合わせなどがあって、単一レベル記憶方式とそれらとの組み合わせは任意ではあるが、単一レベルではページ方式を採用してディスク等のブロックサイズに合わせないと管理が面倒になることなどが、主記憶のみを対象とするメモリ管理とは異なってくる。

以下ではページ方式で管理されているものとする。AS/400 ではページサイズは4KBであった。

あるページは、主記憶装置上にあるかもしれないし、補助記憶装置上にあるかもしれない。あるページ  が主記憶装置  と補助記憶装置  のどちらに存在するかについては、アプリケーションソフトウェアは意識することが無い  。ページ  の現在の場所が主記憶装置と補助記憶装置のどちらであるかは、アプリケーションソフトウェアにとっては重要なことではないのである。

あるページが主記憶装置と補助記憶装置のどちらに存在するかについては、単一レベル記憶を担うシステムコンポーネントが管理している。このシステムコンポーネントが、ページの割り当てを主記憶装置および補助記憶装置上で管理して、アプリケーションソフトウェアを含めたプロセスに対して利用できるようにする責任を担っている。

ページへのアクセスが発生した際、そのページが

主記憶装置上に存在する場合は即座にそのページは利用することができる。
補助記憶装置上に存在する場合はページフォールトが発生して、システムコンポーネントが補助記憶装置上のページを主記憶装置上に展開して利用できるようにする。補助記憶のアドレッシングに必要な空間は、一般に、主記憶より比較的大きい。レジスタなどのワードサイズが32ビットのコンピュータの時代において、32ビットでアドレス可能な4Gバイトは、補助記憶のためには小さく、特に AS/400 のような、単一レベル記憶を採用するようなミッドレンジのシステムでは32ビットでは狭いと判断され、単一レベル記憶のためのアドレスのビット数は増やされた。

System/38 と初期の AS/400 では48ビットアドレスを使用していたため充分に大きいアドレス空間を使うことができた。

AS/400 はその後アドレス空間が拡張され、2006年現在では64ビットアドレスを使用している。

2. 特長とIBMの実装
------------

IBM System/38 と AS/400 など単一レベル記憶  の仮想記憶を採用しているシステムは、実行性能が高いという特長がある。

例えば System/38 の実装では、全てのオブジェクトを全ての補助記憶装置に分散して配置し、オブジェクトの格納および検索を極めて高速に行っている。その結果 System/38 では、補助記憶装置の領域が不足することはめったにない。

単一レベル記憶を採用しているシステムはまた実行時に、CPU、主記憶装置、補助記憶装置の間で資源を互いに自由に置き換え合うことができ、性能上のボトルネックを解決する。

System/38では、そのオペレーティングシステムであるCPFより低水準の、ソフトウェア層  である SLIC  と呼ばれるソフトウェアが単一レベル記憶を実現している。単一レベル記憶を提供しているのは SLIC であり、OS ではない。つまり SLIC はあるデータが主記憶装置上に存在するかどうかを知っているが、OS は単一レベル記憶に関与していないため知らない。

System/38 と AS/400 での単一レベル記憶の実装では、マルチプロセスにおけるプロセス切り換え時の命令数がとても少なく、そのためプロセス切り換えは非常に高速である。この特長のため System/38 と AS/400 は、多数のユーザを同時にサポートする場合や、多くのトランザクションを処理する場合  において、高い性能を実現する。

ファイル操作においては、従来のシステムはファイルのオープンやクローズを多数行うため、余分なディスク操作が発生し、システム全体のパフォーマンスを低下させていたが、System/38 と AS/400 ではその場でファイルを処理するため余分なオーバーヘッドが発生しない。

System/38 と AS/400 での単一レベル記憶では、ページフォールトは2種類ある。データベースフォールトと非データベースフォールトである。

データベースフォールトは、関係データベースオブジェクトに関連するページが現在主記憶装置上に存在しない際に発生する。System/38 と AS/400 ではシステムの中核部分に関係データベース管理システム  を統合しており、関係データベースオブジェクトとして表  、ビュー、索引  などがある。
非データベースフォールトは、関係データベース以外のオブジェクトに関連するページが現在主記憶装置上に存在しない際に発生する。

3. Unix
-------

Unixのプログラミングモデルは、単一レベル記憶とは異なり、主記憶はアクセス保護以外にはOSの関与無しに自由に読み書きでき、補助記憶に対してはシステムコールで主記憶との転送しかできない。特にごく初期のUnixでは、以上のようなプログラミングモデルそのままの実装だけが存在していた。このようなモデルは、それが実装されていたような資源の少ないコンピュータでは、少々のプログラミングの際の手間と引き換えに効率的であったであろうし、垂直統合が前提のIBMのアーキテクチャとは異なり、異なるアーキテクチャのコンピュータへのOSの移植も簡単である。

しかしそのUnix系のシステムでも、補助記憶の読み書きの内容をOSが一時的に保持するバッファがあり、主記憶中から非実行中のプロセスの領域を補助記憶に追い出すスワップもすぐに実装された。やがてデマンドページングも実装され、元々は unix とするのが慣習だったカーネルのファイル名が、BSDにおいて vmunixとなったのは仮想記憶の意味の「VM」を付けたものである。従来はそういった成行きからバッファとスワップは別になっていたが、近年ではカーネル内では統合的に管理されている。また mmap システムコールに代表されるが、単一レベル記憶のような機能が必要とされていることも確かで、ある程度は満たされている。同様に Microsoft Windows には CreateFileMapping や MapViewOfFile といったAPIがある。

また補助記憶の管理についても、論理ボリュームマネージャにより、ディスク単位ではなくストレージプールなどと呼ばれるような抽象化された単位で、ユーザーファイルとは完全に分離して外部記憶を管理できるようにもなった。

一方でアプリケーションプログラム、特にいわゆる「業務アプリ」等の要求を以上のようなモデルに実装するのは面倒があることは、そういったシステムにおいては大抵の場合に関連データベースないしそれ以外の何らかのデータベースシステム、あるいはオブジェクト指向データベースが併用されていることからもあきらかであり、この分野はOSと連繋する余地がある。

また、フラッシュメモリの読み書きを、従来のディスクを前提としたAPIやSCSIなどのインタフェースを通して行うのはインピーダンスミスマッチであり、PCIeでストレージを直結するNVMeでは、論理的にも従来のAPIを介さずに直接制御することが考慮されている。既に、それに対応した :en:Open-channel SSD を実装・製造した報告もある。また個別のソリューションでは ioMemoryなどがある。さらに21世紀に入った後、研究開発が以前に比べ盛んになってきている、フラッシュメモリ以外の不揮発性メモリが主記憶用として代替になる可能性もあり、そうなった場合にはシステム全体が以前とは大きく変わると見込んで「ノーマリーオフコンピューティング」として検討が始まっている。実用面では、従来のDRAMモジュールに不揮発性メモリも混載するハイブリッドモジュールのための、「NVDIMM」と呼ばれているものの仕様が標準化されるなどしている。

ノーマリーオフコンピューティングは、ムーアの法則自体の限界はまだ先でも、あきらかにつき当たっている消費電力の壁への対処という点もある。また単一レベル記憶は、ゼロコピーの観点でも効率と関係する。

以上のように、ゆっくりだが全体的な傾向としても、単一レベル記憶的な方向性はいくつか存在している。

4. 歴史
-----

IBM による System/38 と AS/400 の単一レベル記憶  の仮想記憶の設計は、もともとは新しいコンピュータ・アーキテクチャの過渡期の実装を、全て固体素子の記憶装置を使って開発するために1960年代に考案された。これは、磁気ディスク装置は、そう遠くないうちに時代遅れになり、何らかの固体素子の記憶装置にとって代わられるであろうという予想にもとづいたものである。System/38 と AS/400 の単一レベル記憶の設計は、システムに現在利用している記憶装置の種類を意識させないものであった。

IBM が1980年代後半に AS/400 のシステムを販売する際、IBM の人々は「AS/400 は自分に磁気ディスク装置が付属していることを知らない」と述べた。

5. 脚注
-----

6. 関連項目
-------

仮想記憶
メモリ管理
Multics
System/38
AS/400
eServer iSeries
System i
Power Systems
OSASK
Domain/OS
メモリマップトファイル

7. 参考文献
-------

フランク・ソルティス  、日本アイ・ビー・エム AS/400製品事業部  、『Inside the AS/400 : featuring the AS/400e series : 日本語版 第2版』、インフォ・クリエイツ、1998年、ISBN 4-900741-88-4、第8章 単一レベル記憶 

8. 外部リンク
--------

[1]