2006년 10월 4일 수요일

DMA (II)

1. DMA의 개념

이러한 DMA 컨트롤러는 입출력장치와 관련된 개념입니다. 일반적으로 이러한 입출력 창치는 직접 시스템 버스에 접속되지 않습니다. 그 이유는 입출력 장치가 다양하고, 각기 전송속도의 차이가 나며, 데이터의 형식과 길이가 다르기 때문입니다.
그래서 입출력 장치를 제어하기 위해서는 입출력 제어기가 필요합니다. 그리고, 입출력 제어기는 입출력 장치의 제어와 타이밍을 조절하는 역할을 하고, CPU와 입출력 장치의 통신을 담당합니다. 또한 데이터의 버퍼링이나 오류를 검출하는 역할을 수행합니다. 물론 CPU는 해당 입출력 제어기를 통하여 입출력 동작을 수행하고요. 그런면에서 DMA는 넓은 의미에서 입출력 제어기의 범위로 이해하셔도 무방합니다.

2. 보통메모리 제어방식

질문자가 말한 보통의 메모리 제어방식은 아마도 인터럽트를 통한 입출력 제어 방식을 의미하는 것 같습니다.
이러한 인터럽트 방식은 I/O동작이 입출력 제어기와 입출력 장치사이에서 진행되는 동안에는 CPU가 다른 작업을 할 수 있습니다.

동작순서를 살펴보면,
1. CPU가 I/O제어기에 명령을 보내고, CPU는 다른 작업을 수행 합니다.
2. 제어기는 I/O 장치를 제어하여 I/O 명령을 수행 합니다.
3. I/O 명령 수행이 완료되면, 제어기는 CPU 로 인터럽트 신호를 보냅니다.
4. CPU는 인터럽트 신호를 받는 즉시 원래의 프로그램으로 돌아와서 수행을 계속한다.

하지만 이런 인터럽트 방식은 많은 문제점이 있는데, 이를 해결하기 위해 다중 인터럽선을 사용하는방식, 데이지 체인 방식, 소프트웨어 폴링 방식 같은 것을 사용하기도 합니다.그러나 인터럽트 방식은 기억장치와 I/O 장치간의 데이터 통신에 CPU가 직접개입을 하여야 하는데, 이로인하여, 이동되는 데이터들이 반드시 CPU를 경유해야 한다는 단점이 있습니다. 이것을 해결하기 위해 등장한 것이 DMA 방식입니다.

3. DMA 방식

이러한 DMA방식은 CPU의 개입없이 I/O장치와 기억장치 사이에 데이터 전송이 일어나므로 이를 직접메모리 제어 방식이라 부르는 것입니다.
DMA 커트롤러는 CPU를 사용하지 않으므로 I/O장치의 주소와 연산지정자(읽기/쓰기), 주기억 장치 영역의 시작주소, 전송될 데이터 단어들의 수를 알 수 있도록 구성되어야 합니다. 또한 사이클 훔침이라해서 CPU가 주기억 장치를 엑세스 하지 않는 동안에 시스템의 버스를 사용하는 기능이 필요합니다.

주기억 장치의 데이터 블록을 디스크에 저장하는 DMA과정을 살펴보면,
1. CPU가 DMA 컨트롤러에게 명령을 보냅니다.
2. DMA 는 CPU로 BUS REQ 신호를 보냅니다.
3. CPU가 DMA에세 BUS GRANT 신호를 보냅니다.
4. DMA가 메모리에서 데이터를 읽어 디스크에 저장합니다. <--(요것이 핵심)
5. 전송할 데이터가 남아 있으면, 위의 과정 반복
6. 모든 데이터 전송이 끝나면, CPU에게 INTR신호를 보냄

하지만 이런 DMA제어기를 이용한 I/O데이터 전송의 문제는 지원에 한계가 있으며, 버퍼링을 위한 내부 기억장치가 따로 필요하는 단점이 있습니다.

4. 채널

일반적으로 DMA 제어에서 채널을 의미하는 것은 IOP입니다. IOP는 입출력 프로세서를 의미하는데, 이러한 IOP는 4가지로 구성됩니다.

1. I/O명령을 실행할 수 있는 프로세서
2. 데이터 블록의 임시 저장을 위한 로컬메모리
3. 시스템 버스에 대한 인터페이스 및 버스 마스터 회로
4. I/O버스 중재 회로, 혹은 OS의 디바이스 드라이브 루틴 프로그램들이 IOP에서 실행되기도 합니다.

*PS : 그리고, 32비트 cpu의 경우 DMA방식을 사용하는 이유는 일반적인 입출력 장치가 32비트수를 필요로 하지 않기 때문이기도 합니다. 또한 멀티라는 개념이 등장하면서 이러한 기술들이 활용되었기 때문이기도 하고요.

댓글 없음: