9

Я понимаю, что существует такая вещь, как контроллер диска, который содержит буфер, но мне было интересно, если процессор читает непосредственно из этого буфера, или должны ли данные сначала идти в определенное место в памяти, а затем позволить себе считываться процессором?

Кто-нибудь также знает, как называется буфер? И как DMA вписывается во все это?

2 ответа2

17

Для чтения с диска поток данных по существу:

  • после того, как сборка для чтения / записи будет в запрошенном цилиндре, будет выбрана запрошенная головка.
  • в каждом секторе читается идентификатор сектора. Если считанный номер сектора совпадает с запрошенным номером сектора, то данные сектора считываются.
  • данные сектора считываются как последовательный битовый поток и преобразуются в байты.
  • байты сектора хранятся в буфере сектора (обычно SRAM в контроллере); этот секторный буфер отличается от "дискового кэша".
  • После считывания всего сектора данные проверяются с использованием ECC и, возможно, корректируются.
  • После проверки данные сектора передаются с контроллера на хост-компьютер. Примечание: существование этого секторального буфера не очень хорошо известно, и существует широко распространенная дезинформация о том, что скорость передачи на интерфейсе хоста (egATA) связана или ограничена скоростью передачи в головке R / W. Это совершенно неверно, поскольку эти две передачи данных являются независимыми и последовательными операциями, а не одновременными.
  • так как ПК получает данные от контроллера диска через интерфейс ATA, ПК может использовать либо запрограммированный ввод-вывод (ЦП многократно считывает регистр данных порта ATA и копирует значение в память назначения), либо DMA (контроллер DMA установка для копирования N байтов из регистра данных порта ATA в буфер памяти без дальнейшего вмешательства ЦП).
  • "Буфер" памяти компьютера, который принимает данные, может быть буфером приложения (при использовании системного вызова блочного ввода-вывода), или может быть внутренним системным буфером под управлением файловой системы, или даже памятью программы или данных, если данные поступают из свопинга область (или файл подкачки).

Запись на диск аналогична, за исключением того, что данные передаются с ПК на контроллер диска, вычисляется ECC, запрашивается сектор, а затем данные записываются из буфера секторов на диск.

Для дополнительного кредита:

Читайте о передачах " рассеяния-сбора ", которые используют цепочку DMA и список рассеяния-сбора адресов памяти и длины буфера. Вместо одного большого непрерывного буфера памяти передача "разброс-сбор" позволяет агрегировать несмежные буферы памяти для запроса дискового ввода-вывода.

2

Он входит в определенную область памяти, в которой ядро выделило драйвер диска. Я не думаю, что это конкретно названо. Эта область памяти обычно настраивается как кольцевой буфер. В зависимости от ОС эта память может быть скопирована во второй раз в пользовательское пространство для использования приложением.

DMA - это "прямой доступ к памяти", что означает, что контроллер дисковода может напрямую записывать в ОЗУ, не заставляя ЦП многократно запрашивать его, есть ли дополнительные данные (известный как опрос - как обычно это делалось). Вместо этого, когда весь буфер был передан, контроллер прерывает процессор, чтобы сообщить ему, что данные теперь доступны.

Если вас интересует еще более низкий уровень, драйвер выполняет вызовы ioctl .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .