難しい・・・きちんと理解できない。たぶんまだ知識不足だな。
プロセスメモリ空間(論理アドレス)→(Intel x86の場合)セグメンテーション→リニアアドレス→ページング(PTEなどを経由)→物理アドレス・・・なのだと思う。きっと・・・。
よ くわからないのは、x86のセグメンテーションの部分。Windowsのメモリ管理の解説を読むと、たいていこの部分は飛ばしてあるように見える。ページ ングの仕組みがメインなので、ある意味自動的に行われるセグメンテーションは飛ばしているのかもしれない・・・。最初はセグメンテーションは利用しないの かと思った。
この辺がきちんと説明できるようになりたいなぁ。CPUに関しては「はじめて読む486」っていうすばらしい本があって、結構昔に 読んだ。でも実際OSがどんな風に利用しているかはきちんと知らずにいたので、ここへきてちゃんと理解しようと思っていろいろ読んで、かなりいい線まで来 たと思うのだけれど・・・。CPUの機能で実装されている部分と、OSの機能で実装されている部分と、CPUの機能をOSが利用して実装されている部分の 区別がいまいちはっきりつかない。でも結局はすべてCPUの機能をOSが利用しているってことか・・・。
もうちょい勉強が必要。
2009/7/1 追記
前のブログを読み直して、これを見つけた。とりあえず今はだいたい理解しているはず。
セグメンテーションの部分はWindowsもしっかり利用している。でもコードセグメントもデータセグメントもすべて0~4GBの範囲を利用できるようにディスクリプタが設定されているから、仮想アドレス空間内でばらばらに存在するようなことはない。CSもDSも領域がかぶっているような感じかな。
My Daily Programming Life...
一部間違えた
前に書いたPHPをSSIで動かす話。一部理解を間違えていた。<--#include virtual="foo.php" -->で動かす場合、Content-Typeのヘッダが必要ないと書いたけれど、実際には必要で、だけどPHPだから不必要ということだった。 CGI版PHPでは、勝手にContent-Typeを出力する。だから不必要と言うことだった。だからこれがPerlとかのCGIだったら、 Content-Typeの出力が自分で必要になるはず。今日は色々調べていったら、自分のサーバーではsuPHPを使っているということが分かった。最近はこれになってきているみたいね。確かにユーザー権限ですべてが動くというのは管理も楽だしセキュリティ上もよいはず。
PHPとデフォルト引数と参照渡し
PHPでプログラムを書いていた。PHP4のオブジェクトを利用したプログラム・・・。PHP4のオブジェクトはかなり貧弱なので使いたくないとは思っていたのだけれど、やっぱり使った方が管理が楽と言うことで使ってみた。
んで、やっぱりオブジェクト指向で書いていれば、どうしたって参照渡しが必要になる。
関数を書くときに、よくデフォルト引数を指定する。今回参照渡しの引数に対してNULLをデフォルトで指定したかったのだけれど、ダメだった。できないらしい。検索したけどやっぱりできないって結論のものが見つかった。ちょっと不便かな。
んー、そういえば、ちょっと前にJJFの申し込みフォームを作ってたときは、PHP4のnewが参照ではなくコピーを返すことを知らずにかなり悩ん だ覚えがある。この辺もPHP4でオブジェクトを利用したくない理由。でも結局オブジェクトを使った方が何かと後で変更が楽。んー、悩ましい。PHP5が 使えるレンタルサーバー増えないかな。