[운영체제] DMA(Direct Memory Access)란? (DMA vs PIO)

PIO(Programmed I/O)

PIO는 주변장치들(I/O device) 사이 전송되는 모든 데이터가 CPU를 거쳐간다. 

이때 CPU는 주변 장치들에 대한 지속적인 모니터링을 통해 주변 장치들이 준비가 됐는지 체크하기 때문에

불필요하게 CPU 주기를 낭비하고 "Busy" 상태가 빈번하게 된다.

 

이러한 단점을 극복할 수 있는 방식이 Interrupt Initiated I/O 방식이다.

 

 

 

Interrupt Initiated I/O

PIO에서 CPU가 지속적으로 주변 장치들의 상태를 확인한 것과 다르게,

Interrupt Initiated I/O 방식은 주변 장치들이 available 상태가 되면 interrupt를 발생시킨다.

 

CPU는 interrupt가 발생하기 전까지 다른 작업을 수행하고,

interrupt가 발생하면 I/O 작업을 진행해 CPU 주기를 절약할 수 있다.

 

PIO 방식의 단점을 개선했지만, 수많은 interrupt가 발생한다면 여전히 CPU가 비효율적으로 동작하게 되는 단점이 있다.

이러한 단점을 개선할 수 있는 방식이 바로 DMA이다.

 

DMA(Direct Memory Access)란?

DMA는 말 그대로 메모리(Memory)에 직접 접근하는 방식을 뜻한다.

 

이때 CPU는 데이터 전송에 전혀 관여하지 않는다는 점이 중요하다. 

DMA는 주변장치들이 메인 메모리와 직접 데이터를 공유할 수 있다. 

 

따라서 이때 CPU는 다른 작업을 수행할 수 있다.

 

 

DMA의 동작원리

그럼 DMA는 어떻게 CPU의 개입없이 직접 메모리에 접근할 수 있는 걸까?

 

우선, DMA 기능을 위해서 메모리의 일정 부분은 DMA를 위한 공간으로 확보되어 있어야 한다.

ISA에 따르면 최대 16MB의 메모리가 DMA를 위해 할당되어야 한다.

 

DMA Controller
[그림 1] DMA Controller

 

이때 DMA Controller(DMAC)가 메모리에 접근해 Bus Line을 통해 데이터를 전송할 수 있다. 

 

데이터를 전송하는 것은 아래와 같이 3개의 방법을 통해 할 수 있다.

 

  • Burst Mode : CPU가 잠시 DMAC에게 system bus에 대한 접근 권한을 준다. DMAC는 모든 데이터를 한 번의 작업동안 모두 전송한다. DMAC는 데이터 전송을 완료하면 다시 bus에 대한 권한을 CPU에게 돌려준다. CPU는 DMAC가 데이터 전송을 하는 동안은 잠시 작업을 할 수 없다는 단점이 있지만 DMA 방식 중 가장 빠른 방법이기도 하다.
  • Cycle-stealing Mode : DMAC가 1Byte씩 데이터를 전송하며 CPU에게 bus에 대한 권한을 주고받는다. Burst Mode보다는 느리지만 Burst Mode보다 CPU가 더 많이 작업을 수행할 수 있다.
  • Transparent Mode : CPU가 system bus를 사용하지 않는 작업을 수행할 때만 DMAC가 데이터를 전송하는 모드이다. 따라서 CPU는 DMAC가 데이터를 전송할 때 작업을 계속할 수 있다. 이 경우 3가지 모드 중 가장 데이터전송이 느리지만, 시스템 성능에 해당 모드가 가장 효율적이라고 평가받는다.

 

 


참고

 

[1] https://www.techtarget.com/whatis/definition/Direct-Memory-Access-DMA

[2] https://velog.io/@sang_yun_911/CS-DMA%EB%9E%80

[3] https://en.wikipedia.org/wiki/Direct_memory_access

[4] https://www.tutorialspoint.com/operating_system/os_io_hardware.htm

반응형

댓글

Designed by JB FACTORY