64ビットコンピューティング

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

コンピュータアーキテクチャでは64ビット 整数メモリアドレス、またはその他のデータユニットは、64ビット(8オクテット)幅のものです。また、64ビット中央処理装置(CPU)および算術論理演算装置(ALU)のアーキテクチャーは、そのサイズのプロセッサー・レジスターアドレス・バス、またはデータ・バスに基づくアーキテクチャーです。64ビットマイクロコンピュータは、64ビットマイクロプロセッサが標準であるコンピュータです。ソフトウェアの観点から、64ビットコンピューティングはマシンコードの使用を意味します64ビットの仮想メモリアドレスを使用します。ただし、すべての64ビット命令セットが完全な64ビット仮想メモリアドレスをサポートしているわけではありません。たとえば、 x86-64およびARMv8は、48ビットの仮想アドレスのみをサポートします。仮想アドレスの残りの16ビットはすべて0またはすべて1である必要があり、いくつかの64ビット命令セットは64ビット未満の物理メモリをサポートします。住所。

64ビットという用語は、64ビットプロセッサが標準である世代のコンピュータを表します。64ビットは、特定のクラスのコンピュータアーキテクチャ、バス、メモリ、CPU、さらにはそれらで実行されるソフトウェアを定義するワードサイズです。64ビットCPUは、1970年代からスーパーコンピューター(Cray -1、1975)で使用され、1990年代初頭から縮小命令セットコンピューター(RISC)ベースのワークステーションおよびサーバー、特にMIPS R4000R8000、およびR10000デジタル機器で使用されています。 Corporation(DEC)AlphaSun Microsystems UltraSPARC、およびIBMRS64 POWER3以降のIBMPowerマイクロプロセッサー2003年に64ビットCPUが(以前の32ビット)主流のパーソナルコンピュータ市場にx86-64プロセッサとPowerPC G5の形で導入され、2012年に[1]スマートフォンタブレットを対象としたARMアーキテクチャに導入されました。 2013年9月20日に最初に販売されたコンピューター。ARMv8を搭載したiPhone5S-チップ上のAppleA7システム (SoC)。

64ビットレジスタは、2 64(18千億以上または1.8×10 19)の異なる値のいずれかを保持できます。64ビットに格納できる整数値の範囲は、使用する整数表現によって異なります。最も一般的な2つの表現では、範囲は(符号なし2進数として表現する場合は0〜18,446,744,073,709,551,615(2 64 − 1)、2の補数として表現する場合は−9,223,372,036,854,775,808(−2 63)〜9,223,372,036,854,775,807(2 63 − 1)です。したがって、 64ビットのメモリアドレスを持つプロセッサは、264に直接アクセスできます。バイトアドレス指定可能なメモリ のバイト(16エクスビバイトまたはEiB) 。

これ以上の資格がない場合、64ビットコンピュータアーキテクチャには通常、64ビット幅の整数およびアドレス指定プロセッサレジスタがあり、64ビットデータ型とアドレスを直接サポートできます。ただし、CPUには、レジスタとは異なるサイズの外部データバスまたはアドレスバスがあり、さらに大きい場合があります(たとえば、32ビットのPentiumには64ビットのデータバスがあります)。[2]

この用語は、64ビット浮動小数点演算数などの低レベルのデータ型のサイズを指す場合もあります。

アーキテクチャへの影響

プロセッサレジスタは通常、整数浮動小数点単一命令、複数データ(SIMD)、制御、およびアドレスインデックスベースレジスタなどのさまざまな用途と名前を持つアドレス演算用の特殊レジスタのいくつかのグループに分けられますただし、最近の設計では、これらの関数はより汎用的な整数によって実行されることがよくあります。レジスタ。ほとんどのプロセッサでは、整数またはアドレスレジスタのみを使用してメモリ内のデータをアドレス指定できます。他のタイプのレジスタはできません。したがって、これらのレジスタのサイズは、浮動小数点レジスタなどのより広いレジスタが存在する場合でも、通常、直接アドレス指定可能なメモリの量を制限します。

ほとんどの高性能32ビットおよび64ビットプロセッサ(一部の注目すべき例外は、古いまたは組み込みのARMアーキテクチャ(ARM)および32ビットMIPSアーキテクチャ(MIPS)CPUです)には、フローティングポイントハードウェアが統合されています。 64ビット単位のデータ。たとえば、x86 / x87アーキテクチャには、64ビット(および32ビット)浮動小数点値をメモリにロードして格納できる命令がありますが、内部浮動小数点データとレジスタ形式は80ビット幅ですが、汎用です。レジスタは32ビット幅です。対照的に、64ビットAlphaファミリは、64ビット浮動小数点データとレジスタ形式、および64ビット整数レジスタを使用します。

歴史

多くのコンピュータ命令セットは、単一の整数レジスタがメモリアドレスをコンピュータの物理メモリまたは仮想メモリの任意の場所に格納できるように設計されています。したがって、メモリへのアドレスの総数は、多くの場合、これらのレジスタの幅によって決まります。1960年代のIBMSystem / 360は、初期の32ビットコンピューターでした。32ビット整数レジスタがありましたが、アドレスには下位24ビットのワードしか使用されなかったため、16  MiB16×1024 2バイト)のアドレス空間になりました。DECVAXなどの32ビットスーパーミニコンピューター は1970年代に一般的になり、Motorola68000ファミリIntel80386以降x86ファミリの32ビットメンバーなどの32ビットマイクロプロセッサが1980年代半ばに登場し、32ビットは事実上のものになりました。便利なレジスタサイズとしてのコンセンサス。

32ビットアドレスレジスタは、2つの32アドレス、つまり4  GiBランダムアクセスメモリ(RAM)を参照できることを意味します。これらのアーキテクチャが考案されたとき、4 GiBのメモリは、インストールの通常の量(4 MiB)をはるかに超えていたため、これは対処するのに十分なヘッドルームであると考えられていました。42.9億のアドレスは、別の重要な理由で使用するのに適切なサイズと見なされました。42.9億の整数は、データベースなどのアプリケーションのほとんどのエンティティに一意の参照を割り当てるのに十分です。

