DMA란 Direct Memory Access의 약자로, CPU의 중재 없이 주변장치가 메모리에 직접 접근하여 데이터를 읽고, 쓸 수 있게 해주는 시스템의 한 기능이다. 즉, DMA란 CPU의 개입 없이, 주변장치(입출력장치)와 주기억장치와의 데이터 전송이 이루어지는 방법을 통칭한다. 따라서 원래는 CPU와 주기억장치만이 시스템 버스에 접근할 수 있고, 입출력장치는 DMA와 같은 입출력 제어기에 의해 시스템 버스에 접근할 수 있다.
DMA 특징
DMA를 사용하여 CPU의 개입 없이 주변장치와 주기억장치와의 데이터를 직접 전송함으로써 다음과 같은 특징을 가진다.
- 프로그램 수행 중에 입출력을 위한 interrupt 발생 횟수를 최소화하여 컴퓨터 시스템의 효율을 높일 수 있다.
- CPU는 DMA와 상태 정보 및 제어 정보만을 주고 받는다.
- 속도가 빠른 디스크, 테이프 등에 사용된다.
- DMA는 기억장치 접근을 위해 CPU의 시스템 버스 사용권을 일시적으로 뺏는 Cycling Stealing을 수행한다. 따라서 시스템 버스에 대해서 CPU보다 DMA의 우선순위가 높다.
- 정리하면 DMA 제어기와 CPU가 시스템 버스를 공유하고, 실제 CPU가 control하는건 DMAC(DMA Controller)를 control해주는 과정을 의미한다.
입출력 방식의 종류
빠른 순위에 의해서 다음과 같이 입출력 방식이 존재한다.
- 채널에 의한 I/O
- 메모리 직접 접근 I/O (DMA)
- 인터럽트 처리에 의한 I/O
- 프로그램에 의한 I/O
채널에 의한 I/O
DMA 개념을 확장하여 구현한 입출력만을 위한 전용처리장치이다. CPU처럼 독자적으로 주기억장치에 저장된 명령어를 처리할 수 있는 능력이 있다. 따라서 입출력 채널은 CPU의 개입없이 입출력 처리를 수행한다. 이런 채널에는 2가지 종류의 채널이 있다.
메모리 직접 접근 I/O (DMA)
비록 인터럽트 방식이 프로그램에 의한 입출력 방식보다는 호율적이지만, 입출력을 위한 상태정보, 제어정보, 데이터 전송을 위해서는 여전히 CPU의 능동적인 개입이 요구된다. 따라서 CPU는 상태정보, 제어정보만을 교환하게 하고, 데이터 전송은 주변장치와 주기억장치간에 직접 교환하게 하는 방식이 더 효율적이고, 이 방식이 DMA 방식이다. 이런 DMA를 사용하기 위해서는 시스템 버스상에 모듈이 하나 추가된다. 이렇게 DMA 모듈은 CPU를 통하지 않고, 한번에 한 단어씩 직접 기억장치로부터 모든 데이터 블록을 전송한다. 전송이 완료되면 DMA 모듈은 CPU에게 인터럽트 신호를 보내고, CPU는 전송의 시작과 끝 부분에만 관여한다.
인터럽트 처리에 의한 I/O
입출력 인터페이스가 주변장치의 상태를 검사하여 준비 상태가 되면 인터럽트 신호를 발생하여 입출력 처리를 요구하는 방식이다. 따라서 CPU는 그전에 수행되던 프로그램의 상태를 스택에 저장한 후에 Context Switching 과정을 통해 interrupt 서비스 프로그램을 수행한다. 따라서 주변장치에 명령을 보낸 후, 주변장치로부터 결과가 올 때까지 CPU는 다른 작업을 수행할 수 있으므로 효율성이 증가한다. 즉, 프로그램에 의한 I/O 문제점을 개선하는 방식을 인터럽트 처리에 의한 I/O 방식이라고 한다.
프로그램에 의한 I/O
CPU 상에서 실행되는 프로그램에 의해 입출력이 직접 제어되는 방식을 말한다. CPU는 입출력 장치에 명령을 보낸 후에 동작이 완료될 때까지 대기한다. 따라서 CPU는 주기적으로 주변장치의 상태를 반복적으로 검사해줘야 한다.(풀링 방식) 그러므로 CPU는 자원낭비가 발생한다.
정리하면 이렇게 DMA를 사용함으로써, 데이터 전송 과정에서 CPU가 필요하지 않으므로, CPU는 다른 작업을 수행하는데 더 많은 시간을 할애할 수 있다. 이는 시스템 성능의 향상으로 이어지는데, 특히 IO 작업이 더 많은 시스템에서 그 이점이 두드러진다.
이에 DMA의 장점은 크게 다음과 같다. CPU의 부하가 감소하여 전체 시스템의 효율성이 증가하고, 데이터 전송 속도가 향상되므로, 전반적인 시스템 응답 시간이 단축된다.
인용
https://naeunbi698.tistory.com/195
'컴퓨터 사이언스 > 운영체제' 카테고리의 다른 글
Explicit Allocator - Explicit Free List (0) | 2023.11.15 |
---|---|
인터럽트와 시스템 콜 (0) | 2023.11.15 |
demand-zero memory (0) | 2023.11.15 |
동적 메모리 할당기 구현 (1) | 2023.11.13 |
동적 메모리 할당 (1) | 2023.11.11 |