Intel が 64bit モードのみのサブセットの x86 アーキテクチャを検討中という噂が流れてきました。
検討始めるのが10年遅くないですか?
ここから普及するまでまた何年もかかるのに…
x86 の枷
以前ぼくのブログでも紹介したことがあるように、 x86 には大昔から続いている互換性のために現代ではあまり使われていない無駄な機能や足枷になっている機能が多数存在します。*1
AMD64 アーキテクチャが誕生した当時、 64bit モードではいくつかの歴史的な機能が削除されましたが、 64bit モードから使えないだけで機能自体は CPU に実装されたままでした。 当時はまだ UEFI が一般的ではなく 64bit OS も普及していなかったため、 BIOS で起動して 32bit OS でも従来と同じように動く需要の方が大きかったためです。
今回、それらのすでに使われていない歴史的な機能を CPU コアから削除することで構造シンプルにするのかと思ってましたが、発表資料を見ているとどうやらぼくが思っていた方向とは若干異なるようです。
変更点まとめ
変更点をまとめると以下のようになります。
- 常時ロングモード固定にする
- 常時ページング状態
- リアルモードとプロテクトモードを削除
- 仮想86モードに関する機能も削除
- リング 1 と 2 を削除してリング 0 と 3 のみにする
- 16bit機能の削除
- セグメント機能を縮小して 32bit モードでも 64bit モードと同じようにフラット固定にする
- いくつかの互換性のための機能を削除 (IOPLやIOストリング命令など)
上記の変更に伴っていくつかのシステムフラグが固定値になる
4レベルページングモードと5レベルページングモードの新しい切り替え方法を追加
- PIC や APIC 互換モードを削除して X2APIC 固定にする
- 64bit モードで起動できる新しい SIPI (Startup IPI) を追加
現代の PC は UEFI を使ってロングモードで起動してそのまま 64bit OS を動かすのでリアルモードやプロテクトモードは通常使用されない機能です。 GDT や IDT をほぼそのままの形で残したのは影響を最小限にとどめるためのバランスを考慮した結果でしょうか。
64bit モード以外を削除したような書き方がされている記事を見かけますが、 64bit OS 上で動作する 32bit アプリは相変わらずサポートされています。*2
リング1と2が削除されたのは、ロングモードではリングプロテクションが0と3以外は機能しない盲腸機能だからでしょうか。*3
IOPL 関係の機能が削除されたのは、 386 が生まれた当時は BIOS や DOS アプリを仮想 86 モードで動かす需要がありましたが、ロングモードでは仮想86モード自体が削除され、現代ではアプリが直接 I/O ポートにアクセスする需要がほぼ無くなったためかと思います。
従来4レベルページングと5レベルページングの切り替えは一旦ページングをオフにするためにロングモードを離れる必要がありましたが、 x86S ではロングモードのまま切り替え可能になったので、この機能は通常のプロセッサでもサポートされると嬉しい機能だと思います。
ロングモードはページング機能をオフにできないのでリセット直後のページテーブルがどのような状態になるのか気になりますが、資料では特に触れていないようなのが気になりました。
MYOS の影響
もし実際にこの機能を持った CPU がリリースされたら、 MYOS は X2APIC に対応してないので修正が必要になるでしょう。 当然、新しい SIPI にも対応していないので追加修正が必要です。
逆に、それ以外の削除された機能は現代の OS では利用されていない機能で MYOS も影響はほとんどないでしょう。*4
いかがでしたか?
PIC まわりと OS の初期化処理でいくつか書き換えが必要なものの、 UEFI が普及している現代ではいったん 64bit OS が動作してしまえばほとんど影響のない機能が削除されることで、 CPU をシンプルに設計できるようになる余地が生まれます。
x86 CPU は今までほとんどのプログラムが従来のコードのまま無修正で動くための互換機能でどんどん複雑になっていました。 厳密には細かい動作の違いがあったものの、意図的に互換性を捨てたのは今回が初だと思います。
とはいえ、歴史的に見ると Intel は何度か x86 そのものを捨てようとして失敗して結局互換路線を強いられているので、今後の展開から目が離せませんね。
*1:起源を辿ると 8bit 時代にまで遡る仕様もいくつか存在します
*2:セグメントベースとリミット機能が削除されているのでフラットメモリモデルに限定されますが、現代の主要な OS ではフラット以外のメモリモデルはほとんど利用されていないのでほぼ影響がないでしょう。
*3:ロングモードでもリング1や2で特権命令を直接実行することはできませんが、セグメントによるメモリ範囲で保護することができず、ページングはリング3とそれ以外の区別しかできないのでリング2からリング0のメモリに自由にアクセス可能で、フラットメモリモデルでは実質的にリング0とリング2の間に保護機能が働きません
*4:厳密にははりぼて OS 互換機能が動かなくなりますが、いずれカーネルから削除する予定の機能なのでここでは影響なしと見做します