콘텐츠로 바로가기

Direct Memory Access (DMA) Mechanics

CPU의 개입 없이 주변 장치와 메모리 간에 대량의 데이터를 물리적으로 전송하여 시스템 처리 효율을 극대화하는 DMA 컨트롤러의 작동 원리를 다루는 학습 노드입니다.

sys.entry
M

Me

hyunyoun's Blog

posts7 min read

1. Overview

직접 메모리 접근(Direct Memory Access, DMA)은 CPU를 단순 반복 노동(데이터 복사)에서 해방시켜 고차원적인 연산에만 집중하게 만드는 하드웨어 기반의 '데이터 물류 자동화' 기술입니다.

수메가바이트의 영상 데이터를 네트워크에서 램으로 옮길 때, CPU가 한 바이트씩 옮기는 것은 극심한 낭비입니다. 학습자는 CPU로부터 버스 제어권(Bus Mastery)을 넘겨받아 독립적으로 데이터를 나르는 **DMA 컨트롤러(DMAC)**의 물리적 구조를 배웁니다. 또한, CPU와 DMA가 버스를 공유하며 발생하는 사이클 스틸링(Cycle Stealing) 현상과 데이터 일관성을 지키기 위한 캐시 제어 물리 사상을 익힙니다. 이를 통해 현대 시스템이 어떻게 고속의 입출력을 수행하면서도 낮은 CPU 점유율을 유지하는지 심층적으로 이해합니다.

2. Scope & Boundaries

In-Scope

  • DMA Controller Physics: 소스/데스티네이션 주소 레지스터, 카운트 제어 로직
  • Transfer Modes: Single, Burst, Block 전송 물리 및 하드웨어 트리거
  • Bus Arbitration: CPU와 DMA 간의 버스 사용권 경합 및 중재(Arbitration) 방식
  • Scatter-Gather: 흩어진 메모리 조각들을 한 번의 설정으로 전송하는 고급 물리 기술

Out-of-Scope

  • 소프트웨어적인 단순 memcpy 함수 최적화
  • 가상 메모리 상의 페이지 교체 알고리즘 (02-02-01 CDL 영역으로 위임)

Boundaries

  • DMA vs. Poll-based I/O: 폴링이 CPU가 직접 장치를 감시하는 것이라면, DMA는 장치가 CPU 몰래(?) 일을 끝내고 보고하는 물리 구조입니다.

3. Counterexample

  • 단순히 "데이터를 빨리 옮기는 것"은 DMA 학습이 아닙니다. 왜 DMA가 데이터를 옮긴 직후 CPU가 해당 메모리를 읽었을 때 '과거 데이터'가 읽히는 캐시 일관성(Cache Coherency) 문제가 발생하는지 하드웨어 데이터 흐름 관점에서 입증할 수 있어야 하며, DMA 전송 중에 CPU가 같은 메모리 뱅크를 쓰려 할 때 발생하는 버스 스톨(Stall) 현상을 분석하지 못한다면 DMA의 물리적 실체를 놓친 것입니다.

4. Prerequisites

  • Bare-metal Memory Mapping (Basic): 레지스터 제어 및 주소 공간 기초가 필수입니다. (02-05-01 BMM)
  • Bus Protocols & NUMA (Recommended): 하드웨어 버스 점유 및 신호 체계 이해가 권장됩니다. (02-02-04 BPN)

5. Learning Map

  1. Request Hub: 주변 장치가 데이터 준비 완료 신호(DREQ)를 보내는 물리적 트리거를 인식합니다.
  2. Bus Mastery: CPU에게서 "버스 써도 좋다"는 허락(DACK)을 받아내는 절차를 익힙니다.
  3. Pumping Logic: 설정된 주소 사이에서 전자가 흐르듯 데이터를 고속으로 펌핑하는 과정을 배웁니다.
  4. Completion Report: 일이 끝나면 CPU의 어깨를 톡톡 건드리는 인터럽트 결속 기술을 완성합니다.

6. Learning Topics

Basic

Core: DMA의 원리와 버스 마스터링 (DMA Foundations)

  • Why to Learn: CPU가 루프를 돌며 데이터를 옮기는 동안 다른 모든 연산이 멈추는 비효율을 제거하기 위함입니다.
  • What to Learn:
    • DMAC 구조: Address register, Byte counter, Control register
    • Bus Mastery: CPU를 잠시 멈추고 DMA가 버스의 '주인'이 되는 물리
    • 3-Way Handshake: DRQ (요청) -> HLDA (승인) -> DACK (확인)
  • How to Learn:
    • CPU와 DMA가 메인 버스를 놓고 싸울 때, 우선순위 로직이 어떻게 전압으로 결정되는지 타이밍 다이어그램 분석 실습
    • 1000바이트 전송 시 CPU 개입 횟수가 1000번에서 1번(종료 시)으로 줄어드는 수리적 이득 계산
  • Implement: 소스, 타겟, 길이를 입력받아 가상의 DMA 레지스터에 값을 쓰는 설정 함수

Core: 데이터 전송 모드와 트리거링 (Transfer Modes)

  • Why to Learn: 전송량과 긴급도에 따라 하드웨어 자원을 가장 효율적으로 배분하기 위해서입니다.
  • What to Learn:
    • Single Transfer: 버스 점유 시간을 최소화하는 징검다리 전송
    • Burst Mode: 버스를 한번 잡으면 끝장낼 때까지 데이터를 쏟아붓는 물리
    • 하드웨어/소프트웨어 트리거: 센서 신호에 의한 자동 시작 vs 명령에 의한 수동 시작
  • How to Learn:
    • 오디오 스트리밍(연속성 중요)과 파일 복사(처리량 중요) 시 각각 어떤 DMA 모드가 물리적으로 적합한지 비교 분석 실습
    • 전송 중 CPU가 버스를 써야 할 때 DMA가 잠시 양보하는 'Cycle Stealing'의 클록 사이클 손실 계산
  • Implement: 우선순위(Priority) 레벨에 따라 채널 가동 여부를 결정하는 스케줄링 로직

Practical

Core: 캐시 일관성과 DMA 관리 (DMA & Cache Physics)

  • Why to Learn: CPU가 보는 데이터(캐시)와 DMA가 옮긴 데이터(메인 램)가 일치하지 않아 발생하는 치명적 버그를 막기 위함입니다.
  • What to Learn:
    • Cache Invalidation: CPU가 램을 읽기 전, DMA가 쓴 최신 데이터를 반영하도록 캐시를 비우는 물리
    • Cache Cleaning/Flushing: CPU가 쓴 데이터를 램으로 강제 배출하여 DMA가 가져가게 하는 물리
    • Non-cacheable Regions: 아예 캐시를 거치지 않게 설정된 특수 물리 주소 구역 활용
  • How to Learn:
    • DMA 전송 후 변수 값이 바뀌지 않은 코드를 보고, 캐시 제어 명령(Clean/Invalidate)이 빠진 지점을 찾아내는 디버깅 실습
    • 하드웨어 코히런시(Hardware Coherency) 유닛이 있는 최신 아키텍처와 없는 저가형 칩의 물리적 설계 차이 조사
  • Implement: 데이터 전송 전후로 캐시를 동기화해주는 전용 래퍼(Wrapper) 함수 설계

Advanced

Core: 분산-수집과 고도화 기술 (Scatter-Gather DMA)

  • Why to Learn: 물리적으로 흩어진 메모리 조각들을 CPU 도움 없이도 마치 하나의 연속된 덩어리처럼 전송하기 위해서입니다.
  • What to Learn:
    • Descriptor-based DMA: 다음에 할 일을 링크드 리스트 형태로 메모리에 적어두고 DMA가 스스로 읽게 하는 물리
    • Scatter-Gather: 여러 버퍼에서 읽어 하나의 장치로 쏘거나, 그 반대의 물리적 취합
    • DMA 버스 덤핑 대응: 고부하 전송 시 시스템 응답성 저하를 막기 위한 대역폭 제한(Throttling) 물리
  • How to Learn:
    • 네트워크 패킷 헤더와 바디가 서로 다른 메모리 위치에 있을 때, SG 설정을 통해 단일 프레임으로 송출하는 시퀀스 분석 실습
    • 체인된 전송(Chained transfers) 중 일부가 실패했을 때 DMA 컨트롤러의 상태 비트가 어떻게 변하는지 확인
  • Implement: 전송 정보 구조체(Descriptor)를 순회하며 다음 작업을 자동 로드하는 가전 전송 엔진 로직

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core)
DMA CPU 도움 없이 주변 장치와 메모리 간 직접 데이터 이동을 수행하는 하드웨어 메커니즘입니다. 기본 전송 자동화 Controller PIO 'CPU가 빨리 옮기는 것' 아님 P1:CS2023/ES core
Bus Mastery CPU가 자리를 비켜주고 다른 장치(DMA 등)가 시스템 버스를 통제할 수 있는 권한을 갖는 상태입니다. 추천 통제권 획득 Arbitration Hold '영구 점유'가 아님 Industry/AMBA core
Cycle Stealing DMA가 데이터를 하나 옮길 때마다 CPU로부터 버스 사용 사이클을 하나씩 뺏어 쓰는 물리 전술입니다. 실무 동시성 조율 Stall Burst CPU가 '멈추는' 것이 핵심 P1:CS2023/ES core
Scatter-Gather 여러 곳에 흩어진 물리 메모리 조각들을 한 번의 DMA 설정으로 연속 전송하는 지능형 전송 기술입니다. 심화 비연속 저장 Descriptor Continuity '데이터 정렬'과는 다른 층위 Industry Storage core

8. References

Primary

Secondary

  • [Operating System Concepts] Silberschatz — DMA interface with OS.
  • [Computer Systems: A Programmer's Perspective] Bryant & O'Hallaron — Cache & DMA interactions.

Industry

  • [ARM AMBA AXI/AHB Specifications] — The bus standard for DMA.
  • [Intel 8237 DMA Controller Datasheet] — The classic hardware reference.

9. Final Checklist

Primary

  • DMA가 전송을 시작하기 위해 CPU로부터 받아야 하는 3가지 핵심 정보(시작주소, 목적지, 개수)가 왜 물리 레지스터여야 하는지 설명 가능한가? (P1)
  • DMA 전송이 완료된 후, CPU가 일을 그만하고 결과를 확인하게 만드는 하드웨어 신호(Interrupt)의 물리적 전달 경로를 사상할 수 있는 가? (P1)

Secondary

  • 'Burst Mode' DMA 전송이 진행되는 동안, CPU가 자신의 내부 캐시에만 있는 명령어를 실행하는 것은 왜 가능한지 버스 공유 관점에서 소통 가능한가?
  • 100MB의 데이터를 옮길 때, 'Single mode'와 'Block mode' 중 어떤 방식이 시스템 전체의 **Latency(지연 시간)**를 더 안정적으로 유지하는지 입증 가능한가?

Industry

  • 고성능 네트워크 카드(NIC) 설계 시, CPU 부하를 줄이기 위해 'Interrupt Coalescing'과 DMA를 어떻게 물리적으로 결합할지 제안할 수 있는 가? (SFIA)
  • 임베디드 시스템에서 DMA가 메모리 범위를 벗어나 데이터를 쓰는 Buffer Overflow 발생 시, 하드웨어 MPU가 이를 차단할 때의 예외 시퀀스를 기술할 수 있는 가?