• 検索結果がありません。

計算機システム II 第 2 回 2019 年 10 月 2 日 今回の内容 2.1 CPU メモリ Bi

N/A
N/A
Protected

Academic year: 2022

シェア "計算機システム II 第 2 回 2019 年 10 月 2 日 今回の内容 2.1 CPU メモリ Bi"

Copied!
12
0
0

読み込み中.... (全文を見る)

全文

(1)

計算機システム II ・第 2

2019102

今回の内容

2.1 CPU . . . . 2 – 1 2.2 メモリ . . . . 2 – 5 2.3 Big EndianとLittle Endian . . . . 2 – 7 2.4 アドレス変換機構 . . . . 2 – 7 2.5 付録: Intel Core i3-4330Tプロセッサ . . . . 2 – 10 2.1 CPU

私たちが作成したCプログラムはコンパイラ1の働きによって、機械語プログラムに変換されます が、この機械語プログラムを読み取って、そこに書かれた指示を実行しているのがCPU(中央処理 装置2)と呼ばれる装置です。一般のパソコンで使用されているCPUは、図1のような部品の内部 に格納された、ダイ(die)と呼ばれる 数mm〜十数 mm四方の半導体(シリコン等)の小片上に、

印刷技術を応用して形成された電子回路として実現されています。1つのCPUは、数百万から数 十億の素子(トランジスタ3等)で構成されています。各素子は1µm四方程度の大きさしかありま せん4

図1のような部品の中には、CPUとして働くことのできる電子回路が1つだけ格納されている こともあれば、複数(2〜30個程度)格納されていることもあります。複数ある場合、その1つ1つ をCPUと呼ぶ場合もあれば、それらを格納している(図1のような)部品のことをCPUと呼び、

その中に(複数)用意されたCPUとして機能するものを、それぞれコア(core)と呼んで区別する 場合もあります。

図1: Intel Core i7 3960X (6つのコアが内蔵されている)

CPU (コア)は、1台の計算機に1個から数十個搭載され、主記憶装置(メモリ)に記憶されてい

1Linux環境のccコマンドなど

2Central Processing Unit

33つの電気的な端子を持っており、その2つの間を流れる電流のオン・オフ(あるいは大小)を、もう1つの端子 に与える電圧で切り替えることのできる素子の総称です。 パソコンのCPUには、主にMOSFET (Metal-Oxide- Semiconductor Field Effect Transistor金属酸化物半導体型電界効果トランジスタ)というトランジスタが使われて います。

41µm106m (= 1,000 nm)です。

(2)

る機械語プログラムを読み取り、その指示に従って、四則演算などの計算や、各装置の制御、装置 間でのデータの転送を行います。

機械語プログラムは、数bitから数十bitの大きさの機械語命令がたくさん並んだものです。ど のようなビット列でどのような作業を行うかについての約束事がCPU毎にあらかじめ決められて おり、CPUはこの約束事にしたがって、順に指示されたとおりの作業を行っていきます。CPUに 用意されている機械語命令の集まりを命令セットと呼びます。

メモ

CPUの内部構成

パソコン等で使用されているCPUは、おおよそ図2のような構成になっています。

CPU

キャッシュ メモリ

アドレス 変換機構

実行制御 ユニット

メモリ

(主記憶装置) 命令レジスタ

プログラムカウンタ

レジスタA レジスタB

.. .

ALU 周辺機器

インタフェース

データの流れ アドレスの指定 制御

図2: CPUの内部構成(模式図)

キャッシュメモリ メモリに記憶されているデータの内、CPUが頻繁に読み書きする部分のコピー を記憶しておく装置です。主記憶装置のメモリは、通常DRAM (ダイナミックRAM)で構成され ますが、キャッシュメモリは、より高速なSRAM (スタティックRAM)で構成されます。キャッシュ

(3)

メモリの記憶容量は主記憶装置に比べると僅かなものです5が、レイテンシ(アクセスタイム)6がよ り小さく(高速に)なっています。パソコンで使用されているCPUのキャッシュメモリは、高速で 容量の小さい1次キャッシュメモリと、それよりは若干低速で容量の大きい2次キャッシュメモリ の2段構え、あるいは、さらに大容量の3次キャッシュまでを備えた3段構えとなっている場合が ほとんどです。

