OSメモ(3)

64bitのメモリを理解するために、Linuxのブートプロセスをみるを読む。

64bitのOSでは、DS, ES, FS, GS, SS は、使わないようだ。これは、フラットモデルを使うからみたいだ。もしかしたら、フラットモデルじゃないモデルを使うなら、使えるのかもしれない。

論理アドレスの定義は、セグメントセレクタとオフセットの組み合わせ。

この論理アドレスは、セグメンテーション回路を用いて、リニアアドレスに変換。その後、ページングがonになっていたら、ページング回路によって、物理アドレスに変えられる。offだったら、セグメンテーション回路によって算出されたリニアアドレスが、物理アドレスになる。

ところで、セグメントセレクタとオフセットの組みが論理アドレスって書いてある。例として、論理アドレス0xC0100000にアクセスすると、0x00100000にアクセスされるって書いてあるんだけど、この論理アドレスは、フラットモデルだから、セグメントセレクタは、指定する必要ないよってことかな。まぁとりあえず、なんとなくわかったのでいいや。

ページングの変換テーブルは、いろいろ変えられるらしくて、Linuxの場合は、ユーザープロセスごとに、変換テーブルが、設けられているから、別プロセスで同アドレスを指定しても、同じ物理メモリにアクセスできないってことなんじゃないかなと思う。つまり、変換テーブルを弄れれば、別プロセスのデータを書き換えられるかもしれないね。なお、セキュリティ()

ちなみに、ページングは、CR3→ページディレクトリ→ページテーブル→ページ っていう感じで、節約できるようになっているらしい。明日は、ページディレクトリとかの話やるぞ〜〜。