[b-free: 114] page fault process

真鍋 裕一 (NBG02534@niftyserve.or.jp)
Wed, 08 Feb 1995 20:22:00 +0900

ページフォルト例外発生時の処理について、ちょっと考えました。

●ページフォルトハンドラの所在
 低レベルライブラリ中にあり、特権0の属性を持つことは解ります。そこで、
ページフォルト例外#14が発生すると、現在実行中タスクのTSSから特権0
のスタックセグメント情報を読み込んでスタック切替えが発生すると思われる。

 この時に、新たな特権0スタックにページフォルトが発生しない事は何の様に
保証されるか、よく解りません。あらかじめ、メモリー常駐ページとして割り当
ててしまうのか?

●ページフォルトタスクの状態
 ページフォルトが発生したタスクは、最終的にはディスクI/Oの完了を待つ
状態な訳ですから、SUSPEND状態よりもWAIT状態とするのが適当なの
では無いでしょうか。ディスク入出力を管理するマネージャのメッセージキュー
には次の様な入出力要求メッセージ
  ・何処のディスクの
  ・何処のブロックの内容が (何処のブロックへ)
  ・ページXへ転送される事を(ページXの内容が転送される事を)
  ・タスクAが待っている。
が連なる事になると思います。待ち状態のタスクAには、ページフォルト例外発
生タスク以外に通常のディスクI/Oを行っているタスクも存在すると思われる
ので、SUSPENDよりもWAITとする方が良いのでは。
 それから、ITRON仕様からは逸脱しますが、誤って他のタスクからwup_tsk(),r
el_wai()等の要求が出された場合の事を考えて、ページフォルト例外発生中のタ
スクの状態として、内部的にページイン待ちか否かを区別して管理するほうが良
いのでは無いでしょうか。

●スタック領域へのページメモリ割り当て
 これについては必要最小限の部分のみをまず割り当てて、それ移行に要求され
た時点で割り当てる、デマンドページング方式が、効率の面からも望ましいと思
います。アプリケーションによって要求するスタックサイズが異なるでしょうし
、余り大きな領域を割り当ててメモリーが不足しても困るので。
 管理領域については、ページテーブルエントリーの中にユーザー領域が3ビッ
トあるので、この中のいずれかのパターンで「未割り付け」を表せないでしょう
か。

真鍋 裕一