28

マイクロプロセッサやオペレーティング システムの場合、16 ビット、32 ビット、および 64 ビット アーキテクチャは何を意味しますか?

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

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

4

7 に答える 7

17

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

新しい答え

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

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

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

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


元の回答

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

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

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

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

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

于 2010-08-29T10:46:31.413 に答える
7

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ビット用にコンパイルされたプログラムがあります。

于 2010-08-29T11:23:49.347 に答える
2

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

于 2012-12-27T18:27:12.953 に答える
1

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

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

于 2010-08-29T10:56:19.700 に答える
1

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

「OS は x ビットです」というフレーズは、通常、OS が x ビット CPU モード用に作成されたことを意味します。つまり、64 ビット Windows は x86-64 でロング モードを使用します。レジスタは 64 ビットで、アドレス空間は 64 ビットです。通常、レジスタは 32 ビット幅で、アドレス空間は 32 ビットの大きさです。x86 では、32 ビット モードと 64 ビット モードの主な違いは、歴史的な互換性のために 32 ビットにセグメント化が存在することです。

通常、OS は CPU のビット数を念頭に置いて作成されます。x86-64 は、数十年にわたる後方互換性の顕著な例です。モード プログラム。

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

于 2010-08-30T22:19:40.933 に答える
0

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

于 2010-08-29T10:54:48.923 に答える
0

私の知る限り、技術的には整数経路の幅です。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 ビットで動作) で恐ろしくクラッシュして焼き付きます。

ほとんどの言語では、作業しているシステムの幅を気にするために一生懸命働かなければなりません。

于 2010-08-29T10:44:34.373 に答える