tarosukeの日記: 俺OS xiv あるいはtalos(仮
どうして12程度の数も数えられないのかと小一時間...
本命資料を読んでGDTとページングの関係について悩んでいたら夜が明けた。
BIOSの資料発見。当然っちゃ当然だけどOADGのページにあった。ついでに
VESAのページでVBEの資料を漁る。
他の俺OSでプロセス空間の上半分にカーネルのエイリアスが出ている設計の
ものがあって、[おもしろい設計だ]とのコメントが付いていたのだが、IA32
ではあれは素直な設計と言える。こっちでもその実装は検討してた。
システムコール打つ度にタスクゲートを通ってもいいけど、そうするとTLBが
フラッシュされてしまうので効率悪いったらありゃしないわけで、カーネル側
のタスクを最小限にとどめておいてAPIをなるべくプロセス空間で処理するの
はページング効率を考えても良い実装だと思う。
# んで、これがIA32がマイクロカーネルを強要する理由の一端。IA32の
# Linuxはps xaした時に括弧が付いてるプロセスが結構あるでしょ?
セキュリテイはセグメントで十分確保できる。というかページはメモリ保護の
ためにあるわけじゃないのでページング機構ではメモリ保護はしないつもり。
代わりにLDTにコールゲートを設けてそれをAPIの入口にする。
# まちがい。コールゲートを設けるのはGDT上。
IA32でOS組むと、こういう実装を強要されるのよ~。せめてアドレス空間が
ホントに48bitsあったらこんな阿呆な事はしないのだが、インテルが主張す
るのとは違い、アドレス空間(リニアアドレス)は実際には32bitsしかないの
だ。この制限は概ね80386が80286にページング機構を付けただけのものだっ
たりするのが原因。ったく、GDTで変換したアドレスまでページングする事ぁ
ねぇだろに。
# ページテーブル領域が勿体ねぇだろが
ま、プロセスあたりの空間を64MBとか128MBとかに限定するんなら別のもっ
と軽くてスマートな方法もないではないんだけど。そして今の所プロセス空間
はそんなもんで十分だったり...
俺OS xv あるいはtalos(仮 More ログイン