[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 こと 木元峰之