[OS] DMA(Direct Memory Access)이란?

2022. 10. 10. 18:19TIL💡/OS

직접 메모리 접근(DMA, Direct Memory Access)은 특정 하드웨어 하위 시스템이 CPU와 독립적으로 메인 시스템 메모리에 접근할 수 있게 해주는 컴퓨터 시스템의 기능이다.

 

과거 운영체제는 폴링 방식을 사용했기 때문에 CPU가 메모리나 주변 장치에 대한 모든 권한을 가지고 있었다.

그러나 효율성을 높이기 위해 인터럽트 방식을 사용하면서 입출력 관리자가 데이터의 입출력을 맡게 되었다.

입출력이 필요할 때 CPU는 입출력 관리자에게 입출력 요청을 보내고 자신은 하던 일을 계속한다. → 효율적

명령을 받은 입출력 관리자는 CPU가 요청한 데이터를 메모리에 가져다놓아야 하는데 이때 문제가 있다.

메모리는 CPU만 접근 권한을 가진 작업 공간이라 입출력 관리자는 접근이 불가하다는 것이다. 따라서 입출력 관리자에게는 CPU의 허락없이 메모리에 접근할 수 있는 권한이 필요한데, 이러한 권한을 직접 메모리 접근이라고 한다.

 

데이터 전송을 지시받은 입출력 관리자는 직접 메모리 접근 권한이 있어야 CPU의 관여 없이 작업을 완료할 수 있다.

 

동작 모드

💡 버스트 모드(Burst Mode)

버스트 모드에서 전체 데이터 블록은 하나의 연속된 시퀀스로 전송된다.

DMA 컨트롤러가 CPU로부터 시스템 버스 접근을 허락받으면 DMA 컨트롤러는 CPU에게 시스템 버스 제어권을 돌려주기 전까지 데이터 블록의 모든 데이터를 전송한다. 이 모드를 "블록 전송 모드"라고 부르기도 한다.

 

💡 사이클 도용 모드(Cycle Stealing Mode)

사이클 도용 모드는 전송 시간 동안 CPU가 비활성화되어선 안되는 시스템에서 사용된다.

사이클 도용 모드에서는 DMA 컨트롤러 BR(Bus Request) 신호와 BG(Bus Grant) 신호를 이용하여 버스트 모드와 같은 방식으로 시스템 버스 접근을 얻을 수 있다.

 

지속적으로 시스템 제어권을 얻고 해제하는 것으로 DMA 컨트롤러는 실질적으로 명령과 데이터 전송을 교차 배치한다. 사이클 도용 모드의 데이터 블록 전송 속도는 버스트 모드만큼 빠르지 않지만 CPU가 버스트 모드만큼 길게 대기하지 않는다. 사이클 도용 모드는 데이터를 실시간으로 모니터링 해야하는 컨트롤러에 유용하다.

 

💡 투명적 모드(Transparent mode)

투명적 모드는 데이터 블록을 전송하는 데 대부분의 시간을 사용하지만 이것은 전체 시스템 성능 측면에서 가장 효율적인 모드이다.

투명적 모드에서 DMA 컨트롤러는 CPU가 시스템 버스를 사용하지 않는 명령들 실행할 때만 데이터를 전송한다. 투명적 모드의 장점은 CPU가 프로그램 실행 도중 멈추지 않는다는 것과 DMA 전송이 시간 측면에서 자유롭다는 것이며, 단점은 하드웨어가 CPU가 시스템 버스를 사용하는지 판별해야하며 이것이 복잡할 수 있다는 것이다.

이 모드를 "은닉 DMA 데이터 전송 모드"라고 부르기도 한다.

 

 

 

참고

https://ko.wikipedia.org/wiki/%EC%A7%81%EC%A0%91_%EB%A9%94%EB%AA%A8%EB%A6%AC_%EC%A0%91%EA%B7%BC#%EB%B2%84%EC%8A%A4%ED%8A%B8_%EB%AA%A8%EB%93%9C_(Burst_mode) 

 

직접 메모리 접근 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. AMD의 DirectGMA는 DMA의 일종이다. PCIe 버스와 AMD 파이어프로 브랜드 제품 상에서 낮은 레이턴시로 장치 간 P2P 데이터 전송을 가능케 한다. DirectGMA를 지원하는 직렬

ko.wikipedia.org

http://recipes.egloos.com/5152867

 

DMA (Direct Memory Access) - CPU몰래 영차영차

드디어 DMA에요. 기다리셨나요? - 설마 - DMA라고 해서 뭐가 특별한 건 아니고요.   두 개의 Hardware Device간의 데이터 블록을 Trasfer하는 트릭으로 사용되는 DMA. DNA아니구요. 직접 메모리 억세스라고

recipes.egloos.com

 

'TIL💡 > OS' 카테고리의 다른 글

[OS] 프로세스의 생성과 복사  (0) 2022.10.11
[OS] 프로세스의 구조  (0) 2022.10.11
[OS] Interrupt(인터럽트)  (0) 2022.09.30
Page Table의 작동 순서  (0) 2022.09.30
API와 SDK  (0) 2022.05.31