How CPUs Communicate with I/O Devices
옛날에는 높은 bandwidth (GB/sec)의 Memory Bus와 I/O Bus (100MB/s)를 분리
요즘은 I/O, memory 둘 다 high-bandwidth interconnect 사용
I/O Mechanisms
1. I/O port registers
- I/O 목적으로 만들어진 register를 사용.
- microcontroller에서 많이 사용
- 장점: simple, low-latency, specialized
- 단점: I/O signal 개수가 한정적
2. Memory-Mapped I/O (mmap I/O)
- “Load/Store instruction”으로 I/O
- unused memory register → “mapped” to registers of external devices
- A write (SW addr, value) to a mmap address (like 0xffff0000) means:
- A read (LW reg, addr) from a mmap address means:

- idempotency (멱등성) 문제.
- mmap I/O address는 절대로 cache해서는 안 된다.
- 단점: word 단위로 읽게 되면 느리다.
3. Direct Memory Access (DMA)
- 말 그대로 I/O device들이 메모리에 직접 access하는 것
- mmap write를 통해 I/O device에게 직접 명령을 내리고, write가 끝나면 interrupt
- DMA engine command: “어떤 source block에서 destination block으로 데이터를 복사해라”
- 문제점: Cache coherence 문제 발생
DMA, mmap I/O 비교
|
항목
|
DMA (Direct Memory Access)
|
mmap I/O (Memory-Mapped I/O)
|
|
개념
|
장치가 메모리에 직접 접근 (CPU 거치지 않음)
|
장치를 메모리처럼 접근 (LD/ST로 I/O)
|
|
데이터 전송 방식
|
CPU가 명령만 주고, 실제 데이터 전송은 장치가 수행
|
CPU가 직접 load/store 명령으로 데이터를 주고받음
|
|
CPU 개입
|
최소: 명령 설정만 하고 다른 일 가능
|
계속 CPU가 명령을 실행해야 함
|
|
장점
|
- CPU 효율 높음- 대용량 전송에 유리- 백그라운드 실행 가능
|
- 간단함- 설정 오버헤드 없음- 빠른 응답 필요할 때 적합
|
|
단점
|
- 설정 과정 복잡- 캐시 일관성 문제 발생 가능- VA 사용 어려움
|
- CPU 연산 낭비- 성능 낮음- 반복 시 side-effect 주의
|
|
캐시와의 관계
|
write-back 캐시일 경우, DMA 전에 cache flush 필요 (SW or HW로 해결)
|
mmap 주소는 cache 금지 (side-effect 위험 때문)
|
|
가상 메모리 대응
|
- VA 지원 어려움- OS가 pinned pages or linked list 만들어서 해결
|
mmap 주소는 VA에 직접 매핑, TLB는 보통 사용 안 함
|
|
적합한 용도
|
SSD, NIC, GPU 등 대용량 데이터 전송
|
키보드, GPIO 등 단순 레지스터 제어 장치
|
DMA: virtual memory problem
DMA에서 VA 사용
- command만으로 쉽게 큰 용량도 복사할 수 있다.
- 그러나 VA를 PA로 번역하는 과정이 복잡하다
DMA에서 PA 사용
- translation은 필요 없다
- DMA command를 바로 쓸 수 없다.
- buffer가 PA에서 contiguous(연결되어 있고), Page boundary를 넘어가지 않는지 확인해야 한다.
Software solution: pinned page로 고정
- DMA에서 사용할 address에 대해서는 미리 특수한 page를 할당한다.
- 따라서 VA page이긴 하지만 이에 대응하는 PA page가 항상 고정되어 있다는 특징이 있다. (Pinned contiguous pages → translation becomes trivial)
- 주소 변환 없이 DMA 장치가 직접 접근이 가능해진다.
Hardware solution: (이해못해도 생략)
- Smart DMA+linked list: OS가 연속되지 않은 물리 메모리 블록들을 linked list 형태로 만들어서 page-level transfers들을 따라서 gather (read) / scatter (write) 한다.
- Virtually-addressed I/O bus: VA를 I/O TLB를 이용해 PA로 미리 바꿔둔다.
Device Interaction Models (when to serve I/O devices?)
Polling I/O: CPU가 I/O 상태를 직접 계속 확인
- READY 레지스터: 새로운 값이 있으면 true
- DATA 레지스터: 새로운 값을 반환, ready를 리셋
- I/O가 infrequent한 경우 비효율적
Interrupt-Driven I/O: CPU가 I/O 상태를 직접 계속 확인
- 위의 _checkkbd를 interrupt handler가 부르는 것
- infrequent event, long-latency (오래 걸리는)에 좋음
그래서 어떤 걸 쓰냐
- Latency (지연 시간) = {고정 오버헤드} + {데이터 크기 / 전송 속도}
- Effective I/O Bandwidth = 전송 크기 / 전체 지연 시간
를 고려해서 결정
- Interrupt I/O: 드물지만 즉시 반응해야 하는 이벤트에 적합 (ex. 키보드 입력)
- Polling I/O: 자주 반복되는 고속 데이터 처리에는 적합할 수 있음 (ex. 네트워크 패킷 처리)
Bus Architecture and Protocols
Bus = 여러 장치들이 공유하는 데이터 경로 (broadcast medium)
- 비용↓, 간단함↑
- 하지만 동시 접근 불가 → bandwidth를 순차적으로 쉐어한다.
Device types
- Master: transaction을 보내는 장치 (예: CPU)
- Slave: transaction에 응답하는 장치 (예: DRAM, I/O)
** 하나의 device가 master, slave 둘다일수도 있다.
- Arbiter: 버스를 사용할 수 있는 순서를 정함
Bus transaction 순서
CLK 에 따라 모든 디바이스가 싱크되어 있고
- Master → 버스의 ownership을 요청 (REQ)
- Arbiter → 승인 (GNT)
- Master → 주소와 명령 전송
- Slave → 해당 주소가 자기 것인지 확인 후 claim
- Read면 Slave가 데이터를 전송, Write면 Master가 데이터 전송
- transaction 종료
이 때 “Broadcast” signal은 모든 device가 공유한다.
- R/W: 읽기인지 쓰기인지 구분
- AD (address/data) bus: 주소와 데이터를 공유 버스로 전송
separate address bus and data bus? → 성능 ↑ 하지만 비용과 복잡도 ↑
Asynchronous Bus Protocols
- clk 없이 각 단계가 준비될 때마다 **핸드셰이킹(handshake)**으로 진행
- 장치마다 access latencies 달라도 무방
- ex. REQ/GNT is an asynchronous handshake
핸드셰이킹 방식: MRDY & SRDY
|
신호
|
의미
|
|
MRDY (Master Ready)
|
마스터가 데이터를 준비했음을 알림
|
|
SRDY (Slave Ready)
|
슬레이브가 데이터를 받을 준비가 됐음을 알림
|
- AD value가 유효할 때만 MRDY, SRDY를 1로 만든다.
- Bus cycle은 MRDY && SRDY == 1일 때만 유효하며, 데이터 전송이 유효해지는 것.
장점:
- transaction당 오버헤드(REQ/GNT 등)를 여러 데이터에 분산시킴
- Bandwidth 활용도 향상, 캐시 라인처럼 fixed size block 전송에 적합
Bus Performance
1. Latency
Arbitration Latency (=중재, 여기서는 버스 권한 요청을 의미)
- Bus contention (bus 사용 경쟁),
- Arbiter의 arbitration policy에 따라 달라짐
Transaction latency
- slave reaction time
2. Bandwidth
Peak bandwidth = N x f (N-byte AD bus operating at frequency f)
- Request/Grant 단계
- Address/Claim 단계
- Termination 단계
data bandwidth와 상관없는 overhead cycle이 많아질수록 bandwidth가 떨어짐
오버헤드를 burst로 전송해서 효율 향상
Fixed-sized burst on synchronous, Variable-sized burst on asynchronous protocols
Widely Used Buses
참고: 요즘 “버스”는 대부분 Point-to-Point 인터커넥트
- Examples: PCIe, USB, Firewire, Thunderbolt (slide 28)
- Parallel buses: SCSI, ATA (slide 29)
- Serial buses: SATA, SAS (slide 30)
'cs > csed311' 카테고리의 다른 글
| Synchronization & Consistency (0) | 2025.07.07 |
|---|---|
| Virtual memory (0) | 2025.07.07 |
| 13. Memory Hierarchy (0) | 2025.07.07 |
| 12. Advanced CPU (0) | 2025.04.14 |
| 11. Exceptions and Interrupt (0) | 2025.04.14 |