電子計算機工学 II

NAGASAKA Yasunori

2002/09/20

http://edu.isc.chubu.ac.jp/naga/index.html で公開中

1   割り込み
 1.1   割り込みの概念
  1.1.1   割り込みが効果のある例
 1.2   Z80 における割り込みの扱い
  1.2.1   NMI を受け取ったときの処理
  1.2.2   INT を受け取ったときの処理
  1.2.3   割り込みの優先順位の決定(デイジーチェイン)
  1.2.4   多重割り込み
  1.2.5   練習問題

2   CPU の周辺回路
 2.1   メモリアドレスの扱い
  2.1.1   メモリ空間と IO 空間
  2.1.2   アドレスデコーダ
  2.1.3   練習問題
 2.2   その他の周辺回路
  2.2.1   バスバッファ
  2.2.2   リセット
 2.3   Z80CPU を用いた簡単なシステムの構成例
  2.3.1   例1
  2.3.2   例2
  2.3.3   例3
  2.3.4   練習問題

3   PIO を用いた入出力
 3.1   Z80PIO
  3.1.1   機能の特徴
  3.1.2   モード 0 (出力モード)
  3.1.3   モード 1 (入力モード)
  3.1.4   モード 2 (入出力、双方向モード)
  3.1.5   モード 3 (ビットモード)
 3.2   8255
  3.2.1   機能の特徴
  3.2.2   スイッチと LED
  3.2.3   練習問題
  3.2.4   プリンタの制御
  3.2.5   練習問題

4   CPU を高速化する技術
 4.1   CPU 発展の歴史
  4.1.1   4004
  4.1.2   8080
  4.1.3   8086
  4.1.4   80286
  4.1.5   i386
  4.1.6   i486
  4.1.7   Pentium
  4.1.8   Pentium Pro
  4.1.9   Pentium with MMX Technology
  4.1.10   Pentium II, III
  4.1.11   Pentium 4
 4.2   高速化の技術
  4.2.1   パイプライン
  4.2.2   ワイヤードロジック
  4.2.3   キャッシュ
  4.2.4   スーパースケーラ (スーパースカラー)
  4.2.5   分岐予測
  4.2.6   ハーバードアーキテクチャ
  4.2.7   RISC (Reduced Instruction Set Computer)
  4.2.8   アウトオブオーダ実行
  4.2.9   投機実行
  4.2.10   スーパーパイプライン
  4.2.11   SMP (Simmetric Multi Processing)
  4.2.12   レジスタリネーミング
  4.2.13   SIMD (Single Instruction Multiple Datastream)
  4.2.14   ハイパースレッド
 4.3   その他の技術
  4.3.1   仮想記憶
  4.3.2   特権レベル
 4.4   練習問題



1   割り込み


1.1   割り込みの概念

割り込みとは ?
→ 周辺装置がCPUと通信するための手段


CPU と周辺装置

通常のプログラムはメモリから命令を取り出して順に実行する。周辺装置の相手はしない。


プログラムの実行

JP, CALL, RET などがあると命令実行の順序は変化するが、プログラムに書かれているとおり いつでも同じように実行される。

もし割り込みを使わずに周辺装置を利用するには、次のような方法が考えられる。
  1. プログラムの途中、所々に周辺装置の状態を調べるサブルーチンを入れる。


    ソフトウェアによるデータの確認

    サブルーチン TEST の処理内容は次のようになる。 TEST: キーボードを調べる → もしデータがあれば処理 → マウスを調べる → もしデータがあれば処理 → NIC を調べる → もしデータがあれば処理 → シリアルポートを調べる → もしデータがあれば処理 ・・・ RET


    (ヒント): このような処理をポーリングと呼ぶ。 一般的には割り込みを使用するよりも効率は悪いとされるが、 場合によっては割り込みを使用するよりもよい場合もある。

  2. 本体のメインルーチンをイベント駆動型に作る。

    無限ループ {
        もしキーボードのデータがあれば処理
        もしマウスのデータがあれば処理
        もしモデムのデータがあれば処理
        もし NIC のデータがあれば処理
        :
            :
        何もなければ計算を実行


    (ヒント): Windows などで一般に利用されるウィンドウ, GUI ベースのプログラムは 上記の考え方で作られている。

両方式ともにいつ発生するかわからない周辺装置のデータの有無をソフトウェアで 検出するため効率が悪い。

それに対して、 割り込みは周辺装置でデータが発生したときにのみ CPU に信号を送り、 必要な時だけ処理ルーチンを起動できる。
よって普通のプログラムを作るときは周辺装置のことを気にする必要がない。   


割り込み処理ルーチン

割り込み処理ルーチンは、普通のプログラムとは独立して用意しておけばよく、 両者の実行のタイミングなどは考えなくてよい。


1.1.1   割り込みが効果のある例



プリンタで印字する場合の処理




1.2   Z80 における割り込みの扱い

割り込みには、CPU が無視できない割り込みと、設定によって無視できる割り込み の2 種類がある。

Z80 ではこの 2 種類を異なる信号 NMIINT で区別する。これらは重要度によって使い分けがされる。

NMI : Non Maskable Interrupt
    無視できない割込みで CPU は必ず処理する。
INT : INTerrupt
    通常の割込みで設定によって無視できる。


1.2.1   NMI を受け取ったときの処理



NMI を検出するタイミング


(ヒント): もし上の図で 3 番目のタイミングでNMIが変化したとすると、 次の命令は普通に実行され、次の次の命令が無効となる。
  処理の流れ
  1. 次の命令のフェッチサイクルは実行されるが無効

  2. PC(無効になった命令を指す)をスタックに退避する

  3. PC に 0066H を入れ、そこから実行。NMI処理ルーチンを実行

  4. RETN(RETurn from NMI)が実行されると、スタックから戻り番地が取り出され PC に セットされる。その後、もとのプログラムの実行を続ける。

例

0066		EX	AF, AF'	; レジスタ退避
0067		EXX
		...
		割り込み処理本体
		...
00A0		EX	AF, AF'	; レジスタ復帰
00A1		EXX
00A2		RETN		; ★★

		...

1024		LD	A, (2003H)
1027		LD	B, (IY+D)
102A		RRCA		; ★
102B		CP	(IX+D)
★     この命令実行中に割り込みが発生したとすると、次の命令が無効となる。 102B はスタックに退避され、0066H から割り込み処理が実行される。

★★     割り込み処理が終了したので、もとのプログラムに戻る。102B の CP から 再開される。


(ヒント): EX, EXX は(レジスタの値を保存したい時に)裏レジスタと変換する命令。 レジスタの値を保存する他の方法として、スタックへの退避もよく使われる。 上記の割り込み処理をスタックを使って書き直すと以下のようになる。
0066		PUSH	AF  
		PUSH	BC
		...
		割り込み処理本体
		...
		POP	BC
		POP	AF
		RETN
CPUには通常割込みの許可/不許可を示すフリップフロップの IFF1、IFF2がある。 NMIを受け取ると、IFF2(バックアップ用)にIFF1 がコピーされ、IFF1は(通常割込み不許可)になる。
RETNを実行するとIFF1にIFF2 がコピーされ元に戻る。

(ヒント): (まずこのようなことは起こらないが) NMI処理ルーチン実行中に再度 NMIを受け取ると、IFF1の 情報がIFF2にコピーされ、 もともと許可/不許可のどちらだったかわからなくなる。これを防ぐために、ハード的に連続した NMIを受け取らないような仕組みが用意されることもある。


1.2.2   INT を受け取ったときの処理



INT を検出するタイミング


(ヒント): 検出のタイミングは、NMI, INT ともに同じで、命令実行時の最後の CLK の立ち上がりであるが、検出する状態が異なる。
  割り込み応答サイクルの特徴

  処理の流れ
  1. 次の命令のフェッチサイクルは無効

  2. M1, IORQの L を確認して、 周辺装置はジャンプする先を DB を通して指定する。(T3 で読み込まれる、実際の指定の仕方はモードにより異なる)

  3. PC(無効になった命令を指す)をスタックに退避する

  4. PC にジャンプ先の番地を入れ、そこから実行。INT 処理ルーチンを実行

  5. RETI(RETurn from INT)が実行されると、スタックから戻り番地が取り出され PC に セットされる。その後、もとのプログラムの実行を続ける。


  割り込みには 3 種類のモード(0,1,2)があり、それぞれ処理が異なる

  モードの設定には IM (Interrupt Mode) という命令で 0,1,2 の値を指定する。 また、EI (Enable Interrupt) で割り込み許可を、DI (Disable Interrupt) で 不許可を設定できる。

  モード 0 の処理

割り込み処理ルーチンを DB で指定する。この場合、先頭アドレスを指定するのではなく、 命令自体を指定する。RST か CALL 命令を使うことが多い。
(ヒント): RST, CALL のどちらを使うかは、周辺装置の設計者、プログラマが決める

  例として、装置 1, 装置 2 が接続されており、装置 1 の処理ルーチン は 0020H 番地、装置 2 の処理ルーチンは 0100H 番地から配置されるとする。装置 1 の割り込み処理ルーチンの指定は、RST 20H (E7) または CALL 0020H (CD 20 00) のどちらかで指定できる。装置 2 の割り込み処理ルーチンの指定は、 CALL 0100H (CD 00 01) となる。この場合 RST は使用できない(RST で指定で きる番地と異なる)。)



