DMA 컨트롤러는 어떻게 작동합니까?


14

최신 운영 체제의 섹션 5.1.4 직접 메모리 액세스에서 Andrew S. Tanenbaum, Herbert Bos, 2014 ,

설명을 단순화하기 위해 CPU는 그림 5-4와 같이 CPU, 메모리 및 I / O 장치를 연결하는 단일 시스템 버스를 통해 모든 장치와 메모리에 액세스한다고 가정합니다.

여기에 이미지 설명을 입력하십시오

  1. DMA 작동 방식을 설명하기 위해 먼저 DMA를 사용하지 않을 때 디스크 읽기가 발생하는 방법을 살펴 보겠습니다.

    • 먼저 디스크 컨트롤러는 전체 블록이 컨트롤러의 내부 버퍼에있을 때까지 드라이브에서 비트 단위로 블록에서 하나 이상의 섹터를 읽습니다.
    • 그런 다음 체크섬을 계산하여 읽기 오류가 발생하지 않았는지 확인합니다. 그러면 컨트롤러가 인터럽트를 일으 킵니다. 운영 체제가 실행을 시작 하면 루프를 실행 하여 컨트롤러 버퍼 에서 디스크 블록을 한 번에 바이트 또는 단어를 읽을 수 있으며, 각 반복은 컨트롤러 장치 레지스터 에서 1 바이트 또는 단어를 읽고 주 메모리에 저장합니다.

    Q : 두 번째 단계에서

    • 데이터가 " 컨트롤러의 버퍼 "에서 메인 메모리 로 전송되지 않습니까? 왜 " 컨트롤러의 버퍼에서 "와 " 컨트롤러 장치 레지스터에서 "라고 말합니까?

    • 두 번째 단계에서 컨트롤러는 CPU를 중단하지 않고 OS를 다시 포함시키지 않고 버퍼에서 주 메모리로 데이터를 전송할 수 있습니까?

  2. DMA를 사용하는 경우 절차가 다릅니다.

    • 먼저 CPU는 레지스터를 설정하여 DMA 컨트롤러를 프로그래밍하여 어디로 전송 할지를 알 수 있습니다 (그림 5-4의 1 단계).
      또한 디스크에서 내부 버퍼로 데이터를 읽고 체크섬을 확인 하라는 명령을 디스크 컨트롤러에 발행 합니다.
    • 디스크 컨트롤러의 버퍼에 유효한 데이터가 있으면 DMA를 시작할 수 있습니다. DMA 컨트롤러는 버스를 통해 디스크 컨트롤러에 읽기 요청을 발행하여 전송을 시작합니다 (2 단계). 이 읽기 요청은 다른 읽기 요청처럼 보이며 디스크 컨트롤러는 CPU 또는 DMA 컨트롤러에서 온 것인지 알지 못합니다. 일반적으로, 쓸 메모리 주소는 버스의 주소 라인에 있으므로 디스크 컨트롤러가 내부 버퍼에서 다음 단어를 가져올 때 어디에 쓸지를 알고 있습니다. 메모리에 쓰기는 또 다른 표준 버스주기입니다 (3 단계).
    • 기록이 완료되면, 디스크 제어기는 버스를 통해 DMA 제어기에 확인 신호를 전송한다 (단계 4). 그런 다음 DMA 컨트롤러는 사용할 메모리 주소를 증가시키고 바이트 수를 감소시킵니다. 바이트 수가 여전히 0보다 큰 경우 카운트가 0에 도달 할 때까지 2 단계부터 4 단계까지 반복합니다.
    • 그때 DMA 컨트롤러는 CPU를 중단하여 전송이 완료되었음을 알려줍니다. 운영 체제가 시작될 때 디스크 블록을 메모리에 복사 할 필요는 없습니다. 이미 있습니다.

    Q : 두 번째 단계에서 DMA 컨트롤러는 디스크 컨트롤러에 디스크 컨트롤러 버퍼에서 주 메모리로 데이터를 전송하도록 요청합니다. 첫 번째 단계에서 CPU는 디스크에서 내부 버퍼로 데이터를 읽도록 지시하는 명령을 디스크 컨트롤러에 발행합니다. 동시에, 디스크 컨트롤러가 디스크에서 디스크 컨트롤러의 버퍼로 데이터 전송을 완료 할 때 디스크 컨트롤러가 디스크 컨트롤러의 버퍼에서 주 메모리로 데이터를 전송하도록 디스크 컨트롤러에 지시 할 수 있습니다. 디스크 컨트롤러가 디스크 컨트롤러의 버퍼에서 메인 메모리로 데이터를 전송하도록 지시하는 DMA 컨트롤러? (디스크와 주 메모리 간의 데이터 전송을 위해 DMA 컨트롤러가 필요한 이유를 이해할 수 없으므로 견적을 이해하는 데 중요한 것을 놓친 것 같습니다).

  3. 장치의 장치 컨트롤러는 장치를 제어하고 장치에서 작업을 수행합니다. DMA 컨트롤러는 어떤 장치를 제어하고 작업을 수행합니까?

