-
DMA(Direct Memory Access)란 왜사용할까? - 수정중컴퓨터과학 2024. 5. 8. 13:29728x90반응형
입출력 제어 방식
- 프로그램(프로세스)에 의한 I/O (cpu 개입)
- 인터럽트에 의한 I/O (cpu 개입)
- DMA에 의한 I/O (cpu 개입하지 않음)
- 채널에 의한 I/O (cpu 개입하지 않음)
DMA (직접 메모리 접근)
DMA는 주변장치 (하드디스크,그래픽카드)등이 메모리에 직접 읽거나 쓸수있도록 하는 기능입니다.
DMA는 Cpu의 개입없이 I/O를 진행하는 방식입니다.
Cpu PIO 토대로 주변장치와 데이터를 주고받으며 , cpu 싸이클을 돌며 데이터를 주고받기떄문에 약간에 딜레이가 존재합니다. ( 대기,실행,준비 등 사이클을 반복하며 프로세스가 동작함)
이를 극복하기위해 DMA기술이 개발되었습니다.
예를 들어, 시스템에 CPU 자체, RAM 및 I/O 장치 등 3개의 구성 요소만 있다고 가정해 보겠습니다.
예를 들어 하드 드라이브의 지정된 위치에서 1GB의 대용량 연속 파일을 전송하고 섹터 A를 선택하여 주소 N의 메모리에 저장하려고 합니다. 메모리 또는 저장 매체 자체와 관련된 지연 시간은 무시합시다. 또한 CPU는 외부와 상호 작용할 수 있는 유일한 방법이므로 로드 및 저장 기능이 있는 표준 레지스터-레지스터 기계라고 가정합니다.
프로세서는 첫 번째 바이트/워드를 찾은 섹터 A를 레지스터에 로드한 다음 주소 N에 저장합니다.
그런 다음 두 번째 바이트/워드를 레지스터에 로드하고 주소 N+1에 저장합니다.
그런 다음 세 번째 바이트, 네 번째, 다섯 번째 등등도 마찬가지입니다. 각 바이트/단어는 CPU를 통과해야 하고, CPU는 이 데이터가 가야 할 곳의 주소를 계산하여 저장해야 합니다.아주 작은 것들의 경우에는 별 문제가 되지 않지만, 몇 바이트보다 큰 것들을 사용하면 결국 CPU는 데이터를 전송하는 루프에서 많은 시간을 보내게 됩니다. 이것은 제한된 CPU 사이클을 매우 효율적으로 사용하는 것은 아닙니다. 이것은 하드 드라이브뿐만 아니라 RAM에 액세스하는 데 필요한 모든 것에도 적용됩니다.
DMA는 주변에서 물건을 옮기는 작업을 수행하는 작은 논리입니다. CPU 대신 메모리 인덱싱에 필요한 주소를 계산하여 다른 작업을 자유롭게 수행할 수 있습니다.- 요청 단계 (Request Phase):
- 주변장치는 DMA 컨트롤러에게 데이터 전송을 요청합니다. 이 요청은 DMA 요청(DREQ) 신호를 통해 전달됩니다.
- DMA 컨트롤러는 이 요청을 받고 해당 주변장치와 메모리 간의 데이터 전송을 준비합니다.
- 준비 단계 (Preparation Phase):
- DMA 컨트롤러는 CPU와 협력하여 전송할 데이터의 주소, 크기 및 전송 방향 등의 정보를 설정합니다.
- 주변장치와 메모리 간의 데이터 전송에 필요한 버스와 리소스를 할당합니다.
- 전송 단계 (Transfer Phase):
- DMA 컨트롤러는 CPU의 개입 없이 데이터를 직접 주변장치와 메모리 간에 전송합니다.
- 데이터는 DMA 버스를 통해 이동되며, CPU는 이 과정에서 자유롭게 다른 작업을 수행할 수 있습니다.
- 완료 단계 (Completion Phase):
- 데이터 전송이 완료되면 DMA 컨트롤러는 해당 주변장치에게 전송이 완료되었음을 알립니다.
- CPU는 DMA 전송의 결과를 확인하고 필요한 후속 작업을 수행할 수 있습니다.
DMA를 사용하는 예제 중 하나는 파일을 디스크에서 메모리로 로드하는 것입니다. CPU는 DMA를 사용하여 파일의 데이터를 메모리로 전송하고, 파일 시스템과 상호 작용하면서 다른 작업을 수행할 수 있습니다. 이렇게 함으로써 시스템의 전체 성능과 응답 시간이 향상됩니다.
요약하자면, DMA는 CPU의 개입 없이 주변장치와 메모리 간의 데이터 전송을 관리함으로써 시스템 성능을 향상시키고 자원을 효율적으로 활용할 수 있게 합니다.
728x90반응형'컴퓨터과학' 카테고리의 다른 글
cpu바운드 프로그램 멀티쓰레딩에 최적의 스레드 개수 결정 방법 및 멀티쓰레딩 개발에 주의할점 (0) 2024.05.22 프로세스 컨텍스트 스위칭과 스레드 컨텍스트 스위칭 정의 및 차이 with 예제 python (0) 2024.05.22 단일프로세스,멀티프로그래밍,멀티태스킹,멀티프로세싱,컨텍스트 스위칭,스레드,멀티쓰레드란 무엇인가? (0) 2024.05.17 동기(sync)/비동기(async) , 블로킹(blocking)/논블로킹(nonblocking) 쉽게 이해하고 완전 정복 하자 with 예제코드 with java (0) 2024.05.08 직렬화란?(serialization),역직렬화란?? java.io.Serializable (0) 2024.04.25