DMA (Direct Memory Access)

: 주변 장치가 CPU를 거치지 않고 데이터를 메모리에 직접 전송하는 기능

원래는 CPU가 데이터 전송을 처리 했음. 근데 CPU가 직접 다른 장치에 접근하여 Ram에다가 옮기고 하는 과정이 비효율적이였음. → 중간에서 알아서 처리해줄 장치로 극복해보자 → DMA 컨트롤러!

! 반대되는 기능 PIO (Programmed Input/Output) : CPU가 직접 주변기기에 접근하여 데이터를 주고 받는 방식

Why? 비효율적 : CPU가 주변 장치 제어시, 메모리에서 레지스터에서 가져오게 되는데, 이 때 데이터 처리량이 많으면, 이 과정으로 인해 CPU 점유 시간이 길어진다. 게다가 해당 장치에서 데이터를 읽어 오는게 느리다면 그만큼 다른 일을 못하게 된다 ⇒ 느려짐

효과

  1. CPU 부하를 줄여줌 (= CPU 인터럽트를 줄인다 ⇒ 초기 설정시 한번, 전송 완료시 한번)
  2. 데이터 전송 속도 향상

인터럽트(Interrupt)란? : (하드웨어 관점) CPU가 현재 실행중인 프로그램의 흐름을 일시적으로 중단**(CPU 중단 X)**하고, 다른 이벤트에 대한 처리를 수행하는 것

Untitled

구성요소

: DMA 컨트롤러, 버스, 메모리, 입출력장치

동작원리

초기 설정 → DMA 요청 및 승인 → 버스 제어권 획득 → 데이터 전송 → 전송 완료 및 인터럽트 → 제어권 반환

  1. 초기 설정에서 CPU가 전송할 데이터 소스, 목적지 주소, 전송할 데이터 크기 등을 설정하면 DMA 컨트롤러의 주소 레지스터카운트 레지스터에 저장됨 ( = 보내는 데이터에 대한 정보를 설정함 )