감사!


이해는 버스 마스터 링을 기반으로하는 것처럼 보입니다. 버스 마스터 링은 해당 교과서에 설명 된 DMA 개념보다 현대적이라고 생각합니다. 교과서의 DMA 개념은 더 원시적입니다.
rwong

책에서 사용하는 단순화 된 모델에 대한 다이어그램을 추가했습니다.
Tim

다이어그램의 화살표 3이 텍스트 설명과 일치하지 않는 것 같습니다 ... 축하합니다. 어느 것이 올바른지 결정하려면 3 단계의 버스 타이밍 다이어그램이 필요합니다. 더 중요한 것은 3 단계에서 데이터 신호를 보유 할 책임이있는 장치를 찾아야한다는 것입니다. 디스크 컨트롤러가 먼저 데이터를 DMA 컨트롤러로 보낸 다음 DMA 컨트롤러가 데이터를 반복합니다 (자체 전압을 버스에 입력) ) 메모리에?
rwong

4 단계의 "확인"도 의심됩니다. DMA가 복사 될 바이트 수를 이미 알고 있지 않습니까?
rwong

명확하게하는 방법을 모릅니다. OS와 아키텍처에 관한 어떤 책을 공부했거나 최고라고 생각하십니까?
Tim

답변:


7

Q1

첫 번째 단계에서는 DMA를 사용하지 않으므로 디스크 컨트롤러의 내용을 프로세서에서 하나씩 읽습니다. 물론 프로세서는 (데이터가 실제로 버려지는 것이 아니라 어떤 용도로 사용된다고 가정) 시스템의 메모리에 저장합니다.

이 경우의 버퍼는 하드 디스크 (컨트롤러) 자체의 메모리 조각이며 컨트롤러 장치는 하드 디스크 (컨트롤러) 자체의 제어 레지스터를 등록합니다.

OS (또는 다른 소프트웨어)와 관련이 없으면 일종의 DMA 작업이 필요하며,이 부분에서 논의중인 텍스트 섹션은 DMA를 사용하지 않습니다. 따라서,이 경우에는 그렇게되지 않습니다.

2 분기

따라서 DMA 컨트롤러의 핵심은 "장치의 내부 버퍼에서 메인 메모리로 데이터를 저장하는 지루한 작업을 수행하는 것"입니다. CPU는 DMA 컨트롤러와 디스크 장치 모두에서 작동합니다. 디스크가이 작업을 수행 할 수 있으면 DMA 컨트롤러가 필요하지 않습니다.

그리고 실제로, 현대적인 시스템에서, DMA 기능은 일반적으로 컨트롤러는 "버스 마스터 링"기능, 컨트롤러 자체가 의미가 있다는 점에서, 하드 디스크 컨트롤러 자체에 내장되어 IS 장치의 DMA 컨트롤러를. 그러나 이들을 두 개의 개별 장치로 간주하면 DMA의 전체 개념을 이해하기가 다소 어렵습니다.

Q3 (종류)

하드 디스크를 방금 벽돌로 쌓아 놓은 건물이라고 생각하면 프로세서는 벽돌을 쌓아서 집을 짓는 벽돌공입니다. DMA 컨트롤러는 벽돌을 벽돌 쌓기에서 벽돌공에 필요한 곳으로 운반하는 작업자입니다. 즉, 벽돌공이 벽돌을 쌓는 실제 작업에 집중할 수 있습니다. "반입 및 운반"의 간단한 작업은 숙련되지 않은 작업자가 수행 할 수 있습니다.

일화 적 증거 : 디스크에서 메모리로의 DMA 전송에 대해 처음 알게 된 시점은 1997 년 정도였습니다. IDE 컨트롤러가 DMA를 사용하기 시작했을 때 IDE가 DMA를 수행 할 수 있도록 "마더 보드 IDE 컨트롤러"드라이버가 필요했습니다. 하드 디스크에서 읽는 데는 CPU 시간의 약 6-10 %가 소요되며, 동일한 설정에서 DMA는 CPU 시간의 약 1 %를 사용합니다. 그 이전에는 SCSI 디스크 컨트롤러가있는 고급 시스템 만 DMA를 사용했습니다.


5

이것은 답이 아닙니다. 설명에 맞추기에는 너무 긴 설명 요청입니다.

