DMA(Direct Memory Access)
DMA(Direct Memory Access)
일종의 입출력 제어 방식으로
CPU의 개입 없이 주변장치(HDD,GPU 등)가
메모리에 직접 접근하여 데이터를 읽고 쓸 수 있게 해주는 시스템의 기능
DMA를 사용함으로
데이터 전송 과정에서 CPU가 필요하지 않으므로
CPU는 다른 작업에 더 많은 시간을 할애할 수 있음
이를 통해 시스템 성능이 향상되며,
I/O 작업이 많을 때 이러한 특징이 두드러진다
CPU의 부하가 감소되며,
데이터의 전송 속도 향상으로 시스템 응답 시간이 단축된다는 이점이 있다
DMA 작동 방식
DMA 작업은 DMA 컨트롤러에 의해 관리된다
입출력 장치나 하드웨어가 데이터 전송을 요청하면,
DMA가 이 요청을 받고, CPU에 버스를 요청
CPU가 버스 사용을 승인함으로
DMA가 시스템 버스를 얻고, 이후 메모리 간 데이터 전송을 진행
메모리 주소, 전송 크기 등을 DMA 컨트롤러가 설정하고,
데이터를 직접 전송한다
데이터 전송 완료 후,
CPU에 인터럽트를 발생시켜 알린다
기타 DMA에 대하여
기본적으로는 하드웨어 매커니즘이기에,
하드웨어와 관련딘 로우 레벨에 위치해 있다
(일반적인 응용 프로그래밍 수준에서 직접 다루긴 어렵다)
(그래도 하드웨어, 입출력 장치, GPU와 관련하여,
DMA 동작에 영향을 미치는 설정을 프로그래머가 조작할 수 있음
ex : 메모리 할당, DMA 채널 우선순위 설정, DMA 인터럽트 처리 등)
(관련하여 할 일이 있다면 하드웨어 문서 혹은 관련 라이브러리 문서를
참고해야 한다 -> DMA는 하드웨어 세부 사항인 점을 잊지 말것)
‘캐시 일관성 문제’에 대한 이슈가 있음
‘CPU’를 거치지 않고 메모리에 읽고 쓸 수 있으므로
‘CPU 캐시’와 실제 메모리 데이터가 다를 수 있는
‘일관성’ 문제가 발생할 수 있다
=> 이를 통해 ‘캐시 관리 기술’ 이나 ‘DMA 제어용 매커니즘’이
필요하다고 한다
DMA는 입출력 및 데이터 전송이 빈번한 경우에
매우 유용하지만, 간단한 임베디드 시스템 혹은
특수 목적의 작은 시스템이라면 사용되지 않을 수 있음
DMA 채널이 공유되는 경우,
신뢰할 수 없는 하드웨어가 DMA를 사용하는 경우 등에서는
보안 위협이 발생할 수 있음
전자의 경우는, 같은 채널을 공유하기에
다른 장치의 보안을 해칠 수 있다
후자의 경우,
DMA가 메모리에 액세스하는 점이 문제
이를 방지하기 위하여 몇몇 조치가 취해진다
(채널 격리, 메모리 보호 등등)
댓글남기기