DMA 동작순서

|

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

1. CPUI/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. CPUDMA 컨트롤러에게 명령을 보냅니다. 2. DMA CPUBUS REQ 신호를 보냅니다.3. CPUDMA에세 BUS GRANT 신호를 보냅니다.4. DMA가 메모리에서 데이터를 읽어 디스크에 저장합니다.<--(요것이 핵심)5. 전송할 데이터가 남아 있으면, 위의 과정 반복6. 모든 데이터 전송이 끝나면, CPU에게 INTR신호를 보냄하지만 이런 DMA제어기를 이용한 I/I데이터 전송의 문제는 지원에 한계가 있으며, 버퍼링을 위한 내부 기억장치가 따로 필요하는 단점이 있습니다.4. 채널일반적으로 DMA 제어에서 채널을 의미하는 것은 IOP입니다. IOP는 입출력 프로세서를 의미하는데, 이러한 IOP4가지로 구성됩니다.1. I/O명령을 실행할 수 있는 프로세서2. 데이터 블록의 임시 저장을 위한 로컬메모리3. 시스템 버스에 대한 인터페이스 및 버스 마스터 회로4. I/O버스 중재 회로,혹은 OS의 디바이스 드라이브 루틴 프로그램들이 IOP에서 실행되기도 합니다.*PS : 그리고, 32비트 cpu의 경우 DMA방식을 사용하는 이유는 일반적인 입출력 장치가 32비트수를 필요로 하지 않기 때문이기도 합니다. 또한 멀티라는 개념이 등장하면서 이러한 기술들이 활용되었기 때문이기도 합니다.

DMA(Direct Memory Aaess)

   CPU를 통하지 않고 주변기기의 인터페이스 장치에 제어권을 주어 직접 주기억장치와 데이터를 주고 바는 방식으로 액세스하여   데이터를 전송하는 방법

   ·출력 속도가 향상

  DMA가 메모리를 접근하기 위해서는 Cycle stealing(사이클 도용)을 한다.     CPU의 계속적인 관여 없이 데이터를 메모리와 주변장치 사이에 전송한다.

  전송이 끝나면 DMA 제어기는 CPU를 인터럽트 한다.

 

8.2.2 독립적 입출력

    독립적 입출력 장치를 사용하는 경우는 대량의 데이터를 전송하는데 적합하다.

1) DMA(Direct Memory Access)

데이터 전송시, 초기 설정시에만   CPU의 제어를 받으, 이 후의  데이터 전송은 DMA 제어기에 의해  입출력 장치의 데이터가 직접 메모리로 전달된다.



위 그림에 DMA 전송 과정을 나타내었으며, DMA 수행과정은  다음 표와 같다.

 

     CPU

 DMA제어기

    I/O 장치

      Memory

(1) DMA제어기 초기화 --->

(메모리 시작주소,크기,I/O장치 번호,입출력 선택 등)

 

 

 

        <--------       (2)   DMA 요청

 

         <-----------   (3)   BUS 요청

 

 

  (4) 버스 응낙(Grant) ------------->

 

 

    

 (5) DMA 응낙           ------------->

 

 

 

  (6) 자료전송   <--------------->

     <----------  (7)   DMA완료 인터럽트

 

 

 

 - DMA 전송시간 중에 CPUMemory는 데이터를 상호 전송할 수 없으므로,   CPU의 버스는 HOLD상태에 있게 된다.     이와 같이 되면 CPU가 처리할 명령어 및 처리할 데이터가 메모리에  있으므로, 원래의 목적 ( 입출력 데이터 전송에 관계 없이 CPU가 계속 동작)  문제가 있게 된다.

- 이러한 문제를 해결하기 위하여 CPU 동작 시 메모리와 관계없는  사이클에 만 DMA의 수행을 하게 하며, 이 밥법은 CPUCycle을 도용한다고 하여 Cycle Stealing이라고 한다.

 

2)  I/O Channel (I/O Processor)

      독립적으로 입출력 장치의 데이터를 처리하며, 자체 실행 명령어가 별도로 존재하고 이에 따라 동작이 수행된다.



    - Selecter Channel

          Channel에 고정적으로 연결되어 사용하며, Disk Driver와 같이 고속의 전송에 사용된다.

   - Multiplexer Channel

     Channel에 연결된 장치를  정해진 시간 마다 1개씩 할당하여 사용하며, Termianl이나 Printer과 같은 저속의 장치에 주로 사용한다.11.0 입출력 구조

 

11.6 직접 메모리 접근

DMA(direct memory access) 전송 방식

- 자기 디스크와 같은 고속 저장 장치와 메모리 사이의 데이타 전송은 CPU에 의해 속도가 제한될 수 있다

- 데이타 경로에서 CPU를 제거하고 주변장치가 직접 메모리 버스를 관리하여 전송 속도 증가

- DMA 전송 수행동안 CPU는 메모리 버스를 제어하지 못하고 쉬게 된다

- CPU를 휴지(idle) 상태에 있도록하는 일반적인 방법

.특별한 제어신호를 통하여 버스를 disable시키는 방법

      

 

  

