ウォンツテック

そでやまのーと

OS作成 - ページング&プロセス編

sodexのページング時のメモリマップを考えました。
 最初はMonaで採用しているカーネル領域を物理メモリの先頭に固定して割り当てようかと思ったけどそれだとプロセスのリニアアドレスが先頭から割り当てられなくなりプロセス用実行ファイルのコンパイル時に「-Ttext 0x....」などとする必要が出てきてしまうので(Monaではmake時にmonaapi.incファイルにてそのようにしている)ちょっと微妙かなと思い、Linuxと同様の方式である0xC000000(3GB目)からカーネル領域、それ以前の部分をプロセス領域とする事にしました。ただしi386のセグメントはフラット方式(GDTでのセグメントの設定が全てベース0、リミット4GB)を採用するのでカーネル読み込み直後にページングの設定する必要があります。
この辺はCで書けるようならCで、難しそうならアセンブラで書く予定です。

また当面の間、page directory table及びpage tableは全てメモリ上に確保する方針で考えてます。1プロセスあたり4MB必要で、とりあえず8プロセス分の32MBをカーネル領域に確保します。IDEドライバが出来て仮想記憶を実装した際にはpage tableはpage out, in出来るようにしてメモリ上に確保するのはpage directory tableのみとする方向で考えてます。

各プロセスも仮想記憶を実装するまでは物理メモリ上に固まりで確保して与えていく極めて単純な方法を考えてます。