Когда происходит чтение или запись на диск, куда идут данные?

10

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

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

Кейтлин Макморди
источник

Ответы:

20

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

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

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

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

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

опилки
источник
1
Возможно, можно сказать немного менее конкретно о «ч / б головках», поскольку немеханические приводы в наши дни используются гораздо чаще, но это хороший ответ.
Shinrai
@Shinrai - у меня есть только опыт из первых рук программирования с дисководами с подвижным рычагом (и я использовал приводы с фиксированной головкой). Я предпочитаю не спекулировать или повторять информацию о том, как работают твердотельные накопители.
опилки
+1 за отличный ответ, хорошо документированный и написанный. Очень профессиональный.
Climenole
2

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

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

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

Аарон Д. Мараско
источник
1
Кольцевые буферы обычно используются сетевыми устройствами (например, контроллером Ethernet), потому что данные могут поступать незапрошенными (неожиданно без ожидающего запроса на чтение). Данные с дисковода / контроллера всегда в ответ на запрос, сделанный хостом. Данные запрашиваются, поэтому нет необходимости в «кольцевом буфере» в драйвере диска.
опилки
Хорошо, я работал только с ЦАПами на уровне драйверов, и они тоже используют кольцевые буферы, поэтому я предположил.
Аарон Д. Мараско