DMA
DMA
DMA란
하드웨어 장치가 CPU를 거치지 않고 메인 메모리에 접근할 수 있게 해 주는 컴퓨터 시스템의 기능.
PIO
CPU를 통해 모든 데이터를 주고 받는 작업으로, DMA와 반대.
Third-party DMA
- DMA controller를 이용하는 표준 DMA.
- DMA controller가 메모리 주소를 생성하고, 데이터를 전송할 수 있음.
Bus mastering DMA
- First-party DMA라고도 함.
- CPU와 주변 장치는 메모리 버스의 통제권을 가짐.
- 주변 장치는 CPU의 관여 없이 직접 시스템 메모리에 쓸 수 있음.
동작 모드
DMA는 상황에 따라 다음과 같은 두 가지 동작 모드가 있음.
- Brust mode
- Cycle Stealing mode
Brust mode
- 전체 데이터 블록이 한 연속된 시퀀스에 전송됨.
- DMA controller가 CPU로부터 시스템 버스의 제어권을 받음.
- 제어권을 돌려주기 전 까지 모든 데이터 전송.
Cycle Stealing mode
- CPU가 전송되는 동안 비활성화 되면 안되는 경우 사용.
- DMA controller가 CPU로부터 시스템 버스의 제어권을 받는 것은 동일.
- One unit 만큼의 데이터를 보낸 후 시스템 버스의 제어권을 다시 CPU에게 넘겨 줌.
- 전체 블록이 전송될 때까지 지속적으로 제어권을 요청하고, 각 요청마다 One unit 만큼씩 보냄.
- 전체 전송속도는 느리지만 CPU가 오래 대기하지 않아도 됨.
Cache Coherency Problem
- DMA에서 생길 수 있는 문제
- Write-back cache를 사용하는 경우, DMA로 메모리에 값을 받아올 때 오래된 값을 받을 수 있음
- 또한 DMA로 메모리에 값을 쓰는 경우, 캐시에 오래된 값이 있을 수 있음
- 메모리에 값을 쓰는 경우 캐시 컨트롤러에 신호를 보내는 버스 스누핑 방법으로 해결 가능.
- DMA로 접근되기 전에 OS에서 캐시 항목들을 플러시하는 방법 역시 존재.
- 두 해결 방법 다 약간의 오버헤드 포함.