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