x86_64アーキテクチャ

アーキテクチャの種類

Intel developer's manual (以降、IDMと略す) vol-1 ~ vol-4をざっと読んだので、内容を忘れないうちにメモ。この後は、パタヘネ本を読んでいこうと思う。というのも、IDMでは、「アーキテクチャ」が説明されている。だから、実際の実装については特に解説がない。メモリのデータサイクルやキャッシュ機構、パイプライン処理などについても勉強したいので、パタヘネ本(和訳)ー>ヘネパタ本(原著)と読み進めていこうと思っている(、、、思っている)。あぁ、読み終わるのは何ヶ月後だろうか。

IDMでは、様々なトピックが絡み合いながら説明が進んでいく。これは、分かりにくさの原因となっている。しかし、これは致し方がないところだ。多くの事柄が相互に関連しているのは、アーキテクチャが巧妙に作られている証しなのかもしれない。

IDMで説明されているアーキテクチャには、以下のようなものがある。

そして、それらのアーキテクチャではいくつかの動作モードをサポートしている。

  • 16-Bit real address mode
  • Virtual-8086 mode
  • System management mode (SMM)
  • 32-Bit protected mode
  • 32-Bit extension (IA-32e) (a.k.a. AMD64)
    • competitive mode
    • 64-Bit mode
real address Virtual-8086 SMM protected IA-32e
IA-32 o o o o x
Intel 64 o o o o o

このうち、以降のまとめで中心にするのは、32-Bit extension(以降、IA-32e)の64-Bit modeだ。実は、IA-32eIntelが(はじめに)作ったものでなく、AMDx86アーキテクチャを64 bitに拡張したものを、Intelがライセンスしたものだ。しかし、IDM内ではそのことについて全く触れておらず、混乱のものになる。正確には、このモードとAMD64は違うところがあるのだが、ざっくりいえば同じアーキテクチャだ。このようにIntelAMDの功績を明示していないことに、linux torvaldsは憤りを覚え、64 bit Intel CPU用のダウンロードファイルにはamd64とつけたらしい(まあ、これはこれで混乱するが)。

IA-32eには、表にもあるように、64-Bit以外に、compatibility modeというモードがある。このモードでは、レガシーコード(ie. 32-Bit protected modeのコード)を(ほとんどの場合)コンパイルなしに動かすことができる。IA-32eにおいて、どちらのモードを使うかは、実行されるコードセグメント(CS)のLフラグで決定される。Lフラグがセットされているとき、64-Bitで、セットされていないときはcompatiblityモードとなる。

ちなみに、IntelIntelで、IA-64アーキテクチャという64 bitアーキテクチャを作ったのだが、これはIA-32アーキテクチャに対する後方互換性がなかった(ie. レガシーコードが動かない)ために、商業的成功を収められなかったという歴史がある。IA-32eアーキテクチャは、後方互換性を実現した代償として、技術的美しさに欠けるところがある(無駄に複雑)が、市場で成功したことは認めざるを得ない。

システムの起動

64-Bitのシステムが起動するとき、プロセッサは、まずリアルアドレスモードで起動する。そして、プロテクティッドモードに移行し、さらに、64-Bitモードに移行する。

さて、種々のアーキテクチャの整理でかなり幅を取ってしまったので、一旦ここで区切るとしよう。