モード0における割込処理ルーチンの指定


  モード 1 の処理

  割り込み処理ルーチンは 0038H 番地からに決められており、常にそこにジャンプする。 DB から指定する必要はない。


  モード 2 の処理

  モード 2 では割り込み処理ルーチンの先頭アドレスをあらかじめ一覧表に して、メモリに置いておく。そして割り込みが受け付けられた時に、周辺装置 は先頭アドレスを指定するのではなく、一覧表の中の位置 を指定する。この位置を割り込みベクタと呼ぶ。

  例として、1000H からを一覧表として使う場合は、I レジスタに 10H を入れておく。 これで、1000H -- 10FFH が一覧表となる。例えば装置 2 の割り込み処理ルーチンが 3000H からあるとすると、1004H, 1005H に 3000H を登録しておく。



モード2における割込処理ルーチンの指定

  割り込みが受け付けられると、装置 2 は 04H を DB から送る。この場合 I レジスタに 登録されている 10H と 04H を合成してできる 1004H が表中の位置となり、そこに登録 されている 3000H にジャンプする。

各モードにおける指定可能な割り込み処理ルーチンの個数

モード別割り込み処理ルーチンの個数

モード バイト数 指定可能なルーチン 備考
0 1 8 RST 命令を指定
0 3 65536 CALL 命令を指定
1 0 1 番地固定
2 1 128 割込ベクタを指定



1.2.3   割り込みの優先順位の決定(デイジーチェイン)

  割り込みをかける装置を複数接続する場合は、以下の仕組みにより優先順位を指定できる。



デイジーチェインによる優先順位の指定

すべての装置において、
  1. IEI が H のときは割り込み可能で、割り込みをかけたら IEO=L、かけなかったら IEO=H とする。

  2. IEI が L のときは割り込み不可で、IEO=L とする。

  3. 割り込み処理が終って RETI が実行される時に、IEO=H に戻して割り込み可能な状態にする。

  優先順位の高いものは、たとえ優先順位が低い装置が割り込み処理中でも優先 的に割り込みをかけられる。その場合、優先順位が低い装置が割り込み処理は 一時中断され、優先順位の高い装置の割り込み処理に制御が移る。これを 多重割り込みという。



1.2.4   多重割り込み

  通常割り込みが発生すると、連続して割り込みを受け付けないように CPU 内部で自動的に IFF1=0 になる。 多重割り込みを可能にするには、割り込み処理ルーチンの先頭で EI を実行しておく必要がある。

多重割り込みを受け付けない/受け付ける処理ルーチンの例

INT1	EX	AF, AF'	; ★
	EXX
	...
	割り込み処理本体 1
	...
	EX	AF, AF'	; レジスタ復帰
	EXX
	EI		; ★★
	RETI

INT2	EI		; ★★★
	EX	AF, AF'	; レジスタ退避
	EXX
	...
	割り込み処理本体 2
	...
	EX	AF, AF'	; レジスタ復帰
	EXX
	RETI
★     多重割り込みは困るので割り込み処理の間ずっと EI を実行しない

★★     割り込み処理が終了して、もとのプログラムに戻る直前に EI を実行して 再び割り込み可能にする

★★★     多重割り込みをかけられても問題ないので、最初に EI を実行する



1.2.5   練習問題

指定された条件を満たすように割り込み処理ルーチンを作成しなさい。
  1. NMI の処理ルーチンで、レジスタの退避は表裏レジスタの交換で行なう。 退避するレジスタは A,B,C,D,E,F とする。 A,B,C,D,E,F レジスタをこの順番で 1000H 番地からメモリに記録する。

  2. INT の処理ルーチンで、レジスタの退避は表裏レジスタの交換で行なう。 退避するレジスタは A,B,C,D,E,F とする。多重割り込みは禁止する。 A,B,C,D,E,F レジスタをこの順番で 1000H 番地からメモリに記録する。

  3. INT の処理ルーチンで、レジスタのスタックを使用する。 退避するレジスタは A,B,C,D,E,F とする。多重割り込みを許可する。 A,B,C,D,E,F レジスタをこの順番で 1000H 番地からメモリに記録する。






2   CPU の周辺回路


2.1   メモリアドレスの扱い


2.1.1   メモリ空間と IO 空間



メモリ空間と IO 空間