Cray-1などの1970年代および1980年代の一部のスーパーコンピューターアーキテクチャ[3]は、最大64ビット幅のレジスタを使用し、64ビット整数演算をサポートしていましたが、64ビットアドレス指定はサポートしていませんでした。1980年代半ばに、Intel i860 [4]の開発は、 1989年のリリース(Windows NTには遅すぎる[5] )で最高潮に達し始めました。i860は32ビット整数レジスタと32ビットアドレス指定を備えていたため、グラフィックユニットは64ビット整数演算をサポートしていましたが、完全に64ビットプロセッサではありませんでした。[6]ただし、メモリコストの継続的な削減によりRAMの量が4 GiBに近づくインストールが行われ、特定のタイプの処理には4 GiBの上限を超える仮想メモリスペースの使用が望まれるようになるまで、32ビットが標準のままでした。問題の。これに応えて、MIPSとDECは、当初はハイエンドのワークステーションサーバーマシン向けに64ビットマイクロプロセッサアーキテクチャを開発しました。1990年代半ばまでに、HAL Computer SystemsSun MicrosystemsIBMSilicon Graphics、およびHewlett Packardは、ワークステーションおよびサーバーシステム用に64ビットアーキテクチャを開発しました。この傾向の注目すべき例外はメインフレームでしたその後、32ビットデータと31ビットアドレスサイズを使用したIBMから。IBMメインフレームには2000年まで64ビットプロセッサが含まれていませんでした。1990年代には、いくつかの低コストの64ビットマイクロプロセッサが家庭用電化製品や組み込みアプリケーションで使用されていました。特に、Nintendo 64 [7]PlayStation2は、パーソナルコンピュータに導入される前は64ビットマイクロプロセッサを搭載していました。ハイエンドのプリンタ、ネットワーク機器、および産業用コンピュータも、Quantum Effect DevicesR5000などの64ビットマイクロプロセッサを使用していました。[要出典] 64ビットコンピューティングは、2003年以降、 Appleの一部のモデルがパソコンのデスクトップに浸透し始めました。のMacintoshラインはPowerPC970プロセッサ(AppleではG5と呼ばれます)に切り替わり、 Advanced Micro Devices(AMD)は最初の64ビットx86-64プロセッサをリリースしました。

64ビットデータタイムライン

1961年
IBMは、64ビットのデータワードと32ビットまたは64ビットの命令ワードを使用するIBM 7030Stretch スーパーコンピューターを提供しています。
1974
Control Data Corporationは、64ビットワードアーキテクチャを使用するCDC Star-100ベクトルスーパーコンピューターを発売しました(以前のCDCシステムは60ビットアーキテクチャに基づいていました)。
International Computers Limitedは、 32ビット、64ビット、および128ビットの2の補数整数を備えたICL2900シリーズを発売します。64ビットおよび128ビットの浮動小数点。32ビット、64ビット、および128ビットのパック10進数と、128ビットのアキュムレータレジスタ。このアーキテクチャは、一連のICLおよびFujitsuマシンを通じて存続しています。最新のものは、64ビットIntelプロセッサで元の環境をエミュレートするFujitsuSupernovaです。
1976年
Cray Researchは、64ビットワードアーキテクチャに基づいており、後のCrayベクトルスーパーコンピューターの基盤となる最初のCray-1スーパーコンピューターを提供します。
1983年
ElxsiはElxsi6400パラレルミニスーパーコンピューターを発売します。Elxsiアーキテクチャには64ビットのデータレジスタがありますが、32ビットのアドレス空間があります。
1989年
Intelは、Intel i860 縮小命令セットコンピュータ(RISC)プロセッサを発表しました。「64ビットマイクロプロセッサ」として販売されており、基本的に32ビットアーキテクチャであり、64ビット整数演算が可能な3Dグラフィックスユニットで拡張されています。[8]
1993年
Atariは、アーキテクチャに64ビット幅のデータパスを含むAtariJaguar ビデオゲームコンソールを紹介します。[9]

64ビットアドレスタイムライン

