単一レベル記憶

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

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

入出力が非常に高速、プログラム実行の際に磁気ディスク装置から主記憶装置へのロードが不要、ユーザー (やオペレータ) から見て、磁気ディスク装置の管理が単純になる(たとえば、通常の管理業務では必須となるファイルシステムによるフォーマット等を必要とせず、単に新しいディスクを接続すればシステムの使える資源が増える、といったように)、などの特長がある。

単一レベル記憶は、MulticsIBMSystem/38AS/400 (およびその後継システムの eServer iSeriesSystem iPower Systems i Edition)などで採用されている。

概要[編集]

単一レベル記憶 (SLS) の仮想記憶によるメモリ管理での記憶装置アドレス空間は、一定の大きさのページと呼ばれる単位 (IBM AS/400 では4KB) で区分されている。

あるページは、主記憶装置上にあるかもしれないし、補助記憶装置上にあるかもしれない。あるページ (データ) が主記憶装置 (メインメモリ) と補助記憶装置 (磁気ディスク装置など) のどちらに存在するかについては、アプリケーションソフトウェアは意識することが無い (知る必要は無く、また知ることはできない) 。ページ (データ) の現在の場所が主記憶装置と補助記憶装置のどちらであるかは、アプリケーションソフトウェアにとっては重要なことではないのである。

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

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

  • 主記憶装置上に存在する場合は即座にそのページは利用することができる。
  • 補助記憶装置上に存在する場合はページフォールトが発生して、システムコンポーネントが補助記憶装置上のページを主記憶装置上に展開して利用できるようにする。

単一レベル記憶ではシステムに接続されている全ての記憶装置をカバーできるような大きなアドレス空間が必要となる (32ビットアドレスのシステムでは全部で4GBのアドレスを指定できるが多くの場合これでは不十分である) [1]

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

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

特長とIBMの実装[編集]

IBM System/38AS/400 (およびその後継システムの、eServer iSeriesSystem iPower Systems i Edition)など単一レベル記憶 (SLS) の仮想記憶を採用しているシステムは、実行性能が高いという特長がある。

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

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

System/38(およびその後継システム)では、そのオペレーティングシステム(OS)であるCPF(および後継のOS/400i5/OSIBM i)より低水準の、ソフトウェア層 (TIMI; Technology Independent Machine Interface「技術に依存しないマシンインタフェース」の下の層) である SLIC (System License Internal Code) と呼ばれるソフトウェアが単一レベル記憶を実現している。単一レベル記憶を提供しているのは SLIC であり、OS ではない。つまり SLIC はあるデータが主記憶装置上に存在するかどうかを知っているが、OS は単一レベル記憶に関与していないため知らない。

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

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

System/38 と AS/400 (およびその後継システム)での単一レベル記憶では、ページフォールトは2種類ある。データベースフォールトと非データベースフォールトである。

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

Unix[編集]

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

しかしそのUnix系のシステムでも、補助記憶の読み書きの内容をOSが一時的に保持する(ユーザからは直接見えない)バッファがあり、主記憶中から非実行中のプロセスの領域を補助記憶に追い出すスワップもすぐに実装された。やがてデマンドページングも実装され、元々は unix とするのが慣習だったカーネルのファイル名が、BSDにおいて vmunix[4]となったのは仮想記憶の意味の「VM」を付けたものである。従来はそういった成行きからバッファとスワップは別になっていたが、近年では(たとえばNetBSDの場合、1999年にリリースされた1.4の頃からのUVMにより)カーネル内では統合的に管理されている。また mmap システムコールに代表されるが、単一レベル記憶のような機能が必要とされていることも確かで、ある程度は満たされている。同様に Microsoft Windows には CreateFileMapping や MapViewOfFile といったAPIがある。論理ボリュームマネージャにより、ディスク単位ではなくストレージプールなどと呼ばれるような抽象化された単位で、ユーザーファイルとは完全に分離して外部記憶を管理できるようにもなった。

一方でアプリケーションプログラム、特にいわゆる「業務アプリ」等の要求を以上のようなモデルに実装するのは面倒があることは、そういったシステムにおいては大抵の場合に関連データベースないしそれ以外の何らかのデータベースシステム、あるいはオブジェクト指向データベースが併用されていることからもあきらかであり、この分野はOSと連繋する余地がある(オープンソースソフトウェアの実装では、一般ファイル上にデータベースを構築するものが多いので誤解されがちだが、(RDBに限らずNoSQL等も含めデータベース全般の一般論として)本格的なDBMSは、OSによるディスク管理を介さないか( /dev/hda1 のような)ディスクドライバを直接使って性能を追求するものである)。また、フラッシュメモリの読み書きを、従来のディスクを前提としたAPIやSCSIなどのインタフェースを通して行うのはインピーダンスミスマッチであり、ioMemory(en:Fusion-ioを参照)のような新しい利用法を提案する製品などもあらわれてきている。さらに21世紀に入った後、研究開発が以前に比べ盛んになってきている、フラッシュメモリ以外の不揮発性メモリが主記憶用として代替になる可能性もあり、そうなった場合にはシステム全体が以前とは大きく変わると見込んで「ノーマリーオフコンピューティング」として検討が始まっている。ノーマリーオフコンピューティングは、ムーアの法則自体の限界はまだ先でも、あきらかにつき当たっている消費電力の壁への対処という点もある。また単一レベル記憶は、ゼロコピー(en:Zero-copy)の観点でも効率と関係する。

歴史[編集]

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

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

脚注[編集]

[ヘルプ]
  1. ^ フランク・ソルティスほか (1998) 、p.232
  2. ^ フランク・ソルティスほか (1998) 、p.233
  3. ^ フランク・ソルティスほか (1998) 、p.246
  4. ^ vmlinux という名前のほうが今ではよく知られているが、ここの話はLinuxが登場するより何年も前の話である。

関連項目[編集]

参考文献[編集]

外部リンク[編集]