DMA

EBAB!·2023년 7월 10일
0

OS

목록 보기
6/16

DMA (Direct Memory Access)

입출력장치와 메모리 사이 데이터 흐름에서 CPU를 배제하기 위해 사용하는 입출력 제어 방식

기본적인 입출력 제어 방식

예를 들어 하드디스크에서 메모리로 데이터를 이동시킬 때, 가장 기본적인 방식인 Programmed I/O(Polling) 방식으로 구현하면 하드디스크에서 데이터를 꺼낸 후 시스템 버스를 통해 CPU 레지스터에 옮겨지고 다시 시스템 버스를 통해 CPU 레지스터에서 메모리로 이동한다.

DMA

위 Programmed I/O 방식의 단점을 제거한것이 DMA 방식이다. 이름 그대로 입출력장치가 메모리에 직접 접근한다는 뜻이다.

DMA Controller를 이용하면 하드디스크와 메모리를 직접 연결하여 CPU는 제어신호만 주고받을 뿐 데이터 전송에서 제외시킬 수 있다. 따라서 입출력 시 CPU는 제어를 위해 데이터 전송 시작과 완료에만 할당되어 CPU 자원의 낭비가 제거된다.

차이

DMA가 없다면 프로세스의 버퍼에 데이터를 쓰고 소켓 버퍼에 보내고 TCP/IP 버퍼에 보내고 NIC에 보낸다. 문제는 프로세스부터 IP계층까지 버퍼는 모두 RAM을 사용하는데 불필요한 복사와 전송 과정이 생긴다는 것이다.

만약 DMA가 있다면 프로세스의 버퍼에서 바로 NIC으로 전달되면서 두 앞서 중간의 두 버퍼를 생략하고 전달이 가능하게 된다.

클라우드 VM에서 사용

만약 두 개의 VM에서의 프로세스끼리 데이터를 송수신할 때, DMA가 없다고 생각하면 굳이 두 개의 컴퓨터가 통신하는 과정을 거쳐야 한다.

이 때 DMA를 이용한다면 사실상 프로세스끼리 바로 데이터 전송이 되는 수준이기 때문에(결국 같은 RAM이기 때문에) 가상환경의 장점이 될 수 있다.

profile
공부!

0개의 댓글