CPUがメモリ中のデータを必要とする場合、まず、このキャッシュメモリに読み込まれてから 使用されます。また、メモリにデータを格納する場合、とりあえずキャッシュメモリに記憶して、

その後メモリに格納されます。CPUが機械語命令を実行していく過程では、メモリ中のいろいろ な場所(アドレス)のデータにアクセスしますが、メモリ全体に全くでたらめな順番でアクセスす ることは稀で、短い時間(たとえば10µs)だけを見れば、アクセスするデータはいくつかのアドレ ス周辺に偏るのが普通です。たとえば、メモリ中には機械語プログラムが格納されており、これを CPUが読み取って、その指示を実行していきますが、このときCPUは(基本的には)連続するア ドレスを順にアクセスしていくことになります。また、機械語プログラム以外の一般のデータに関 しても、ひとまとまりのデータは連続するアドレスに置かれますから、このひとまとまりのデータ を処理する場合にも、CPU がアクセスするアドレスは集中します。このため、頻繁にアクセスす るアドレスのデータをキャッシュメモリにまとめてコピーしておき、直接メモリにアクセスする代 りにキャッシュメモリにアクセスし、キャッシュメモリの内容が変更された場合は、適宜、その内容 をメモリに書き戻してやれば、全体としてデータの読み書きが高速化できます。キャッシュメモリ の詳細については、この科目の中で後程解説します。

メモ

プログラムカウンタ CPUが次に実行する機械語命令を読み取るメモリアドレスを記憶します。

パソコン等で使用されるCPUは、通常、メモリアドレスを32 bitあるいは64 bitの符号なし整数 で表現しますので、このようなCPUの「プログラムカウンタ」は32 bitあるいは64 bit長のデー タを記憶します。通常は、機械語命令が1つ実行される度に、その機械語命令のビット列の長さに 相当する分だけプログラムカウンタの値が増加して、次の機械語命令の場所を指すようになりま す。ただし、分岐命令が実行されると、その分岐命令によって指定されたアドレスがプログラムカ ウンタに書き込まれて、CPUはそのアドレスから機械語命令の実行を続けます。

5通常、主記憶は数百MiBから数百GiB、キャシュメモリは数百KiBから大きくても数十MiBの大きさ(KiB = 1024 BMiB = 10242BGiB = 10243B)です。

6対象となる情報(の場所)を指定してから、その情報が実際に読み取られる(書き込まれる)までの時間的な遅れ

(4)

メモ

命令レジスタ CPUが次に実行する機械語命令(ビット列)を保持する働きを持ちます。「プログ ラムカウンタ」で指示されたアドレスのデータが、メモリから(キャッシュメモリを介して)この「命 令レジスタ」に読み込まれ、「実行制御ユニット」によって機械語命令として解釈されて実行されま す。レジスタという名前は付いていますが、CPUが機能するための仕組みの一部であって、通常、

「命令レジスタ」の値を機械語プログラムから参照したり変更したりすることはできません。

メモ

実行制御ユニット 「命令レジスタ」に読み込まれた機械語命令を解読して、そこに指示されてい る作業を実行します。ビット列として表現された機械語命令を解析して、CPUの行うべき仕事を 決定する作業のことを、命令のデコード(decode)と呼びます。1つの機械語命令は、デコードされ ることによってマイクロ命令と呼ばれるいくつかの細かい手順に分割され、「実行制御ユニット」

がCPUを構成している各部に順に指令を出すことで、そのマイクロ命令がCPUのクロック信号 に同期して実行されていきます。1つの機械語命令は、数クロック7から数十クロック8の時間をか けて実行されますが、1つの機械語命令を分割してできた一連のマイクロ命令の実行がすべて終わ らなくても、次の機械語命令のマイクロ命令の実行を始めることが可能な場合がほとんどなので、

CPUの中では複数の機械語命令が時間的に少しずつずらされながら同時並行的に実行されていく ことになります。このような機械語命令の並行処理はパイプライン処理と呼ばれます。パイプラ イン処理については、この科目の中で分岐命令を取り上げるときに再度説明します。

メモ

7クロック信号の周期の長さ(時間)1クロックと呼びます。たとえば2GHz (2×109Hz)のクロック信号の場合、

