DMA 사용 이유 - DMA sayong iyu

DMA란 Direct Memory Access의 약자로 말 그대로 메모리에 직접적으로 접근하는 방법을 말한다.

데이터를 가져오거나 사용할 때에는 항상 CPU가 필요하다.

근데 CPU는 접근 속도가 느릴뿐더러 이외에도 하는 일이 많다.

만약 메모리에 대량의 데이터를 전송한다면 CPU도 먹통이 되는 것이니 시스템 전체에 영향이 가해질 수밖에 없다.

그렇다면 DMA는 어떤 식으로 접근을 하는가?

DMA를 제어하는 DMAC(Direct Memory Access Control)가 있다.

CPU가 DMAC한테 주소, 데이터 길이 등을 알려주면 DMAC가 처리를 한 뒤,

HW 인터럽트로 처리가 끝났음을 알린다.

그럼 DMAC가 데이터를 처리하는 동안 CPU는 다른 일을 할 수 있는 것이다.

DMA 사용 이유 - DMA sayong iyu

참고로 CPU가 DMAC한테 일을 시킬 때 필요한 레지스터들이 있는데, source주소, destination 주소, counter 주소, control 레지스트리 등이 필요하다고 한다.

아래는 참고한 사이트이다.

참고)

http://recipes.egloos.com/5152867

https://www.sony.co.kr/electronics/support/articles/S500082606

 

DMA 사용 이유 - DMA sayong iyu
DMA

  1. DMA(Direct Memory Access)의 개요

   가. DMA의 정의
   - CPU를 대신하여 I/O장치와 Memory사이의 데이터전송을 담당하는 장치를 지칭
   - CPU의 개입 없이 주변장치와 주기억장치와의 데이터 전송이 이루어지는 방법을 통칭

   나. DMA의 작동 개념도
  

DMA 사용 이유 - DMA sayong iyu

   다. DMA의 특징
   - CPU의 개입없이 주변장치와 주기억장치와의 데이터 직접 전송
   - 프로그램 수행 중 입출력을 위한 인터럽트의 발생 횟수를 최소화하여 컴퓨터 시스템의 효율을 높임
   - CPU는 DMA와 상태정보 및 제어정보만을 주고 받음
   - 속도가 빠른 디스크, 테이프 등에 사용됨

  2. 입출력 처리방식의 종류

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

   나. 인터럽트 처리에 의한 I/O
   - 입출력 인터페이스가 주변장치의 상태를 검사하여 준비상태가 되면 인터럽트라 신호를 발생하여 입출력 처리를 요구하는 방식
   - CPU는 그전에 수행되던 프로그램의 상태를 스택에 저장한 후 Context Switching과정을 통해 인터럽트 서비스 프로그램 수행
   - 주변장치에 명령을 보낸 후 주변장치로 부터 결과가 올 때까지 CPU는 다른 작업을 수행할 수 있으므로 효율성 증가
   - 프로그램에 의한 I/O의 문제점 개선

   다. 메모리 직접 접근 I/O(Direct Memory Access : DMA)    - 인터럽트 방식이 프록램에 의한 입출력 방식보다는 효율적이지만 입출력을 위한 상태정보, 제어정보, 데이터 전송을 위해서는 여전히 CPU의 능동적인 개입이 요구됨
   - CPU는 상태정보, 제어정보만을 교환하게 하고 데이터 전송은 주변장치와 주기억장치간에 직접 교환되게 하는 방식이 더 효율적
   - DMA를 사용하기 위해서는 시스템 버스상에 모듈이 하나 추가
   - Hardwired Controller가 CPU대신 입출력 담당, CPU는 입출력 관련정보를 포함한 명령을 DMA에 보낸 후 다른 일을 계속
   - DMA모듈은 CPU를 통하지 않고 한번에 한 단어씩 직접 기억장치로 부터 모든 데이터 블록을 전송
   - 전송이 완료되면 DMA모듈은 CPU에게 인터럽트 신호를 보내고 CPU는 전송의 시작과 끝 부분에만 관여

   라. 채널에 의한 I/O
   - DMA 개념을 확장하여 구현한 입출력만을 위한 전용처리장치
   - CPU처럼 독자적으로 주기억장치에 저장된 명령어를 처리할 수 있는 능력
   - 입출력 채널은 CPU의 개입없이 입출력 처리를 수행
   - 두 가지 종류의 채널
     1) 선택채널(Selector Channel) : 한 번에 하나의 입출력 장치 제어
     2) 다중화채널(Multiplexor Channel) : 한번에 여러 장치에 대한 입출력 제어, 저속장치에는 바이트 다중화 채널, 고속장치에는 블록 다중화 채널 이용

  3. Cycle Stealing의 개념 및 유사 개념 비교

   가. DMA 전송방식인 Cycle Stealing의 개념
   - CPU와 DMA가 동시에 버스를 사용하고자 할 때 DMA에게 먼저 제어권을 넘겨주는 것
   - DMA 제어기가 한번에 한 데이터 워드를 전송하고 버스의 사용권을 CPU에게 반환
   - CPU측에서는 자신의 동작의 지연없이 한번의 메모리 사이클릉 DMA에게 양보

   나. DMA와 유사한 개념 비교

