이론/운영체제

DMA(Direct Memory Access)

habbn 2024. 2. 15. 14:13
728x90

Direct Memory Access란?

 

직접 메모리 접근은 주변장치(하드디스크, 그래픽 카드 등)에서 CPU의 처리를 거치지 않고 직접 RAM이나 저장장치에 접근해서 필요한 데이터를 가져오는 기능이다.

 

중요한건 CPU의 개입 없이 I/O장치와 저장장치 사이의 데이터를 전송하는 접근 방식이라는 점이다.

 

<-> PIO(Programmed Input/Output)은 CPU가 주변장치와 데이터를 주고받는 방식으로 효율이 떨어지는 방식이다.

 

기존의 방식으로 주변기기끼리 통신을 하려고 한다면

주변기기 측에서 CPU에 필요한 메모리에 대한 정보를 주고 이를 CPU가 확인해서 해당 기기에게 데이터를 달라고 명령하고 데이터를 받아서 요청한 기기에 전송하는 과정을 거쳐야 했으나,

DMA를 사용할 경우 CPU를 거치지 않고 데이터가 필요한 주변기기에서 직접 해당 기기의 메모리에 접근해서 필요한 정보를 가져옴으로써 더 빠르게 데이터를 가져오면서 동시에 CPU에 걸리는 부하 또한 줄이는 효과가 있다.

 

다만 CPU를 거쳐가지 않는다는 점은 CPU를 통해 요청이 유효한 것인지를 확인할 수단이 없다는 것을 의미하는 만큼 보안 위협에 시달릴 수 있는데 대표적으로 Thunderbolt(인터페이스)에 있던 Thunderclap 취약점이 이 DMA 기능을 이용한 취약점이다.

 

주로 디스크 드라이브, 그래픽 카드, 네트워크 카드 등과 같은 고속 장치에서 주로 사용되고,

입출력 장치와 메모리 사이에 위치하여 데이터 전송을 관리한다.

 

https://www.quora.com/What-is-the-function-of-DMA-in-a-computer

 

 

1. CPU가 DMA 컨트롤러에게 전송을 요청한다.

2. DMA 컨트롤러가 데이터 전송을 수행하고, 이 과정에서 CPU는 다른 작업을 계속한다.

3. 데이터 전송이 완료되면, DMA 컨트롤러가 CPU에 인터럽트를 보낸다.

4. CPU가 인터럽트를 받고, 전송이 완료되었음을 인식한다.

 

 

고속 I/O 장치의 경우 빈번한 인터럽트가 발생하는데 DMA를 사용함으로써 프로그램 수행 중 인터럽트의 발생 횟수를 최소화한다. DMA가 없다면 Data I/O 처리가 끝날 때까지 CPU는 대기해야 한다.

🤔 고속 I/O 장치의 경우 빈번한 인터럽트가 발생하는 이유?

고속 I/O 장치의 경우 데이터를 빠르게 전송하므로, CPU는 데이터 처리를 위해 빈번하게 인터럽트를 받게 된다. 인터럽트는 CPU에게 I/O장치에서 어떤 이벤트가 발생했음을 알리는 신호이다.
HDD는 데이터를 읽거나 쓸 때마다 CPU에게 인터럽트를 보낸다. 만약 이런 I/O장치들이 매우 빠르다면, CPU는 이러한 인터럽트를 처리하는 데 많은 시간으 할애해야 한다. 이로 인해 CPU는 다른 중요한 작업을 수행하는 데 방해를 받을 수 있다.

 

 

 

 

 


 

참조

 

DMA(Direct Memory Access)란? (+PIO, 채널제어방식)

입출력 제어 방식은 크게 4가지가 있습니다. 1. 프로그램에 의한 I/O (CPU 개입 O) 2. 인터럽트에 의한 I/O (CPU 개입 O) 3. DMA에 의한 I/O (CPU 개입 X) 4. 채널에 의한 I/O (CPU 개입 X) 이제 DMA에 대해서 알아

kkhipp.tistory.com

 

728x90