1991
MIPS Computer Systemsは、最初の64ビットマイクロプロセッサであるR4000を製造しています。これは、 MIPSアーキテクチャの3番目のリビジョンであるMIPSIIIアーキテクチャを実装しています。[10] CPUは、IRISCrimson以降のSGIグラフィックスワークステーションで使用ますKendall Square Researchは、 OSF / 1を実行する独自の64ビットRISCプロセッサアーキテクチャに基づいた、最初のKSR1スーパーコンピュータを提供します。
1992
Digital Equipment Corporation (DEC)は、 PRISMプロジェクトから生まれた純粋な64ビットAlphaアーキテクチャを導入しています。[11]
1994年
Intelは、32ビットIA-32プロセッサの後継として、64ビットIA-64アーキテクチャ( Hewlett-Packardと共同開発)の計画を発表しました。1998年から1999年の発売日が目標でした。
1995年
Sunは、64ビットSPARCプロセッサであるUltraSPARCを発売します。[12] 富士通が所有するHALComputer Systemsは、HALが独自に設計した第1世代のSPARC64である64ビットCPUをベースにしたワークステーションを発売しますIBMは、最初の64ビットPowerPCASプロセッサーであるA10およびA30マイクロプロセッサーをリリースします。[13] IBMは、オペレーティングシステム、データベース、およびアプリケーションを変換できる64ビットAS / 400システムアップグレードもリリースしています。
1996年
任天堂は、MIPSR4000の低価格版を中心に構築されたNintendo64ビデオゲームコンソールを発表しました。HPは、64ビットPA-RISC2.0アーキテクチャの最初の実装であるPA-8000をリリースしました。[14]
1998年
IBMは、フル64ビットPowerPC / POWERプロセッサーのPOWER3ラインをリリースします。[15]
1999年
Intelは、IA-64アーキテクチャ用の命令セットをリリースしました。AMDは、 x86-64(後のブランドのAMD64)と呼ばれるIA-32の64ビット拡張機能のセットを公開しています。
2000
IBMは、最初の64ビットz / Architecture メインフレームであるzSeriesz900を出荷します。z / Architectureは、32ビットESA / 390アーキテクチャーの64ビットバージョンであり、32ビットSystem / 360アーキテクチャーの子孫です
2001年
Intelは、市場投入が繰り返し遅れた後、IA-64プロセッサラインを出荷しています。現在Itaniumのブランドであり、ハイエンドサーバーをターゲットにしているため、売上は期待に応えられません。
2003年
AMDは、最初のx86ベースの64ビットプロセッサアーキテクチャであるAMD64アーキテクチャに基づいて、OpteronおよびAthlon64プロセッサラインを発表しました。Appleは、IBMが製造した64ビットの「G5」PowerPC970CPUも出荷しています。Intelは、Itaniumチップが64ビットプロセッサのみであると主張しています。
2004年
Intelは、AMDの市場での成功に反応して、IA-32eという名前のAMD64拡張機能のクローンを開発していることを認めています(後でEM64Tに名前が変更され、さらにIntel 64に名前が変更されました)。Intelは、新しい64ビット命令セットをサポートするXeonおよびPentium4プロセッサフ​​ァミリの更新バージョンを出荷しています。
VIA Technologiesは、 Isaiah64ビットプロセッサを発表しました。[16]
2006年
ソニー、IBM、東芝は、 PlayStation 3、サーバー、ワークステーション、その他のアプライアンスで使用する64ビットCellプロセッサの製造を開始しました。Intelは、モバイル、デスクトップ、およびワークステーションライン向けの最初の主流のx86-64プロセッサとしてCore 2Duoをリリースしました。以前の64ビット拡張プロセッサラインは、消費者向け小売市場では広く利用できませんでした(64ビットPentium 4 / DのほとんどはOEMでした)、64ビットPentium 4、Pentium D、およびCeleronは、2006年後半まで大量生産されませんでした。歩留まりの問題(歩留まりの良いウェーハのほとんどはサーバーとメインフレームを対象としていましたが、メインストリームは2006年まで130 nm 32ビットプロセッサラインのままです)になり、Core2のデビュー後すぐにローエンドになりました。AMDは最初の64ビットモバイルプロセッサをリリースし、90nmで製造されました。
2011
ARM Holdingsは、 ARMアーキテクチャの最初の64ビットバージョンであるARMv8-Aを発表しました[17]
2012年
ARM Holdingsは、2012年10月30日に、64ビットアーキテクチャに基づく最初のコアであるCortex-A53およびCortex-A57コアを発表しました。[1] [18]
2013年
Appleは、スマートフォンに世界初の64ビットプロセッサを搭載したiPhone 5Sを発表しました。これは、 A7ARMv8 -Aベースのシステムオンチップを使用しています。
2014年
Googleは、64ビットのTegraK1チップで動作する最初のAndroidデバイスであるNexus9タブレットを発表しました。

64ビットオペレーティングシステムのタイムライン

1985年
Crayは、 Unixオペレーティングシステムの最初の64ビット実装であるUNICOSをリリースしました。[19]
1993年
DECは、 Alphaアーキテクチャに基づくシステム用に64ビットDEC OSF / 1 AXP Unixライクなオペレーティングシステム(後にTru64 UNIXに名前が変更されました)をリリースします。
1994年
R8000プロセッサのサポートは、リリース6.0でSiliconGraphicsによってIRIXオペレーティングシステムに追加 ました。
1995年
DECは、OpenVMS forAlphaの最初の完全な64ビットバージョンであるOpenVMS7.0をリリースします。Alphaアーキテクチャ用の最初の64ビットLinuxディストリビューションがリリースされました。[20]
1996年
64ビットモードでのR4x00プロセッサのサポートは、リリース6.2でSiliconGraphicsによってIRIXオペレーティングシステムに追加 まし
1998年
Sunは、64ビットUltraSPARCを完全にサポートするSolaris7をリリースします
2000
IBMは、新しいzSeries64ビットメインフレーム用にMVSから派生した64ビットオペレーティングシステムであるz / OSをリリースします。64ビットLinuxon z Systemsは、CPUリリースにほぼ即座に続きます。
2001年
Linuxは、 x86-64を完全にサポートする最初のOSカーネルになります(x86-64プロセッサはまだリリースされていないため、シミュレータ上で)。[21]
2001年
MicrosoftはItaniumのIA-64アーキテクチャ用のWindows XP64ビット版をリリースしました。実行層を介して32ビットアプリケーションを実行できます。
2003年
Appleは、PowerPC970プロセッサでネイティブ64ビット整数演算のサポートを追加するMacOS X10.3 「Panther」オペレーティングシステムをリリースしました。[22] AMD64をサポートするいくつかのLinuxディストリビューションがリリースされています。AMD64をサポートするFreeBSDリリース。
2005年
マイクロソフトは、昨年9月以降IA-64プロセッサを搭載したPCが利用できなかったため、1月4日にWindows XP 64-Bit Editionを廃止し、それに代わるWindowsのx86-64バージョンを開発していることを発表しました。[23] 1月31日、SunはAMD64およびEM64TプロセッサをサポートするSolaris10をリリースします。4月29日、AppleはMac OS X 10.4 "Tiger"をリリースしました。これは、PowerPC970プロセッサを搭載したマシンで64ビットコマンドラインアプリケーションを限定的にサポートします。IntelベースのMacのそれ以降のバージョンは、EM64Tプロセッサを搭載したMacで64ビットのコマンドラインアプリケーションをサポートしていました。4月30日、MicrosoftはAMD64およびEM64Tプロセッサ用のWindows XP Professional x64EditionおよびWindowsServer 2003 x64Editionをリリースします。[24]
2006年
Microsoftは、32ビット互換性を維持するAMD64 / EM64Tプロセッサ用の64ビットバージョンを含むWindowsVistaをリリースします。64ビットバージョンでは、すべてのWindowsアプリケーションとコンポーネントは64ビットですが、プラグインとの互換性のために32ビットバージョンも含まれているものが多くあります
2007年
AppleはMacOS X 10.5 "Leopard"をリリースしました。これは、PowerPC970またはEM64Tプロセッサを搭載したマシンで64ビットアプリケーションを完全にサポートします。
2009年
MicrosoftはWindows7をリリースします。これには、Windows Vistaと同様に、AMD64 / Intel64プロセッサ用の完全な64ビットバージョンが含まれています。ほとんどの新しいコンピューターは、デフォルトで64ビットバージョンでロードされます。Microsoftは、最初の64ビット専用サーバーオペレーティングシステムであるWindows Server 2008R2もリリースしています。AppleはMacOS X 10.6、「Snow Leopard」をリリースしました。これは、AMD64 / Intel64プロセッサ用の64ビットカーネルに同梱されていますが、Appleコンピュータの特定の最近のモデルのみがデフォルトで64ビットカーネルを実行します。Mac OS X10.6にバンドルされているほとんどのアプリケーションも64ビットになりました。[22]
2011
AppleはMacOS X 10.7、「Lion」をリリースしました。これは、サポートされているマシンでデフォルトで64ビットカーネルを実行します。64ビットカーネルを実行できない古いマシンは32ビットカーネルを実行しますが、以前のリリースと同様に、64ビットアプリケーションを実行できます。Lionは、32ビットプロセッサを搭載したマシンをサポートしていません。Mac OS X 10.7にバンドルされているほぼすべてのアプリケーションも、iTunesを含めて64ビットになりました。
2012年
Microsoftは、UEFIクラス3(CSMなしのUEFI )とセキュアブートをサポートするWindows8をリリースします。[25]
2013年
AppleはiOS7をリリースしました。これは、AArch64プロセッサを搭載したマシン上で、64ビットアプリケーションをサポートする64ビットカーネルを備えています。
2014年
Googleは、64ビットプロセッサをサポートするAndroidオペレーティングシステムの最初のバージョンであるAndroidLollipopをリリースしました。
2017年
AppleはiOS11をリリース、AArch64プロセッサを搭載したマシンのみをサポートします。64ビットアプリケーションのみをサポートする64ビットカーネルを備えています。32ビットアプリケーションは互換性がなくなりました。
2019年
AppleはmacOS10.15 "Catalina"をリリースし、32ビットIntelアプリケーションのサポートを終了しました。
2021年
GoogleはAndroid12をリリースし、32ビットアプリケーションのサポートを終了します。Microsoftは10月5日にWindows11をリリースします。これは64ビットシステムのみをサポートし、IA-32システムのサポートを終了します。

