●メモリー上での実行ファイル(コード領域)の取り扱い
論理アドレス空間上には、大別して次の領域があります。
・コード領域
・データ領域
・スタック領域
(・イメージ領域)
この中で、データ領域とスタック領域については内容が変化するため、ページ
アウト処理を行う際には、原則的にはディスク上のスワップ領域に待避させる必
要があります。
一方、コード領域は書き換え不可能な領域であり、その内容(実行ファイル)
は既にファイルシステム上にアプリケーションファイルとして存在していて、ペ
ージイン処理が必要な場合には、アプリケーションファイルから対応するページ
を再度読み込む事が出来ます。従って、コード領域はページアウトを生じた場合
でも、その内容をディスク上のスワップ領域に待避する必要はありません。
アプリケーションファイルの実行プログラムレコード本体が、ディスク上にク
ラスタ単位で記録されているものとすれば、上記の処理は容易に実現できると思
います。
最初にアプリケーションを起動する際には、コード領域を示すページテーブル
を作成します。同時に、各ページに対応するディスク上のクラスタを記録するテ
ーブルも作成します。ここに記録されるクラスタ番号(ディスクユニット名も含
む)は、実行プログラムレコードが存在するディスク上のクラスタ番号とします
。
この様に、コード領域の各ページに対応するディスク上のクラスタ番号をテー
ブル上に記録すれば、実行ファイルの読み込み処理は終了です。あとは、プログ
ラム実行時に、各ページのページイン処理が行われる事になります。
データ領域、スタック領域については、各ページに対応するディスク上クラス
タ番号として、スワップ領域のクラスタ番号を与える事になります。この場合も
、一度にスワップ領域を確保するのでは無く、そのページのスワップアウト処理
を初めて行う時になってから領域を確保する方式が良いと思います。
イメージ領域とは、例えばフォントファイルの様に基本的に内容が変化しない
データの事です。この領域もコード領域と同様の処理を行うことで、スワップ領
域を消費する事なく、大規模なフォントファイルも論理アドレス空間に割り当て
ることができるでしょう。
ううむ、「かなり参考」どころか、OpenVMSそのまんまではないか(^^;。
真鍋 裕一(NBG02534@niftyserve.or.jp)