2.1.2   アドレスデコーダ

  アドレスデコーダとは、指定されたアドレスの値を解析して適切なメモリの記憶場所 を選択する信号を生成する回路である。アドレスデコーダにはメモリLSI内部に組み込まれ ているものと、メモリLSI外部で回路として実現されていて、メモリLSIを選択するものの 2 種類がある。



メモリLSI内部のアドレスデコーダ

  複数のメモリLSI、チップを用いて主記憶を構成する場合は、チップ選択のためのデコーダが 必要となる。

  例     1K × 1Byte のメモリLSI 4 個を組み合わせて、4KB の主記憶を構成する場合



アドレスデコーダ

この場合、アドレスデコーダの入出力の対応関係は次のようになる。* は Don't care、その値が何であってもよいことを表す。A0 〜 A9 は各メモリチッ プに共通に接続される。A10, A11 の 2bits の値の組合せで 4 個のメモリチッ プのどれを選択するかが決まる。4KB の主記憶のアドレスを表現するのは 12bits で十分であり、この場合 A15 〜 A12 はアドレスの決定に必要ないので * とな る。
ただし、アドレスを 0000H 〜 0FFFH のように 64KB 中で 固定させる必要がある場合は A15 〜 A12 の値も決める必要がある。 例として、0000H 〜 0FFFH では A15 〜 A12 はすべて 0 である必要がある。

入出力の対応関係

A15 〜 A12 A11 A10 MREQ 出力
* 0 0 0 0
* 0 1 0 1
* 1 0 0 2
* 1 1 0 3
* * * 1 なし

  例2     8K × 1Byte のメモリLSI 8 個を組み合わせて、主記憶を構成する場合の AB の分配法、アドレスデコーダ、アドレスデコーダの入出力の対応関係、 DB との接続法を示しなさい。



アドレスデコーダ


入出力の対応関係

A15 A14 A13 MREQ 出力
0 0 0 0 0
0 0 1 0 1
0 1 0 0 2
0 1 1 0 3
1 0 0 0 4
1 0 1 0 5
1 1 0 0 6
1 1 1 0 7
* * * 1 なし

  例3     8K × 1bit のメモリLSI 8 個を組み合わせて、主記憶を構成する場合の AB の分配法、アドレスデコーダ、アドレスデコーダの入出力の対応関係、 DB との接続法を示しなさい。



アドレスデコーダ

この場合、すべてのメモリチップが同時に動作するため、外部のアドレスデコーダは存在しない。 よって入出力の対応関係は必要ない。


2.1.3   練習問題

以下の組合せで主記憶を構成する場合の、AB の分配法、アドレスデコーダ、 アドレスデコーダの入出力の対応関係、DB との接続法を示しなさい。
  1. 8K × 1Byte のメモリLSIを組み合わせて、64KB の主記憶を構成する

  2. 8K × 1bit のメモリLSIを組み合わせて、8KB の主記憶を構成する

  3. 1K × 1Byte のメモリLSIを組み合わせて、16KB の主記憶を構成する

  4. 1K × 1bit のメモリLSIを組み合わせて、4KB の主記憶を構成する

  5. 8K × 4bits のメモリLSIを組み合わせて、16KB の主記憶を構成する




2.2   その他の周辺回路


2.2.1   バスバッファ

  システムバスに接続されている装置は、配線の長さ、波形の乱れ、ノイズ等の 影響を受けないようにバスバッファというアンプを介して接続することがある。



バスバッファ

  データバスはデータの流れが双方向なので、それに対応したバスバッファが使 用される。

  アンプにゲート機能を組み合わせて、装置が選択されていない時は信号を取り 込まないようにすることもある。



2.2.2   リセット

 RESET に与える信号は負論理なので、通 常は H であり、L になると CPU がリセットされる。

  リセット信号を受けると、PC ← 0, I ← 0, R← 0, IM=0, DI が実行される。

 RESET が L → H になると CPU は動作を再開する。 0 番地の命令から実行を始める。




2.3   Z80CPU を用いた簡単なシステムの構成例


2.3.1   例1



簡単なシステムの例1

  このシステムは 512 Bytes の ROM からプログラムを読み込んで、実行し、 4 bits のデータを出力することができる。


ラッチ回路の選択信号

(1)IORQ M1 (2)M1の否定 (1) OR (2) (1) NOR (2)
H H L H L
H L H H L
L H L L H
L L H H L

  よって、IORQ=L かつ M1=H の場合のみラッチ回路が機能し、外部にデータを出力できる。IORQ=L で M1=L の場合は割り込み要求を受け付けた場合の反応なので、除外する必要がある。

  メモリの構成は、AB の下位 9bits が 16 進数で 000 から 1FF の部分に割り当てられる。 例として上位 7bits が 0 とすると、0000 〜 01FF に存在することになる。



メモリの構成


ROM のアドレスの範囲

**** ***0 0000 0000
**** ***1 1111 1111



2.3.2   例2



簡単なシステムの例2

  このシステムは 1K Bytes の ROM からプログラムを読み込んで、実行する。処理途中のデータは 256 Bytes まで RAM に保持できる。また外部と 8 bits のデータを入出力することができる。メモリ容量は少ないがある程度 実用性がある。



各回路の選択信号

ROM の選択信号は 2 本あるが、それぞれの意味は以下の通り。

ROMの選択信号

MREQ RD NOR
H H L
H L L
L H L
L L H

よって MREQ=L, RD=L, A15=0 のとき選択される。 メモリにアクセス要求かつ読みだし要求で、アドレス指定が前半32KBの領域である場合となる。

RAM の選択信号は 2 本あるが、それぞれの意味は以下の通り。

ROMの選択信号

MREQ A15 NOR
H H L
H L L
L H L
L L H

よって MREQ=L, A15=1 のとき選択される。また、WR=L のとき書き込み、そうでないときは読み込みとなる。 メモリにアクセス要求があり、アドレス指定が後半32KBの領域である場合となる。

ラッチ回路の選択信号は 2 本あるが、それぞれの意味は以下の通り。

ラッチ回路の選択信号

(1)IORQ M1 (2)M1の否定 (1) OR (2) (1) NOR (2)
H H L H L
H L H H L
L H L L H
L L H H L

  よって、IORQ=L かつ M1=H の場合のみラッチ回路が機能し、外部にデータを出力できる。IORQ=L で M1=L の場合は割り込み要求を受け付けた場合の反応なので、除外するのは例1と同様。

また、WRについては、WR=H で DISABLE、つまり WR が OFF ではラッチが機能しない。(ラッチは外部への出力なので WR が ON である必要がある)

ゲート回路の選択信号の意味は以下の通り。

ゲート回路の選択信号

