20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

46
コンピュータアーキテクチャ I/O入門 qpstudy 2012.05 ~エンジニアのためのハードウェア徹底入門~ May 19, 2012 Takeshi HASEGAWA [ja] @hasegaw / [en] @hasegaw_en

description

qpstudy2012.05 session by @hasegaw http://www.zusaar.com/event/273001

Transcript of 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

Page 1: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

コンピュータアーキテクチャ I/O入門

qpstudy 2012.05 ~エンジニアのためのハードウェア徹底入門~ May 19, 2012 Takeshi HASEGAWA [ja] @hasegaw / [en] @hasegaw_en

Page 2: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

プロフィール 長谷川 猛 (HASEGAWA Takeshi) twitter: @hasegaw 主にLinuxや仮想化技術を得意とする雑食系SE Xen/KVMを調査、FreeBSD virtioを実装等  最近のアップデート:家にギネス瓶と生ハムおきました

2

Page 3: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

おもな著書・寄稿

3

Page 4: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

Webサイトの記事など

エンジニアなら知っておきたい仮想マシンのしくみ http://gihyo.jp/dev/serial/01/vm_work/

4

Page 5: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

今日の目的

5

Page 6: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

本セッションの目的

•  コンピュータにおけるI/O(入出力)の役割を理解する

•  IA-32において利用されるI/Oの種類を理解する

•  実際にコンピュータに接続されているI/Oデバイスの例を見る

•  実際にI/Oデバイスを工作すると何が起きるかを見る

•  セッション終了時には、コンピュータの入出力とFall in Love!

6

Page 7: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

I/O (入出力)ってなんだ 入出力とは何か? PC/AT互換機のハードウェア構成例

7

Page 8: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

入出力とは何か? •  コンピュータの三大コンポーネント

o  計算する

o  記憶する

o  入出力(I/O)する

•  I/Oはコンピュータにとって

必須ではない

o  I/Oなしでも計算はできる

8

入出力装置  (I/O  Devices)  

中央処理演算装置  (CPU)  

主記憶装置  (Main  Memory)  

Page 9: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

入出力とは何か? •  電卓で言えば

o  液晶画面(Output)

o  テンキー(Input)

9

Page 10: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

(参考) Linux KVMの仮想マシンのハードウェア構成

10 Serial  Port  

Parallel  Port  

PIIX3  PCI  IDE  

PIIX3  PCI  USB  

PCI  Slot  

PCI  Slot  

LSI  Logic  LSI53c895a  

System  Memory  

Bochs  Flash  BIOS  

Real  Time  Clock  

Cirrus  Logic  CL-­‐GD5446  

Realtek  RTL8029  

Ensoniq  ES1370  

ISA  Bus   ISA  

I/O  Interface  Floppy  

PC  Speaker  

PCI  Bus  

Intel  82371  PIIX3  (South-­‐bridge)  

CPU  

VGA  

Ethernet  

Speaker  

SCSI  HDD  

IDE  HDD  

CD-­‐ROM  

USB  

Keyboard  

Mouse  PS/2  

出典:  KVM徹底入門 (2010年 翔泳社)  

Intel  82441FX  (North-­‐bridge)  

Page 11: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

I/O (入出力)の基本 I/Oポートと割り込み ソフトウェアからみたキーボードI/O

11

Page 12: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

IA-32で使われる入出力 •  I/Oポート

•  割り込み (Interrupt)

•  Direct Memory Access (DMA)

•  メモリマップドI/O

12

Page 13: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

I/Oポート •  コンピュータで利用される古典的な入出力

•  プロセッサから外部に接続するためのデジタルインターフェイス •  1アドレス 8ビット×64K、ON(1) もしくは OFF(0) を通信する •  アクセス単位が基本8ビットなので非常に低速 •  使途

•  キーボードの押下状況確認、ディスクコントローラの状態設定、通知など

13

Page 14: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

割り込み (interrupt) •  デバイスからCPUへイベントを通知するための信号

o  IRQ(Interrupt ReQuest) = 割り込み入力用の16本の信号線

•  割り込みハンドラ

o  割り込みが発生すると、CPUは割り込みハンドラに制御を移す

o  今時に言えば…… 何か起きたときの Listener を定義できる

•  使途

o  タイマーの通知

o  キーボードの状態変化通知

o  データ転送完了通知(DMA, MMIO)など

14

Page 15: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

コンピュータ

(例) ソフトウェアからみたキーボードI/O - 1

キーボードコントローラ •  8bit幅のI/Oポート2つで接続 流れ •  キーボードの状態が変わると割り込みが発生する

•  割り込みが発生すると、BIOSもしくはOS内の割り込みハンドラが呼び出される

割り込むハンドラでの処理 •  キーボードの状態確認 ステータスレジスタ(0x64)