. 버스 요구(bus request,BR):

   DMA 제어기가 CPU에게 버스제어를 포기하도록 요청하는 신호

   신호가 활성화되면 CPU는 현재의 명령실행을 끝내고,

   주소버스, 데이타버스, ReadWrite 제어 라인을 고저항 상태로 설정

. CPU는 버스승인 출력(bus grant,BG)을 통하여 버스가 고저항 상태임을 표시

. 요청신호를 낸 DMA가 버스의 제어를 장악하고 메모리전송을 수행

. DMA전송이 완료되면 버스요구를 disable하고,

   CPU가 버스승인을 disable하여 정상으로 복귀

- DMA를 이용한 메모리 전송 방법

. DMA 대량 전송(burst transfer):

      DMA 제어기가 메모리 버스를 제어하고 있는 동안,

      여러개의 메모리 워드로 구성된 블럭이 지속적으로 전송

   자기 디스크같은 고속의 장치를 위해 사용

- 사이클 스틸링(cycle stealing)에 의한 전송 방법

      DMA 제어기가 한번에 한 데이타 워드를 전송하고

      버스의 전송을 CPU에게 반환, CPU측에서는 자신의 동작의 지연없이

      한번의 메모리 사이클을 DMA에게 양보

DMA 제어기

- DMA 제어기(DMA controller)의 구성

. 인터페이스 회로: CPUI/O 장치간의 통신 기능

. 주소 레지스터와 주소 라인: 메모리와 직접 통신 역할

. 워드 카운트 레지스터: 전송되어야 할 워드의 수 표시

- 전형적인 DMA 제어기의 블럭도

      

  

. 데이타 버스와 제어라인을 통해 CPU와의 통신을 수행

. CPUDS(DMA선택)RS(레지스터 선택) 입력을 이용하여 DMA에 있는 레지스터를 선택

. RD(읽기)WR(쓰기) 입력은 양방향으로 동작

. BG=0일 때는 CPUDMA 레지스터 사이의 정보교환

. BG=1일 때는 DMA가 직접 주소지정하고, RD,WR제어를 활성화하여 메모리와 통신

. DMA는 핸드셰이킹 절차에 따라 요구와 승락라인을 통해 외부장치와 통신

. DMA3개의 레지스터의 기능

   * 주소 레지스터: 메모리 주소는 버스버퍼를 통해 주소버스로 가며,

     한 워드 전송시 한 워드씩 증가

   * 워드 카운터 레지스터: 한 워드의 전송 때마다 감소되어 0과 비교

   * 제어 레지스터: 전송 모드를 지정하는데 사용

- CPUDMA 초기화

1) 데이타가 존재하거나(읽기) 저장될(쓰기) 메모리 블럭의 시작 주소

2) 메모리 블럭의 워드수를 나타내는 워드 카운터

3) 읽기나 쓰기같은 전송모드를 지정하는 제어

4) DMA 전송을 시작하는 제어

DMA 전송

- 컴퓨터 시스템에서 DMA의 위치

      

  

. CPU는 주소와 데이타 버스를 이용하여 DMA와 통신

. DMA는 자신의 주소를 받아 DSRS 입력을 활성화

. CPU는 데이타 버스를 통해 DMA를 초기화

. 주변장치가 DMA요구를 보내면

   DMA 제어기가 BR을 활성화하여 CPU에 포기 신호 전송

. CPUBR을 통해 버스 disableDMA에 통보

. DMA는 현재 주소 레지스터 값을 주소 버스에 출력

. RD 또는 WR신호를 활성화하여 주변장치로 DMA 승락 통보

. BG=0이면 RD,WR라인은 입력라인이 되어

   CPUDMA의 내부 레지스터와 통신

. BG=1이면 RD,WR라인은 출력라인이 되어

   DMA제어기와 메모리간의 읽기와 쓰기 동작 지정

. 주변장치가 DMA승락을 받으면 메모리와 데이타 전송 가능

. 매 워드가 전송될 때마다 DMA는 주소 레지스터를 하나 증가시키고,

   워드 카운터를 하나 감소시킴

. 워드 카운터가 0이 아닌동안 DMA는 주변장치로부터의 요구라인을 검사

. 고속 주변장치에서는 이전의 전송이 끝나자마자 요구라인을 활성화,

   저속의 주변 장치에서는 요구라인이 활성화될 때까지 CPU의 프로그램 수행

. 워드 카운터가 0이면 DMA전송을 중단하고, 버스요구 제거

. 인터럽트를 이용하여 CPU에 전송이 끝났음을 알림

. CPU는 인터럽트에 응답하여

   워드 카운터를 읽어와서 전송의 성공 여부 확인

- DMA 제어기의 채널

. 하나의 DMA 제어기는 여러 개의 채널을 보유 가능

. 각 채널은 독립된 주변장치에 연결된 요구와 승락 제어신호 보유

. 고유의 주소 레지스터와 워드 카운터 레지스터 보유

. 채널들 사이에 우선순위 부여, 그 순위에 따른 서비스 수행

- DMA 전송의 응용

. 자기 디스크와 메모리 사이의 고속전송이나

   대화형 단말기의 화면을 다시 그리는 작업에 유용



참고1> http://jeroschoi.tistory.com/14



And
prev | 1 | next