メモリマネージャが何をするか(べきか)ということについて、思いつくままに
書いてみます。
(以下の書く事柄は、第二回の打ちあわせで配布した仮想記憶管理のメカニズム
についての文書を作ったときに考えたことです)
まず、前提としてマネージャは、直接ハードウェアをアクセスできないという
決まりにしておきます。
メモリマネージャの場合、CPU がアクセスする仮想アドレス - 物理アドレス
のマッピングテーブルを直接いじるということができないということです。
---------------------------------------------------------------------
マネージャがハードウェアにアクセスすることができるようにすると、マネー
ジャはカーネルモードで動く必要があります。
マネージャがカーネルモードで動くことにすると、マネージャにバグがあった
場合、影響が大きくなります。
* もっとも、カーネルモードで動くようにすると、システムコール等を呼び出
す回数が少なくなりますから、性能的には速くなると思います。
--------------------------------------------------------------------
BTRON の場合にメモリ管理の機能を挙げるとつぎのようになります:
1) MMU 関係のハードウェアの管理
タスクのコンテキスト情報に含まれるマッピングテーブルの内容管理。
2) 物理メモリの管理
ページ単位でのメモリ取得、解放の管理。
3) メモリフォールト (ページフォールト) の処理
メモリフォールト発生時の処理(タスクの強制終了やページイン等)を行う。
4) ページイン/ページアウトの処理
ページフォールト発生時にタスクの続行のために必要なページの(二次記
憶装置からの)読み出しなどを行う。また、必要のないページを二次記憶
装置などに追い出す処理も行う。
5) 各プロセスの仮想ページの管理
仮想メモリ中のページのどれが物理メモリとマッピングしているか、ま
たマッピングしていない仮想メモリページについては、二次記憶装置の
アドレスを管理する。
6) ユーザプログラムおよびマネージャ等のメモリ取得要求の処理
中心核としては 1), 2) をサポートすることにし、3) についてはメモリフォー
ルが発生したときに任意のユーザプログラムを呼び出す仕組みを作るだけにし
たいと思います。
よってメモリマネージャとしては、3) のページフォールト時の主な処理を行
う機能と 4)、5)、6) をサポートすることになります。
メモリ管理の機能分担としてはこのようにしたいと思っているのですが、どう
でしょうか?
ご意見をお待ちしております。
-- 内藤隆一 (ggc00661@niftyserve.or.jp)