PE Notes · CA/OS
DMA
CPU를 거치지 않고 장치와 메모리 사이를 옮기는 DMA를 버스트·사이클 스틸링·투명 모드와 전송 절차, 프로그램 I/O·RDMA와 비교합니다.
큰 덩어리를 CPU가 바이트마다 옮기면 계산할 시간이 없습니다. 는 가 메모리와 I/O를 직접 잇고, CPU는 시작 주소·길이·끝 신호만 봅니다. 전송 동안 프로세서는 다른 일을 합니다. 디스크, 망, GPU 복사처럼 블록이 클수록 이 손이 기본입니다.
누가 버스를 쥐는가
프로그램 I/O는 CPU가 매 워드를 읽고 씁니다. 폴링이거나 바이트마다 끼어듭니다. DMA는 완료 때 한 번 알립니다. 채널 I/O는 전용 프로세서가 프로그램을 돌려, 대형 메인프레임 칸입니다. 실시간 오디오·패킷은 그 완료 지연이 창구가 됩니다.
| 비교축 | 프로그램 I/O | DMA | 채널 I/O |
|---|---|---|---|
| 주체 | CPU | DMAC | I/O 채널 프로세서 |
| CPU 손 | 매 바이트 | 시작과 끝 | 거의 없음 |
| 자리 | 소량 레지스터 | 블록 전송 | 대형 호스트 |
버스를 나누는 모드가 셋입니다. 는 끝날 때까지 버스를 독점합니다. 폭은 크고, 그동안 CPU는 메모리에 못 갑니다. 은 한 사이클씩 빌려 CPU와 번갈아 탑니다. 투명(은닉) 모드는 CPU가 버스를 비운 틈만 씁니다. 간섭은 가장 작고, 구현은 가장 까다롭습니다.
| 모드 | 버스 | 대가 |
|---|---|---|
| 버스트 | 전송 중 독점 | 최고 속도, CPU 정지 |
| 사이클 스틸링 | 한 사이클씩 | 느림, CPU와 공존 |
| 투명 | CPU 유휴 때만 | 간섭 최소, 복잡도 |
절차와 지금 자리
순서는 여섯 칸입니다. CPU가 소스·목적지·바이트 수를 DMAC에 적습니다. 컨트롤러가 버스를 요청하고, CPU가 승인한 뒤 버스를 뗍니다. 장치와 메모리 사이 복사가 흐르고, 끝나면 인터럽트가 올라갑니다. CPU는 상태만 확인합니다. 인터리빙이 그 복사 폭을 받치고, 스토리지 유형이 어떤 장치가 큰 블록을 밀어 넣는지를 가릅니다.
지금 자리는 넓습니다. GPU 메모리 복사가 같은 직접 이동이고, NVMe는 큐에 올린 명령을 장치가 호스트 메모리로 직접 채웁니다. 는 그 손을 원격 노드 주소까지 연장합니다. 는 장치가 허가된 페이지만 건드르게 해, 잘못된 매핑과 악성 장치 DMA를 막습니다. 직접 접근은 속도이고, 주소 번역은 경계입니다.
답안은 정의, 세 모드, 프로그램 I/O 대비, 절차 여섯 칸, RDMA·IOMMU를 한 장에 닫습니다.