1クロックは0.5 ns (0.5×109)となります。

8ごく稀には、さら長い時間を必要とする命令も存在します。

(5)

レジスタ 計算に使うためにメモリから読み込まれたデータや、複雑な計算の途中結果などを記憶 します。通常、1つのCPUに、数個から数百個のレジスタが用意されています。一般的な用途に 使用される汎用レジスタと呼ばれるレジスタもあれば、浮動小数点数値データ専用のレジスタや、

アドレスの処理専用のレジスタなど、特定の用途専用のレジスタもあります。パソコンで使用さ れるCPUの 汎用レジスタやアドレス処理用のレジスタは、それぞれ32 bitあるいは64 bit長の データを記憶することができるのが普通ですが、家電製品などに組み込まれる場合では、8 bit長 など、もっと短いレジスタを持つCPUが使われます。

CPUは、ビット列として表現されたいろいろなデータを扱うことができますが、この中で、そ のCPUが最も自然に扱うことのできる大きさのデータを、その CPUのワード(word)と呼びま す。通常、CPUの1ワードの大きさは、1つの汎用レジスタに格納できるデータの大きさとなって います。

メモ

ALU ALUは 算術・論理ユニット(Arithmetical Logical Unit)の略称で、符号付き、あるい は符号なしの整数データの四則演算、ビット演算(ビット毎の論理演算やビットシフト、ローテー ト)、浮動小数点数値データの四則演算などの計算を行います。CPUによっては、浮動小数点数値 データの平方根や指数関数、対数関数、三角関数の計算を行えるものもあります。

メモ

2.2 メモリ

CPUが実行していく機械語命令やCPUが処理するデータは、すべてビット列としてメモリ(主記 憶装置)に記憶されます。メモリは、数個から十数個のメモリチップを装着したメモリモジュール と呼ばれる部品(図39)数枚で構成されてます。

