入出力アーキテクチャとは?DMA・チャネル制御・USBなどのインターフェースを理解しよう
はじめに
コンピュータにはCPUやメモリだけでなく、
- キーボード
- マウス
- SSD
- ディスプレイ
- プリンタ
- ネットワーク機器
など、さまざまな装置が接続されています。
これらの装置とコンピュータの間では、常にデータのやり取りが行われています。
入力装置
↓
コンピュータ
↓
出力装置
しかし、CPUがすべてのデータ転送を直接担当すると、本来の計算処理に使える時間が減ってしまいます。
そこで、
CPUになるべく負担をかけず、効率よく入出力する
ためのさまざまな仕組みが利用されています。
この記事では、
入出力アーキテクチャ
│
├─ 入出力制御
│ ├─ プログラム制御方式
│ ├─ DMA制御方式
│ └─ チャネル制御方式
│
└─ インターフェース
├─ USB
├─ PCI Express
├─ SATA
├─ HDMI
└─ 無線通信規格
という流れで学んでいきましょう。
1. 入出力制御とは
**入出力制御(I/O Control)**とは、
CPU・主記憶と入出力装置の間でデータをやり取りするための制御
です。
例えばSSDからデータを読み込む場合、
SSD
↓
データ転送
↓
主記憶
↓
CPUが利用
という処理が必要です。
問題になるのが、CPUと入出力装置の速度差です。
一般にCPUは非常に高速ですが、入出力装置はCPUと比べると低速です。
そのため、CPUが入出力装置の処理をずっと待っていると、
CPU:データお願いします
SSD:処理中です……
CPU:待ち……
SSD:できました
CPU:やっと次の処理へ
となり、CPUの能力を十分に活用できません。
そこで、入出力を効率化する方式が考えられています。
2. 入出力制御の代表的な方式
代表的な入出力制御方式として、
- プログラム制御方式
- DMA制御方式
- チャネル制御方式
があります。
大きな違いは、
データ転送を誰が担当するのか
です。
プログラム制御
→ CPUが担当
DMA制御
→ DMAコントローラが担当
チャネル制御
→ チャネルが担当
この違いを軸にすると理解しやすくなります。
3. プログラム制御方式
**プログラム制御方式(Programmed I/O)**とは、
CPUがプログラムによって入出力装置を直接制御し、データ転送を行う方式
です。
例えば、
CPU
↓
入出力装置の状態を確認
↓
データを読み出す
↓
主記憶へ書き込む
といった処理をCPU自身が行います。
4. プログラム制御方式の特徴
仕組みが比較的単純なのがメリットです。
しかし、
CPU
↓
I/O装置を確認
↓
まだ?
↓
確認
↓
まだ?
↓
確認
↓
完了!
のようにCPUが入出力処理へ大きく関与すると、その間ほかの処理へ使える時間が減ります。
そのため、大量のデータ転送には効率がよくありません。
5. DMA制御方式
CPUの負担を減らすために利用されるのが、
DMA(Direct Memory Access)制御方式
です。
DMAとは、
CPUを介さず、入出力装置と主記憶の間で直接データを転送する方式
です。
実際のデータ転送は、
DMAコントローラ
が制御します。
6. DMAの仕組み
例えばSSDから主記憶へデータを転送するとします。
最初にCPUがDMAコントローラへ、
CPU
↓
「このデータをここへ転送して」
↓
DMAコントローラ
と指示します。
その後のデータ転送は、
入出力装置
↓
DMAコントローラ
↓
主記憶
という形で行われます。
CPUが一つひとつのデータ転送を行う必要はありません。
7. DMA転送中のCPU
DMAコントローラがデータを転送している間、CPUは別の処理を進められます。
CPU
│
├── DMAへ転送を指示
│
└── 別の処理を実行
│
DMA │
│ │
└── データ転送
↓
転送完了
↓
割り込み
↓
CPU
データ転送が完了すると、DMAコントローラなどからCPUへ割り込みを通知できます。
前の記事で学んだ割り込み制御がここでつながってきます。
8. DMAのメリット
DMAを利用すると、
大量のデータ転送をCPUが直接担当しなくてよい
ため、CPUの負荷を軽減できます。
特に、
- ストレージ
- ネットワーク
- 音声
- 映像
など、大量のデータを扱う入出力で有効です。
🍯 DMAは「CPUが配送する」のではなく、「配送担当者に任せてCPUは別の仕事をする」と考えると分かりやすいです。
9. チャネル制御方式
さらに入出力処理を独立させる考え方として、
チャネル制御方式(Channel I/O)
があります。
チャネルとは、
入出力処理を専門に実行するための装置・機構
です。
CPUから見ると、
CPU
↓
チャネルへ入出力処理を依頼
↓
CPUは別の処理
チャネル
↓
入出力処理を実行
↓
完了
↓
CPUへ通知
となります。
10. チャネルプログラム
チャネル制御方式では、チャネルが単純にデータを転送するだけでなく、
チャネルプログラム
と呼ばれる入出力用の命令列に従って処理を行うことがあります。
つまり、
CPU
→ 入出力処理そのものを実行
ではなく
CPU
→ チャネルに処理を依頼
→ チャネルが入出力用の処理を実行
という役割分担になります。
大型コンピュータなどで利用されてきた方式です。
11. DMAとチャネル制御の違い
DMAとチャネル制御は、
CPUから入出力処理を切り離す
という点では似ています。
ただし、役割には違いがあります。
DMA
主な役割は、
主記憶と入出力装置のデータ転送
です。
チャネル
データ転送だけでなく、
入出力処理を専用の命令に従って制御
できます。
イメージすると、
DMA
→ データ転送の専門家
チャネル
→ 入出力処理全体の専門家
です。
12. 入出力制御方式を比較しよう
| 方式 | 主な担当 | CPU負荷 | 特徴 |
|---|---|---|---|
| プログラム制御 | CPU | 大きい | CPUが直接制御 |
| DMA制御 | DMAコントローラ | 小さい | 主記憶とI/O間を直接転送 |
| チャネル制御 | チャネル | 小さい | 入出力処理を専門に実行 |
CPUの負担という観点で見ると、
CPUが全部やる
↓
プログラム制御
転送を任せる
↓
DMA
入出力処理をより独立させる
↓
チャネル制御
と整理できます。
13. インターフェースとは
コンピュータと周辺機器を接続するには、
どのような信号を使うのか
どのようなコネクタを使うのか
どのような手順で通信するのか
などを決める必要があります。
そのために使われるのがインターフェース規格です。
身近な代表例が、
USB
です。
14. USB
**USB(Universal Serial Bus)**とは、
コンピュータと周辺機器を接続するための代表的なシリアルインターフェース規格
です。
例えば、
- キーボード
- マウス
- USBメモリ
- 外付けSSD
- スマートフォン
- Webカメラ
など、非常に多くの機器で利用されています。
15. USBの特徴
USBには、
- シリアル通信
- ホットプラグ
- プラグアンドプレイ
- データ転送
- 電力供給
などの特徴があります。
ホットプラグ
**ホットプラグ(Hot Plug)**とは、
コンピュータの電源を入れたまま機器を接続・取り外しできる機能
です。
普段USBメモリなどをPCの電源を切らずに接続できるのは、この仕組みに対応しているためです。
プラグアンドプレイ
**プラグアンドプレイ(Plug and Play:PnP)**とは、
機器を接続すると、OSなどが機器を認識して利用できるよう設定する仕組み
です。
16. USBの規格
USBには複数の世代があります。
代表的なものを大まかに整理すると、
| 規格 | 最大転送速度 |
|---|---|
| USB 2.0 | 480Mbit/s |
| USB 3.2 Gen 1 | 5Gbit/s |
| USB 3.2 Gen 2 | 10Gbit/s |
| USB 3.2 Gen 2x2 | 20Gbit/s |
| USB4 | 20Gbit/s以上のモードを持つ |
USBでは世代によって最大転送速度などが異なります。
なお、規格上の最大転送速度と実際のファイル転送速度は同じとは限りません。
通信の制御情報や接続機器の性能などによって、実効速度は変化します。
17. USBの規格とコネクタ形状は別物
ここは混同しやすいポイントです。
例えば、
USB Type-C
は主にコネクタの形状を表します。
一方、
- USB 2.0
- USB 3.2
- USB4
などは通信規格・世代に関係します。
つまり、
USB Type-C
= コネクタ形状
USB 3.2・USB4など
= 通信規格
です。
Type-Cだから必ず特定の転送速度になる、というわけではありません。
🍯 「Type-C=差し込み口の形」「USB 3.2など=通信のルール・性能」と分けて覚えましょう。
18. シリアルインターフェース
USBはシリアルインターフェースの一種です。
シリアル転送では、データを基本的にビット列として順番に送ります。
1 → 0 → 1 → 1 → 0 → 1 …
一方、複数ビットを複数の信号線で同時に送る考え方を、
パラレル転送
といいます。
高速なシリアル通信技術が発達したことで、現在のコンピュータではさまざまな場所で高速シリアルインターフェースが使われています。
19. PCI Express
**PCI Express(PCIe)**は、
コンピュータ内部の機器を接続するための高速なシリアルインターフェース規格
です。
例えば、
- GPU
- NVMe SSD
- ネットワークカード
- 拡張カード
などで利用されています。
CPU・チップセット
↓
PCIe
↓
GPU / SSD / NIC
PCIeでは、通信経路を**レーン(Lane)**と呼び、
- x1
- x4
- x8
- x16
などの構成があります。
複数のレーンを束ねることで、より大きな帯域幅を確保できます。
20. SATA
**SATA(Serial ATA)**は、
ストレージ装置を接続するために広く利用されてきたシリアルインターフェース規格
です。
例えば、
- HDD
- SATA SSD
- 光学ドライブ
などで利用されます。
マザーボード
↓
SATA
↓
SSD / HDD
同じSSDでも、
SATA SSD
→ SATAを利用
NVMe SSD
→ PCIeを利用するものが一般的
という違いがあります。
21. HDMI
**HDMI(High-Definition Multimedia Interface)**は、
映像と音声などをデジタル伝送するためのインターフェース規格
です。
例えば、
PC
↓ HDMI
ディスプレイ
や、
ゲーム機
↓ HDMI
テレビ
などで利用されます。
1本のケーブルで映像と音声を伝送できるのが特徴です。
22. 無線のインターフェース・通信規格
物理的なケーブルを利用しない通信もあります。
代表例として、
- Wi-Fi
- Bluetooth
- NFC
などがあります。
Wi-Fi
無線LANで利用される通信技術です。
比較的広い範囲で高速なネットワーク通信を行います。
Bluetooth
近距離の機器同士を無線接続する技術です。
例えば、
- マウス
- キーボード
- イヤホン
などで利用されています。
NFC
**NFC(Near Field Communication)**は、非常に近い距離で通信する近距離無線通信技術です。
ICカードやスマートフォンなどで利用されています。
23. インターフェース規格を用途で整理しよう
代表的な規格を用途で整理すると、
| 規格 | 主な用途 |
|---|---|
| USB | 汎用的な周辺機器 |
| PCI Express | PC内部の高速機器 |
| SATA | HDD・SSDなどのストレージ |
| HDMI | 映像・音声 |
| Wi-Fi | 無線LAN |
| Bluetooth | 近距離の周辺機器 |
| NFC | ごく近距離の無線通信 |
すべてをバラバラに暗記するより、
何と何を接続する規格なのか
を意識すると覚えやすくなります。
24. 入出力アーキテクチャの全体像
ここまでの内容をまとめてみましょう。
入出力アーキテクチャ
│
├─ 入出力制御
│ │
│ ├─ プログラム制御
│ │ └─ CPUが直接制御
│ │
│ ├─ DMA制御
│ │ └─ DMAコントローラへ転送を任せる
│ │
│ └─ チャネル制御
│ └─ チャネルへ入出力処理を任せる
│
└─ インターフェース
│
├─ USB
│ └─ 汎用周辺機器
│
├─ PCI Express
│ └─ GPU・NVMe SSDなど
│
├─ SATA
│ └─ HDD・SSDなど
│
├─ HDMI
│ └─ 映像・音声
│
└─ 無線
├─ Wi-Fi
├─ Bluetooth
└─ NFC
前回までの記事も含めると、
CPU
↓
キャッシュ
↓
主記憶
↕
DMAなど
↕
入出力装置
というコンピュータ内部の大きな流れが見えてきます。
まとめ
この記事で覚えること
- 入出力制御はCPU・主記憶と入出力装置のデータ交換を制御する
- プログラム制御方式ではCPUが入出力を直接制御する
- DMA制御方式ではCPUを介さず、主記憶と入出力装置の間でデータを転送する
- DMAによってCPUはデータ転送中に別の処理を実行できる
- チャネル制御方式では専用のチャネルが入出力処理を担当する
- DMAは主にデータ転送、チャネルはより独立した入出力処理を担当できる
- USBは代表的なシリアルインターフェース規格
- USBはホットプラグやプラグアンドプレイに対応する
- USB Type-Cという名称は主にコネクタ形状を表す
- PCI ExpressはGPUやNVMe SSDなどの高速な内部接続に利用される
- SATAはHDDやSATA SSDなどの接続に利用される
- HDMIは映像・音声のデジタル伝送に利用される
- Wi-Fi、Bluetooth、NFCなどの無線通信規格もある
- インターフェース規格は「何を接続するための規格か」で整理すると覚えやすい
🍯 はちみつメモ
入出力制御は「CPUの仕事をどこまで他の装置に任せるか」で考えよう。プログラム制御はCPU自身、DMAはデータ転送をDMAコントローラへ、チャネル制御は入出力処理をチャネルへ任せる。インターフェースは「USB=汎用」「PCIe=内部高速」「SATA=ストレージ」「HDMI=映像・音声」のように用途とセットで覚えると整理しやすい!