web-dev-qa-db-ja.com

16、32、64ビットアーキテクチャとは何ですか?

マイクロプロセッサやオペレーティングシステムの場合、16ビット、32ビット、64ビットのアーキテクチャはどういう意味ですか?

マイクロプロセッサの場合、それはGeneral Purpose Registersの最大サイズまたはIntegerのサイズ、またはAddress-linesの数、またはData Bus linesの数を意味しますか?

DOS is a 16-bit OS」、「Windows in a 32-bit OS」などとはどういう意味ですか?

26
user366312

違いは、操作のために汎用レジスタに渡される命令セットのビット幅にあります。 16ビットは2バイトで動作し、64ビットは一度に8バイトの命令で動作します。多くの場合、クロックサイクルごとにより高密度の命令を実行することで、プロセッサのスループットを向上させることができます。

2
htmldrum

コメントを理解したいのであれば、私の最初の答えは以下のとおりです。

新しい答え

あなたが言うように、さまざまな対策があります。幸いなことに、多くのCPUにとって、多くの測定値は同じであるため、混乱はありません。いくつかのデータを見てみましょう(画像のアップロードについて申し訳ありませんが、マークダウンでテーブルを作成するための良い方法が見つかりませんでした)。 Table data

ご覧のとおり、多くの列が適切な候補です。ただし、汎用レジスターのサイズ(緑)が最も一般的に理解されている答えであると私は主張します。

プロセッサのサイズがレジスタごとに大きく異なる場合、多くの場合、より詳細に説明されます。たとえば、 Motorola 68k は16/32ビットチップとして説明されます。

他の人は、これも表で一致するのは命令バスの幅(黄色)であると主張しています。ただし、今日のパイプライン処理の世界では、これはほとんどのアプリケーションにとって、汎用レジスタのサイズよりもはるかに関連性の低い指標であると私は主張します。


元の回答

あなたが言うようにいくつかの手段があるので、異なる人々は異なることを意味することができます。したがって、たとえば、メモリアドレス指定について話している人は、整数演算について話している人とは異なる意味を持つ可能性があります。しかし、私は私が一般的な理解であると思うものを定義しようとします。

私の考えでは、CPUの場合、「標準操作に使用される一般的なレジスタのサイズ」または「データバスのサイズ」を意味します(通常、2つは同等です)。

私はこれを次の論理で正当化します。 Z8 には、8ビットのアキュムレータと8ビットのデータバスがあり、16ビットのメモリアドレス指定レジスタ(IX、IY、SP、PC)と16ビットのメモリアドレスバスがあります。そして、Z80は8ビットマイクロプロセッサと呼ばれています。つまり、人々は通常、メモリアドレス指定サイズではなく、メインの整数演算サイズまたはデータバスサイズを意味する必要があります。

Z80には(再び)1、2、および3バイトの命令があったため、これは命令のサイズではありませんが、もちろんマルチバイトは複数の読み取りで読み取られました。反対方向では、 8086 は16ビットマイクロプロセッサであり、8ビットまたは16ビットの命令を読み取ることができます。だから私はそれが命令サイズであるという答えに反対しなければならないでしょう。

オペレーティングシステムの場合、「コードはそのサイズのCPUで実行するようにコンパイルされている」と定義するので、32ビットOSには、32ビットCPUで実行するようにコンパイルされたコードがあります(上記の定義に従って)。

17
Nick Fortescue

CPUが「何ビット」であるかは、CPUの命令ワード長が何であるかを意味します。 32ビットCPUでは、このような命令のワード長は32ビットです。これは、CPUが命令またはデータとして処理できる幅であり、多くの場合、その幅のバスラインになります。同様の理由で、レジスタはCPUのワード長のサイズを持っていますが、多くの場合、さまざまな目的のために大きなレジスタがあります。

例として PDP-8 コンピューターを取り上げます。これは12ビットのコンピューターでした。各命令は12ビット長でした。同じ幅のデータを処理するために、アキュムレータも12ビットでした。しかし、12ビットコンピュータを12ビットマシンにしているのは、その命令ワードの長さでした。フロントパネルには、命令ごとにプログラムできる12個のスイッチがありました。

これは、8/16/32ビットの焦点から抜け出すための良い例です。