9ED2と記された図は「情報機器と情報社会の仕組み素材集(http://www.kayoo.org/mext/joho-kiki/)」の一部を 利用させて頂いたものです。

(6)

図3: メモリモジュール

アドレス

0番地 11000101 1番地 01101001 2番地 00110000 3番地 10100110 4番地 10111110 5番地 01010001 6番地 11011110 7番地 01110111 8番地 01011101

... ... 01000011

図4: メモリアドレス これを CPUの側から見ると、図4のように1つの欄に1 byte (8 bit)のデータ10を記憶するこ とのできる長い長い1列の表のように見えます。メモリの欄を区別するために、各欄にはアドレス (番地)と呼ばれる非負の整数が振られており、CPUは、このアドレスを指定してメモリ中のデー タの読み書きを行います。アドレスは1つの欄(1 byte)ごとに振られるのが普通ですが、CPUの 1ワードごとに振られることもあります。前者のアドレスの振り方をバイトアドレッシング(byte addressing)、後者をワードアドレッシング(word addressing)と呼びます。

機械語命令のレベルでは、CPUはメモリ中に記憶されたデータに、1 byteから十数byteくら いの大きさを単位としてアクセスすることになりますが、この時実際にアクセスされるのはキャ シュ中のデータです。キャッシュメモリとメモリとの間では、より効率的にデータを転送するため に、もっと大きなサイズ(たとえば64 byte)を単位としてメモリの読み書きが行われます。しかし、

キャッシュの働きで CPUの動作が高速化されるという点を除けば、このことが機械語プログラム の動作に影響を与えることはありません。CPUは、あくまで機械語命令で指定されたメモリアド レスに格納されたデータを直接読み書きしていると考えたときと同じ動作を行います。

メモ

10CPUによっては、1つの欄に格納できるデータの大きさが1ワードとなっている場合もあります。

(7)

2.3 Big EndianLittle Endian

たとえば、CPUが32 bit 長のデータを、メモリ中に(バイトアドレッシング)で書き込む場合に は、4つの連続するアドレスにアクセスすることになります。この時、32 bit長のデータは4つの8 bit長のデータとして、メモリに格納されることになりますが、これら4つのデータを、それぞれど のアドレスに対応させて格納するかにについては2つの方法が存在します。多バイト長のデータ をメモリに格納する際に、上位バイトを下位アドレスに対応させる格納方法をビッグエンディアン (big endian)と呼び、下位バイトを下位アドレスに対応させる格納方法をリトルエンディアン(little

endian)と呼びます。この2つのどちらの格納方法を採用するかはCPUごとに異なります。この

2つのいずれかを選択することのできるCPUもあります。

32 bit長のデータ0x123456780x00010000番地に格納した例

アドレス Big Endian Little Endian ..

. ... ...

0x0000ffff

0x00010000 0x12 0x78

0x00010001 0x34 0x56

0x00010002 0x56 0x34

0x00010003 0x78 0x12

0x00010004 .. .

..

. ...

図5: 多バイト長データのメモリへの格納法の違い

メモ

2.4 アドレス変換機構

機械語命令の指示に従ってCPUがメモリにアクセスする際には、その機械語命令で指定されたア ドレスが、そのままメモリモジュールに伝わるとは限りません。パソコンやスマートフォンなど に使われるCPUでは、複数のプロセスが同時に実行されますが、このとき使用されるメモリに競 合が起きないようにするために、各プロセスが使用しているアドレスを、プロセスごとに異なるア ドレスに変換してメモリモジュールに伝えるためのアドレス変換機構が内蔵されています。各プ ロセスが使用する変換前のアドレスを仮想アドレスと呼び、変換機構によって変換されてメモリモ ジュールに伝達される変換後のアドレスのことを物理アドレスと呼びます。

CPU内に用意されるアドレス変換機構には、それぞれセグメント方式とページング方式と呼ば れる2つの代表的な方式が存在し、オペレーティングシステムがこれらを管理します。

(8)

メモ

セグメント方式 セグメント方式では、各プロセスの仮想アドレス空間をセグメントと呼ばれるい くつかの部分に分割し、それぞれのセグメントを物理アドレス空間の別の部分に対応させます11。 セグメント方式では、各セグメントに対して

(1) セグメントの開始仮想アドレス

(2) セグメントの大きさ(あるいは終了仮想アドレス) (3) アドレス変換後の開始物理アドレス

の3つの情報12を記憶した表を用意しておき、その表に基づいて、CPUがアドレスの変換を行いま す。仮想アドレス空間でのアクセスの種別(機械語命令を実行しようとしているのか、データの読 み書きをしようとしているのかなどの違い)によって、同じ仮想アドレスが異なるセグメントとし て扱われる場合もあります。

メモ

ページング方式 仮想アドレス空間や物理アドレス空間を、ページと呼ばれる数KiBの大きさ(た とえば4096 byte)の区画に分割し、ページごとに仮想アドレス空間のページ(仮想ページ)が物理 アドレス空間のどのページ(物理ページ)に対応するかを表にして管理します13

メモ

11必ずしも仮想アドレス空間内のすべてのアドレスが、いずれかのセグメントに属するわけではありません。仮想ア ドレス空間の一部はどのセグメントにも属さず、したがって物理的なメモリが対応していない場合もあります。

12多くの場合、これらに加えて、そのセグメント内のデータを保護するための設定(書き込み不可など)などが行われ ます。

13この表には、セグメント方式の場合と同様に、そのページの内のデータを保護するためにの設定などが記憶される のが普通です。

(9)

アドレス変換キャッシュ セグメント方式でもページング方式でも、アドレス変換を行うための表 は、通常メモリ中に記憶されますが、CPUがメモリへアクセスする度に、この表を見にいく(これ もメモリへのアクセスとなります)のは非効率なので、表の(よく使用されている)一部は、そのコ ピーが(ちょうどキャッシュメモリのように) CPU内に置かれるようになっており、高速なアドレ ス変換ができるようになっています。ページング方式でのアドレス変換表のCPU内キャッシュは、

TLB(Translation Lookaside Buffer)と呼ばれます。

メモ

(10)

2.5 付録: Intel Core i3-4330Tプロセッサ

実際に使用されているCPUの例として、情報処理実習室のPCに搭載されているIntel社のCore i3-4330Tプロセッサについて紹介します。Core i3-4330Tプロセッサは、コアを2つ14搭載した CPUです。それぞれのコアは、Intel 64アーキテクチャと呼ばれる基本設計に基づいた64 bit CPU として動作することができます。Intel 64アーキテクチャは、同社のPC向け32 bit CPUで採用 されているIA-32アーキテクチャと呼ばれる基本設計を64 bit CPU向けに拡張したもので、Intel 64アーキテクチャに基づく64 bit CPUは、IA-32アーキテクチャの32 bit CPUとしても動作す ることもできます。Intel 64アーキテクチャでは、IA-32の部分を含めて、リトルエンディアンの バイトアドレッシングが採用されています。

IA-32アーキテクチャ

IA-32アーキテクチャはIntel社のPC向け32 bit CPUで採用されている基本設計で、このアー キテクチャに基づくCPUは、次の3つの動作モードを持っています。

プロテクトモード(protected mode) 32 bit CPUとして動作する場合の最も基本的な動作モー ドです。4 GiB (32 bit)の物理アドレス空間を持ち、46 bit長の仮想アドレスがセグメント 方式によって、まずリニアアドレスと呼ばれる32 bit長の中間的なアドレスに変換され、そ れをさらにページング方式によって32 bit長の物理アドレスに変換する仕組みを持ってい ます。情報処理実習室のWindows 8.1上のアプリケーションプログラムの一部はこの動作 モードで実行されています。

リアルアドレスモード(real-address mode) 同社の16bit CPUである8086ファミリのプロセッ サ相当の動作をするモードです。1 MiB (20 bit)の物理アドレス空間を持っています。セグ メントという概念はありますが、仮想アドレスから物理アドレスへの対応は固定されていて 変更することはできません。電源が投入されて、PC (CPU)が起動した際には、互換性のた めに、CPUはまずこのモードで動作を開始します。

システム管理モード(system management mode) CPU自体の過熱やハードウェアの障害に 対応したり、電源管理などの処理のため、現在実行中のプログラムを中断して、迅速に行わな ければならない処理を行うプログラムを実行させるための動作モードです。この動作モード 特有のアドレス変換が行われます。

IA-32 の内部構成の概要 IA-32アーキテクチャのCPUは、クロック周波数やキャッシュメモリ の大きさや構成、それぞれの機械語命令を実行するために必要なクロック数などが異なっていて も、基本的にはどれも同じ命令セットを持っており、同じ機械語プログラムを実行することができ ます。これらのCPUは、大きく分けると次の3つの部分の機能で構成されています。

基本実行部 8 bit、16 bit、32 bitのデータの転送命令、整数演算命令、ビット演算命令、分岐命令、

セグメント関連の命令など、基本的な機械語命令を実行します。

14機械語プログラムから見ると、4つの(仮想的な)コアが存在しているように動作することができます。このことを 指して、物理コアが2個、論理コアが4個、と言うことがあります。

(11)

浮動小数点演算部(FPU) 80 bitの浮動小数点演算を行います。

SIMD命令実行部 SIMDはSingle Instruction Multiple Dataの略で、複数のデータに対して同 時に同じ演算を行う命令を実行します。たとえば、32 bitの単精度浮動小数点データを4つ

並べた128 bit 長のデータに対して一度に演算を行うといったことができます。FPUのレ

ジスタを使用するMMXと呼ばれる命令群と、128 bit長の専用のレジスタ(XMMレジスタ 群)を使用するSSE (やその拡張であるSSE2やSSE3、. . .など)と呼ばれる命令群がありま す15

図6はIA-32のレジスタ群を図示したものです16。 基本実行部

汎用レジスタ群(32 bit)

31 0

EAX EBX ECX EDX EDI ESI EBP ESP

状態フラグレジスタ(32 bit)

31 0

EFLAGS

プログラムカウンタ(32 bit)

31 0

EIP

セグメントレジスタ(16 bit)

15 0

CS DS SS ES FS GS

浮動小数点演算部(FPU) 浮動小数点レジスタ群(80 bit)

79 0

R0 R1 R2 R3 R4 R5 R6 R7

15 0

FPU制御レジスタ FPU状態レジスタ FPUタグレジスタ 10 0

FPU命令レジスタ

47 0

FPU命令ポインタ FPUデータポインタ

SIMD命令実行部 XMMレジスタ群(128 bit)

127 0

XMM0 XMM1 XMM2 XMM3 XMM4 XMM5 XMM6 XMM7

31 0

MXCSR

図6: IA-32のレジスタ群 Intel 64アーキテクチャ

64 bit CPUの基本設計であるIntel 64アーキテクチャでは、IA-32の3つの動作モードの他に、

IA-32eと呼ばれる動作モードが追加されています。この動作モードには、64 bitモードと呼ばれ

15新しいCPUでは、256 bit長のデータを処理できるものがあり、その命令群もIA-32に取り込まれています。

16256 bitSIMD命令に使用されるYMMレジスタ群は省略されています。

(12)

る64 bit CPUとして動作するモードと、互換モードと呼ばれるIA-32のプロテクトモードとして 動作するモードが含まれています。64 bitモードでは、図7のように、汎用レジスタやプログラム カウンタなどは64 bit長となり、汎用レジスタやXMMレジスタの個数も、それぞれ16個に増加 しています。少なくとも64GiB (36 bit)17の物理アドレス空間を持ち、64 bit長18の仮想アドレス を(基本的にはセグメント方式のアドレス変換機構を使用せずに)ページング方式によって物理ア ドレスに変換する仕組みとなっています。情報処理実習室のWindowsやLinux、さらに、そこで 実行される多くのアプリケーションプログラムはこの動作モードで実行されています。また、互換 モードでは、旧来の IA-32向け32 bitアプリケーションプログラムをそのまま実行することが可 能です。

基本実行部

汎用レジスタ群(64 bit)

63 0

RAX RBX RCX RDX RDI RSI RBP RSP R8 R9 R10 R11 ... ...

R15

状態フラグレジスタ(64 bit)

63 0

RFLAGS

プログラムカウンタ(64 bit)

63 0

RIP

セグメントレジスタ(16 bit)

15 0

CS DS SS ES FS GS

浮動小数点演算部(FPU) 浮動小数点レジスタ群(80 bit)

79 0

R0 R1 R2 R3 R4 R5 R6 R7

15 0

FPU制御レジスタ FPU状態レジスタ FPUタグレジスタ 10 0

FPU命令レジスタ

63 0

FPU命令ポインタ FPUデータポインタ

SIMD命令実行部 XMMレジスタ群(128 bit)

127 0

XMM0 XMM1 XMM2 XMM3

... ...

XMM15

31 0

MXCSR 図7: 64 bitモードのレジスタ群

計算機システムII・第2回・終わり

17CPUごとに異なり、たとえばCore i3-4330Tの物理アドレス空間は512 GiB (39 bit)となっています。

18実際に使用できるアドレスはCPUによって異なり、たとえばCore i3-4330Tの場合、48 bit長に相当します。

図 3: メモリモジュール アドレス0番地 110001011番地011010012番地001100003番地101001104番地101111105番地010100016番地110111107番地011101118番地01011101......01000011図4: メモリアドレス これを CPU の側から見ると、図 4 のように 1 つの欄に 1 byte (8 bit) のデータ 10 を記憶するこ とのできる長い長い 1 列の表のように見えます。メモリの欄を区別するために、各欄にはアドレス ( 番

参照

関連したドキュメント

プロセッサの性能向上 半導体回路 の細線化 消費電力が 低下 低下分の電 力をトランジ スタのスイッ チングに利用 動作周波数 向上

パソコン等で使用される CPU は、通常、メモリアドレスを 32 bit あるいは 64 bit の符号なし整数 で表現しますので、このような CPU の「プログラムカウンタ」は 32 bit

メガローバーVer2.1 Jetson AGX Xavier搭載版、およびJetson AGX Xavierオプションに採用されているNV IDIA Jetson AGX Xavier開発者キットは、512コア

4   Chapter 1 XMOS プロセッサ されている.したがって,通常の利用状況では,たとえばクロック周波数が 400 MHz

低消費電力プロセッサとして TRANSMETA の crusoe プロセッサがある。このプロセッ サは、 intel の x86 プロセッサの互換として動作するように設計してある。 crusoe

MBP Core の弱点として以下があげられる. 1 パケット

1 はじめに CPU は, 1970

プロセッサ(CPU)の増設時は増設プロセッサ (CPU)に添付されている増設ファンを搭載す る必要があります。増設手順については(「2