TIL

[TIL] DMA, Direct Memory Access

아람2 2024. 10. 21. 14:17
반응형

직접 메모리 접근 DMA, Direct Memory Access 

CPU 개입 없이 주변 장치가 메모리에 접근하는 하드웨어 기능 

주변 장치의 데이터는 장치 컨트롤러에 의해 로컬 버퍼로 이동하며, 특히 전송할 데이터 양이 많을 경우 더욱 효과적이다 

전송할 데이터가 많은 경우 많은 양의 데이터 이동으로 인한 부담을 줄이기 위해 DMA를 이용한다 

장치 컨트롤러가 데이터의 한 블록을 이동시키는 과정에서 CPU의 개입을 없애고, CPU에서는 데이터 이동이 완료되었다는

단 한 번의 인터럽트만 발생시킴으로써, 데이터가 전송되는 동안 CPU는 다른 작업을 수행할 수 있어 효율성이 높아진다 

 

DMA 작동 방식

1. DMA 컨트롤러

DMA 연산은 DMA 컨트롤러라는 특수한 하드웨어에 의해 수행된다

이 컨트롤러는 주변 장치와 메모리 간의 데이터 전송을 관리한다 

2. 메모리 접근 

주변 장치가 데이터를 전송할 준비가 되면, DMA 컨트롤러는 메모리 주소를 지정하고 데이터 전송을 시작한다 

이 과정에서 CPU는 관여하지 않는다 

3. 인터럽트와 완료 신호 

데이터 전송이 완료되면, DMA 컨트롤러는 CPU에 인터럽트를 보내 전송이 완료되었음을 알리고

이를 통해 CPU는 전송된 데이터를 처리할 수 있다 

 

DMA 장점과 단점

DMA 의 장점

1) 효율성 - 대용량 데이터를 처리할 때 CPU의 부담을 줄여준다 

2) 성능 향상 - CPU는 다른 중요한 작업에 집중할 수 있어 전체 시스템 성능이 향상된다 

3) 저지연 - 입출력 장치와 메모리 간의 빠른 데이터 전송을 가능하게 한다 

DMA 의 단점 

1) 복잡성 - DMA 컨트롤러의 관리와 구성이 복잡할 수 있다 

2) 자원 충돌 - 메모리 버스의 점유로 인해 다른 장치들의 메모리 접근이 지연될 수 있다 

 

 

DMA 사용 시 유의할 점

1. 메모리 충돌 관리 

DMA를 사용할 때는 메모리 버스를 여러 장치가 공유하므로, 메모리 접근 충돌을 피하기 위해 적절한 관리가 필요하다

이를 위해 우선순위를 설정하거나, 필요 시 메모리 접근을 제어할 수 있는 추가적인 하드웨어가 필요할 수 있다 

2. 인터럽트 처리 

DMA 전송이 완료된 후 CPU에 전달되는 인터럽트를 적절히 처리해야 한다

인터럽트 처리 루틴이 효율적이지 않으면, 시스템 전체의 성능에 영향을 미칠 수 있다

3. 버퍼 크기 

DMA 전송 시 사용되는 로컬 버퍼의 크기를 고려해야 한다 

버퍼가 너무 작으면 데이터 손실이 발생할 수 있으며, 너무 크면 메모리 자원을 낭비할 수 있다 

4. 하드웨어 호환성 

DMA를 지원하는 하드웨어 구성 요소가 필요하며, DMA 기능이 제대로 작동하기 위해서는

주변 장치와 메모리 간의 호환성이 보장되어야 한다 

5. 디버깅의 어려움

DMA는 CPU 개입 없이 동작하기 때문에 디버깅이 어려울 수 있다 

전송 중 발생하는 문제를 진단할 때는 추가적인 로그나 진단 도구를 사용하는 것이 좋다 

 

결론

DMA는 시스템의 전체적인 성능과 효율성을 향상시키는 중요한 기능이고

특히 대량의 데이터 전송이 필요한 작업과 빈번한 입출력이 많은 시스템에서 그 중요성이 두드러진다 

 

+ Burst Mode 모든 데이터를 전송하는 동안 버스 독점, 그동안 CPU 는 아무것도 못 함 빠르게 전송 가능 

Cycle Stiling CPU가 허락해 줄 때마다 1Word 씩 보낸다 

+ DMA 를 통해서 대용량 메모리에 접근하는 예시가 그래픽 카드 

반응형

'TIL' 카테고리의 다른 글

[TIL] mmap()  (0) 2024.10.22
[TIL] 힙 정렬 Heap Sort  (0) 2024.10.22
[TIL] 시스템 콜 System Call  (0) 2024.10.21
[TIL] 단편화 Fragmentation  (2) 2024.10.19
[TIL] 가상 메모리 Virtual Memory/ 페이징 Paging  (1) 2024.10.18