Polling Interrup Cycle Stealing
- CPU가 수시로 각 주변장치들의 인터럽트 요구를 확인
- 주변 장치 상태 보존 안함
- CPU의 시간낭비, 처리효율 감소
- 프로그램 제어하의 직접 입출력 방식
- 주변장치에서 CPU로 들어오는 보고만 접수
- 주변장치 상태 보존
- CPU 처리효율 증대
- 인터럽트 서비스 루틴에 의한 처리
- DMA 모듈이 버스사용을 위해 CPU동작을 일시중단
- 상태정보 저장안함
- 버스사이클 동안 잠시 CPU 정지

<출처 : http://kpjiju.com.ne.kr/high_licen/pro_lec0.html >

문제) DMA의 장점에 해당되는 것은?

가. 속도가 느린 메모리가 사용될 수 있다.

나. 마이크로 프로세서가 데이터 전송을 제어한다.

다. 데이터 전송 회로가 보다 덜 복잡하다.

라. 보다 빠른 데이터 전송이 가능하다.

정답) 라.

DMA 사용 이유 - DMA sayong iyu

AMD의 DirectGMA는 DMA의 일종이다. PCIe 버스와 AMD 파이어프로 브랜드 제품 상에서 낮은 레이턴시로 장치 간 P2P 데이터 전송을 가능케 한다. DirectGMA를 지원하는 직렬 디지털 인터페이스(SDI) 장치들은 GPU의 그래픽스 메모리에 직접 기록이 가능하며 거꾸로 GPU가 직접 상대 장치의 메모리에 직접 접근할 수도 있다.

직접 메모리 접근(直接 - 接近, Direct Memory Access, DMA)은 특정 하드웨어 하위 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근할 수 있게 해주는 컴퓨터 시스템의 기능이다.

한편, PIO는 DMA의 반대개념으로써, 장치들 사이에 전송되는 모든 데이터가 중앙처리장치를 거쳐가는 방식이다. DMA는 PIO의 단점을 보완하기 위해 고안된 기능이다.

주변장치의 데이터는 장치 컨트롤러에 의해 로컬 버퍼로 이동한다. 그러나 전송할 데이터가 많은 경우, 많은 양의 데이터의 이동으로 인한 부담이 커지는데 이러한 문제를 해결하기 위해 DMA를 이용한다. 장치 컨트롤러가 데이터의 한 블록을 이동시키는데 이 과정에서 DMA로 인해 CPU의 개입이 필요없게 된다. CPU에서는 데이터 이동이 완료되었다는 단 한 번의 인터럽트만 발생한다. 데이터가 전송되는 동안 CPU는 다른 작업을 수행할 수 있게 되어 효율성이 높아진다.

디스크 드라이브 컨트롤러, 그래픽 카드, 네트워크 카드, 사운드 카드를 포함한 많은 하드웨어 시스템이 DMA를 사용한다. DMA는 멀티 코어 프로세서의 칩 내부 데이터 전송에도 쓰인다. DMA는 메모리 간 복사 또는 데이터 이동에도 쓰일 수 있다.

DMA는 과거 IBM의 특허 기술이었다(현재는 특허권 소멸).

이론[편집]

Third-party[편집]

표준 DMA(Third-party DMA)는 DMA 컨트롤러를 사용한다. DMA 컨트롤러는 메모리 주소를 생성하고 메모리 읽기 또는 쓰기 사이클을 초기화할 수 있다. 여기에는 일부 하드웨어 레지스터들이 포함된다. 이것들은 메모리 주소 레지스터, 바이트 카운트 레지스터와 하나 이상의 레지스터들을 포함한다. DMA 컨트롤러의 특징에 따라 컨트롤 레지스터들은 원본, 대상, 전송 방향, 전송 크기 단위, 버스트 당 전송 파이트 수의 조합을 지정할 수 있다.[1]