プロセッサの制限

原則として、64ビットマイクロプロセッサは16 EiB(16×1024 6 = 2 64 = 18,446,744,073,709,551,616バイト、または約18.4エクサバイト)のメモリをアドレス指定できます。ただし、すべての命令セット、およびそれらの命令セットを実装するすべてのプロセッサが、完全な64ビット仮想または物理アドレス空間をサポートしているわけではありません。

x86-64アーキテクチャ2016年現在)では、仮想メモリに48ビット、任意のプロセッサで最大52ビットの物理メモリを使用できます。[26] [27]これらの制限により、それぞれ256 TiB256×1024 4バイト)および4  PiB4×1024 5バイト)のメモリサイズが可能になります 現在、PCに4 ペビバイトを含めることはできませんメモリの(メモリチップの物理的なサイズによる)が、AMDは、大規模なサーバー、共有メモリクラスタ、および予見可能な将来にこれに近づく可能性のある物理アドレス空間の他の使用を想定していました。したがって、52ビットの物理アドレスは、完全な64ビットの物理アドレスを実装するコストをかけずに、拡張の余地を十分に提供します。同様に、48ビットの仮想アドレス空間は、32ビットの制限である4 GiB(4×1024 3バイト)の65,536(2 16 )倍を提供するように設計されており、後で拡張する余地があり、64ビット全体を変換するオーバーヘッドが発生しません。アドレス。

Power ISA v3.0では、実効アドレスに64ビットを使用でき、仮想メモリに65〜78ビットのセグメント化されたアドレスにマップされ、任意のプロセッサの場合、物理メモリに最大60ビットを使用できます。[28]

Oracle SPARC Architecture 2015では、仮想メモリに64ビットを使用でき、任意のプロセッサの場合、物理メモリに40〜56ビットを使用できます。[29]

ARM AArch64仮想メモリシステムアーキテクチャでは、仮想メモリに48ビットを使用でき、任意のプロセッサの場合、物理メモリに32〜48ビットを使用できます。[30]

DEC Alpha仕様では、最低43ビットの仮想メモリアドレス空間(8 TiB)をサポートする必要があり、ハードウェアは、サポートされていない残りのビットがゼロかどうかをチェックしてトラップする必要があります(将来のプロセッサでの互換性をサポートするため)。Alpha 21064は、43ビットの仮想メモリアドレス空間(8 TiB)と34ビットの物理メモリアドレス空間(16 GiB)をサポートしていました。Alpha 21164は、43ビットの仮想メモリアドレス空間(8 TiB)と40ビットの物理メモリアドレス空間(1 TiB)をサポートしていました。Alpha 21264は、ユーザーが構成可能な43ビットまたは48ビットの仮想メモリアドレス空間(8TiBまたは256TiB)と44ビットの物理メモリアドレス空間(16 TiB)をサポートしていました。


64ビットアプリケーション

32ビットと64ビット

32ビットアーキテクチャから64ビットアーキテクチャへの変更は根本的な変更です。ほとんどのオペレーティングシステムは、新しいアーキテクチャを利用するために大幅に変更する必要があります。そのソフトウェアは、実際のメモリアドレス指定ハードウェアを管理する必要があるためです。[31]新しい機能を使用するには、他のソフトウェアも移植する必要があります。古い32ビットソフトウェアは、64ビット命令セットが32ビット命令セットのスーパーセットであるためにサポートされる可能性があるため、64ビット命令セットをサポートするプロセッサは32ビット命令のコードも実行できます。セット、またはソフトウェアエミュレーションを介して、または32ビットx86アプリケーションを実行するためのIA-32プロセッサコアを含むIntelの一部のItaniumプロセッサと同様に、64ビットプロセッサ内に32ビットプロセッサコアを実際に実装することによって。これらの64ビットアーキテクチャのオペレーティングシステムは、通常、32ビットと64ビットの両方のアプリケーションをサポートします。[32]

これに対する1つの重要な例外は、IBM AS / 400です。このソフトウェアは、 Technology Independent Machine Interface(TIMI)と呼ばれる仮想命令セットアーキテクチャー(ISA)にコンパイルされています。TIMIコードは、実行される前に、低レベルのソフトウェアによってネイティブマシンコードに変換されます。IBMがAS / 400のネイティブ命令セットを古い32/48ビットIMPIから新しい64ビットPowerPCに移行したときのように、翻訳ソフトウェアは、完全なOSとすべてのソフトウェアを新しいプラットフォームに移動するために書き直す必要があるすべてです。 -AS、コード名AmazonIMPI命令セットは32ビットのPowerPCとはかなり異なっていたため、この遷移は、特定の命令セットを32ビットから64ビットに移動するよりもさらに大きくなりました。

