2011-03-01 4 views
0

커널에 블록을 읽도록 요청 된 프로세스가 있고 직접 매핑 된 메모리를 통해 디스크에 요청을 보낸 경우 (이것이 맞는지 확실하지 않음) 결국 디스크 컨트롤러에서 읽고 읽기 요청을 완료합니다. 디스크가 읽기 요청이 완료되었다는 신호를 어떻게 처리합니까? 같은 직접 매핑 된 메모리를 사용합니까? (이 경우 폴링이 필요하지 않으며 비효율적입니까?).디스크 컨트롤러 신호 프로세서가 읽기/쓰기 요청을 완료하는 방법

답변

2

디스크 IO는 디스크 컨트롤러와 DMA (직접 메모리 액세스) 컨트롤러 사이에서 비동기 적으로 처리됩니다. 데이터 전송이 완료되면 작업 완료를 알리는 인터 럽트가 발생합니다.

2

x86에서 태그가 정답을 제시합니다. 메모리 매핑 I/O는 물리적 메모리의 일부 위치에 대한 쓰기가 디스크의 제어 레지스터로 리다이렉트됨을 의미합니다. 읽기가 준비되면 첫 번째 단어가 데이터 레지스터에 기록되며, OS는 하드웨어 인터럽트로 통보 된 동일한 방법으로 액세스 할 수 있습니다. 그런 다음 OS는 한 번에 한 단어 씩 읽어 와서 필요한 모든 최종 버퍼에 씁니다. 어셈블리 레벨에서 이것은 일련의 메모리 - 메모리 이동 작업과 유사하게 보이며 노스 브리지는 메모리 매핑의 세부 사항을 투명하게 처리합니다.

DMA의 경우에도 중개자 역할을하는 (내가 생각하기에) 사우스 브리지에는 DMA 컨트롤러가 있습니다. CPU 내의 OS는 주 메모리에 실제 버퍼를 제공하는 것 (즉, 장치 제어기에 메모리 매핑되지 않음)을 포함하여 필요한 판독을 위해 DMA 제어기를 프로그램한다. DMA 컨트롤러는 word-by-word 복사를 수행하고 모든 데이터가 주 메모리에 복사 된 후에 디스크 인터럽트 만 발생시킵니다.

0

컨트롤러는 일반적으로 작업이 완료되었음을 알리는 인터럽트를 발생시킵니다. 특히 현대의 컴퓨터와 디스크 컨트롤러에서는 DMA를 사용하여 RAM으로 데이터를 전송 한 다음 인터럽트를 발생시켜 CPU를 거의 수행하지 않아도됩니다.

관련 문제