(1)IORQ M1 RD M1 の否定 NOR
H H H L L
H H L L L
H L H H L
H L L H L
L H H L L
L H L L H
L L H H L
L L L H L

  よって、IORQ=L, M1=H, RD=L のとき選択される。割り込み要求の反応を除外するのはラッチ回路 の場合と同様。 割り込み要求の反応ではなく、外部へのアクセス要求で読み出しの時選択される。

  メモリの構成は、A15=0 の時 ROM が、A15=1 の時 RAM が選択される。 1KB の ROM は、AB の下位 10bits が 16 進数で 000 から 3FF の部分に割り当てられる。 例として上位 6bits が 0 とすると、0000 〜 03FF に存在することになる。



メモリの構成


ROM のアドレスの範囲

0*** **00 0000 0000
0*** **11 1111 1111

  256B の RAM は、AB の下位 8bits が 16 進数で 00 から FF の部分に割り当てられる。 例として上位 8bits が 1000 0000 とすると、8000 〜 80FF に存在することになる。 また、上位 8bits が 1111 1111 とすると、FF00 〜 FFFF に存在することになる。


RAM のアドレスの範囲

1*** **** 0000 0000
1*** **** 1111 1111

  このシステムでは AB の上位の数 bits を利用していないのでメモリのアドレスを 64KB のメモリ空間中で確定させることができない。



2.3.3   例3

このシステムは外部装置とのデータの入出力の管理を専用の機能を備えた PIO で行う。



PIO と SIO

PIO : Parallel Input/Output Interface, Controller

複数の信号線を用いる入出力を制御する。一般的には 8bits のデータをまと めて扱えるように 8 本の信号線を持つものが多い。Z80CPU は DB が 8bits なので PIO も信号線が 8 本のものがちょうど合う。

SIO : Serial Input/Output Interface, Controller

単一の信号線を用いる入出力を制御する。CPU とのデータのやりとりは Parallel で行うが、外部とのやりとりは単一の信号線でデータを送るために、 時分割でデータを直列のビットの並びに変換する。



簡単なシステムの例3

  メモリの構成は、A12, A13 の組合せにより ROM、RAM が選択される。A13=0 の場合 ROM が、 A13=1 の場合 RAM が選択される。RAM については更に A12 の値によって 2 個のチップのうち 1 個が選択される。
8KB の ROM は、AB の下位 13bits が 16 進数で 0000 から 1FFF の部分に割り当てられる。 例として上位 3bits が 0 とすると、0000 〜 1FFF に存在することになる。



メモリの構成


ROM のアドレスの範囲

**00 0000 0000 0000
**01 1111 1111 1111

  8B の RAM は、AB の下位 13bits が 16 進数で 0000 から 1FFF の部分に割り当てられる。 例として上位 3bits が 001 とすると、2000 〜 3FFF に存在することになる。


RAM のアドレスの範囲

**10 0000 0000 0000
**11 1111 1111 1111

  このシステムでは AB の上位 2 bits を利用していないのでメモリのアドレスを 64KB のメモリ空間中で確定させることができない。


アドレスデコーダの詳細



アドレスデコーダ

74139 は Dual 2to4 Demultiplexers という IC で以下のような入出力の関係 がある。A, B の組合せで、Y0 〜 Y3 のどれか一つが負論理で選択される。

74139 の入出力の関係

ENABLE B A Y0 Y1 Y2 Y3
L L L L H H H
L L H H L H H
L H L H H L H
L H H H H H L
H * * H H H H


アドレスデコーダの入出力の関係

A15,A14 A13 A12 MREQ 出力
* 0 0 0 Y0
* 0 1 0 Y1
* 1 0 0 Y2
* 1 1 0 Y3
* * * 1 なし


S1 の出力

Y0 Y1 負論理の OR
H H H
H L L
L H L
L L L

実際には 4 番目の L,L の組合せはデマルチプレクサの出力としては存在しない。

Y0 〜 Y3 は選択されたものが L, 残りは H になる。S1は Y0,Y1 のどちらかが L の時 L, そうでない場合 H にな る。

CPU の WR はメモリの WR に接続され、読み出し/書き込みの区別に使用される。

PIO と CPU は同名の信号線 INT, IORQ, RD, M1 を接続する。

PIO の端子 A/B はポート A, B のどちらかを選択するためにある。端子 C/D は制御用のデータ (Controll) と通常のデータ (Data) を指定するために ある。



2.3.4   練習問題

以下の条件を満たすシステムの回路図、アドレスデコーダの入出力の対応関係を示しなさい。
  1. 4K × 1Byte の ROMLSIを組み合わせて、8KB の ROM を、 1K × 1Byte の RAMLSIを組み合わせて、8KB の RAM を構成する。 0000H から ROM を、8000H から RAM を配置する。 ROMLSI, RAMLSI の Chip Select 信号は正論理とする。RAMLSI の R/W 信号は、 正論理で H のとき書き込みを表す。外部装置とのデータの入出力は、 ラッチ回路とゲート回路で実現する。割り込みは考慮しなくてよい。

  2. 4K × 1Byte の ROMLSIを組み合わせて、16KB の ROM を、 4K × 1Byte の RAMLSIを組み合わせて、16KB の RAM を構成する。 0000H から ROM を、C000H から RAM を配置する。 ROMLSI, RAMLSI の Chip Select 信号は正論理とする。RAMLSI の R/W 信号は、 正論理で H のとき読み込みを表す。外部装置とのデータの入出力は、PIO で実現する。






3   PIO を用いた入出力


3.1   Z80PIO


3.1.1   機能の特徴



Z80PIO

Z80PIO は 2 個のポート (ポート A, B) を介して外部の装置とデータの入出力を行う。

B/A はポート選択の信号、C/D は制御用のデータ、通常のデータの区別を表す。 IEI, IEO はデイジーチェインで割り込みの優先順位を決める場合に使用する。

開発当初は 40pin DIL パッケージで提供されていた。現在は CPU、その他の 機能と統合された 1 チップの LSI として提供される場合が多い。

Z80CPU を開発したメーカの製品であるため、Z80CPU と組み合わせた場合に便 利な機能が用意されている。

各ポートはモード 0 〜 3 の 4 種類の入出力動作を行う。



3.1.2   モード 0 (出力モード)

ポートを指定して DB から PIO にデータを送ると、PIO 内部のラッチ回路に保持されポートに 出力される。その後 ARDY(BRDY) が H になり、出力されたことを外部装置に通知する。 ASTB を受け取ると ARDY は L に戻り、一回の転送が終了する。



モード 0 のタイムチャート

  1. DB から PIO 内部のバッファにデータを読み込む。読み込みの動作は次の 信号の組合せが成立した場合に行われる。

  2. データをポートに出力する

  3. ARDY=H にして外部装置にデータが出力されていることを伝える

  4. 外部装置はデータを読み込んだら ASTB=L にして読み込みが 完了したことを PIO に伝える

  5. PIO は ASTB の立ち上がりを検出した時に、割り込みが 許可されていたら CPU に割り込みをかけて転送が終了したことを伝える。

  6. ARDY=L に戻して転送終了、次に備える