•  押されているキー情報の読み取り 入力レジスタ(0x60)

15

CPU

I/Oポート 0x60

I/Oポート 0x64

キーボード

入力レジスタ

出力レジスタ

コマンド レジスタ

ステータス レジスタ

割り込み

Page 16: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

(例) ソフトウェアからみたキーボードI/O - 2

;------------------------------------------------- ;- INT09h : Keyboard Hardware Service Entry Point - ;------------------------------------------------- .org 0xe987 int09_handler: cli push ax mov al, #0xAD ;;disable keyboard out #0x64, al mov al, #0x0B out #0x20, al in al, #0x20 and al, #0x02 jz int09_finish in al, #0x60 ;;read key from keyboard controller sti push ds pusha ;; check for extended key cmp al, #0xe0 jne int09_check_pause xor ax, ax mov ds, ax mov al, BYTE [0x496] ;; mf2_state |= 0x02 or al, #0x02 mov BYTE [0x496], al jmp int09_done

int09_check_pause: ;; check for pause key cmp al, #0xe1 jne int09_process_key xor ax, ax mov ds, ax mov al, BYTE [0x496] ;; mf2_state |= 0x01 or al, #0x01 mov BYTE [0x496], al jmp int09_done int09_process_key: mov bx, #0xf000 mov ds, bx call _int09_function int09_done: popa pop ds cli call eoi_master_pic int09_finish: mov al, #0xAE ;;enable keyboard out #0x64, al pop ax iret

16

Page 17: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

I/O がどう使われるか とある県立高等学校イベントでの実装例

17

Page 18: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

どう使うか •  コンピュータに入出力装置がついている事はわかった。

•  しかし、それをどう使うのか???

18

 今度、部活紹介でバトン部がパフォーマンスをします。  放送委員会で照明のお手伝いをしたいと思います

(。・ω・。) 担当教諭

 パソコンでスポットライトをチカチカ点けようか(笑) (`・ω・´ ) 副委員長

 いいね(笑) (人´ω`) 委員長

Page 19: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

どう使うか(2) … 数日後 •  コンピュータに入出力装置がついている事はわかった。

•  しかし、それをどう使うのか???

