人とか機械とか

デジタルガジェットやコンピュータについてのブログです。

IntelとAMDの64bitについての歴史

なんか、キーワードの使い方がアチコチでバラバラで、いまいちヨクワカランかったので調べてまとめた。

Intelが初めて作ったのが4004という8bit CPU。それからいろいろ出て16bitになったりした。AMDはセカンドソースでそれを製造していた。
・初めての32bitCPUである80386(i386)あたりから、x86アーキテクチャと呼ばれるようになった。広い意味で386より前もx86と呼ぶ場合もあるが、386以降を指すことが多い。32bit PC市場はIntelが主流になった。
・1994年に、64bitサーバー市場への進出を目論んでIntelがHPと協力してIA-64アーキテクチャを発表したのをきっかけに、いままでのものをIA-32アーキテクチャと呼ぶようになった。(レトロニム)
・2000年、AMDx86-64アーキテクチャを発表。
・2001年、IA-64アーキテクチャを搭載したItanium発売
・2003年、AMDx86-64アーキテクチャの実装であるAthlon64プロセッサを発売し、AMD64アーキテクチャと改名。
・2004年、IntelIA-32eアーキテクチャを発表。でもすぐEM64Tと改名。AMD64と完全互換。
・2006年、IntelEM64TIntel64と改名。(Core2Duoの発売に合わせたらしい)

※ 本当はIntelIA-32IA-64に置き換えていく予定だったが、64bitサーバー市場でも振るわず、PC市場ではAMDに先を越された。IA-64IA-32と命令に互換性が無く、IA-32のプログラムはエミュレーションで実行するため過去のプログラム実行が遅かった。対応OSも少なかった。

CPUの動作モードの名前

AMD64 ・・・ longモード, サブモードが「互換モード」「64bitモード」

Intel64 ・・・ IA-32eモード, サブモードが「互換モード」「64bitモード」

ほぼ longモード == IA-32eモード と思って問題ないはず。

AMD64とIntel64の違う点ってあるのだろうか?

SSE4.1以降はIntelのCPUにしか載ってないらしい。AMDには載ってないらしい。ちなみに、SSE, SSE2 の命令は「AMD64アーキテクチャ」自体に組み込まれている。つまりAMD64互換CPUを作るには、SSE系も実装することが"必須"(Mandatory)になっている。

OSからの呼び方

UNIX系(BSD,Linux)では、古くからx86i386と呼んでいる。
UNIXLinuxでは、AMD64x86_64と呼んでいる。
・BSD系では、AMD64amd64と呼んでいる。
・Windowsはx86x86と呼んでいる。AMD64Intel64のことを、x64と呼んでいる。実際SDKやWDKでの呼び名もそうなっている。しかし、infファイルの中には"amd64"というキーワードが出てくる。さらにWDKのビルドツールのコマンドラインオプションで指定するプロセッサアーキテクチャや、ビルドして作成されるディレクトリ名が、i386だったりAMD64だったりする。いまいち統一されていない。

まとめ (2010年3月現在)

Intelの命名 ・・・ IA-32e -> EM64T -> Intel64

AMDの命名 ・・・ x86-64 -> AMD64

Microsoftの命名 ・・・ x64

つまり
IA-32e == EM64T == Intel64 == x86-64 == AMD64 == x64

呼び方が色々あって紛らわしいのですが、現代においてはこの認識で(おおむね)問題ないと思います。

おまけ、snow leopardまとめ

・カーネルの起動モードが32bit起動と64bit起動があり、だいたいのハードウェアはデフォルト32bit起動になっていて、一部サーバー系は64bit起動になっている。
・32bitカーネルではKEXTとドライバも32bitだけが動く。しかしカーネルの一部が64bitで動いており、物理メモリは4TBくらい使える。これはTigerあたりからそうなってる。でも32bitドライバのメモリ空間は32bit内に押し込めたらしい。
・64bitカーネルではKEXTとドライバも64bitだけが動く。物理メモリは普通に4TBくらい使える。64bit対応してないKEXTやドライバは動かないが、なんか体感速度が上がるらしい。
・カーネルがなんだろうとユーザーモード(システムやアプリ)は32bitも64bitも動く
Intel64が実装されているのはCore2以降のCPUなんだけど、CPUがCoreのマシンにSnow Leopardをインストールすると、いったいどうやって64bitのユーザーモードのシステムやアプリを動かしているのかはよくわからない。
IA-32eモード(longモード)で動いている。互換モードと64bitモードを切り替えて動いている。

Mac OS X 10.5 (Leopard) は真の64bit OSではない?
http://www.yuumediatown.com/diary/mt001/archives/008517.html
なぜ Intel Mac のドライバには 64-bit 化の問題が起きなかったのか?
http://d.hatena.ne.jp/NyaRuRu/20071114/p1
やっぱりスゴい! Snow Leopardの「64bit対応」
http://ascii.jp/elem/000/000/455/455691/index-3.html
なぜMac OS Xの64bit移行はスムーズなのか?
http://ascii.jp/elem/000/000/427/427662/

Windows x64

・カーネルは64bitで、ドライバも64bitでないと動かない。
・WOW64サブシステム上で、従来の32bitのアプリケーションが動く。
・すごく紛らわしいのだが、windows/System32が64bitシステムで、windows/SysWOW64が32bitサブシステムである。
x64のアプリケーションはProgram Filesに、x86のアプリケーションはProgram Files (x86)に、インストールされる。
IA-32eモード(longモード)で動いている。互換モードと64bitモードを切り替えて動いている。Windows x86はレガシーモードで動いている。


SEE ALSO

言えないと恥ずかしいAMD64とEM64Tの違い
http://www.itmedia.co.jp/enterprise/articles/0506/24/news017.html