728x90
Direct Memory Access (DMA)
DMA는 CPU를 거치지 않고 장치 (디스크, 네트워크 카드 등)가 메모리와 직접 데이터 전송을 수행할 수 있게 하는 하드웨어 매커니즘입니다.
→ CPU가 일일이 데이터를 복사하지 않아도, I/O 장치가 메모리에 직접 읽고 쓸 수 있게 해주는 기술입니다.
특징
- DMA는 interrupt-driven I/O와 결합되어 효과적입니다.
- 대량 데이터 전송에 적합하며, CPU는 그동안 다른 계산을 수행할 수 있습니다.
- 인터럽트 + DMA 조합이 일반적인 현대 시스템 구조입니다.
필요성
CPU 복사 방식은 비효율적입니다. 원래는 다음과 같은 절차로 메모리에 복사됩니다.
- 디스크가 데이터를 CPU로 보냅니다.
- CPU가 데이터를 RAM에 복사합니다.
- 다시 CPU가 디바이스에 보냅니다.
→ 이러한 과정이 있으면 CPU가 불필요한 복사에 시간을 소모합니다.
해결법: DMA 도입
- DMA는 디바이스와 메모리 사이의 데이터 복사를 CPU 없이 수행합니다.
- CPU는 DMA가 끝났다는 신호만 받고, 다른 작업을 수행할 수 있습니다. (비동기)
동작 방식
- CPU가 DMA 컨트롤러에 명령을 줍니다. (메모리 주소 A부터 B까지 데이터를 디스크로 요청)
- DMA 컨트롤러가 장치와 메모리 간 직접 전송을 수행합니다.
- 작업 완료 후 인터럽트로 CPU에 알립니다.
- 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 |