CS/OS

[OS] DMA

창문닦이 2021. 6. 20. 18:06

DMA(Direct Memory Access)

  • DMA는 CPU를 대신하여 I/O장치와 Memory사이의 데이터전송을 담당하는 장치를 지칭한다.
  • DMA에 의한 입출력 방식은 CPU의 개입 없이 직접 주기억 장치와 DMA 사이에서 일련의 입출력 동작이 이루어지는 방식

DMA의 특징

  • CPU를 경유하지 않고 직접 기억 장치와 입출력 장치 사이에서 전송이 이루어진다.
  • 하나의 입출력 명령어에 의해 하나의 블록 전체가 전송된다.
  • 사이클 스틸에 의해 전송이 이루어진다.
  • 전송이 끝나면 인터럽트를 발생시켜 CPU에게 알린다.
  • 데이터 전송 절차 : 버스 사용 요구 -> 버스 사용 허가 -> 데이터 전송 -> 인터럽트

DMA 필요성

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

DMA I/O와 Direct I/O 환경 비교

DMA I/O – DMA 기반 Data 처리 중 CPU는 다른 프로세스 처리

 

Direct I/O(DMA 미사용) – Data I/O 처리 시 완료까지 작업 중지, CPU 대기 필요

입출력 종류

  • Programmed I/O : Port를 이용한 데이터 전송, 프로그램에 의해 제어, 주변장치의 상태가 준비상태가 될 때까지 CPU는 대기상태
  • Interrupt Driven I/O : 입/출력 인터페이스가 주변장치 상태 값을 요청. 준비상태가 되면 입터럽트 신호가 구동되어 CPU에 I/O를 요청
  • DMA : CPU의 직접적인 개입 없이 /O 장치와 Memory 사시의 데이터 전송을 담당하는 제어기를 사용

DMA 구성도

① I/O 인터페이스가 DMA 컨트롤러에게 DMA 서비스를 요청을 전송

② CPU의 HOLD Pin에 Bus Request가 전송되어 버스에 대한 제어를 DMA가 획득 (Active High)

③ CPU의 HLDA(Hold Acknowledge) Pin으로부터 DMAC에 Bus grant가 리턴됨 (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이 아니면 Step ①로, 0이면 정지


DMA 동작모드

사이클 스틸링(Cycle Stealing)

  • DMA 컨트롤러와 CPU가 동시에 Bus를 사용하고자 할 때 속도가 빠른 CPU가 속도가 느린 DMA에게 BUS 사용 우선순위를 주어 빠른 입출력이 가능하게 하는 방법
  • 한번의 DMA동작 중 한 Word 정도의 데이터를 전송시 적용

버스트 모드(Burst Mode)

  • 한번의 DMA동작 중 Block 단위의 데이터 전송시 적용
  • 여러 개의 메모리 워드로 구성된 블록이 지속적으로 전송
  • 고속의 입출력 장치를 대상으로 하며, DMA 인터페이스가 버스 사용권을 획득하면 데이터 전송이 완료 될 때까지 버스사이클 독점

참조 사이트

https://www.quora.com/What-is-the-function-of-DMA-in-a-computer

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

http://blog.skby.net/dma-direct-memory-access/

 

전공 필기 스터디하면서 내가 담당한 용어 정리!

 

'CS > OS' 카테고리의 다른 글

[Linux] 프로세스  (0) 2020.05.23
[Linux] 쉘 스크립트 기초 문법  (1) 2020.05.23
[OS] 윈도우 부팅 디스크 버전 확인하기  (0) 2020.03.07
[OS] 운영체제 기초  (0) 2020.02.29
[Linux] 생활코딩 리눅스 강좌 (5)  (0) 2019.10.08