[b-free: 178] Critical point in Vartual-Memory

3.14こと木元峰之 (JBA03350@niftyserve.or.jp)
Sat, 25 Mar 1995 23:58:00 +0900

 今日のカーネルグループミーティングでは、お疲れさまでした m(. .)m。今
回の議論の中ででてきた、仮想記憶の実装に関する問題点について、まとめて
みたいと思います。

 問題となるのは、以下のような状況です。

 要素:・メモリマネージャ
    ・ハードディスク制御用のデバイスドライバ(スワップファイルのア
      クセスも担当する)
    ・ユーザーアプリケーション

 状況:
    1.ユーザーアプリケーションが、rea_dev() システムコールにより、
     ハードディスクの一部をアプリケーションのメモリにロードしよう
     とした。
    2.ユーザーアプリケーションのメモリが、何らかの原因でスワップ
     アウトされた。
    3.デバイスドライバは、ハードディスクの内容を読みとり、ユーザー
     アプリケーションのメモリに書き込もうとした。
    4.ページフォールトが発生し(デバイスドライバは停止する)、メ
     モリマネージャはユーザーアプリケーションのメモリをページイン
     するために、デバイスドライバをアクセスし、デッドロックとなっ
     た。

 回避案:
    a.LOW-LIB (低レベルライブラリ)で、rea_dev() やwri_dew() の
     時だけ、対象のメモリをロックする(ロックの際に待ちに入っても、
     デバイスドライバには影響はない)。
    b.デバイスドライバを再入可能にする(例えば、内部的にタスクを
     2つにし、ページイン/アウトの処理はいつでも受け付けられるよ
     うにする)。

 −−−−

 ここからは個人的な考えですが、RS-232C ドライバなど、リアルタイム性を
要求されるデバイスにおいても同じ問題が考えられるので、これも考慮に入れ
るべきかと思います。

JBA03350 3.14 こと 木元峰之