素朴な疑問@32ビットのお話

ペンティアムMなどの一部のCPUがPAE非対応なため
ubuntuがインストール出来ないなどの話をしていた時、
意外と素朴な(今更聞けない?)疑問があって、その中で
拙生がなんとか説明できたものを、ちょっと肉付けして
ここにも書いてみます。

【PAEが必須になった理由ってなに?】

ubuntu12.04LTS以降のバージョンでは、PAE非対応の
CPUでは細工をしなければインストールができません。
メモリが4GB以下でも、物理アドレス拡張が必須なことに
疑問を持つ人が多いことは当然です。

開発チームはPAE非対応を切り落とすことに、かなりの葛藤が
あったようですが、PAE対応と非対応の両者ともQA(品質保証)
するためのコストが2倍必要になってしまうことで踏み切ったようです。
つまり単純に考えると、カーネルメンテを行うチームの人数が
倍必要、または寝ないでメンテしてもらうしかありません。

安価版として数多く出回ったPentiumMやCeleronMの一部の
マシーンでインストールできなくなったのは残念ですが、
非対応なものはあっさり諦めるか、自力でカーネルを改造・
再コンパイルする手間が発生するのは致し方ないと思います。

【CPUだけじゃない】

PAE非対応なCPUだけでなく、古いハードウェアにおいては
PAEを有効にするとドライバーが死んでしまうものもあり、
CPUだけ。。。が問題となるわけではないので注意が必要です。

更に。。。
物理的な拡張ではありますが、OSの対応にも依存しています。
最近のバージョンのubuntuはPAEが必須なのですから、
当然対応していますが、対応していないOSではハード的に
有効になっていても無意味であるということです。

他にもアドレス管理の実装のバグやチップセットの
ファームウェアの問題等々、インストールできない理由は
様々な組み合わせなどによりで、明らかにブラックリストに
載せることのできるもの以外はやってみなきゃ分からない
世界なのであります。
これはWindowsOSなどでも一緒でしょう。

ちなみにかなりの数をインストールしましたが、
出来なかったのは1回だけけです。
 @極端に古いマシーンでBIOSの実装関連の問題

【32ビットなのに64GB扱える理由】

PAE非対応 2の32乗なので4GB
PAE対応  2の36乗なので64GB

メモリのアドレス計算はCPUの汎用レジスタで行います。
CPUのビット数はこの汎用レジスタサイズを言うので
32ビットCPUで扱えるアドレス計算は4GBまでとなりますが
36ビットまで拡張することで64GBまで扱えるようになります。
というのがよく見る一般的な説明ですが、正確には扱える
メモリーはCPUのアドレス線の本数であります。
一般的な説明でいくと、PAE対応のCPUでは汎用レジスタが
36ビットでなくてはいけないという矛盾が生じます。
PAE対応の32ビットCPUはアドレス線が36本に拡張されている。
というのが正解であり、32ビットは32ビットなのです。

【64ビットなのにPAEを有効にする理由】

32ビット → 4,294,967,295
64ビット → 4,294,967,295 x 4,294,967,295

天文学的数字になってしまう64ビットでなぜPAEを
有効にするのでしょう。
それはPAEを有効にするともれなくついてくるNXビットの
機能が欲しいからです。

NXビット(XDビット@インテル)を簡単に説明すると
32ビットOSで管理できないメモリ範囲においては、
プログラム・コードの動作を禁止する機能です。

32ビットOSではPAEを有効にして場合でも、4GB以上に関しては
管理不能であり、管理外範囲外で実行されるマルウェアなどに
無防備になってしまいます。
そこでNXビット(No eXecute bit → 実行不可属性)を立てて
おくことが極めて重要な必須条件となります。

64ビットにおいてはPAEは不要でも、バッファオーバフロー攻撃
などで、意図しないアドレスのデータを上書し破壊されてしまう
などの防御対策のためにNXビットを機能が欲しいので、PAEを
有効にしておくというのが理由です。

注 ヒープ・スタック領域やページテーブルエントリおよび
  仮想アドレス空間、ハイパーバイザー上の話などを
  割愛した簡易的な説明のため、正確さに欠けているところが
  多々あります。
  またあくまでも拙生の認識です。

しかし集まれば無線かコンピュータ系の話ばかり。。
たまには少々色気のある話でもしたいものです。w

HOME

おすすめ