x86・x64・IA-32・IA-64

x86IA-32って何が違うの?x64ってx86を64ビットに拡張したものだから、x64 = IA-64ということ?

OSをかじったりしていた割にこの辺が曖昧だったので調べてみた。といっても概要だけですが。

x86

一言で言えば、インテルが開発した8086とその後継CPUの命令セットアーキテクチャを指す言葉です。

インテルは1978年に8086、その後細かい派生を無視すると、80186、80286、8038680486という順番でCPUを開発しました。インテルが開発したCPUの名前は連番になっており、連番になっている部分をxで置き換えることで「x86」という名称が生まれました。

ちなみに、8086と80186と80286は16ビットCPU、8038680486は32ビットCPUです。そして、これらのCPUは良い意味でも悪い意味でも8086からの互換性を保っています。

IA-32IA-64

タイトルと順番が前後しますが、おそらくこちらを先に説明した方が分かりやすいため、IA-32IA-64を先に説明します。

インテルは1978年に8086を発売して以来、市場の強い要望により8086と互換性を持つCPUを発売してきたわけですが、そもそも8086は拡張性を意識したアーキテクチャではなく、インテルは苦し紛れの拡張を続けてきました。そこでインテルは8086から脈々と続いてきたx86の系譜を捨て、8086と互換性を持たない次世代の64ビット命令セットアーキテクチャとして「IA-64」を開発しました。IA-64を発表した際に今までの32ビット命令セットアーキテクチャ8038680486が採用している命令セットアーキテクチャ)に「IA-32」という名称を付けました。

インテルとしては当然IA-64を広めたいと考えていたようですが、市場はx86上で築き上げてきた莫大な資産を捨ててまでIA-64に移行したいとは思わなかったようで、現状としてIA-64はあまり普及していないようです。

x64

x64はその名前からも分かるように、x86を64ビット拡張したもので当然ながら8086との互換性を持ち合わせています。x86-64と書いてある場合もありますが、同じものを指します。

x64の開発の経緯を少し補足します。

x86は広く普及し、半導体技術とアーキテクチャの革新と共に性能向上を続けてきましたが、インテルIA-32の性能向上によって自社開発のIA-64との競合を懸念し、あえてx86の64ビット化を行いませんでした。しかし、市場としてはIA-32との互換性を保ちつつそれを64ビット化して欲しいわけです。そこでインテルではなくAMDx86を64ビット化し、AMD64として発表しました。その後にインテルAMD64を自社でもIntel 64として採用しました。AMD 64とIntel 64は微妙に異なる点はありますが、動作的にはほとんど同じものと考えてください。

まとめると、AMD 64とIntel 64等の各社が出している互換64ビット命令セットアーキテクチャを「x64」と言います。

一応確認ですが、x64とIA-64はまったく別物で互換性はありません。

2014年現在で一般用途PCのCPUにおいて一番採用されていると思われるCore iシリーズにはx86、x64の両命令セットが搭載されています。

余談

Ubuntuの64ビットイメージを落とすと、末尾にamd64と書いてある意味がやっと分かりました。

参考サイト