CPU는 입출력 작업동안은 멈출 수 밖에 없으므로, 컴퓨터는 입출력 작업이 많으면 느려집니다. 특히나 비휘발성 메모리로부터의 입출력처럼 대량 데이터 이동일 때 오버헤드가 아주 커집니다. CPU는 계속 명령어에 의해 돌아가야 낭비가 없으므로, 이 문제를 해결하기 위해 DMA(직접 메모리 엑세스) 방식을 사용합니다.
이전까지 장치 컨트롤러가 메모리에 접근하기 위해서는 원하는 데이터에 접근하기위해 interrupt-driven방식을 통해 CPU에게 요청했습니다. interrupt방식은 HDD에서 RAM에 올리고, RAM에서 CPU에 올리고 하는 과정 하나하나 OS에다가 interrupt를 걸어야 합니다. 게다가 interrupt-driven 방식은 byte단위이므로, OS에게 매번 요청하다보면 오버헤드가 커질 수 있습니다.
반면 DMA방식은, CPU에 interrupt를 걸지 않고 직접적으로 메모리에 접근해서 읽어오는 방식입니다. 이를 위해 데이터를 byte 단위가 아닌 block 단위로 읽습니다. HDD에서부터 block 단위로 RAM에 올리고, RAM에서 CPU에 올릴 때도 block 단위로 올리게 됩니다.
즉 DMA방식은 CPU의 개입 없이 메모리로부터 자신의 버퍼 장치로, 또는 버퍼로부터 메모리로 데이터 블록 전체를 전송합니다. DMA방식에서 interrupt는 블록 전송이 완료될 때마다 발생하게 되며, 장치 컨트롤러가 전송작업을 수행하는 동안 CPU는 다른 작업을 수행할 수도 있습니다.
---
다음 글에서는 컴퓨터 시스템의 구조에 대해 알아보겠습니다.