크래프톤 정글(PintOS WEEK 9 ~ 14)

Direct Memory Access (DMA)

devkty 2025. 6. 8. 01:00
728x90

Direct Memory Access (DMA)

DMA는 CPU를 거치지 않고 장치 (디스크, 네트워크 카드 등)가 메모리와 직접 데이터 전송을 수행할 수 있게 하는 하드웨어 매커니즘입니다.

→ CPU가 일일이 데이터를 복사하지 않아도, I/O 장치가 메모리에 직접 읽고 쓸 수 있게 해주는 기술입니다.

특징

  • DMA는 interrupt-driven I/O와 결합되어 효과적입니다.
  • 대량 데이터 전송에 적합하며, CPU는 그동안 다른 계산을 수행할 수 있습니다.
  • 인터럽트 + DMA 조합이 일반적인 현대 시스템 구조입니다.

필요성

CPU 복사 방식은 비효율적입니다. 원래는 다음과 같은 절차로 메모리에 복사됩니다.

  1. 디스크가 데이터를 CPU로 보냅니다.
  2. CPU가 데이터를 RAM에 복사합니다.
  3. 다시 CPU가 디바이스에 보냅니다.
    → 이러한 과정이 있으면 CPU가 불필요한 복사에 시간을 소모합니다.

해결법: DMA 도입

  • DMA는 디바이스와 메모리 사이의 데이터 복사를 CPU 없이 수행합니다.
  • CPU는 DMA가 끝났다는 신호만 받고, 다른 작업을 수행할 수 있습니다. (비동기)

동작 방식

  1. CPU가 DMA 컨트롤러에 명령을 줍니다. (메모리 주소 A부터 B까지 데이터를 디스크로 요청)
  2. DMA 컨트롤러가 장치와 메모리 간 직접 전송을 수행합니다.
  3. 작업 완료 후 인터럽트로 CPU에 알립니다.
  4. CPU는 완료된 데이터를 처리합니다.

장점과 단점

장점 단점
CPU 부하 감소 하드웨어 복잡도 증가
빠른 대량 데이터 전송 가능 동기화 이슈 가능
I/O → RAM 직접 처리 메모리 충돌 가능성 (버스 병목)

Pintos에서…

Pintos는 소형 OS이므로 실제 DMA 컨트롤러를 직접 다루지는 않지만, 다음과 같은 구조에서 DMA 개념과 유사한 추상화를 사용합니다.

Pintos 기능 설명
block_read() / block_write() 디스크 블록을 메모리로 읽거나 씀 → 내부적으로는 디스크 드라이버가 수행
interrupt.c DMA 작업 완료 후 인터럽트를 통해 알려주는 구조와 유사
timer.c 인터럽트 기반으로 시계 틱을 알려주는 것도 DMA+Interrupt의 구조와 유사한 비동기 설계 모델

요약

항목 설명
DMA란? CPU 개입 없이 장치와 메모리 간 직접 데이터 전송을 가능하게 하는 기술
도입 이유 CPU의 I/O 오버헤드를 줄이고, 입출력 효율 향상
동작 흐름 CPU → DMA 명령 → 장치 ↔ 메모리 전송 → 인터럽트로 완료 통보
Pintos에서의 의미 직접 구현은 없음, 그러나 인터럽트 기반 구조에서 유사한 설계 철학 존재
728x90

'크래프톤 정글(PintOS WEEK 9 ~ 14)' 카테고리의 다른 글

WEEK 12 PintOS TIL(6월2일 월요일)  (1) 2025.06.08
PML4 (Page Mapping Level 4)  (0) 2025.06.08
File-backed Page  (0) 2025.06.08
Swap Disk  (0) 2025.06.08
Anonymous Page (익명 페이지)  (0) 2025.06.08