버스 마스터링[편집]

버스 마스터링 시스템(First-party DMA System)에서 CPU와 주변 장치는 각각 메모리 버스 통제권을 얻을 수 있다. 버스 마스터가 될 수 있는 주변장치는 필요에 따라 메모리 주소와 제어 신호를 제공 받아 CPU를 거치지 않고 시스템 메모리에 직접 쓸 수 있다.

동작 모드[편집]

버스트 모드 (Burst mode)[편집]

버스트 모드에서 전체 데이터 블록은 하나의 연속된 시퀀스로 전송된다. DMA 컨트롤러가 CPU로부터 시스템 버스 접근을 허락 받으면 DMA 컨트롤러는 CPU에게 시스템 버스 접근 제어권을 돌려주기 전까지 데이터 블록의 모든 데이터를 전송한다. 이 모드를 "블록 전송 모드"라고 부르기도 한다.

사이클 도용 모드 (Cycle stealing mode)[편집]

사이클 도용 모드는 전송 시간 동안 CPU가 비활성화되어선 안되는 시스템에서 사용된다. 사이클 도용 모드에서는 DMA 컨트롤러는 BR(Bus Request) 신호와 BG(Bus Grant) 신호를 이용하여 버스트 모드와 같은 방식으로 시스템 버스 접근을 얻을수있다. 이 두 신호는 CPU와 DMA 컨트롤러 사이의 인터페이스를 제어한다. 사이클 도용 모드에선 1 바이트의 데이터를 전송한 뒤 BG 신호를 통해 CPU로부터 얻은 시스템 버스 제어권이 해제된다. 전체 블록이 전송될 때까지 BR를 통하여 시스템 버스 제어권을 요청하며 요청당 1 바이트의 데이터를 전송한다. 지속적으로 시스템 제어권을 얻고 해제하는 것으로 DMA 컨트롤러는 실질적으로 명령과 데이터 전송을 교차 배치한다. CPU가 명령을 처리하면 DMA 컨트롤러는 하나의 데이터 값을 전송한다. 사이클 도용 모드의 데이터 블록 전송 속도는 버스트 모드만큼 빠르지 않지만 CPU가 버스트 모드만큼 길게 대기하지 않는다. 사이클 도용 모드는 데이터를 실시간으로 모니터링 해야하는 컨트롤러에 유용하다.

투명적 모드 (Transparent mode)[편집]

투명적 모드는 데이터 블록을 전송하는데 대부분의 시간을 사용하지만 이것은 전체 시스템 성능 측면에서 가장 효율적인 모드이다. 투명적 모드에서 DMA 컨트롤러는 CPU가 시스템 버스를 사용하지 않는 명령들 실행할 때만 데이터를 전송한다. 투명적 모드의 장점은 CPU가 프로그램 실행 도중 멈추지 않는 다는 것과 DMA 전송이 시간 측면에서 자유롭다는 것이며 단점은 하드웨어가 CPU가 시스템 버스를 사용하는지 판별해야하며 이것이 복잡할 수 있다는 것이다. 이 모드를 "은닉 DMA 데이터 전송 모드"라고 부르기도 한다.

캐시 간섭[편집]

DMA는 캐시 일관성 문제를 일으킬 수 있다.

예[편집]

ISA 버스 표준에서는 DMA를 위해 메모리를 최대 16MB까지 지정할 수 있다. EISA와 MCA 표준은 (32비트 주소지정이 가능하다는 전제 하에) 전체범위의 메모리 주소에 액세스를 허용한다. PCI는 CPU가 PCI 콘트롤러에 입출력제어를 위임하는 버스 마스터링을 사용하여 DMA를 지원한다. 방식에는 폴링(polling), 인터럽트(INT)방식이 있다.

  • ISA
  • PCI
  • AHB

같이 보기[편집]

  • 프로그램 입출력 (PIO)
  • 원격 기억 직접 접근 (RDMA)
  • 고급 기술 추가 (ATA)

각주[편집]

  1. Osborne, Adam (1980). 《An Introduction to Microcomputers: Volume 1: Basic Concepts》 2판. Osborne McGraw Hill. 5–64 through 5–93쪽. ISBN 0931988349.

외부 링크[편집]

  • Mastering the DMA and IOMMU APIs, Embedded Linux Conference 2014, San Jose, by Laurent Pinchart