DMA란?
- DMA(Direct Memory Access)는 특정 하드웨어 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근할 수 있게 해주는 컴퓨터 시스템의 기능이다.
자세하게 설명하면, 원래 컴퓨터 장치들 사이에서 전송되는 모든 데이터는 중앙처리장치(CPU)를 거쳐가는 방식이다.(PIO 방식, Programmed Input / Output의 줄임말)
하지만 DMA를 통해 CPU를 거치지 않고, 메모리 버퍼, 포인터, 카운터 등을 사용하여 CPU의 도움 없이 DMA 컨트롤러를 사용하여 데이터를 직접 메모리(RAM 등)로 전송할 수 있는 기능이다.
- DMA를 사용하게 되면 I/O 장치와 메모리 사이에 직접적인 데이터 이동이 가능해진다.
DMA의 특징
- 프로그램 수행 중 인터럽트의 발생 횟수 최소화 및 시스템 효율성 증대
CPU를 거치게 되면 입출력을 위해 I / O interrupt가 많이 발생하게 되고 그로 인해 시스템 효율성이 떨어질 수 있지만 DMA를 사용하면 그 것을 피할 수 있다.
- CPU는 DMA 컨트롤러와 상태 정보 및 제어 정보만 전송한다.
- CPU의 개입 없이 입출력장치와 주 기억장치와의 데이터 직접 전송이 가능하다.
- DMA는 기억장치 접근을 위해 CPU의 시스템 버스 사용권을 일시적으로 뺏는 사이클 스틸링(Cycle Stealing)을 수행한다. 시스템 버스에 대해 CPU보다 DMA의 우선순위가 높다.
- DMA 제어기와 CPU가 시스템 버스를 공유한다.
실제 CPU가 control하는 것은 DMAC(DMA Controller) 뿐이다.
입출력(I / O)의 종류
종류 | 설명 |
Programmed I/O | - CPU 상에서 실행되는 프로그램에 의해 입출력이 직접 제어된다. - CPU는 입출력 장치에 명령을 보낸 후 동작이 완료될 때까지 대기한다. - CPU는 주기적으로 주변 장치의 상태를 반복적으로 검사하고 폴링하는 방식으로 작동한다. - CPU의 자원 낭비가 발생한다. |
Interrupt Driven I/O | - 입출력 인터페이스가 주변 장치의 상태를 검사하여 준비 상태가 되면 인터럽트 신호를 발생하여 입출력 처리를 요구하는 방식 - CPU는 그 전에 수행되던 프로그램의 상태를 스택에 저장한 후 Context Switching 과정을 통해 인터럽트 서비스 프로그램을 수행한다. - 주변 장치에 명령을 보낸 후 주변 장치로부터 결과가 올 때까지 CPU는 다른 작업을 수행할 수 있으므로 효율성이 위 보다 좋다. - Programmed I/O의 문제점을 개선한 버전 |
DMA | - 인터럽트 방식이 Programmed I/O보다 효율적이지만 입출력을 위한 상태정보, 제어정보, 데이터의 전송을 위해서는 여전히 CPU의 능동적인 개입이 요구된다. - CPU는 상태정보, 제어정보만을 교환하게 하고 데이터 전송은 주변 장치와 주기억장치 간에 직접 교환하게 하는 방식이 더 효율적이다. - DMA를 사용하기 위해서 시스템 버스 상에 모듈이 하나 추가된다. - DMA 모듈은 CPU를 통하지 않고 한번에 한 단어씩 직접 기억장치로부터 모든 데이터 블록을 전송한다. - 전송이 완료되면 DMA모듈은 CPU에 인터럽트 신호를 보내고 CPU는 전송의 시작과 끝 부분에만 관여한다. |
Channnel에 의한 I/O | - DMA 개념을 확장하여 구현한 입출력만을 위한 전용 처리 장치 - CPU처럼 독자적으로 주기억장치에 저장된 명령어를 처리할 수 있는 능력이 있다. - 입출력 채널은 CPU의 개입없이 입출력 처리를 수행한다. - 두 가지 종류의 channel이 존재한다. |
DMA 사용처
- 디스크 드라이브 컨트롤러
- 그래픽 카드
- 네트워크 카드
- 사운드 카드
- 멀티 코어 프로세서의 칩 내부 데이터 전송에도 쓰임
- 메모리 간 복사 또는 데이터 이동
- 기타 등등
동작 모드
버스트 모드(Busrt mode)
- 한 번의 DMA 동작 중 block 단위의 데이터 전송 시 적용
- 여러 개의 메모리 워드로 구성된 블록이 지속적으로 전송
- 고속의 입출력 장치를 대상으로 하며, DMA 인터페이스가 버스 사용권을 획득하면 데이터 전송이 완료될 때까지 버스 사이클 독점
사이클 스틸링(Cycle stealing mode)
- DMA 컨트롤러와 CPU가 동시에 버스를 사용하고자 할 때 속도가 빠른 CPU가 속도가 느린 DMA에게 버스 사용 우선 순위를 주어 빠른 입출력이 가능하게 하는 방법
- 한번의 DMA 동작 중 한 워드 정도의 데이터를 전송 시 적용
투명적 모드(Transparent mode)
- 데이터 블록을 전송하는데 대부분의 시간을 사용하지만, 전체 시스템 성능 측면에서 가장 효율적인 모드
- DMA 컨트롤러는 CPU가 시스템 버스를 사용하지 않는 명령들을 실행할 때에만 데이터를 전송한다.
- CPU가 프로그램 실행 도중 멈추지 않는다.
- DMA 전송이 시간 측면에서 자유롭다.
- 하드웨어가 CPU가 시스템 버스를 사용하는지 판별해야하는데 이 작업이 복잡할 수 있음
- 은닉 DMA 데이터 전송 모드라고 부르기도 함
DMA 구성도 및 동작 방식
① I/O 인터페이스가 DMA 컨트롤러에게 DMA 서비스 요청을 전송
② CPU의 HOLD Pin에 Bus Request가 전송되어 버스에 대한 제어를 DMA가 획득(Active High)
③ CPU의 HLDA(Hold Acknowledge) Pin으로부터 DMAC에 Bus grant(버스에 대한 제어가 주어졌다는 것을 알려주는 flag?)가 리턴됨(Active High)
④ DMAC는 Address bus에 Address Register의 Contents를 적재한다.
⑤ DMAC는 I/O interface에게 데이터를 데이터 버스에 적재하도록 DMA Acknowledgement를 전송한다.
⑥ Data Byte가 Address Bus에 의해 식별된 위치로 전송된다.
⑦ I/O interface는 데이터를 지속적으로 전송 유지한다.(Latch)
⑧ Bus Request가 drop되어 HOLD가 Low 상태가 되어 DMAC는 Bus에 대한 사용권을 돌려준다.
⑨ Bus Grant가 drop되어 HLDA가 Low 상태가 된다.
⑩ 그 후, Address Register가 1 증가되고, Byte Count는 1 감소된다.
⑪ Byte Count가 0이 아니면 ①로, 0이면 정지
'TIL & WIL' 카테고리의 다른 글
[CS] 크래프톤 정글 6주차 - 이더넷(Ethernet) (0) | 2024.05.03 |
---|---|
[TIL] 크래프톤 정글 6주차 Paging & Demand Paging (0) | 2024.05.02 |
[TIL] 크래프톤 정글 5주차 CS:app 9(가상 메모리 & 동적 메모리 할당) (1) | 2024.04.26 |
[TIL] 크래프톤 정글 5주차 CS:app 8(예외적인 제어 흐름) (0) | 2024.04.26 |
[TIL] 크래프톤 정글 5주차 - 자료구조(RB Tree) (1) | 2024.04.20 |