ASTB は外部から PIO への"返事"で、この場 合は「データを受け取りました。」ということを伝えるために使われる。PIO は ASTB を受け取ると、データが(正しく)伝 えられたことがわかるので、その後 ARDY を L に戻す。


3.1.3   モード 1 (入力モード)

PIO は ASTB(データをポートに送ったよ) を受け取るとポート上のデータ を内部のラッチに保持し、ARDY=L にして外部装置に通知する(データを受け 取ったよ、次はまだ送らないでね)。同時に割り込みが許可されていたら、INT を CPU に送る。割り込みが受け付けられたら INT を戻す。


モード 1 のタイムチャート

  1. 外部装置が ASTB を PIO に送ると、PIO は読み込んで外部装置から データが送られることを認識する。

  2. ポートに出力されているデータを PIO 内部に取り込む。

  3. 割り込みが許可されていれば、INT=L にして CPU にデータがあることを伝える。

  4. ARDY=L にして外部装置にデータを読み込んだこと、バッファが埋まっていること、 次のデータを送ってはいけないことを伝える。

  5. CPU は割り込み処理ルーチンで PIO からデータを読み出す。INT は割り込みが 受け付けられたら戻る。

  6. CPU のデータの読み出しが終ったら、ARDY=H に戻して転送終了、次のデータを受け取れるようになったことを 外部に伝える

CPU がデータを読み込んだら ARDY=H に戻す。読んだかどうかはモード 0 と同じく、 RD, IORQ, CE, C/D の組合せでわかる。RD, IORQ が L → H になれば読み込みが終ったことになる。

3.1.4   モード 2 (入出力、双方向モード)

このモードはポート A でしか使うことができない。また、ARDY, BRDY, ASTB, BSTB のすべ てを使う必要があるので、もしポート B を使う場合はモード 3 でしか使うこ とができないという制約がある。

モード 0,1 を同時に行うような処理内容となる。

CPU → PIO → 外部装置



モード 2 のタイムチャート (PIO → 外部装置)

CPU からのデータを取り込むのは、モード 0 と同様で取り込んだら ARDY=H にして外部に通知する(データがあるよ)。しかしモード 0 と異なるのは、
  1. ASTB を受け取るまでは出力をしない。 ここでは ASTB は「送って下さい」及び 「受け取りました」という二つの意味で使用される。

  2. ASTB=H に戻ると外部装置がデータを読み込んだ ことがわかるので、出力データを消して ARDY=L, INT=L にして CPU にデータが送り出されたことを通知する。



外部装置 → PIO → CPU



モード 2 のタイムチャート (外部装置 → PIO)

外部装置はデータをポート A に送り、BSTB=L にする。 PIO はデータをラッチし、BRDY=L にする(受け取ったよ、バッファが埋まっているよ)。 また INT=L にして CPU にデータがあることを通知する。 CPU が割り込みを受け付けてデータを読むと、BRDY=H に戻り、次のデータを送ってもよいことを 外部に伝える。

ハンドシェイク用の信号の意味



3.1.5   モード 3 (ビットモード)

ポートの各ビットを独立に入力、出力に指定できる。ハンドシェークの機能 は使用しない。

CPU からデータが送られると出力に指定したビットだけが出力される。逆に、 入力されたデータについては入力指定したビットだけが CPU に送られる。 その他のビットは内部ラッチの状態がそのまま残る。

CPU から見た場合、データを出力する時は単にデータバスから送るだけでよい。 外部装置からデータを入力する場合は、いつデータが発生するか CPU は知る ことができないので定期的に読み出す。その時読み出されるデータは、直前( RDの立ち下がり)に ポートから PIO 内部にラッチされたデータとなる。




3.2   8255


3.2.1   機能の特徴



8255

8 bit サイズの 3 個のポート(A, B, C ポート)を介してデータの入出力を行 うパラレルインタフェースのコントローラである。当初は 40pin の DIL パッ ケージで販売されていたが、現在は CPU 等と 1 chip に統合された形で提供 されることが多い。

端子は CPU のデータバスに接続する D0 〜 D7、A, B, C ポートの PA0 〜 PA7, PB0 〜 PB7, PC0 〜 PC7、ポート選択用の A0, A1RDWRCS、RESET、 Vcc、GND となる。 コントロールレジスタに指定する値は以下のような形式になる。


8255 の制御用データ

bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0
1 0 0 A ポート C ポート上位 0 B ポート C ポート下位
      0 : 出力 0 : 出力   0 : 出力 0 : 出力
      1 : 入力 1 : 入力   1 : 入力 1 : 入力

bit7,6,5,2 はそれぞれ意味を持っているが、一般的な使い方の場合上記の値の組合せとなる。



3.2.2   スイッチと LED

A ポートには LED が接続されており、C ポートにはスイッチが接続されている。 C ポートのスイッチの状態を読んで、A ポートの LED を点灯させる。 値 1 はスイッチの ON 及び LED の点灯状態に対応する。



スイッチと LED

PORTA	EQU	0F0H		; 各ポートには固
PORTB	EQU	0F1H		; 有のアドレスが
PORTC	EQU	0F2H		; 割り当てられる
CTRL	EQU	0F3H

	ORG	1000H

START	LD	A, 8BH		; 各ポートの入出力の指定
	OUT	(CTRL), A	; A:出力, B,C:入力
LOOP	IN	A, (PORTC)	; C ポートから読んで
	OUT	(PORTA), A	; A ポートに出力する
	JP	LOOP		; 繰り返し
	HALT
	END


3.2.3   練習問題

  1. A,B,C ポートのすべてに LED を接続して、A ポートは右端の、 B ポートは右から 2 番目の、C ポートは右から 3 番目の LED を点灯させる。

  2. A,B,C ポートのスイッチから読み込んだ値を加えて RESULT に記録する。

  3. A,B ポートのスイッチから読み込んだ値を加えて、C ポートの LED に 2 進数で表示する。

  4. A ポートのスイッチから読み込んだ値が奇数なら C ポートの LED を全点灯、偶数なら全消灯させる。

  5. A,B ポートのスイッチから入力して、両ポートのスイッチともに ON の位置だけ C ポートの LED を点灯させる。

  6. A,B,C ポートのスイッチから読み込んだ値をそれぞれ DATA1, DATA2, DATA3 に記録する。



3.2.4   プリンタの制御

この例では、プリンタと 8255 の接続に A,C ポートが使用されている。 A ポートからは文字データが送られる。C ポートは上位 4 bits が出力として、 下位 4 bits が入力に設定される。bit6 が STRB として 、また bit1 が BUSY として使用される。



プリンタ



プリンタ制御のタイムチャート