19

 副委員長、スポットライト制御用の基盤ができたよ♡ (人´ω`) 委員長

 え??・あれマジなの? (;゚д゚;) 副委員長

Page 20: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

倉庫で見つけたパソコン (PC-9801VM2)

体育館内設備

スポットライト制御(I/O基盤の構成イメージ)

20

セントロニクス仕様(IEEE1284)

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

電球

リレー

リレー

Page 21: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

コントロール

21

out 0x40, 0xB2 (1011 0010)

電球

電球

電球

電球

電球

電球

電球

電球

out 0x40, 0xA5 (1010 0101)

電球

電球

電球

電球

電球

電球

電球

電球

out 0x40, 0xFF (1111 11111)

電球

電球

電球

電球

電球

電球

電球

電球

out 0x40, 0x00 (0000 0000)

電球

電球

電球

電球

電球

電球

電球

電球

Page 22: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

ハードウェア

コンピュータ

スポットライト制御システムのデザイン

22

マルチメディア タイマ

セントロニクス仕様 インターフェイス

キーボード

スポットライト制御ドライバ (アセンブラでDOS用TSRとして開発)

スポットライト制御システム本体 (イントロ、Aメロ、Bメロ等ごとの点灯パターンデータを持つ)

タイマ割込

ライト 制御信号

ユーザ操作

相対 時間

ライト パターン

Page 23: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

その他の I/O メモリマップドI/O Direct Memory Access (DMA) IRQの共有とMSI

23

Page 24: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

メモリマップドI/O (MMIO)

•  プロセッサの物理メモリ空間に、デバイス上のメモリ空間をマッピングする

•  ソフトウェアからデバイス上のメモリ空間に直接アクセスできる •  使途

o  ビデオカード、サウンドカード、ディスクコントローラ、イーサネットコントローラなどでの大量転送

24

Page 25: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

ダイレクトメモリアクセス (DMA)

•  プロセッサの指示に従ってDMAコントローラがデータ転送する

•  データ転送の開始時/終了時のみプロセッサが干渉するため、

プロセッサ時間を節約できる

•  使途

o  ビデオカード、サウンドカード、ディスクコントローラ、イーサネットコントローラなどでの大量転送

25

Page 26: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

IRQとMSI •  IRQの数には制限がある

•  キーボード、マウス、タイマ、・・・・

•  コンピュータに接続されるデバイスは増え続けている

•  割り込み信号線が足りない!

•  IRQの共有

26

Page 27: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

IRQの共有 •  割り込み信号線を複数のデバイスで共有する

o  15本しかないIRQ

o  例:キーボードとマウスで同じIRQを使う

•  割り込み信号線を共有した場合の問題点

o  割り込みの発生元がわからない

o  “割り込みが発生した!キーボードが押された?マウスが動いた?”

•  解決策

o  割り込み発生を発生された時に1になるフラグをハードウェアに準備する

o  割り込みが発生したら、各ドライバのステータスをチェックし、必要なハンドラのみが実行される

27

Page 28: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

Bus (バス)によるI/O

28

Page 29: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

バス(Bus)とは何か •  コンピュータ内部で各回路がデータをやり取りするための伝送路

バスの種類

•  内部バス …. CPU内部の回路間を接続

•  周辺回路 …. CPU(間)のインターコネクト

•  拡張バス …. デバイスと接続するためのインターコネクト

29

Page 30: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

PCIバス •  Peripheral Component Interconnect

•  コンピュータに各種ハードウェアデバイスを接続するための

標準仕様

o  32bit パラレル通信, 33MB/sec, 帯域幅133MB/s

•  プラグアンドプレイ(Plug and Pray)

o  接続されたデバイスの種類や必要リソース情報を提供し、OSが自動的にリソースアサインできるようにする

o  I/Oポート、IRQ、メモリマッピングなど

o  活線挿抜ができるわけではない

30

    Play

Page 31: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

PCI-Xバス •  PCIの周波数を33MHzから133MHz、帯域幅1.06GB/sに引き上げ

•  PCI-X 2.0では533MHz, 4.24GB/s

•  PCIバスの上位互換、PCIバスにPCI-Xデバイスの接続も可能

•  今でも古いサーバで見かけるかもしれない

31

Page 32: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

PCI Express バス •  複数のレーンを束ねて使う

•  1レーンあたり 250MB/s

•  4レーン 1,000Mbps = 1GB/s, 16レーンで 4GB/s

•  活線挿抜に対応 (ハードウェア、ソフトウェアの対応も必要)

•  ソフトウェアレベルで PCI の上位互換

•  1.25GHzの周波数でデータをシリアル伝送 (1クロックあたり2ビット伝送)

32

Page 33: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

PCI Express バス

PCI Express 2.0

•  クロックが2倍 (1.25MHz→2.5GHz)、レーンあたりの転送速度も250MB/sから500MB/sに

•  16レーンで8GB/sの帯域をサポート

•  Message Signal Interrupt のサポートが必須に

PCI Express 3.0

•  規格策定中

33

Page 34: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

MSI •  Message Signal Interrupt

o  メモリ書き込みにより割り込みを通知する (0x0FEExxxx)

o  PCIデバイスで利用される

o  IRQを使わない

o  32 メッセージまで共存可能

•  Enhanced MSI (MSI-X)

o  PCI Express バス向けの MSI

o  PCI Express 2.0 では実装が必須に

o  2048 メッセージまで共存可能

34

Page 35: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

CPU間のインターコネクト … QPIとHyperTransport NUMA(非対称メモリアクセス) vs UMA(対称型マルチプロセッサ)

35

Uniform Memory Access (UMA) Non-Uniform Memory Access (NUMA)

近いデバイスへ速くアクセスできるが、遠くのデバイスにはアクセスに時間がかかる

どのCPUから見ても同じ時間でアクセスできるが、全CPUでバスを共有する

Page 36: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

CPU間のインターコネクト … QPIとHyperTransport

36

Quick Path Interconnect (Intel) Hyper Transport (AMD)

Page 37: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

まとめ

37

Page 38: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

まとめ •  I/Oとは

o  コンピュータに対するデータ入力/出力の機能

•  代表的なI/O方法

o  I/Oポート、割り込み

o  メモリマップドI/O、DMA

•  バス

o  拡張バス

•  PCI, PCI-X, PCI Express o  最近の内部バス

•  現代のコンピュータはほとんどNUMA <-> UMA •  Quick Path Interconnect, Hyper Transport

38

Page 39: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

お疲れ様でした。

ガッテン! #qpstudy

39

Page 40: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

Backup I/Oを勉強するには

40

Page 41: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

I/Oを勉強するには マイコンをいじると判りやすい…?

超初心者 •  Arduino … デザイナーによるプロトタイピングを想定した簡単マイコン

初心者 •  PICマイコン (ex: 18F2550) 数百円で買える、とりあえず発振子つければ動くマイコンチップ

•  AVRマイコン … PICよりこちらをお勧めするひと多数。

ArduinoもAVRベース

•  Intel 8051 … 性能が割と高めだが日本語での情報はあまりなさそう

41

Page 42: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

Arduino 入門キット

42

Page 43: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

Arduino (Books)

43

Page 44: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

PIC •  a

44

Page 45: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

もっとガチな人には BeagleBoard なんていかが

45

Page 46: 20120519_qpstudy 2012.05 いやらしい@hasegawのI/O入門

お疲れ様でした。

ガッテン! #qpstudy

46