x86-64アーキテクチャ(AMD64)を備えた64ビットハードウェアでは、ほとんどの32ビットオペレーティングシステムとアプリケーションは、互換性の問題なしで実行できます。64ビットアーキテクチャのより大きなアドレス空間により、デジタルビデオ、科学コンピューティング、大規模データベースなどのアプリケーションでの大規模なデータセットの操作が容易になりますが、それらまたは32ビット互換モードがより高速であるかどうかについてはかなりの議論がありました。他のタスク用の同等の価格の32ビットシステム。

コンパイルされたJavaプログラムは、変更なしで32ビットまたは64ビットのJava仮想マシンで実行できます。char、、、、、、、、などのすべての組み込み型の長さと精度shortおよび配列インデックスとして使用できる型は、標準で指定されており、基盤となるアーキテクチャに依存しません64ビットのJava仮想マシンで実行されるJavaプログラムは、より大きなアドレス空間にアクセスできます。[33]intlongfloatdouble

32ビットプロセッサと64ビットプロセッサを比較する際に考慮すべき要素は速度だけではありません。マルチタスク、ストレステスト、クラスタリングなどのアプリケーション(ハイパフォーマンスコンピューティング(HPC)向け)は、適切に展開された場合、64ビットアーキテクチャに適している可能性があります。このため、64ビットクラスターは、IBM、HP、Microsoftなどの大規模な組織に広く展開されています。

概要:

  • 64ビットプロセッサは、64ビットソフトウェアで最高のパフォーマンスを発揮します。
  • 64ビットプロセッサには下位互換性があり、32ビットバージョンの命令セットに対して32ビットアプリケーションソフトウェアを実行できます。また、32ビットバージョンの命令セットに対して32ビットオペレーティングシステムの実行をサポートする場合もあります。 。
  • 32ビットプロセッサは64ビットソフトウェアと互換性がありません。

長所と短所

よくある誤解は、コンピュータに4 GiBを超えるランダムアクセスメモリが搭載されていない限り、64ビットアーキテクチャは32ビットアーキテクチャに勝るものはないというものです。[34]これは完全に真実ではありません:

  • 一部のオペレーティングシステムおよび特定のハードウェア構成では、3〜4 GiB領域の多くがハードウェアアドレス指定用に予約されているため、IA-32システムでは物理メモリスペースが3GiBに制限されています。3GiBバリアを参照してください64ビットアーキテクチャは、4GiBをはるかに超えるアドレスに対応できます。ただし、Pentium Pro以降のIA-32プロセッサでは、物理アドレス拡張を使用して36ビットの物理メモリアドレス空間を使用できます。(PAE)、64 GiBの物理アドレス範囲を提供し、そのうち最大62GiBをメインメモリで使用できます。PAEをサポートするオペレーティングシステムは、IA-32プロセッサ上でも、4GiBの物理メモリに制限されない場合があります。ただし、ドライバやその他のカーネルモードソフトウェア、さらに古いバージョンは、PAEと互換性がない可能性があります。これは、32ビットバージョンのMicrosoftWindowsが4GiBの物理RAMに制限されている理由として挙げられています[35](ただし、この説明の有効性については異議が唱えられています[36])。
  • 一部のオペレーティングシステムは、OSで使用するためにプロセス アドレス空間の一部を予約し、ユーザープログラムのメモリのマッピングに使用できるアドレス空間の合計を効果的に削減します。たとえば、32ビットWindowsは、カーネルの合計アドレス空間の1または2 GiB(設定に応じて)を予約します。これにより、ユーザーモードで使用できるアドレス空間は(それぞれ)3または2GiBのみになります。この制限は、64ビットオペレーティングシステムでははるかに高くなります。
  • 4 GiBを超えるファイルが一般的になるにつれて、メモリマップトファイルを32ビットアーキテクチャで実装するのが難しくなっています。このような大きなファイルは、一度にアドレス空間にマップできるのはファイルの一部のみであるため、32ビットアーキテクチャに簡単にメモリマップすることはできません。メモリマッピングによってこのようなファイルにアクセスするには、マップされた部分をスワップして、必要に応じてアドレス空間から。メモリマッピングは、OSによって適切に実装されている場合、最も効率的なディスクからメモリへの方法の1つであるため、これは問題です。
  • エンコーダー、デコーダー、暗号化ソフトウェアなどの一部の64ビットプログラムは、64ビットレジスタから大きなメリットを得ることができますが 3Dグラフィックス指向のプログラムなどの他のプログラムのパフォーマンスは、32ビットから切り替えても影響を受けませ -ビットから64ビット環境。[要出典]
  • x86-64AArch64などの一部の64ビットアーキテクチャは、32ビットの対応するものよりも多くの汎用レジスタをサポートします(ただし、これは特にワード長によるものではありません)。データが使用可能なレジスタに収まる場合、プロセッサはキャッシュまたはメインメモリからデータをフェッチする必要がないため、これによりタイトループの速度が大幅に向上します。
