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 에 따라 모든 디바이스가 싱크되어 있고

  1. Master → 버스의 ownership을 요청 (REQ)
  2. Arbiter → 승인 (GNT)
  3. Master → 주소와 명령 전송
  4. Slave → 해당 주소가 자기 것인지 확인 후 claim
  5. Read면 Slave가 데이터를 전송, Write면 Master가 데이터 전송
  6. 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