Предполагая, что процесс запросил ядро для чтения блока, а ОС выдала запрос на диск через память с прямым отображением (не уверен, что это правильно), которая в конечном итоге считывается контроллером диска и завершает запрос на чтение, как диск сигнализирует процессор, что запрос на чтение завершен? Использует ли он ту же память с прямым отображением? (В этом случае не требуется опрос, что неэффективно?).
Как контроллер диска сигнализирует процессору о завершении запроса на чтение/запись
Ответы (3)
На очень высоком уровне дисковый ввод-вывод обрабатывается асинхронно между контроллером диска и контроллером DMA (прямой доступ к памяти). После завершения передачи данных возникает прерывание, сигнализирующее о завершении операции.
На x86 ваши теги предлагают правильный ответ. Ввод-вывод с отображением памяти означает, что запись в некоторые области физической памяти перенаправляется в управляющие регистры диска. Когда чтение готово, первое слово записывается в регистр данных, к которому ОС может получить доступ тем же методом после получения уведомления об аппаратном прерывании. Затем ОС будет извлекать прочитанное по одному слову за раз, записывая его в любой конечный буфер, который в этом нуждается. На уровне сборки это выглядит как серия операций перемещения памяти в память, при этом северный мост прозрачно обрабатывает детали отображения памяти.
Однако в случае DMA на южном мосту (я думаю) есть контроллер DMA, который действует как посредник. ОС в ЦП программирует контроллер DMA для необходимого чтения, в том числе предоставляет ему реальный буфер в основной памяти (т. Е. Не отображаемый в память контроллера устройства). Затем контроллер DMA выполняет пословное копирование и вызывает прерывание диска только после того, как все данные будут скопированы в основную память.
Контроллер обычно запускает прерывание, чтобы сигнализировать о том, что операция выполнена. В частности, в современных компьютерах и контроллерах дисков, которые используют DMA для передачи данных в ОЗУ, а затем запускают прерывание, оставляя центральному процессору очень мало работы.