PORTA	EQU	0F8H		; 各ポートには固
PORTB	EQU	0F9H		; 有のアドレスが
PORTC	EQU	0FAH		; 割り当てられる
CTRL	EQU	0FBH

	ORG	1000H

START	LD	A, 83H		; 各ポートの入出力の指定
	OUT	(CTRL), A	; A:出力, B:入力, C上:出力, C下:入力
	LD	A, 40H		
	OUT	(PORTC), A	; STRB を H にセット

MAIN	LD	C, 'A'		; 'A' 印字
	CALL	PRINT
	LD	C, 'B'		; 'B' 印字
	CALL	PRINT
	CALL	NEWLINE		; 改行
	HALT

NLINE	LD	C, 0DH
	CALL	PRINT
	LD	C, 0AH
	CALL	PRINT
	RET

PRINT	IN	A, (PORTC)
	AND	2		; bit1 だけ残す
	JR	NZ, PRINT	; BUSY==1 なら上へ
	LD	A, C		; C に入っているデータを
	OUT	(PORTA), A	; 印字
	LD	A, 0		; 00000000
	OUT	(PORTC), A	; STRB を L に
	LD	A, 40H		; 01000000
	OUT	(PORTC), A	; STRB を H に
	RET

	END
AND 2 の意味

    11101011
AND 00000010
------------
    00000010
アセンブリ言語における文字列の指定

	DB	'A'
	DB	'B'
	DB	'C'
	DB	'D'

	DW	'AB'
	DW	'CD'

	TXT	'ABCD'
これらはすべて同じ内容を表す。文字列はこれで表現できるが、何文字あるか が指定できないので、(1)文字数は別のデータで表現するか、(2)文字列の終端 に特別な値(0 など)を付加して表現する必要がある。

(1)
DATA	TXT	'ABCDEF'
NUM	DB	6

(2)
DATA	TXT	'ABCDEF'
	DB	0
プリンタの応用プログラム(文字列を印字する)

PORTA	EQU	0F8H
PORTB	EQU	0F9H
PORTC	EQU	0FAH
CTRL	EQU	0FBH

	ORG	1000H

START	省略

MAIN	LD	HL, DATA	; 文字列の先頭アドレスを HL にセット
	LD	A, (NUM)
	LD	B, A		; 文字数を B にセット
	CALL	PLINE1
	HALT

PLINE1	LD	A, 0
	CP	B		; 文字数が 0 か確認
	JP	Z, BACK		; もし 0 なら印字しないで戻る
LOOP	LD	C, (HL)		; 文字を C にセット
	CALL	PRINT
	INC	HL		; 次の文字に進める
	DEC	B		; カウンタを 1 減らす
	JP	NZ, LOOP	; 0 になるまで繰り返し
	CALL	NLINE
BACK	RET

NLINE	省略

PRINT	省略

DATA	TXT	'ABCDEFGHIJKLMN'
NUM	DB	14

	END


3.2.5   練習問題

以下のプログラムを作成しなさい。サブルーチン PRINT, NLINE は用意されて いて利用してもよいことにする。
  1. 'A' を 20 文字 × 5 行印字する。

  2. 'A' 〜 'Z' まで順に印字する。('A'=41H, 'B'=42H)

  3. 自分の名前を印字する。

  4. 'ABCD' を A B C D のように印字するサブルーチンを PLINE1 を 改良して作成しなさい。

  5. 文字列の終端に 0 を付加して表現する形式のデータを印字する サブルーチン PLINE2 を作成しなさい。また PLINE2 を利用する MAIN ルーチンを作成しなさい。






4   CPU を高速化する技術


4.1   CPU 発展の歴史

以下では Intel 社の CPU を開発された順に取り上げ、各時期にどのような技 術が導入されていったか紹介する。

参考文献

4.1.1   4004



4.1.2   8080



4.1.3   8086



4.1.4   80286



4.1.5   i386



4.1.6   i486



4.1.7   Pentium



4.1.8   Pentium Pro



4.1.9   Pentium with MMX Technology



4.1.10   Pentium II, III



4.1.11   Pentium 4




4.2   高速化の技術


4.2.1   パイプライン

CPU における命令実行は、以下のような複数の処理の組合せと考えられる。 各処理は専用の回路で実行されるため、それぞれの回路での処理内容を連続し て実行できるようにすると処理速度が向上する。



パイプライン

例として、上記の図では命令実行を 5 個の処理(パイプライン処理では「ステー ジ」と呼ぶ)に分割した場合に、従来の命令実行の仕方とパイプライン方式に よる実行との違いを表している。各ステージが 1 クロックサイクルで実行可 能と仮定すると、4 個の命令を実行する場合従来は 20 クロックサイクル必要 であったが、パイプラインにより 8 クロックサイクルで完了している。

パイプライン方式では、連続して命令実行が可能な場合は高い実行効率が得ら れる。しかし、命令実行を細かな処理に分割して各処理を並行して進めるため、 以下のような理由によりパイプラインの処理を中断(ストール)する必要が出てくる。 命令間でのデータの依存関係は以下のような場合に発生する。
	ADD	A, B
	ADD	A, C
	ADD	A, D
この場合、A+B の結果が A に書き込まれる前に、次の命令のために A の以前 の値が読み込まれてしまい、そのままパイプラインでの処理を進めると正しい 演算結果が得られない。この場合は A+B の結果が A に書き込まれた「後に」 A を読みだして A+C を計算する必要がある。

分岐命令の実行は以下のような場合である。
	CP	0
	JP	Z, L1
	ADD	A, B
	ADD	A, C
	...
L1	LD	(RESULT), A
この場合 JP Z, L1 の内容を解読して実行の段階に入る時には、次の命令の解 読やその次の命令の読み出しが行われている。A の値によっては JP Z, L1 の 次には LD (RESULT), Aを実行する必要があるため、ADD A, B や ADD A, C に 関して進めていた処理をすべて取り止めて LD (RESULT), A の読み出しからや り直す必要がある。

同一クロックで複数のアクセスに装置が対応できない例としては、古い形式の キャッシュに対して読み出しと書き込みが同時に行われる場合、データバスが一 系統しかないと読み出し/書き込みのどちらかしか実行できないという場合がある。



4.2.2   ワイヤードロジック

CPU 内部で機械語命令を実行する方式はマイクロプログラミングとワイヤード ロジックがある。

4.2.3   キャッシュ

CPU のクロック周波数が高くなり処理能力が向上してくると、主メモリとの処 理速度の差が問題となってきた。具体的にはメモリからデータを 1 個読み出 す間に CPU では数十命令実行可能という状況となる。その場合 CPU がメモリ からデータを読み出す命令を実行すると、メモリからデータが到着するまで CPU はずっと待っている必要があり実行効率が上がらない。



キャッシュ