ビット数は、通常、アドレスバスのサイズでもあります。したがって、通常、アドレス可能な最大メモリを示します。

ウィキペディア でこれの良い説明があります:

コンピュータアーキテクチャでは、32ビット整数、メモリアドレス、またはその他のデータユニットは、最大で32ビット(4オクテット)幅のものです。また、32ビットCPUおよびALUアーキテクチャは、そのサイズのレジスタ、アドレスバス、またはデータバスに基づくアーキテクチャです。 32ビットは、32ビットプロセッサが標準であった世代のコンピュータに与えられる用語でもあります。

それでは、OSについて話しましょう。

OS-esの場合、これはCPUの実際の「ビット性」にあまり縛られず、通常、オペコードがどのようにアセンブルされるか(CPUのワード長)およびレジスタがどのようにアドレス指定されるか(ロードできません)を反映します。 16ビットレジスタの32ビット値)およびメモリのアドレス指定方法。完成したコンパイル済みプログラムと考えてください。これはバイナリ命令として格納されるため、CPUのワード長に収まる必要があります。タスクに関しては、メモリ全体をアドレス指定できる必要があります。そうしないと、適切なメモリ管理を実行できません。

しかし、結局のところ、プログラムが32ビットか64ビットか(ここではOSは基本的にプログラムです)、バイナリ命令の格納方法とレジスタとメモリのアドレス指定方法です。全体として、これはOSだけでなく、あらゆる種類のプログラムに当てはまります。そのため、32ビットまたは64ビット用にコンパイルされたプログラムがあります。

7
polemon

http://en.wikipedia.org/wiki/64-bit#64-bit_data_models データモデルは言語のビット数を意味します。

「OSisx-bit」というフレーズは通常、OSがxビットcpuモード用に記述されていることを意味します。つまり、64ビットWindowsはx86-64でロングモードを使用します。レジスタは64ビット、アドレス空間は64ビットです。大きく、32ビットモードとは他にも明確な違いがあります。32ビットモードでは、通常、レジスタの幅は32ビットで、アドレス空間のサイズは32ビットです。 x86では、32ビットモードと64ビットモードの主な違いは、過去の互換性のために32ビットにセグメンテーションが存在することです。

通常、OSはCPUビットネスを念頭に置いて作成されており、x86-64は、数十年にわたる下位互換性の注目すべき例です。16ビットのリアルモードプログラムから32ビットのプロテクトモードプログラム、64ビットの長さまですべてを使用できます。モードプログラム。

さらに、仮想化にはさまざまな方法があるため、プログラムは32ビットモードのように実行できますが、実際には、x86以外のコアによって実行されます。

1
berkus

定義は、正確な技術用語よりもマーケティング用語です。

ファジーな専門用語では、実際の実装レジスタやバスの幅よりも、アーキテクチャ的に見える幅に関連しています。たとえば、68008は32ビットCPUとして分類されましたが、シリコンには16ビットのレジスタがあり、8ビットのデータバスと20個の奇数アドレスビットしかありませんでした。

1
hotpaw2

私の知る限り、技術的には、整数パスウェイの幅です。 32ビットアドレス指定の16ビットチップについて聞いたことがあります。ただし、実際にはアドレス幅です。 sizeof(void *)は、16ビットチップでは16ビット、32ビットでは32ビット、64ビットでは64ビットです。

CとC++ではvoid *型と整数型の間の変換が可能であり、整数型が十分に大きい(ポインターと同じサイズ)場合は安全であるため、これは問題につながります。これは、あらゆる種類の危険なものにつながります

void* p = something;
int i = (int)p;

Void *はintの2倍の大きさになっているため、64ビットコード(32ビットで動作)では恐ろしくクラッシュして書き込みます。

ほとんどの言語では、作業しているシステムの幅に注意を払う必要があります。

0
Puppy

コンピュータサイエンスの2 ^ nビットアーキテクチャについて話すときは、基本的にメモリレジスタ、アドレスバスのサイズ、またはデータバスのサイズについて話します。 2 ^ nビットアーキテクチャの用語の背後にある基本的な概念は、この2 ^ nビットのデータを使用して、プロセスによってサイズ2 ^ nのデータをアドレス指定/転送できることを意味します。

0
Saurabh