木曜日, 11月 17, 2005

×86システムについて

今日2ちゃんのPC板をボーっと眺めていると
「Javaは遅い」
「Javaは遅いというのは昔の話」
「.NETはもうCと同じくらい早い」
といった書き込みが目立ちました。さて僕が興味を持ったのは「.NETはもうCと同じくらい速い」という意の発言です。
本来Microsoft.NETというVM(VirtualMachine)上で動作するもので、このVMがメモリ上にロードされている必要があります。
そして.NETアプリケーションはスクリプトではないので、コンパイルされています。
つまりVM上で動くからといっていくらでもメモリの耐えうる限り他のアプリに比べて高速化できるかというとそうではないはずです。
なら、少なくとも.NETに比べれば抽象度が低く、美しいアセンブリを生成するはずのCが何故.NET Frameworkと同じ体感速度で動作するのでしょうか?
これにはもちろん
Microsoft.NET Frameworkの技術、といってしまえばそれまでですが、この事実の裏には無駄な×86テクノロジの存在があるのではないでしょうか?

×86テクノロジとは、米Intel社が”80286”プロセッサに続き”80386”(i386)というCPUを発表した際搭載された手法です。
元々8086・(80186)・80286 のCPUはレジスタと呼ばれる記憶領域が16Bit単位です。
たとえばAXとい うレジスタは4桁の16進数で表すことが出来るのです。
しかし80386(i386)に移行する際レジスタが16Bitから32Bitに拡張されました。
それに伴いレジスタにはExtended(拡張された)の意の”E”が振られました。
ところが当時Intel社CPU向けのOSを発売していた米Microsoft社のWindows・MS-DOS といった製品は32Bitにソースコードを書き換えることが出来ませんでした。
そこでIntel社は、新CPU”80386”(i386)に実装するアセンブリ命令およびレジスタの構造に
前バージョンの”80286”のそれを完全に内包させたのです。
これによって8086や80286上で動作した16Bitアプリケーションは簡単に32Bitであるi386やi486に移行することが出来ました。
そしてその考え方を実装したプロセッサの名前の下二桁に”86”の文字列をつけ、以降この技術を「×86」テクノロジ と呼ぶようになったのです。
”80586” と命名予定だったi486の次のプロセッサはIntel社の商標問題から「Pentium」と名付けられました。数字は商標と認められず、「80486」「80386」を名乗ったIntel互換CPUが各社から出荷されたからです。
以降×86テクノロジはPentiumDに至るまで延々と受け継がれてきました。
これによってWindows95~Meは一部16Bit仕様のコードがあるにもかかわらずPentium系プロセッサでの動作が可能になったのです。

ところが完全な32Bitコードで記述されている「WindowsNT」シリーズの後継版
「Windows2000」を元にWindowsMeの後継版「Windowsxp」は構成されたので、
WindowsXP HOME Editionは95系初の完全な32BitOSとなりました。
ProfessionalはWindows2000 Professionalの後継 という位置づけです。
そしてWindows2000 Server の後継版「WindowsServer2003」がXP発売の2年後発売されました。
これによって最新のWindowsシリーズは非×86にも対応しました。
またXPおよびServer2003では64Bitプロセッサ対応パッケージが出ていますし、
Windowsxpの後継となる「WindowsVista」でも
×86(32Bit)版 と ×64(64Bit)版 が発売される予定です。
しかし家庭向けのIntelCPU(Pentium・Celeron シリーズ)は依然×86テクノロジに対応していますので完全な32BitコードであるKernel32.dll(Windowsパフォーマンスライブラリ)
Shell32.dll(Windowsのシェルライブラリ)MSVCRT.dll(WindowsのC言語ランタイム)
の動作に無駄な時間がかかり、VMアプリと体感的にあまり変わらない、という意見もアリかと思います。

この記事はいかがでしたか?人気Blogランキング(投票=クリック)

0 件のコメント: