DMA(Direct Memory Access)는 컴퓨터가 데이터를 보다 효율적으로 전송할 수 있도록 하는 방법입니다. CPU가 모든 전송을 처리하는 대신 DMA 컨트롤러는 메모리와 장치 간에 직접 데이터를 보냅니다. 이를 통해 시간을 절약하고 전력 소비를 줄이며 CPU가 다른 작업에 집중할 수 있습니다.
씨1. Direct Memory Access 개요
씨2. 직접 메모리 액세스 기능
씨3. 단계별 DMA 작업

직접 메모리 액세스 개요
DMA(Direct Memory Access)는 컴퓨터가 데이터를 보다 효율적으로 이동하는 데 사용하는 방법입니다. CPU는 컴퓨터 내부의 한 장소에서 다른 장소로 정보를 보내는 것을 감독합니다. 이렇게 하면 시간이 걸리고 CPU가 작은 작업으로 바쁘게 됩니다.
DMA를 사용하면 DMA 컨트롤러라는 시스템의 특수 부분이 이 작업을 인계받습니다. 이를 통해 장치는 CPU가 모든 단계를 처리하지 않고도 컴퓨터 메모리에서 직접 데이터를 보내거나 받을 수 있습니다. 전송이 진행되는 동안 CPU는 다른 작업을 계속 수행할 수 있습니다.
이 설정은 지속적인 데이터 이동으로 인해 CPU가 느려지지 않기 때문에 시스템을 보다 원활하게 실행할 수 있습니다. 또한 전력을 절약하고 컴퓨터의 전반적인 성능을 향상시키는 데 도움이 됩니다.
직접 메모리 액세스 기능
고속 데이터 전송
DMA를 사용하면 CPU 개입 없이 대용량 데이터 블록을 빠르게 전송할 수 있어 처리량이 향상됩니다.
CPU 오프로딩
CPU는 반복적인 데이터 이동 작업에서 벗어나 계산에 사용할 수 있습니다.
인터럽트 오버헤드 감소
DMA는 프로그래밍된 I/O에 비해 인터럽트 수를 최소화하여 시스템 오버헤드를 낮춥니다.
직접 메모리
주변 장치는 메모리에서 직접 읽거나 쓸 수 있으므로 추가 CPU 매개 복사본을 피할 수 있습니다.
다중 채널 지원
최신 DMA 컨트롤러는 여러 개의 독립적인 채널을 지원하므로 동시 전송이 가능합니다.
버스트 전송 기능
DMA는 버스트 모드를 지원하여 효율성을 위해 하나의 연속 스트림으로 데이터 블록을 전송합니다.
우선권 및 중재
DMA 컨트롤러는 우선 순위 수준을 사용하여 메모리 버스에 액세스할 수 있는 채널을 결정합니다.
전송 모드
시스템 요구 사항에 따라 단일, 블록, 버스트 및 수요 기반 전송과 같은 다양한 모드를 지원합니다.
다중 버스와의 호환성
유연한 통합을 위해 다양한 시스템 버스와 함께 작동합니다.
오류 감지 및 처리
많은 DMA 시스템에는 데이터 무결성을 보장하기 위해 패리티 검사 또는 오류 수정이 포함되어 있습니다.
메모리 간 전송
일부 DMA 컨트롤러는 CPU 개입 없이 한 메모리 위치에서 다른 메모리 위치로 직접 데이터를 복사할 수 있습니다.
단계별 DMA 작동
| 단계 | 무슨 일이 일어나나요? | 신호/행동 |
|---|---|---|
| 1 | 디바이스가 DMA 서비스를 요청합니다. | DRQ(DMA 요청) 라인 활성화 |
| 2 | DMA 컨트롤러는 시스템 버스의 제어를 요청합니다. | BR (버스 요청) |
| 3 | CPU는 일시적으로 버스를 DMA 컨트롤러로 해제합니다. | BG(버스 보조금) |
| 4 | DMA 컨트롤러는 전송할 메모리 주소와 단어 수(데이터 단위)를 설정합니다. | 주소 및 개수 레지스터 |
| 5 | 데이터는 CPU를 우회하여 I/O 장치와 RAM 간에 직접 전송됩니다. | 직접 전송 |
| 6 | 완료 후 DMA 컨트롤러는 CPU에 알립니다. | INTR(인터럽트) |
DMA 컨트롤러 및 연결