この問題を解決するためにキャッシュ(メモリ)という技術が使用される。CPU と 主メモリとの間に Static RAM で構成した小容量だが高速なメモリを用意 しておき、CPU がメモリアクセスを行う場合キャッシュを対象とする。キャッ シュにはその時点で頻繁にアクセスされるであろうデータを入れておく。アク セスの予測は「メモリアクセスの時間的、空間的局所性」という性質がもとになっている。こ れは CPU がメモリのある場所をアクセスした場合、高い確率で、 ということがいえる。

具体的な例では、繰り返しの処理は時間的、空間的局所性の両方を備えており、 配列などのまとまった構造を持つデータのアクセスでは空間的局所性がある。
繰り返し
	LD	B, 10
L1	ADD	A, B
	DEC	B
	JP	NZ, L1
	LD	(RESULT), A
配列のアクセス
	LD	A, 0
	LD	B, 10
	LD	HL, DATA
L1	ADD	A, (HL)
	DEC	B
	JP	NZ, L1
	LD	(RESULT), A

DATA	DB	3
	DB	5
	DB	2
	DB	7
	DB	11
	DB	13
	DB	17
	DB	19
	DB	23
	DB	29
RESULT	DS	1
よって、CPU がメモリ上のあるデータをアクセスした時に合わせてその付近の データをキャッシュに読み込んでおけば、近い将来アクセスされる確率が高い。 その場合、キャッシュからのみ読み出せばよいので CPU を待たせる必要がない。



4.2.4   スーパースケーラ (スーパースカラー)

命令でアクセスされるデータの依存関係を CPU 内部で自動的に調べて、依存 関係がなく独立して実行可能な命令を並列に実行する技術を表す。CPU 内部に 命令実行部を複数持つことになる。並列実行可能な命令が 2 個なら 2 way の スーパースケーラとなる。

具体的なプログラムでは以下のようになる。
	LD	A, 10
	LD	B, 2
	LD	C, 20
	INC	D
	DEC	E
	LD	HL, 0
	ADD	A, B
	ADD	A, C
	ADD	HL, DE
	LD	(RESULT), A
	LD	(RESULT2), HL

RESULT	DS	1
RESULT2	DW	0
このプログラムでは先頭から LD HL, 0 までは各命令に全く依存性がないため にすべて並列実行が可能となる。6 way のスーパースケーラなら 6 命令が同 時に実行できる。ADD A, B と ADD A, C は A に依存するため同時には実行で きない。ただし、ADD HL, DE は並列実行が可能である。最後の LD (RESULT), A と LD (RESULT2), HLは依存関係がないので並列に実行できる。



4.2.5   分岐予測

分岐命令でジャンプする先のアドレスを調べて、次に実行される命令を予測す る技術である。これには静的分岐予測と動的分岐予測がある。 通常は両者を組み合わせて使用する。分岐予測の結果、次に実行されると予測された 命令がプリフェッチの対象となりメモリから読み込まれパイプラインに投入される。



4.2.6   ハーバードアーキテクチャ

メモリ、キャッシュ及びデータバスの構造を表し、命令用とデータ用を分離す るのがハーバードアーキテクチャである。命令用とデータ用を単一のキャッシュ 及びバスで実現する方法をプリンストンアーキテクチャと呼ぶ。

メモリアクセスの局所性から命令、データは別々のメモリ、キャッシュで扱っ た方が処理の効率がよい。また、データバスが二重化されることにより命令を 読み出しながらデータを書き込むといった処理が可能となり、パイプラインや スーパースケーラ方式と相性がよい。ただし二重化するという点でコストがか かるのですべてをハーバードアーキテクチャで実現することは少ない。典型的 には主メモリはプリンストンアーキテクチャにして、速度が要求されるキャッ シュをハーバードアーキテクチャにすることが多い。



4.2.7   RISC (Reduced Instruction Set Computer)

従来のプロセッサ設計の考え方は、複雑な動作をする命令もなるべく機械語命令として 用意し、同時に豊富なアドレッシングモードを提供し、なるべく高機能なもの にしようというものであった。別の表現をすると、ハードウェアレベルで複雑 な機能、豊富な機能を実現しようとするものである。この考え方、設計原理を CISC (Complex Instruction Set Computer), 複雑命令セットコンピュータと 呼ぶ。

CISC 型のプロセッサの特徴として以下の点を挙げることができる。 利点として、プログラムの実行する内容を多くの命令を組み合わせなくても、 少数の高機能な命令で記述できる。よってプログラムの記述性が増し、人間に とっては高級言語的な考え方でプログラムが作成できる。

欠点として、可変長の命令フォーマット、複雑な動作をする命令、豊富なアド レッシングモードについては、プロセッサ内部の命令デコード部分が非常に複 雑になり設計が難しい。また命令デコード部分の動作速度を向上させることが できない。また、多くのクロックを必要とする命令は、パイプラインの各ステー ジの処理時間を一定に保つことができないためパイプラインの動作効率を低下 させてしまう。

複雑、高機能な命令は使用するために一定の条件を満たす必要があるが、現実 のプログラムではその条件を満足する機会は少なく使用頻度が低い。また、コ ンパイラで使いこなすことが難しく、コンパイラで作成した実行ファイルには ほとんど登場しない。

結論として、CISC は人間がアセンブリ言語でプログラムを作成するのには向 いているが、反面、複雑な命令は使用される機会が少なくコンパイラでの処理に向いていな い。コンパイラが使われる機会が増えると、高機能なプロセッサが高速なプロ セッサであるとはいえなくなった。

上記の問題点を分析した結果に基づいて、新しいプロセッサ設計の原理 RISC (Reduced Instruction Set Computer), 縮小命令セットコンピュータが考案された。

RISC 型のプロセッサの特徴として以下の点を挙げることができる。多くは CISC の逆の考え方になる。 RISC では少数の命令のみを用意することによって、プロセッサ内部の命令デ コード部分を単純化する。またアドレッシングモードを制限することにより、 演算に使用するデータをレジスタに限定する。その結果個々の命令の実行時間 は非常に短くなり高速化が図れる。命令の実行時間のバラツキを抑えることに よりパイプラインの処理を乱さなくなる。ほとんどの命令はパイプラインの各 ステージの処理を 1 クロックで行うことができる。命令デコード部分の単純 化は、回路の規模を小さくすることに結び付き、最先端のプロセス技術の導入 が可能となる。また多数のレジスタや、チップ上に大容量のキャッシュを搭載 することが可能となり、これらの点も高速化に結び付く。

結論として、RISC はコンパイラの使用を前提とした高速で単純な命令群、パイ プライン処理に適した内部構造により高速化を実現しているといえる。

複雑な処理をする場合、CISC では高機能だが実行に時間のかかる少数の命令 の組合せで実現され、RISC では単純だが高速な命令を多数組み合わせること により実現する。同時代の CISC と RISC を比較すると RISC の方が圧倒的に 高速だったため、現実の性能において RISC の優位性が認められた。



