64 ビットにするべきか?

自宅の MacBook ProSnow Leopard を発売日すぐに入れたけど、まだ一度も 64 ビットカーネルで動かしていない。たぶん 2008 Early ってやつだと思うから、64 ビットで動かせるんだと思うけど。そもそもメモリが 4GB ちょうどだから、別に 32 ビットでも大丈夫だし、と。
で、ふと思い立って昨晩ちょっと調べたら、知らなかったことや間違って覚えてたことがあったのでメモ。

うちのマシン

1 台のマシンに、Mac OS X 10.6 Snow Leopard と、Windows Vista Business (32 ビット版) が入っている。Vista は BootCamp で起動している。積んでるメモリは 2GB のが 2 枚で合計 4GB。
今回の目的は、この状況で、OS XVista それぞれを、64 ビットに移行するべきかどうかを知ることだ。

4 GB だけじゃなかった「容量の壁」

64 ビット OS がなぜ必要かを説明する時に、しばしば「4GB の壁」という言葉が登場する。32 ビット OS ではメモリアドレスが 32 ビットだから、4GB までしか扱えない。それ以上メモリを積んでも、OS が扱えないから無駄になってしまう、という説明。
しかし実際には、32 ビット OS を素直に実装すると、4GB のメモリを積んでも 3GB までしか扱えない。デバイスとの入出力をメモリマップド I/O で行うために、4GB の物理アドレス空間のうち約 1GB は占有されてしまい、本当にメモリとして使用できるのは約 3GB までになってしまう。これを「3GB の壁」と言うこともあるらしい。
また、例えば 32 ビット Windows の場合、各プロセスが利用できる最大 4GB の仮想アドレス空間のうち、デフォルトでは 2GB をシステムが占有するため、アプリケーションが自由に使えるのは残り 2GB となる。これも同様に「2GB の壁」と言うことがあるらしい。

Wikipedia - 容量の壁
http://ja.wikipedia.org/wiki/%E5%AE%B9%E9%87%8F%E3%81%AE%E5%A3%81
Microsoft サポート技術情報 - 4 GB の RAM が搭載されている場合、Windows Vista の [システム情報] ダイアログ ボックスで報告されるシステム メモリが予想より小さい
http://support.microsoft.com/kb/929605/ja
WebとPCのメモ帳 - 3GBの壁
http://128bit.blog41.fc2.com/blog-category-1.html

メモリマップド I/O のために物理アドレス空間の一部がメモリとして使えなくなることを、「メモリホール」とも言うらしい。いろいろ対策も考えられていて、例えば Windows Server の一部のバージョン (の一部のエディション) では、Intel CPU が持つ PAE (物理アドレス拡張) という仕組みを使うことで、32 ビットカーネルでありながら 4GB 以上の物理アドレス空間を扱えるようになっている。でも、「PAE を使うためにはデバイスドライバもきっちり対応してないといけない」「PAE を使っても 128GB までのメモリしか扱えない」「プロセスに割り当てられるメモリの上限は 4GB のまま」といった問題があって、あくまで、64 ビット環境へ移行するまでの一時的な手段という扱いになっているらしい。

物理アドレス空間

本題とちょっと離れるけど、「物理アドレス空間」って、実際に積んでるメモリに対応しているアドレスの集合だと思ってた。うちのマシンで言うと、積んであるメモリが 4GB なので、物理アドレス空間も 4GB って。本当は、OS とハードウェアの間で「話が通じる」範囲全体が物理アドレス空間で、そのうち 4GB を物理メモリに割り当てて、1GB をメモリマップド I/O のために予約して、残りは何にも使ってない、ということらしい。

WebとPCのメモ帳 - 物理アドレス空間と仮想アドレス空間の違いとその基礎知識
http://128bit.blog41.fc2.com/blog-entry-32.html

Vista の場合

うちのマシンの場合、Vista は Server じゃないし 32 ビット版なので、実は 3GB の壁にぶつかっていたらしい。そういえばインストール直後にそんな表示を見たような記憶がなきにしもあらず。Vista SP1 では 3GB の壁にぶつかっていても「メモリは 4GB デスヨー」と表示するらしいので、今見たらわかんないかも。
なので、アプリはデバイスドライバが対応していることを確認できれば、64 ビット版の Vista か 7 に乗り換えると、今より 1GB 多くメモリを使えるようになる。
どっちにするかはちょっと悩ましい。最新の 7 を買ってみたい気持ちが半分と、32 ビット版 Vista を持っていれば媒体実費だけで 64 ビット版が購入できるらしいのでそっちでもいいかなという気持ちが半分と。

Snow Leopard の場合

Mac の場合は、ある意味 Windows よりややこしい。

ascii.jp - やっぱりスゴい! Snow Leopardの「64bit対応」
http://ascii.jp/elem/000/000/455/455691/
Intel Mac mini (Early 2009) @ 私的ウィキ(blog) - 64bit対応
http://www39.atwiki.jp/macmini/pages/26.html

Mac OS X は 10.4 から段階的に 64 ビット化を進めていて、Snow Leopard の 32 ビットカーネルを使用している場合、「一部は 32 ビット、別の一部は 64 ビット」で動作しているらしい。実際のところ、アクティビティモニタでメモリ使用状況を見ると、32 ビットのはずなのに 4GB フルに使えている。これは PAE を利用しているから。また、同じくアクティビティモニタで実行中のアプリケーションの一覧を見ると「Intel (64 ビット)」と書いてあり、32 ビットカーネルの上で 64 ビットアプリが動作している。
ここで仮に 64 ビットカーネルで起動し直したとすると、メモリの量は当然変わらないし、アプリとカーネルの間でのやり取りも少しは早くなったかなという程度かもしれない。上記の ascii.jp の記事によると、64 ビット CPU では 64 ビットアドレッシングだけでなくレジスタの追加なども行われているために、64 ビットに最適化されたカーネルの方が入出力が若干早くなったりはするらしい。
プリンタのドライバが対応しているなら、64 ビットに移行してみようかな。つまりエプソンさん次第ってこと。

なんかまぁ

書いてる間に飽きてきた。リンク先の各ページで素晴らしくばっちりわかりやすくまとまってるんだから、自分で書き直してもあんま意味なかった。寝ます。