@ DMA는 또 뭔가요?
// Direct Memory Access의 줄임말입니다.
@ 이 때까지 Interrupt or pooling 등은 charactor I/O Operation이었는데요
// 당시 I/O Transfer unit이 1-char였습니다.
> one or two bite
@ 하지만 가끔 Block 데이터를 전송할 때에 위의 방식은 너무 느렸습니다.
// 1byte를 보내도 interrupt에 걸리면 interrupt handler라는 코드가 수행되어 비효율적이지요.
> 이와 같은 Action에서 CPU의 intervation을 최소로 하는 방법을 고안합니다.
> 그것이 바로 DMA Operation 입니다.
@ CPU가 DMA Controller에게 DMA Operation은 initiation하기 위해서는 데이터와 command를 제공해야 합니다.
// 지금 전송해야 할 데이터의 memory 상의 시작점(주소) 전달
> Block Starting Adress
// 얼마나 많은 데이터를 한 Block에 포함하고 있는지
> Block Volume
// Read or Write command
> Operation Command
@ DMA Controller(Bus Master) 가 이렇게 수행하기 위해서는 Bus를 장악할 필요가 있습니다.
// 1 word씩 메인 메모리(Bus Slave)에서 읽어오고,
// 자기 Buffer에 저장해 두었다가 I/O Device에 전달합니다.
> 이 모든 것이 끝나면 DMA Controller는 Interrupt Mechanism을 이용해서
> CPU에게 완료 시그널을 보냅니다.
// 이렇게 Controller가 메모리에 바로 Access한다고 해서 'Direct Memory Access'라고 부릅니다.
@ DMA Block Data를 옮기는데에는 두가지 방식이 존재합니다.
// Cycle Stealing
> CPU가 메모리에 엑세스하는 걸 간섭하지 않기 위해서
.. CPU가 instruction을 수행하고 있고
.. bus가 idle할 때에
> DMA Controller가 위의 상황일 때에만, Bus를 사용하는 방식을 말합니다.
.. 이를 이용해 Data를 1 word 당위로 옮겨가겠지요?
> 장단점
.. 장점 : CPU 성능에는 영향을 미치지 않습니다.
.. 단점 : DMA에 시간이 오래걸리겠지요?
// Block Transfer
> CPU와 DMA Controller가 대등하게 경쟁하여 Bus를 사용하는 방식입니다.
> 장단점
.. DMA 시간이 빠릅니다.
.. CPU 성능에 간섭이 생길 수 있습니다.