My Daily Programming Life...

仮想メモリとアドレス変換

難しい・・・きちんと理解できない。たぶんまだ知識不足だな。
プロセスメモリ空間(論理アドレス)→(Intel x86の場合)セグメンテーション→リニアアドレス→ページング(PTEなどを経由)→物理アドレス・・・なのだと思う。きっと・・・。
よ くわからないのは、x86のセグメンテーションの部分。Windowsのメモリ管理の解説を読むと、たいていこの部分は飛ばしてあるように見える。ページ ングの仕組みがメインなので、ある意味自動的に行われるセグメンテーションは飛ばしているのかもしれない・・・。最初はセグメンテーションは利用しないの かと思った。
この辺がきちんと説明できるようになりたいなぁ。CPUに関しては「はじめて読む486」っていうすばらしい本があって、結構昔に 読んだ。でも実際OSがどんな風に利用しているかはきちんと知らずにいたので、ここへきてちゃんと理解しようと思っていろいろ読んで、かなりいい線まで来 たと思うのだけれど・・・。CPUの機能で実装されている部分と、OSの機能で実装されている部分と、CPUの機能をOSが利用して実装されている部分の 区別がいまいちはっきりつかない。でも結局はすべてCPUの機能をOSが利用しているってことか・・・。
もうちょい勉強が必要。

2009/7/1 追記
前のブログを読み直して、これを見つけた。とりあえず今はだいたい理解しているはず。
セグメンテーションの部分はWindowsもしっかり利用している。でもコードセグメントもデータセグメントもすべて0~4GBの範囲を利用できるようにディスクリプタが設定されているから、仮想アドレス空間内でばらばらに存在するようなことはない。CSもDSも領域がかぶっているような感じかな。

0 コメント:

Post a Comment

feedSubscribe to my feed