DMA는 CPU를 거치지 않고 장치 (디스크, 네트워크 카드 등)가 메모리와 직접 데이터 전송을 수행할 수 있게 하는 하드웨어 매커니즘입니다.
→ CPU가 일일이 데이터를 복사하지 않아도, I/O 장치가 메모리에 직접 읽고 쓸 수 있게 해주는 기술입니다.

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

| 장점 | 단점 |
|---|---|
| CPU 부하 감소 | 하드웨어 복잡도 증가 |
| 빠른 대량 데이터 전송 가능 | 동기화 이슈 가능 |
| I/O → RAM 직접 처리 | 메모리 충돌 가능성 (버스 병목) |
Pintos는 소형 OS이므로 실제 DMA 컨트롤러를 직접 다루지는 않지만, 다음과 같은 구조에서 DMA 개념과 유사한 추상화를 사용합니다.
| Pintos 기능 | 설명 |
|---|---|
block_read() / block_write() | 디스크 블록을 메모리로 읽거나 씀 → 내부적으로는 디스크 드라이버가 수행 |
interrupt.c | DMA 작업 완료 후 인터럽트를 통해 알려주는 구조와 유사 |
timer.c | 인터럽트 기반으로 시계 틱을 알려주는 것도 DMA+Interrupt의 구조와 유사한 비동기 설계 모델 |
| 항목 | 설명 |
|---|---|
| DMA란? | CPU 개입 없이 장치와 메모리 간 직접 데이터 전송을 가능하게 하는 기술 |
| 도입 이유 | CPU의 I/O 오버헤드를 줄이고, 입출력 효율 향상 |
| 동작 흐름 | CPU → DMA 명령 → 장치 ↔ 메모리 전송 → 인터럽트로 완료 통보 |
| Pintos에서의 의미 | 직접 구현은 없음, 그러나 인터럽트 기반 구조에서 유사한 설계 철학 존재 |