누구나이 질문에 대답하기 전에 논의중인 컴퓨터 시스템 아키텍처를 명확하게 설명해야합니다. 즉:

  • 이 설명과 관련된 버스 시스템은 무엇입니까?

    • 대부분의 컴퓨터 시스템에는 메모리 버스가 있습니다.
    • 대부분의 컴퓨터에는 다른 종류의 버스 시스템도 있습니다.
  • 디스크 IO도 메모리 버스를 통과합니까?

    • 다시 말해, 디스크는 주소에 주소 버스 라인을 사용하고 데이터에 데이터 버스 라인을 사용합니까?
  • 디스크 컨트롤러가 메모리 버스를 다음과 같이 인식합니까?

    • 메모리 버스? 즉, 메모리 칩과 통신하고 있다고 생각합니다. RAS (행 액세스 스트로브), CAS (열 액세스 스트로브), ...
    • 매우 드물게-메모리 칩과 대화하려면 DRAM 타이밍 (지연 시간)에 따라 명령을 발행하는 것이 매우 정확해야합니다. 몇 클럭 사이클이 너무 일찍 또는 너무 늦으면 데이터 손실이 발생합니다.
  • 디스크 컨트롤러는 버스가 "실제로"무엇이라고 생각 하는가?

  • 대부분의 컴퓨터 시스템에는 "포트 I / O"라고하는 IO가 있습니다.

    • 포트 I / O는 메모리 버스로 피기 백되거나 다른 전용 버스가있을 수 있습니다.
    • Port I / O의 특징은 DRAM 타이밍의 위험에 대해 걱정할 필요없이 단일 (또는 미리 정의 된 일정한 수의) 버스 주기로 작업을 완료 할 수 있다는 것입니다.
  • 보다 진보 된 (20 년 전부터) 시스템에는 새로운 유형의 버스 시스템이 있습니다. 예를 들어, ISA, PCI, AGP, PCMCIA ... SCSI, ATA, SAS, SATA, FC-AL ...


이제 "논의중인 컴퓨터 시스템"에 대해 많은 불확실성이 제기되면서 질문에 대한 명확한 대답을 얻지 못하는 이유를 이해할 수 있습니다.

예, 나는 그것이 교과서에서 나온다는 것을 알고 있습니다. 사본이 있습니다. 난 아니야 (집에 있지는 않지만 사무실에는 사무실이 있습니다.) 따라서 답이 필요한 경우 다이어그램을 보여주고 컴퓨터의 버스 시스템이 어떻게 보이는지 설명해야합니다.


가장 핵심은 다음과 같습니다.

  • DMA는 프로그래밍 가능한 장치입니다. 즉, CPU는 DMA에게 무엇을해야하는지 알려주 는 궁극적 인 책임 이 있습니다. 물론, DMA가 시스템을 인계하는 타임 슬롯 동안, CPU는 DMA가 쇼를 실행하게함으로써 협력 할 것이다.

  • CPU (및 CPU를 실행하는 OS)의 제어 하에서 DMA는 디스크 컨트롤러에서 주 메모리로 데이터를 쉽게 전송할 수 있도록 하나 이상의 버스 (복수) 에 대한 제어 권한을 갖습니다 .

  • DMA가 버스를 인계하는 기간 (복수) 동안, DMA는 해당 버스를 통해 명령을 발행합니다. 즉, 일반적인 컨트롤러 대신 DMA는 CPU 작업을 수행하는 척합니다.

  • 데이터 전송에 두 개의 다른 버스가 포함 된 경우 DMA는이를 다른 버스로 수행해야 할 수 있습니다.

  • 다수의 바이트 (워드 등)를 이동할 수 있도록 DMA에는 복사 할 나머지 데이터 양을 추적하기위한 루프 카운터가 있습니다.

  • 주 메모리에 쓸 수 있도록 DMA에는 CPU가 프로그래밍 할 수있는 메모리 주소 레지스터가 포함되어있어 CPU가 DMA에 데이터를 쓸 위치를 알려줄 수 있습니다.

  • 시스템의 버스 설계에 따라 DMA는 DRAM 타이밍 사이클의 끔찍한 세부 사항을 처리하거나 처리하지 않아도됩니다.

  • 옛날 옛적에, DMA가 발명 된 후 얼마 지나지 않아 일부 주변 장치는 컨트롤러에 DMA를 사전 패키지하기 시작합니다 . 이것을 버스 마스터 링 이라고 합니다. 그럼에도 불구하고 DMA가 CPU 패키지, 마더 보드 또는 I / O 카드에 있는지 여부에 관계없이 시스템 버스 (복수)에 대한 액세스를 협상해야하기 때문에 궁극적으로 CPU의 제어 (프로그래밍) 상태에 있어야합니다. 메인 메모리.

  • 최신 컴퓨터 시스템에는 DRAM 컨트롤러라는 전용 하위 시스템이 있습니다. 하나가 있다면,이 DRAM 컨트롤러가 DMA의 기능을 수행 할 것임을 확신 할 수 있습니다. 즉, 프로그래밍 가능한 "바이트 카피 루프"처럼 보이고 위에서 언급 한 모든 복잡성이 DRAM의 실리콘 내부에 숨겨져 있습니다. 제어 장치.


매우 혼란 스러우면 혼란스러워 다이어그램이 필요합니다. 많은 다이어그램. 시스템 다이어그램. 버스 다이어그램. 타이밍 다이어그램. 상태 전이 다이어그램. 기타


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.