Cの例
int a b c d e ;     
for a = 0 ; a < 100 ; a ++        
{{
    b = a ;  
    c = b ;  
    d = c ;  
    e = d ;  
}
このコードは最初に5つの値を作成します:a、b、c、d、e。次に、それらをループに入れます。ループ中に、このコードはbの値をaの値に、cの値をbの値に、dの値をcの値に、eの値をdの値に変更します。これは、すべての値をに変更するのと同じ効果があります。
プロセッサがレジスタに2つまたは3つの値または変数しか保持できない場合、変数dおよびeも処理できるようにするには、メモリとレジスタの間でいくつかの値を移動する必要があります。これは、多くのCPUサイクルを必要とするプロセスです。レジスタ内のすべての値と変数を保持できるプロセッサは、反復ごとにレジスタとメモリ間でデータを移動する必要なしに、それらをループできます。この動作は仮想メモリと簡単に比較できますが、影響はコンパイラに依存します。

64ビットアーキテクチャの主な欠点は、32ビットアーキテクチャと比較して、同じデータがメモリ内でより多くのスペースを占有することです(より長いポインタや他のタイプ、およびアライメントパディングのため)。これにより、特定のプロセスのメモリ要件が増加し、プロセッサキャッシュの効率的な使用に影響を与える可能性があります。部分的な32ビットモデルを維持することは、これを処理する1つの方法であり、一般にかなり効果的です。たとえば、z / OSオペレーティングシステムはこのアプローチを採用しており、プログラムコードは31ビットアドレス空間に存在する必要があります(上位ビットは基盤となるハードウェアプラットフォームのアドレス計算では使用されません)が、データオブジェクトはオプションで64ビット領域に存在できます。このようなすべてのアプリケーションが大きなアドレス空間を必要としたり、64ビットデータ項目を操作したりするわけではないため、これらのアプリケーションはこれらの機能の恩恵を受けません。

ソフトウェアの可用性

x86ベースの64ビットシステムには、32ビットアーキテクチャ用に作成されたソフトウェアに相当するものがない場合があります。Microsoft Windowsで最も深刻な問題は、廃止されたハードウェアと互換性のないデバイスドライバーです。ほとんどの32ビットアプリケーションソフトウェアは、互換モードで64ビットオペレーティングシステム上で実行できます。互換モードは、エミュレーションモードとも呼ばれます(例: IA-64およびAMD64用のMicrosoft WoW64テクノロジー)。64ビットWindowsネイティブモード[37]ドライバー環境は、64ビットNTDLL.DLL上で実行されます、32ビットWin32サブシステムコード(多くの場合、実際のハードウェア機能がWinprintersなどのユーザーモードソフトウェアでエミュレートされているデバイス)を呼び出すことはできません。ほとんどのデバイスの64ビットドライバーは2007年の初め(Vista x64)まで利用できなかったため、64ビットバージョンのWindowsを使用することは困難であると考えられていました。ただし、その後、メモリ価格が下がり、4 GiBを超えるRAMの使用が増えるにつれて、傾向は64ビットコンピューティングに移行しました。ほとんどのメーカーは、新しいデバイス用に32ビットと64ビットの両方のドライバーを提供し始めたため、64ビットドライバーが利用できないことは問題ではなくなりました。64ビットドライバーは多くの古いデバイスに提供されていなかったため、64ビットシステムでは使用できませんでした。

32ビットドライバーは64ビット用に変更できるため、ドライバーの互換性はオープンソースドライバーではそれほど問題にはなりませんでした。2007年初頭より前に作成されたハードウェアのサポートは、ユーザー数が比較的少ないため 、オープンソースプラットフォームでは問題がありました[要出典] 。

64ビットバージョンのWindowsは、16ビットソフトウェアを実行できません。ただし、ほとんどの32ビットアプリケーションは正常に機能します。64ビットユーザーは、16ビットアプリケーションを実行するために、16ビットまたは32ビットオペレーティングシステムの仮想マシンをインストールする必要があります。[38]

Mac OS X 10.4 "Tiger"とMacOS X 10.5 "Leopard"には32ビットカーネルしかありませんでしたが、64ビットプロセッサで64ビットユーザーモードコードを実行できます。Mac OS X 10.6「SnowLeopard」には32ビットと64ビットの両方のカーネルがあり、ほとんどのMacでは、64ビットプロセッサでも32ビットカーネルを使用していました。これにより、これらのMacは32ビットデバイスドライバーをサポートしながら64ビットプロセスをサポートできるようになりました。ただし、64ビットドライバーとそれに伴うパフォーマンス上の利点はありません。Mac OS X 10.7 "Lion"は、より多くのMacで64ビットカーネルで実行され、OS X10.8 "MountainLion"以降のmacOSリリースには64ビットカーネルしかありません。64ビットプロセッサを搭載したシステムでは、32ビットと64ビットの両方のmacOSカーネルで32ビットのユーザーモードコードを実行できます。macOSMojave(10.14)までのすべてのバージョンのmacOSには、32ビットバージョンのライブラリが含まれています。ビットアプリケーションが使用するため、macOS用の32ビットユーザーモードソフトウェアはこれらのシステムで実行されます。ライブラリの32ビットバージョンは、macOS Catalina(10.15)でAppleによって削除されました。

Linuxおよびその他のほとんどのUnixライクなオペレーティングシステム、およびそれらのCおよびC ++ ツールチェーンは、長年にわたって64ビットプロセッサをサポートしてきました。これらのプラットフォーム用の多くのアプリケーションとライブラリは、CおよびC ++で記述されたオープンソースソフトウェアであるため、64ビットセーフであれば、64ビットバージョンにコンパイルできます。このソースベースの配布モデルは、頻繁なリリースに重点を置いているため、これらのオペレーティングシステムでのアプリケーションソフトウェアの可用性はそれほど問題になりません。

64ビットデータモデル

32ビットプログラムでは、ポインタと整数などのデータ型は一般に同じ長さです。これは、64ビットマシンでは必ずしも当てはまりません。[39] [40] [41]したがって、 Cなどのプログラミング言語とその子孫であるC ++Objective-Cなどのデータ型の混合は、32ビット実装では機能しますが、64ビット実装では機能しません。

64ビットマシン上のCおよびC派生言語の多くのプログラミング環境では、int変数は依然として32ビット幅ですが、長い整数とポインターは64ビット幅です。これらは、「Long、Pointer、64」の略語であるLP64 データモデルを持っていると説明されています。[42] [43]他のモデルは、3つのデータ型すべてが64ビット幅であるILP64データモデル[44] [43]であり、短整数も64ビット幅であるSILP64モデルですらあります。[45] [46]ただし、ほとんどの場合、必要な変更は比較的マイナーで簡単であり、多くの適切に作成されたプログラムは、変更を加えることなく、新しい環境用に簡単に再コンパイルできます。もう1つの代替手段はLLP64intモデルです。これは、とを32ビットのままにして32ビットコードとの互換性を維持しlongます。[47] [43] LLは、32ビット環境を含むすべてのプラットフォームで少なくとも64ビットである longlong整数型を指します。

ILP32データモデルを使用し、64ビットの長整数を追加した64ビットプロセッサを搭載したシステムもあります。これは、32ビットプロセッサを搭載した多くのプラットフォームでも使用されます。このモデルは、コードサイズとポインタを含むデータ構造のサイズを削減しますが、アドレス空間がはるかに小さくなります。これは、一部の組み込みシステムに適しています。x86やARMなど、64ビットバージョンの命令セットに32ビットバージョンよりも多くのレジスタがある命令セットの場合、スペースペナルティなしで追加のレジスタにアクセスできます。これは64ビットRISCマシンで一般的であり、[要出典]はx86でx32 ABIとして調査され、最近Apple Watch Series4および5で使用されています。[48] [49]

64ビットデータモデル
データ・モデル 短い(整数) int 長い(整数) 長い長い ポインタ、
size_t
サンプルオペレーティングシステム
ILP32 16 32 32 64 32 Linuxシステム上のx32およびarm64ilp32ABI 。MIPS N32ABI。
LLP64 16 32 32 64 64 Visual C ++を使用するMicrosoftWindows(x86-64およびIA-64); およびMinGW
LP64 16 32 64 64 64 ほとんどのUnixおよびUnixライクなシステム、たとえばSolarisLinuxBSDmacOSCygwinを使用する場合のウィンドウ; z / OS
ILP64 16 64 64 64 64 SolarisのSPARC64へのHALComputerSystemsポート
SILP64 64 64 64 64 64 クラシック UNICOS [45] [46](UNICOS / mpなどに対して)

現在、多くの64ビットプラットフォームはLP64モデルを使用しています(Solaris、AIXHP-UX、Linux、macOS、BSD、およびIBM z / OSを含む)。MicrosoftWindowsはLLP64モデルを使用します。LP64モデルの欠点は、をに格納すると切り捨てられる可能性がlongあることです。int一方、ポインタをlong意志に変換すると、LP64では「機能」します。LLP64モデルでは、その逆が当てはまります。これらは完全に標準に準拠したコードに影響を与える問題ではありませんが、コードはデータ型の幅に関する暗黙の仮定を使用して記述されることがよくあります。Cコードは、ポインターを整数オブジェクトにキャストする場合 ではなく、 ( u)を優先する必要があります。intptr_tlong

プログラミングモデルは、特定のコンパイラに合わせて選択されたものであり、同じOS上で複数のモデルを共存させることができます。ただし、通常、OSアプリケーションプログラミングインターフェイス(API)のプライマリモデルとして選択されたプログラミングモデルが主流です。

もう1つの考慮事項は、デバイスドライバーに使用されるデータモデルです。最新のオペレーティングシステムのほとんどでは、ドライバーがオペレーティングシステムコードの大部分を占めています[要出典](ただし、オペレーティングシステムの実行中に多くのドライバーが読み込まれない場合があります)。多くのドライバーは、データを操作するためにポインターを多用し、場合によっては、ダイレクトメモリアクセス(DMA)をサポートするハードウェアに特定のサイズのポインターをロードする必要があります。例として、64ビットマシンのメモリの上部領域にデータをDMAするようにデバイスに要求する32ビットPCIデバイスのドライバは、デバイスから4ギビバイトを超えるメモリにデータをロードするというオペレーティングシステムからの要求を満たすことができませんでしたこれらのアドレスへのポインタはデバイスのDMAレジスタに適合しないためです。この問題は、DMAのドライバーへの要求を生成するときにOSにデバイスのメモリ制限を考慮させるか、入出力メモリ管理ユニット(IOMMU)を使用することで解決されます。

現在の64ビットアーキテクチャ

2018年5月の時点で、プロセッサが製造されている64ビットアーキテクチャには次のものが含まれます。

32ビットの同じアーキテクチャから派生した64ビットのほとんどのアーキテクチャは、パフォーマンスを低下させることなく、32ビットバージョン用に記述されたコードをネイティブに実行できます。[要出典]この種のサポートは、一般にバイアーチサポートまたはより一般的にはマルチアーチサポートと呼ばれます。

も参照してください

参考文献

  1. ^ a b 「ARMは世界で最もエネルギー効率の高い64ビットプロセッサであるCortex-A50シリーズを発表」(プレスリリース)。ARMホールディングス2012年10月31日取得
  2. ^ Pentiumプロセッサユーザーズマニュアル第1巻:Pentiumプロセッサデータブック(PDF)インテル1993年。
  3. ^ 「Cray-1コンピュータシステムハードウェアリファレンスマニュアル」(PDF)クレイリサーチ1977 2013年10月8日取得
  4. ^ グライムス、ジャック; コーン、レ; Bharadhwaj、Rajeev(1989年7月〜8月)。「Inteli86064ビットプロセッサ:3Dグラフィックス機能を備えた汎用CPU」IEEEコンピュータグラフィックスおよびアプリケーション9(4):85–94。土井10.1109 /38.31467S2CID38831149 _ 2010年11月19日取得 
  5. ^ Zachary、G。Pascal(1994)。ショーストッパー!マイクロソフトでWindowsNTと次世代を作成するためのブレイクネックレースワーナーブックス。ISBN 0-02-935671-7
  6. ^ 「i860プロセッサフ​​ァミリプログラマーズリファレンスマニュアル」(PDF)インテル1991 2019年9月12日取得
  7. ^ 「NECは2つの高コストパフォーマンス64ビットRISCマイクロプロセッサを提供します」(プレスリリース)。NEC1998-01-20 2011年1月9日取得VR4300プロセッサのバージョンは、人気のあるNintendo 64TMビデオゲームや、最近発表された受賞歴のあるHewlett-Packard LaserJet 4000プリンタファミリなどの高度なレーザープリンタなど、消費者向けおよびオフィス向けの自動化アプリケーションで広く使用されています。
  8. ^ 「i86064ビットマイクロプロセッサ」インテル。1989年2010年11月30日取得
  9. ^ 「アタリジャガーの歴史」AtariAge
  10. ^ ジョー・ハインリッヒ(1994)。MIPS R4000マイクロプロセッサユーザーズマニュアル(第2版)。MIPS Technologies、Inc。
  11. ^ リチャードL.サイト(1992)。「AlphaAXPアーキテクチャ」。デジタルテクニカルジャーナル株式会社デジタルイクイップメント。4(4)。
  12. ^ グウェンナップ、リンリー(1994年10月3日)。「UltraSparcがSPARCのパフォーマンスを解き放ちます」。マイクロプロセッサレポートMicroDesignリソース。8(13)。
  13. ^ ビショップ、JW; etal。(1996年7月)。「PowerPCASA1064ビットRISCマイクロプロセッサ」。IBM Journal of Research andDevelopmentIBMコーポレーション。40(4):495–505。土井10.1147 /rd.404.0495
  14. ^ グウェンナップ、リンリー(1994年11月14日)。「PA-8000は複雑さとスピードを兼ね備えています」。マイクロプロセッサレポートMicroDesignリソース。8(15)。
  15. ^ FP O'Connell; SWホワイト(2000年11月)。「POWER3:次世代のPowerPCプロセッサー」。IBM Journal of Research andDevelopmentIBMコーポレーション。44(6):873–884。土井10.1147 /rd.446.0873
  16. ^ 「VIAは次世代のIsaiahプロセッサコアの詳細を発表します」VIA Technologies、Inc.2007-10-11のオリジナルからアーカイブ2007年7月18日取得
  17. ^ 「ARMv8テクノロジープレビュー」(PDF)2011年10月31日。2011年11月11日のオリジナル(PDF)からアーカイブ2012年11月15日取得
  18. ^ 「ARM基調講演:ARMCortex-A53およびARMCortex-A5764ビットARMv8プロセッサが発売されました」ARMdevices.net2012-10-31。
  19. ^ ステファンベルカ。「Unicosオペレーティングシステム」www.operating-system.org。2010年11月26日にオリジナルからアーカイブされました2010年11月19日取得
  20. ^ ジョン「マッドドッグ」ホール(2000年6月1日)。「私の人生と自由ソフトウェア」LinuxJournal
  21. ^ アンディクリーン。Linuxのx86-64への移植(PDF)Ottawa Linux Symposium2001。ステータス:カーネル、コンパイラ、ツールチェーンが機能しています。カーネルは起動してシミュレーターで動作し、ユーザーランドの移植とプログラムの実行に使用されます
  22. ^ a b ジョン・シラクサ(2009年9月)。「MacOSX 10.6 Snow Leopard:ArsTechnicaレビュー」ArsTechnicap。5. 2009年10月9日にオリジナルからアーカイブされました2009年9月6日取得
  23. ^ Joris Evers(2005年1月5日)。「MicrosoftはWindowsXP forItaniumをnixesします」Computerworld。2013年6月18日にオリジナルからアーカイブされました2017年10月17日取得
  24. ^ 「MicrosoftはWindowsServer2003およびWindowsXP Professionalの64ビット版の可用性で速度制限を引き上げます」(プレスリリース)。マイクロソフト。2005年4月25日2015年9月10日取得
  25. ^ 「UEFI_on_DellBizClient_Platforms」(PDF)
  26. ^ 「AMD64プログラマーズマニュアル第2巻:システムプログラミング」(PDF)アドバンスト・マイクロ・デバイセズ。2016年12月。p。120。
  27. ^ 「Intel64およびIA-32アーキテクチャソフトウェア開発者マニュアル第3A巻:システムプログラミングガイド、パート1」(PDF)インテル。2016年9月。p。4-2。
  28. ^ 「PowerISAバージョン3.0」IBM2015年11月30日。p。983。
  29. ^ 「OracleSPARCArchitecture2015ドラフトD1.0.9」Oraclep。475。
  30. ^ 「ARMアーキテクチャリファレンスマニュアルARMv8、ARMv8用-アーキテクチャプロファイル」pp。D4-1723、D4-1724、D4-1731。
  31. ^ マシェイ、ジョン(2006年10月)。「64ビットへの長い道のり」ACMキュー4(8):85–94。土井10.1145 /1165754.11657662011年2月19日取得
  32. ^ 「Windows7:64ビットvs 32ビット?」W7フォーラム。2009年4月5日にオリジナルからアーカイブされました2009年4月5日取得
  33. ^ 「JavaHotSpotVMに関するよくある質問」Sun Microsystems、Inc . 2007年5月10日にオリジナルからアーカイブされました2007年5月3日取得
  34. ^ 「32ビットバージョンのWindowsVistaと64ビットバージョンのWindowsVistaの違いの説明」2011年10月14日取得
  35. ^ マーク・ルシノビッチ(2008-07-21)。「Windowsの限界を押し上げる:物理メモリ」2017年3月9日取得
  36. ^ Chappell、Geoff(2009-01-27)。「32ビットWindowsVistaのライセンスメモリ」geoffchappell.comWP:SPS 2017年3月9日取得
  37. ^ 「ネイティブアプリケーションの内部」Technet.microsoft.com。2006-11-01。2010年10月23日にオリジナルからアーカイブされました2010年11月19日取得
  38. ^ リンカーンスペクター(2013年8月12日)。「新しいPCで古いプログラムを実行する」
  39. ^ Peter Seebach(2006)。「POWER5での64ビット開発の調査:コードは実際にどれほど移植性がありますか?」
  40. ^ ヘンリースペンサー。「Cプログラマーのための十戒」
  41. ^ 「どろどろと失態の物語」Datacenterworks.com 2010年11月19日取得
  42. ^ 「ILP32およびLP64データモデルとデータ型サイズ」z / OS XL C / C ++プログラミングガイド
  43. ^ a bc 「64ビットプログラミングモデル2020年6月5日取得
  44. ^ 「ILP64インターフェイスとLP64インターフェイスの使用」インテル2020年6月24日取得
  45. ^ a b "Cray C / C ++リファレンスマニュアル"1998年8月。表9-1。CrayResearchシステムのデータ型マッピング。2013年10月16日にオリジナルからアーカイブされました2013年10月15日取得
  46. ^ a b "CrayCおよびC ++リファレンスマニュアル(8.7)S-2179" 2020年6月24日取得
  47. ^ 「抽象データモデル-Windowsアプリケーション」2018年5月30日。
  48. ^ 「AArch64ホワイトペーパーのILP32」ARMリミテッド。2015年6月9日。2018年12月30日のオリジナルからアーカイブ2018年10月9日取得
  49. ^ 「2018年のAppleデバイス」woachk、セキュリティ研究者。2018年10月6日。

外部リンク