4.2.8   アウトオブオーダ実行

スーパースケーラ方式で各命令間の依存関係を調べた結果、本来の命令の並び とは関係なくある程度異なったタイミングで実行しても結果に影響しない命令 が検出できる。アウトオブオーダ実行とは、このような実行順序に依存しない 命令を異なったタイミングで実行することを表す。効果としては、依存関係の ある命令の間に依存関係のない命令を挟み込むことによって、命令の並列実行 の機会を増やすことができる。

具体的な例では以下のような場合が考えられる。
	LD	B, 2
	LD	C, 20
	LD	D, 20
	ADD	A, 10
	ADD	A, 20
	ADD	A, 30
この命令列を 2 way のスーパースケーラプロセッサで実行する。2 系統のパ イプラインはデータの転送、算術演算を担当すると仮定する。本来の命令の並 びでは LD 命令を 3 個連続してデータの転送用パイプラインで実行した後で ADD 命令を 3 個連続して算術演算用パイプラインで実行する。この場合 2 系 統のパイプラインは並列に利用されていない。

上記の命令列をアウトオブオーダ実行の機能で次のような順序でパイプライン に投入すると、LD 命令と ADD 命令を並列に利用できる

	LD	B, 2
	ADD	A, 10
	LD	C, 20
	ADD	A, 20
	LD	D, 20
	ADD	A, 30
LD 命令と ADD 命令は互いのパイプラインの処理に関係しないので完全に並列 に実行できる。



4.2.9   投機実行

分岐予測の結果、分岐命令の次に実行される命令を予測したら、その命令を読 み出すだけではなく実行までしてしまうことを表す。予測が成功した場合はパ イプラインのストールは発生せず処理を続けることができる。予測が失敗した 場合はパイプラインはストールして投機実行した命令の実行結果は破棄するこ とになる。分岐予測の推定精度が向上すれば、分岐命令の次の命令を単純にパ イプラインに送るより、投機実行した方がパイプラインのストールを減らせる。 分岐予測は現在のプロセッサでは 80% 以上の確率で成功するので投機実行の 効果は大きい。



4.2.10   スーパーパイプライン

パイプラインのステージ数を非常に多くすることを表す。例として 5 ステー ジで各ステージの処理が 2 nsec のパイプラインを変更して、10 ステージで 各ステージの処理が 1 nsec にできれば理想的な処理では 2 倍の高速化が図 れる。

またステージ数が多くなると、各ステージでの処理が単純になる。各ステージ での処理が単純になると、設計が容易になり処理の高速化が図れ、クロック周 波数を向上させることができる。



スーパーパイプライン

スーパーパイプラインでは性能向上の効果も大きいが、パイプラインの処理が ストールするとペナルティも大きくなるので、パイプラインをストールさせな いための技術が重要になる。



4.2.11   SMP (Simmetric Multi Processing)



4.2.12   レジスタリネーミング



4.2.13   SIMD (Single Instruction Multiple Datastream)



4.2.14   ハイパースレッド




4.3   その他の技術


4.3.1   仮想記憶

コンピュータシステムが搭載している実メモリ(実アドレス空間とする)よりも 大きなメモリ空間(仮想アドレス空間とする)でプログラムを実行したり、デー タを扱うための技術。プログラムからは実メモリ以上のメモリが利用可能にな る(ように見える)。

CPU が入出力するプログラム、データは実メモリに置く必 要があるが、もし仮想アドレス空間に対して CPU からアクセスがあった場合 は、実メモリの一部に仮想アドレスを割り当てることにより、その場所を CPU が指定した場所として扱えるようにする。

大量のプログラムやデータを扱う場 合には実メモリの容量を超えてしまうが、その場合は補助記憶装置 (主として HDD)に設けた専用の領域 (swap) に対してデータを入れ換えることにより、 CPU がアクセスするデータは常に実メモリに存在するようにする。

仮想アドレ ス空間と実アドレス空間の変換は専用の装置 (MMU: Memory Management Unit) で行う。



仮想記憶



4.3.2   特権レベル

プログラム実行時の CPU の状態にレベルを設定することにより、あるレベル で動作するプログラムには周辺装置やメモリの特定の領域へのアクセスを禁止 したり、CPU の特定の命令を実行することを禁止したりする。通常、OS が動 作する時はすべてのハードウェア資源へのアクセスを許可するが、一般のアプ リケーション、プログラムによるアクセスには制限をかける。高級な CPU では この機能をハードウェアで提供する。


4.4   練習問題

2003/01/10 13:30 までに 5355 室まで提出する。解答は提出期限の後 WWW で公開する。

1. パイプラインの処理について次の問いに答えなさい。パイプラインのストール は発生しないものとする。
  1. 5 段のパイプラインで、各ステージの処理が 2 nsec で完了する場合、100 個の命令を 実行するのに要する時間を求めなさい。

  2. 10 段のパイプラインで、各ステージの処理が 1 nsec で完了する場合、100 個の命令を 実行するのに要する時間を求めなさい。

  3. 20 段のパイプラインで、各ステージの処理が 0.5 nsec で完了する場合、100 個の命令を 実行するのに要する時間を求めなさい。

2. 次の用語が表す技術の内容を説明しなさい。
  1. SMP

  2. レジスタリネーミング

  3. SIMD

3. PIO のプログラミング、以下のプログラムを作成しなさい。
  1. A ポートのスイッチから読み込んだ値が奇数なら C ポートの LED を全点灯、偶数なら全消灯させる。

  2. A,B ポートのスイッチから入力して、両ポートのスイッチともに ON の位置だけ C ポートの LED を点灯させる。

  3. A,B,C ポートのスイッチから読み込んだ値をそれぞれ DATA1, DATA2, DATA3 に記録する。

4. 以下の条件を満たすシステムの回路図、アドレスデコーダの入出力の対応関係を示しなさい。
  1. 2K × 1Byte の ROMLSIを組み合わせて、8KB の ROM を、 512 × 1Byte の RAMLSIを組み合わせて、4KB の RAM を構成する。 0000H から ROM を、4000H から RAM を配置する。 ROMLSI, RAMLSI の Chip Select 信号は正論理とする。RAMLSI の R/W 信号は、 正論理で H のとき書き込みを表す。外部装置とのデータの入出力は、 ラッチ回路とゲート回路で実現する。割り込みは考慮しなくてよい。

  2. 1K × 1Byte の ROMLSIを組み合わせて、4KB の ROM を、 512 × 1Byte の RAMLSIを組み合わせて、2KB の RAM を構成する。 8000H から ROM を、E000H から RAM を配置する。 ROMLSI, RAMLSI の Chip Select 信号は正論理とする。RAMLSI の R/W 信号は、 正論理で H のとき読み込みを表す。外部装置とのデータの入出力は、Z80PIO で実現する。