커널에 블록을 읽도록 요청 된 프로세스가 있고 직접 매핑 된 메모리를 통해 디스크에 요청을 보낸 경우 (이것이 맞는지 확실하지 않음) 결국 디스크 컨트롤러에서 읽고 읽기 요청을 완료합니다. 디스크가 읽기 요청이 완료되었다는 신호를 어떻게 처리합니까? 같은 직접 매핑 된 메모리를 사용합니까? (이 경우 폴링이 필요하지 않으며 비효율적입니까?).디스크 컨트롤러 신호 프로세서가 읽기/쓰기 요청을 완료하는 방법
0
A
답변
2
디스크 IO는 디스크 컨트롤러와 DMA (직접 메모리 액세스) 컨트롤러 사이에서 비동기 적으로 처리됩니다. 데이터 전송이 완료되면 작업 완료를 알리는 인터 럽트가 발생합니다.
2
x86에서 태그가 정답을 제시합니다. 메모리 매핑 I/O는 물리적 메모리의 일부 위치에 대한 쓰기가 디스크의 제어 레지스터로 리다이렉트됨을 의미합니다. 읽기가 준비되면 첫 번째 단어가 데이터 레지스터에 기록되며, OS는 하드웨어 인터럽트로 통보 된 동일한 방법으로 액세스 할 수 있습니다. 그런 다음 OS는 한 번에 한 단어 씩 읽어 와서 필요한 모든 최종 버퍼에 씁니다. 어셈블리 레벨에서 이것은 일련의 메모리 - 메모리 이동 작업과 유사하게 보이며 노스 브리지는 메모리 매핑의 세부 사항을 투명하게 처리합니다.
DMA의 경우에도 중개자 역할을하는 (내가 생각하기에) 사우스 브리지에는 DMA 컨트롤러가 있습니다. CPU 내의 OS는 주 메모리에 실제 버퍼를 제공하는 것 (즉, 장치 제어기에 메모리 매핑되지 않음)을 포함하여 필요한 판독을 위해 DMA 제어기를 프로그램한다. DMA 컨트롤러는 word-by-word 복사를 수행하고 모든 데이터가 주 메모리에 복사 된 후에 디스크 인터럽트 만 발생시킵니다.
0
컨트롤러는 일반적으로 작업이 완료되었음을 알리는 인터럽트를 발생시킵니다. 특히 현대의 컴퓨터와 디스크 컨트롤러에서는 DMA를 사용하여 RAM으로 데이터를 전송 한 다음 인터럽트를 발생시켜 CPU를 거의 수행하지 않아도됩니다.
관련 문제
- 1. 컨트롤러 요청을 tg2의 syslog에
- 2. sys.stdin.readlines() 입력을 완료하는 방법?
- 3. 인터럽트시 프로세서가 명령어를 처리하는 방법
- 4. AJAX 완료시 신호 방법
- 5. axWebBrowser가로드를 완료하는 것을 기다리는 방법?
- 6. 어떤 프로세서가 javax.xml.transform입니까?
- 7. RFID 태그에 프로세서가 있습니까?
- 8. 레일에 컨트롤러 요청을 가로채는 방법이 있습니까?
- 9. 컨트롤러 공장에서 "favicon.ico"에 대한 요청을 수신했습니다.
- 10. 디스크 구성은
- 11. 이 SQL 작업을 더 빨리 완료하는 방법
- 12. 신호 수신 신호 SIGIO
- 13. UIimageView가로드를 완료하는 방법을 알고 계십니까?
- 14. 프로세서가 인터럽트를 요청하는 장치를 어떻게 인식합니까?
- 15. 컨트롤러 방법
- 16. 디스크 입출력 대기열 활용 방법
- 17. 양식이 요청을 보낸 후 URL에서 컨트롤러 이름을 제거하는 방법은 무엇입니까?
- 18. 동적 오디오 신호 생성 방법
- 19. AJAX 요청을 시작하고 요청을 리디렉션하는 방법?
- 20. ZF : GET 요청을 확인하는 방법?
- 21. 주어진 컨트롤러 문자열을 확인하는 방법
- 22. ajax 요청을 죽이는 방법
- 23. 인공 요청을 작성하는 방법
- 24. Django에서 요청을 취소하는 방법
- 25. Windows에서 psql을 완료하는 방법은 무엇입니까?
- 26. 블록을 완료하는 데 문제가 있습니다
- 27. 디스크 공간이없고 android에서 사용되는 디스크 공간은 무엇입니까?
- 28. 디스크 조각 모음 및 디스크 검사의 논리
- 29. 재 작성 규칙의 index.php?/컨트롤러/방법/PARAM은/컨트롤러/방법/PARAM
- 30. Service.OnStart에서 신호 초기화 실패