본문 바로가기
device driver

DMA(Direct Memory Access) 직접 메모리 접근

by 의지의 엘린 2024. 7. 8.

1. DMA 개요

DMA(Direct Memory Access) 직접 메모리 접근

DMA는 주변장치(하드디스크, 그래픽 카드 등)들이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능입니다.
중요한 건 CPU의 개입 없이 I/O 장치와 기억장치 사이의 데이터를 전송하는 접근 방식이라는 거다.
PIO(Programmed Input/Output)은 CPU가 주변장치와 데이터를 주고받는 방식으로 효율이 떨어지는 방식입니다.
이를 극복하기 위해 DMA가 개발되었습니다.(IBM)

CPU 개입 없이라는 부분이 중요한 포인트입니다.

다른 관점으로 보면 CPU가 해야할 주변장치와의 데이터 전송을 DMA장치가 해주는 것이죠.
그만큼의 CPU 효율을 늘릴 수 있습니다.
고속의 I/O 장치의 경우 빈번한 인터럽트가 발생하는데 DMA를 사용함으로써
프로그램 수행 중 인터럽트의 발생 횟수를 최소화합니다.

DMA가 없다면 Data I/O 처리가 끝날 때까지 CPU는 대기해야 합니다.

https://kkhipp.tistory.com/168

CPU 명령 - 버스 사용 요구(Bus Request) - 버스 사용 허가(Bus Grant) - 데이터 전송 - 인터럽트


  가) DMA 정의

출처 : https://naeunbi698.tistory.com/195


    - 메모리 버퍼, 포인터, 카운터를 사용하여 장치 제어기가 CPU이 도움없이 DMA 컨트롤러를 이용하여 데이터를 직접 메모리로 전송하는 입출력 방식
    - CPU는 상태, 제어정보만을 교환
    -  데이터 전송은 I/O와 메모리간에 직접교환
    - DMA 컨트롤러가 버스를 제어하고 I/O와 메모리가 정보를 집적 전송
    - 중앙처리장치에게 PIO작업을 할당하지 않고 DMA라는 특수 프로세서에게 위임하여 메모리와 직접 데이터를 전송할 수 있게 하는 방법

출처 : https://naeunbi698.tistory.com/195

실제 CPU가 control 하는 건 DMAC (DMA Controller)를 Control 해주는 과정을 의미한다.


  나) DMA 필요성
    - 고속의 I/O 장치의 경우 인터럽트로 CPU의 실제 프로세스 작업 시간 감소
    - 디스크 같은 많은 데이터를 입/출력하는 장치를 위해 CPU가 매번 전송을 제어하는 방법의 비효율성
    - 인터럽트 방식이 프로그램에 의한 입출력 방식보다 효율적이지만 입출력을 위한 상태, 제어정보, 데이터 전송을 위해서 능동적인 CPU 개입이 필요 => 오버헤드 발생

  다) DMA 특징
    - 프로그램 수행 중 인터럽트의 발생 횟수 최소화 및 시스템 효율성 증대
    - CPU는 DMA 컨트롤러와 상태정보 및 제어정보만 전송
    - CPU의 개입 없이 입출력장치와 주 기억장치와의 데이터 직접 전송 가능

  라) 입출력 제어 방식의 4가지

1. 프로그램에 의한 I/O (CPU 개입 O)
2. 인터럽트에 의한 I/O (CPU 개입 O)
3. DMA에 의한 I/O      (CPU 개입 X)
4. 채널에 의한 I/O      (CPU 개입 X)




- progreammed I/O : CPU는 입출력 장치에 명령을 보낸 후 동작이 완료될 때까지 대기

CPU상에서 실행되는 프로그램에 의해 입출력이 직접 제어
CPU는 입출력 장치에 명령을 보낸 후 동작이 완료될 때까지 대기
CPU는 주기적으로 주변장치의 상태를 반복적으로 검사, 폴링 방식
CPU는 자원낭비 발생한다.


- Interrupt Driven I/O : 입출력 인터페이스가 주변장치의 상태를 검사하여 준비상태가 되면 인터럽트 신호를 발생하여 입출력 처리를 요구하는 방식

CPU는 그전에 수행되던 프로그램의 상태를 스택에 저장한 후 Context Switching과정을 통해 인터럽트 서비스 프로그램 수행
주변장치에 명령을 보낸 후 주변장치로부터 결과가 올 때까지 CPU는 다른 작업을 수행할 수 있으므로 효율성 증가
프로그램에 의한 I/O 문제점 개선

- DMA : 인터럽트 방식이 프로그램에 의한 입출력 방식보다는 효율적이지만 입출력을 위한 상태정보, 제어정보, 데이터 전송을 위해서는 여전히 CPU의 능동적인 개입이 요구됨
CPU는 상태정보, 제어정보만을 교환하게 하고 데이터 전송은 주변장치와 주기억장치간에 직접 교환하게 하는 방식이 더 효율적
DMA를 사용하기 위해서는 시스템 버스상에 모듈이 하나 추가
DMA모듈은 CPU를 통하지 않고 한번에 한 단어씩 직접 기억장치로부터 모든 데이터 블록을 전송
전송이 완료되면 DMA모듈은 CPU에게 인터럽트 신호를 보내고 CPU는 전송의 시작과 끝 부분에만 관여


CPU의 직접적인 개입 없이 /O 장치와 Memory 사시의 데이터 전송을 담당하는 제어기를 사용


나) DMA 동작방식

DMA 동작 방식을 쉽게 설명하면 다음과 같다.

DMA 전송 과정을 간단하게 설명

1. 요청하기
   - I/O 장치(프린터, 하드 드라이브 등)가 데이터를 주고받기 위해 DMA 컨트롤러(DMAC)에게 요청을 합니다.
2. CPU에게 물어보기
   - DMAC가 CPU에게 버스를 빌릴 수 있는지 물어봅니다.

3. CPU의 승낙
   - CPU가 "좋아, 버스를 써도 돼"라고 대답합니다.

4. 주소 적기
   - DMAC가 메모리의 어느 위치에 데이터를 보낼지 주소를 적습니다.
5. I/O 장치에게 알리기
   - DMAC가 I/O 장치에게 "데이터를 준비해!"라고 신호를 보냅니다.
6. 데이터 전송
   - I/O 장치가 데이터를 메모리에 보냅니다.
7. 계속 전송
   - I/O 장치는 데이터를 계속 보냅니다.
8. 버스 반납
   - DMAC가 CPU에게 "이제 버스를 다 썼어"라고 말합니다.
9. CPU의 확인
   - CPU가 "알겠어, 버스를 돌려받을게"라고 답합니다.
10. 다음 주소로 이동
    - DMAC가 다음 데이터를 보낼 주소로 이동하고, 남은 데이터 개수를 하나 줄입니다.

11. 반복 또는 종료
    - 보내야 할 데이터가 더 있으면 처음부터 다시 시작하고, 다 보냈으면 멈춥니다.
이렇게 해서 DMA를 사용하면 CPU가 바쁘지 않아도 데이터를 I/O 장치와 메모리 간에 빠르게 전송할 수 있습니다.




출처 :
https://blog.naver.com/roser111/221642875265

DMA (Direct Memory Access)

1. DMA 개요 가) DMA 정의 - 메모리 버퍼, 포인터, 카운터를 사용하여 장치 제어기가 CPU이 도움...

blog.naver.com

https://kkhipp.tistory.com/168