주요 부품은 CPU, 메모리, DMA 컨트롤러 및 I/O(Input/Output) 장치입니다. DMA 컨트롤러는 CPU가 모든 작업을 수행할 필요 없이 메모리와 I/O 장치 간의 데이터 이동을 감독합니다.
I/O 디바이스가 데이터를 보내거나 받아야 하는 경우 DMA 컨트롤러에 요청을 보냅니다. 그런 다음 컨트롤러는 컴퓨터 내부 데이터의 주요 경로인 시스템 버스를 사용할 수 있는 권한을 CPU에 요청합니다. CPU가 허용하면 DMA 컨트롤러가 제어를 수행하고 메모리와 I/O 장치 간에 직접 데이터를 전송합니다. 전송이 완료되면 CPU에 작업이 완료되었음을 알립니다.
다이어그램은 또한 정보를 전달하는 다양한 라인을 보여줍니다. 주소선(회색)은 데이터가 어디로 가야 하는지를 결정하고, 데이터 라인(녹색)은 실제 정보를 전달하며, 제어선(주황색)은 프로세스를 관리합니다. DMA 버스는 여러 I/O 장치를 컨트롤러에 연결합니다. 이 설정은 시스템이 데이터를 보다 원활하게 처리하고 다른 작업을 위해 CPU를 비워 두는 데 도움이 됩니다.
DMA 전송 모드 및 차이점
| 모드 | 작동 방식 | 속도 | CPU 영향 |
|---|---|---|---|
| 버스트 모드 | 전체 데이터 블록을 하나의 연속 시퀀스로 전송 | 매우 높음 | 전송이 끝날 때까지 CPU가 중지됨 |
| 사이클 훔치기 | 버스 사이클당 하나의 워드를 전송하고 CPU 사이클과 인터리빙 | 중간 | CPU가 약간 느려졌지만 멈추지 않았습니다 |
| 투명 모드 | CPU가 유휴 상태이거나 버스를 사용하지 않을 때만 전송 | 하부 | 중단 없이 CPU 실행 |
DMA 메인 스타일
버스 마스터링(자사 DMA)
버스 마스터링에서는 장치 자체가 일시적으로 시스템 버스 컨트롤러의 역할을 맡습니다. 즉, 지속적인 CPU 감독 없이 메모리에서 직접 읽거나 쓸 수 있습니다. 장치가 자체 전송을 관리하기 때문에 프로세스가 매우 빠르고 효율적입니다. PCIe GPU, NVMe 드라이브 및 네트워크 카드와 같은 최신 고성능 구성 요소는 종종 이 방법을 사용합니다. 이러한 전송 중에 CPU는 대부분 비어 있어 전체 시스템 성능이 향상됩니다.
타사 DMA(컨트롤러 기반)
이 모델에서는 중앙 DMA 컨트롤러가 여러 장치를 대신하여 데이터 전송 처리를 담당합니다. 각 장치는 컨트롤러에 요청을 보낸 다음 버스를 제어하여 데이터를 이동합니다. 이 접근 방식은 이전 컴퓨터 시스템의 표준이었으며 하드웨어가 단순하고 비용 효율적으로 유지되어야 하는 임베디드 마이크로컨트롤러에서는 여전히 일반적입니다. 모든 장치가 동일한 컨트롤러를 공유하기 때문에 버스 마스터링보다 느리기 때문에 대기 시간과 오버헤드가 발생합니다.
스캐터-게더 DMA
대부분의 경우 메모리의 데이터는 하나의 직선으로 저장되지 않습니다. 다른 장소로 나눌 수 있습니다. Scatter-Gather DMA를 사용하면 이 모든 데이터가 분산되어 있더라도 한 번에 이동할 수 있습니다.
DMA 컨트롤러는 각 데이터 조각이 있는 위치 목록을 유지합니다. 그런 다음 해당 목록을 따라 조각을 수집하고 단일 블록으로 전송합니다.
분산-수집 DMA의 이점
• 추가 단계 없이 흩어져 있는 데이터를 이동합니다.
• CPU에 더 적은 신호가 필요합니다.
• 데이터 전송을 더 빠르고 원활하게 만듭니다.
• 추가 복사본을 방지하여 메모리 공간을 절약합니다.
DMA 및 캐시 동기화
DMA는 장치와 메모리 간에 직접 데이터를 이동하는 반면 CPU는 종종 자체 캐시와 함께 작동합니다. 이 때문에 CPU와 DMA는 때때로 동일한 데이터의 다른 버전을 볼 수 있습니다. CPU 캐시에 여전히 오래된 데이터가 있는 경우 장치에서 변경한 내용을 무시할 수 있기 때문에 문제가 됩니다. CPU의 캐시에만 새 데이터가 있는 경우 장치는 메모리에서 오래된 값을 읽을 수 있습니다. 다음에 의해 수정됩니다.
• CPU는 장치가 읽기 전에 캐시를 플러시할 수 있으므로 메모리에 최신 데이터가 있습니다.
• CPU는 장치가 쓰는 후 캐시를 무효화할 수 있으므로 메모리에서 업데이트된 데이터를 로드합니다.
• 최신 프로세서는 이를 자동으로 처리하는 캐시 일관성 DMA를 사용합니다.
DMA 안전에서 IOMMU의 역할
| 특징 | 기능 | 혜택 |
|---|---|---|
| 주소 매핑 | 디바이스 DMA 요청을 유효한 메모리 주소로 변환 | 우발적이거나 유해한 데이터 손상 방지 |
| 격리 | 각 장치를 할당된 메모리 영역으로 제한 | 결함이 있거나 악성 장치로부터 시스템 보호 |
| 64비트 지원 | 32비트 제한을 넘어 주소 지정 확장 | 대용량 메모리 요구 사항이 있는 최신 장치 지원 |
보안 문제: DMA 공격 및 보호
보안 위험
• 무단 DMA 액세스를 통한 데이터 도난.
• 시스템 메모리에 맬웨어 주입.
• 노트북에 대한 Thunderbolt 사악한 메이드 공격.
2 보호
• IOMMU / VT-d / AMD-Vi를 활성화합니다.
• 커널 DMA 보호(Windows)를 사용합니다.
• 사용하지 않는 외부 포트를 비활성화합니다.
• 보안 코어 PC 및 BIOS/UEFI 제한을 사용합니다.
DMA의 다양한 응용
디스크 및 스토리지 전송
DMA를 사용하면 하드 드라이브, SSD 및 광학 드라이브가 CPU에 부담을 주지 않고 대용량 데이터 블록을 메모리로 직접 이동할 수 있습니다.
네트워킹 인터페이스
네트워크 카드는 DMA를 사용하여 들어오고 나가는 패킷을 빠르게 전송하므로 프로세서 속도를 늦추지 않고 고속 통신이 가능합니다.
오디오 및 비디오 처리
사운드 카드, 그래픽 프로세서 및 비디오 캡처 장치는 DMA를 사용하여 대기 시간을 최소화하면서 연속 데이터 스트림을 처리합니다.
임베디드 시스템
마이크로컨트롤러는 DMA를 사용하여 반복적인 데이터 이동(예: ADC 판독값 또는 UART 버퍼)을 오프로드하여 제어 작업을 위한 CPU 주기를 확보합니다.
그래픽 렌더링
GPU는 텍스처 로딩 및 프레임 버퍼 업데이트에 DMA를 적용하여 게임 및 시각적 애플리케이션에서 부드러운 렌더링을 지원합니다.
결론
DMA(Direct Memory Access)는 CPU에 의존하지 않고 메모리와 장치 간에 직접 데이터를 이동하여 컴퓨터 효율성을 향상시킵니다. 이를 통해 지연이 줄어들고 전력 사용량이 줄어들며 스토리지, 네트워킹, 그래픽과 같은 작업에서 보다 원활하게 작동할 수 있습니다. 내장된 오류 처리 및 보안 기능을 갖춘 DMA는 빠르고 효율적인 데이터 전송을 위한 신뢰할 수 있는 방법으로 남아 있습니다.
자주 묻는 질문 [FAQ]
DMA는 프로그래밍된 I/O와 어떻게 다릅니까?
DMA는 컨트롤러를 사용하여 데이터를 전송하는 반면, 프로그래밍된 I/O는 모든 전송에 대해 CPU에 의존합니다.
DMA는 어떻게 전력을 절약합니까?
CPU를 지속적인 전송에서 해방시켜 저전력 상태로 더 자주 들어갈 수 있습니다.
DMA는 어떤 메모리에 액세스할 수 있습니까?
DMA는 시스템 RAM, 비디오 메모리, 버퍼 메모리에 액세스할 수 있으며 때로는 메모리 영역 간에 데이터를 복사할 수 있습니다.
DMA가 한 번에 여러 장치를 처리할 수 있습니까?
예, DMA 컨트롤러는 우선 순위와 중재를 사용하여 어떤 장치를 먼저 전송할지 결정합니다.
DMA의 주요 한계는 무엇입니까?
소규모 전송에는 비효율적이며 적절한 동기화 없이 캐시 불일치가 발생할 수 있습니다.
실제 시스템에서 DMA가 중요한 이유는 무엇입니까?
빠르고 대기 시간이 짧은 데이터 전송을 제공하므로 CPU는 시간이 중요한 작업에 집중할 수 있습니다.