アプリ版:「スタンプのみでお礼する」機能のリリースについて

ただいまCPUの動作について勉強しています。
が、混乱してきましたので、どなたか教えて下さい。

※間違っていたらご指摘下さい。補足も大歓迎です。

32bit_CPUについて
・命令セットの幅が32bitである。
・データバス幅が32bitあるので一回の処理で32bit処理ができる。
・バイトアドレッシングの場合
 1つのアドレスに8bitのデータが入っている。
 その為、32bit命令をフェッチする為には4サイクルかかる?
・ワードアドレッシングの場合
 1つのアドレスに32bitのデータが入っている。
 その為、32bit命令をフェッチする為には1サイクルでよい?

この辺が非常に混乱しているところです。

どなたか教えて下さい!

A 回答 (4件)

前の部分は「そもそも CPU ってどこ」って話がなかったですね. すみません.


機能だけをみるなら, コアだけを CPU として, キャッシュは「CPU の外」と考えた方がつじつまが合うことも多いです. パッケージとしては CPU の中に組み込まれてますけど. 今どきの Intel のプロセッサだとレジスタから ALU は 32ビットか 64ビット,(1次) キャッシュとコアの間は 16バイトか 32バイトか, そんなもんだと思います. パッケージとメモリとの間は Core2 までは 64ビットだけど Core i7 では 3×64 = 192ビット.
で後ろですが, 今どきの CPU で「本当にバイト単位でアクセスする」ものは組み込み系くらいしかないと思います. 簡単のために Core2 を例にとるとデータバスが 64ビットであり, 8バイト単位でアクセスします (参考に挙げたデータシートの 46ページを見てもらうと分かりますが, アドレスバスの下位 3ビット分は信号線として存在しません). 例えばアドレス 0x56473992 からデータを読み込むときには, 実際には 0x56473990~0x56473997 にアクセスし, そこにあるデータは一度に取り込むことができます. だから, 「4バイト命令」であってもこの 8バイト境界をまたがない限り 1回のアクセスで命令の全ビットを読み込むことができます. もちろん, 今どきではメモリから直接読み込まないでキャッシュから読み込むことも多く, この場合には既に書いたように「1回のアクセスで読み書きできるバイト数」はさらに大きくなります.
余談: Z80 は「8ビット CPU」というけど実は内部バスは 4ビットらしい.

参考URL:http://download.intel.com/design/processor/datas …

この回答への補足

ご回答ありがとうございます。非常に難しいですね‥

自分なりに解釈してみたのですが、
・32bit命令(4Byte)は4つの番地に一辺にアクセス可能
・1クロックで32bit命令のフェッチ可能
ということで良いでしょうか?

また例えば「パッケージとメモリの間が64bit」というのは、パッケージとメモリの間にアドレス線が64本ある、と考えてよいでしょうか?

>今どきの CPU で「本当にバイト単位でアクセスする」ものは組み込み系くらいしかないと思います.

ということは、実際に32bit命令を1Byteアクセスで8bitずつフェッチするプロセッサもある、ということでしょうか?
(ARMとかSuperHとか32bitマイコンがこれに当たるのでしょうか?)

何度もすみませんが、どうぞ宜しくお願い致します。

補足日時:2009/02/20 15:50
    • good
    • 0

え~と, 人のことは言えないけどもうちょっと日本語を丁寧に扱ってほしい.


「32bit命令(4Byte)は4つの番地に一辺にアクセス可能」って意味がわからん.
「1クロックで32bit命令のフェッチ可能」かどうかは, 「1度に読み込むことのできる範囲に全部収まっているかどうか」で決まります. だからフェッチできることもあるしできないこともある. SPARC とか MIPS とかはもとから 1命令が 32ビットに限定されてるから, 必ず 1回で 1命令 (以上) フェッチできる.
あと, アドレスバスとデータバスも区別してほしい. Core2 でもアドレスバスは 36ビットか 40ビットか, そんなもん (ただし下位 3ビットは線として存在しない) のはず. データバスは 64本あるし, それはデータシートを読めばわかる.
SuperH は設定によっては「8ビット単位で読む」こともできるんじゃないかな.
この辺はいろんな資料を読むのが早いかなぁって気もする.
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

まだまだ勉強が足りませんね‥また頭の中を整理してから質問させて頂きます。

お礼日時:2009/02/21 13:43

OSなどソフトウェアから見た「論理仕様」と、


中身の回路がどう設計されているかという「実装」とは違います。
一つの仕様に対する実装は数多くある、ということを
理解してください。

32bit/64bit CPUは、ある点がこうなっているから、というもので、
32bit-CPUなら隅々までこの通り、というものでも無いです。

Intel x86 CPUでしたらIntel社のWebサイトに論理仕様書が
公開されていますので、参考にどうぞ。
(PDFで3分冊、全1000ページ超える英文です)
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

実装によって異なるんですね‥まだまだ勉強不足です。

お礼日時:2009/02/21 13:40

まずは「CPU の中」と「CPU の外」を区別する必要があります. で上から行くと


・命令セットの幅: よく考えると日本語として変だけど, CPU に依存します. 同じ「32ビット CPU」といっても Intel の 86系なら 1バイト (8ビット) 単位ですし, Motorola 68020 は 2バイト単位. いわゆる RISC プロセッサだと 4バイト (32ビット) ですが, NEC V80 では 4バイト命令と 8バイト命令があったような気がする.
・データバス幅: 内部的にはたぶん 32ビットかな. CPU の外に出ると 80386SX みたいに「外部データバスは 16ビット」とかいうやつもいます.
あとの 2つですが, 「アドレッシング単位」と「外部データバス幅」とは直接関係しません. 例えば上に書いたように 80386SX の外部データバスは 16ビットですが 80386DX では 32ビット, Pentium 以降は 64ビットになっています.さらに, 実際にアクセスする単位はハードウェアにも依存していて, 組み込み系の CPU だと 8ビットと 16ビットの選択ができるものもあります. ただ, さすがにワードアドレッシングの CPU でアクセス単位が 1ワード以下のものはないはず.

この回答への補足

ご回答ありがとうございます。

CPUの命令セットの幅はハードによって異なるんですね。(CISC、RISCの違いはさておき)

CPUの中、外というのは
CPUの中:レジスタ⇔キャッシュ
CPUの外:キャッシュ⇔メインメモリ
ということですよね。

>あとの 2つですが, 「アドレッシング単位」と「外部データバス幅」とは直接関係しません

すみません、勉強不足でここがよく分かりません。
32bit命令というのは、32bitの長さの命令ですよね?

CPUからメモリフェッチする場合、バイトアドレッシング単位では、アドレスは32bit幅、でそれぞれの番地に8bitのデータが入っているので、プログラムカウンタはアドレスを4回指定する必要があり、4サイクル掛かる、のように感じるのですが、この認識はあっていますでしょうか?

どうぞ宜しくお願い致します。

補足日時:2009/02/20 13:17
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!