話は LOWLIB についてです。B-free では、システムコールはすべていったん
カーネルモードの LOWLIB が呼び出され、その中からプロセスとして動作する
各マネージャに処理が依頼されることになっています。しかし、この方法では
マネージャ毎にカーネルモードの LOWLIB が必要となり安全性が損われる上、
ユーザモードとカーネルモードの行き来がはげしくシステム性能を落とす結果
ともなりかねません。他の方法も検討した方が良いでしょう。
ここで参考になるのが WindowsNT です。NT では API が DLL として提供さ
れています。DLL は要求を変換して WIN32 に転送するというちょうど LOWLIB
相当の処理をしているわけですが、これはユーザモードで動きます。もちろん
転送そのものはカーネルを呼び出すでしょうが、要求ごとに異なる変換処理は
ユーザモードのコードで行われるわけで、新しい機能の追加に対する安全性は
LOWLIB のやり方よりはずっと高そうです。実際の NT では高速化のためさら
に技巧が凝らされているようです。状態参照のような必ずしもカーネルモード
で実行する必要のないものは DLL だけで処理する。GDI コールでは一回毎には
WIN32 を呼び出さず要求をまとめてから呼び出す。などのことが行われている
ようです。DLL はユーザモードで動作する為、これらの手法は高価なカーネル
コールを減らし高速化に寄与しているようです。
B-free でも DLL による API を検討してみてはいかがでしょうか。
りん NBG02466