ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 개발자도 알면 좋은 DMA(direct memory access)
    시스템 2021. 3. 30. 23:12
    반응형

    기존에도 DMA?하면 direct memory access인 것은 알았지만

    뭐하는지는 알지 못했는데 lucene을 공부하면서 mmap에 대해 좀 더 자세히 알게 되었고

    그러다가 zero copy까지 공부하게 되었는데 거기서 DMA의 역할이 생각보다 많이 커서

    그래도 조금은 아는게 좋다 싶어 공부하게 되었다

    DMA란?

    direct memory access(DMA)는 CPU가 개입없이 메모리에서 읽거나 메모리에 쓸 수있는 I/O 모듈 권한을 부여 받았다고 보면 된다. DMA 모듈 자체는 메인 메모리와 I/O 장치 간의 데이터 교환을 제어한다. CPU는 전송의 시작과 끝에 만 관여하고 전체 블록이 전송 된 후에 만 중단된다

    왜 DMA가 나왔을까?

    DMA가 나온 이유는 여러가지가 있을 수 있겠지만 내가 아는 것은 인터럽트 때문이다

    인터럽트는 cpu가 하던 일을 멈추고 다른 일을 하도록 하는데 이 과정도 사실 오버헤드다 물론 cpu가 너무 빨라

    눈치채지 못할 수도 있지만 이러한 작업들이 무수히 많아지게 되면 어떻게 될까?

    cpu가 해야되는 일을 비효율적으로 하게 된다 그리고 I/O장치 중에도 고속장치가 있는데 너무 빠르다 보면 인터럽트 거는 주기 또한 빨라지게 되서 더욱더 비효율적으로 되게 된다

     

    메모리에 접근할 수 있는 장치는?

    메모리에 접근할 수 있는 장치는 CPU밖에 없다

    예를들면 디스크 컨트롤러가 파일을 읽은 내용을 메모리에 옮겨놓을 수 없다

    그래서 I/O 장치들은 로컬 버퍼를 가지고 있고 이를 통해 CPU에게 알려주면 CPU가 직접 버퍼에 있는 내용을 자신의 메모리로 카피해서 가져간다

     

    DMA는 인터럽트가 너무 자주 걸리는 걸 막기 위해서, 아주 작은 크기의 데이터가 I/O 로컬 버퍼에 들어가 있다면 특정 블록 단위까지 찼을때까지 기다렸다가 DMA가 직접 메모리에 카피해주는 작업까지 해주고 그것이 끝났을 때 CPU한테 인터럽트를 거는 방식으로 작동하고 결과적으로 인터럽트 횟수를 낮출 수 있다

     

    참조

    https://www.tutorialspoint.com/operating_system/os_io_hardware.htm

    반응형

    '시스템' 카테고리의 다른 글

    Disk random and sequential access  (0) 2021.04.08

    댓글

Designed by Tistory.