> 1) MMU 関係のハードウェアの管理
> タスクのコンテキスト情報に含まれるマッピングテーブルの内容管理。
> 2) 物理メモリの管理
> ページ単位でのメモリ取得、解放の管理。
> 3) メモリフォールト (ページフォールト) の処理
> メモリフォールト発生時の処理(タスクの強制終了やページイン等)を行う。
> 4) ページイン/ページアウトの処理
> ページフォールト発生時にタスクの続行のために必要なページの(二次記
> 憶装置からの)読み出しなどを行う。また、必要のないページを二次記憶
> 装置などに追い出す処理も行う。
> 5) 各プロセスの仮想ページの管理
> 仮想メモリ中のページのどれが物理メモリとマッピングしているか、ま
> たマッピングしていない仮想メモリページについては、二次記憶装置の
> アドレスを管理する。
> 6) ユーザプログラムおよびマネージャ等のメモリ取得要求の処理
>
> 中心核としては 1), 2) をサポートすることにし、3) についてはメモリフォー
> ルが発生したときに任意のユーザプログラムを呼び出す仕組みを作るだけにし
> たいと思います。
ここのユーザプログラムとは、メモリフォールトが発生した時に呼び出されて、
5)の情報をもとに4)の処理を行なうプログラム。と考えていいんでしょうか。
(ページイン/アウトの処理後、5)の情報の更新もしますね)
であれば、
3)は、
3.1)メモリフォールト発生時に周辺殻プログラム(ユーザープログラム)を呼び出す
3.2)3.1)によって呼び出され、実際のページイン/アウトの処理を行なう(ユーザー
プログラム)
の二つに分けた方がわかりやすいのではないかと思います。
1)〜3.1)が中心核。3.2)〜6)が周辺殻になりますね。
(renum して、1)〜7)にしてもいいけど)
※そもそも、ここを「ユーザプログラム」とするのは何故なんでしょうか。
えと、ついでといっちゃなんですが、
6)を実装する際に最低限必要な関数(?)を、BTRON1プログラミング標準ハンドブックか
ら抜き出しておきます。
1)ローカルメモリ管理
get_lmb ローカルメモリブロックの獲得
rsz_lmb ローカルメモリブロックのサイズ変更
rel_lmb ローカルメモリブロックの解放
lmb_siz ローカルメモリブロック・サイズの取り出し
lmb_sts ローカルメモリ領域の状態取出し
2)共有メモリ管理
cre_mpl メモリプールの生成
del_mpl メモリプールの削除
get_smb 共有メモリブロックの獲得
rel_smb 共有メモリブロックの解放
rgt_smb 共有メモリブロックの再獲得
rea_smb 共有メモリブロックの読込み
wri_smb 共有メモリブロックの書込み
smb_adr 共有メモリブロック・アドレスの取出し
smb_key 共有メモリブロック・アクセスキーの取出し
get_sma 共有メモリブロック属性の取出し
set_sma 共有メモリブロック属性の設定
get_smi 共有メモリブロックのユーザー情報の取出し
set_smi 共有メモリブロックのユーザー情報の設定
smb_sts 共有メモリブロック状態の取出し
mpl_sts 共有メモリプール状態の取出し