Вот читаю курс на intuit.ru "Введение в реляционные базы данных". Вот что автор пишет: Смущает фраза: "Как отмечалось ранее, аппаратура магнитных дисков допускает выполнение обмена с дисками порциями данных произвольного размера" Это что, действительно если через порты ввода\вывода обращусь к жесткого диска то информацию могу получать всегда по разному? Я почему то всегда считал, что только 512 байт могу считывать за раз или я что-то не правильно понимаю?
Сектор 512 байт это минимальный размер и дискрет чтения данных с диска, поэтому правильнее говорить не о "произвольном размере", а о размере кратном 512 байтам. По моим поверхностным представлениям (, cовременные диски имеют буферы чтения\записи до 8-16 Мб и читают с диска не по одному сектору, а множество секторов, вплоть до всей дорожки целиком. Соответственно и запросы на чтение в режиме DMA идут не по одному сектору, а блоками - начальный сектор + число секторов, поэтому последовательное чтение в режиме DMA осуществляется значительно быстрее чем PIO
leo Задают начальный сектор и число байт на читение. минимальный размер 2Байта. Аппаратура позволяет передовать произвольный размер блоками от 2 байт, до 64КБайт. Число блоков не ограниченно. Но стандартный жесткий диск имеет ограничение он может отсылать только по 512Байт, так что размер блока должен быть кратен 512 Байт.
Pavia Ты пишешь, что аппаратура позволяет передавать произвольный, и в тоже время стандартный имеет ограничение по 512 Байт, это на уровне аппаратуры? Везде словао "аппаратура" и потому не доконца ясны твои слова! зы: Сорри, но с твоих слов я не фига не понял, но с 20:50 и по текущий момент 23:05 пытался усердно понять, даже читая ман(гугл дал)
EvilsInterrupt Контролер дисков Sata, PATA позволяет передовать и принимать блоки 2Байт-64КБайт, число блоков не ограниченно. А вот сам диск позволяет передовать только блоками по 512Байт, что приводит к тому что мы должны задовать Блок при использовании DMA кратный 512Байт из диапозона 2Байт-64КБайт.
Pavia Это потому что винт размечен низко-уровневым форматом? То есть там на несена спец.информация и эта информация условно делит на сектора. Я правильно полагаю?
я практически в это не втыкаю, но что то мне подсказывает что на винте не нанесено никакой спец. инфы, и всё дело в контролле винтов который на маме (он позволяет, и видимо сама спека/и позволяют чтение любой информации) и контролера(не знаю мона ли его так обозвать) в самом винте который, как раз, физически так устроен что считывает по порции, которую назвали сектором
P_F Нет, ты не прав. Перед тем как винчестер начинает использоваться в обычном режим, его подготавливают на спец. оборудовании. Это оборудование делает низкоуровневое форматирование, это точно по крайней мере на моем Seagete Barracude 40 GB. зы: Я даже знаю множество народу, которые свято верят, в программы Low-Level Format и что эти программы способны им восстановить, так называемые "бэды". Так вот каждый сектор разделен спец.маркером, маркеры делят дорожку на сектора. Каждый сектор это 512 байт. Вот и получается что аппаратура считывает до тех пор пока не встретиться маркер, а это 512 байт! Получается, что за 1 раз, считывается фиксированное кол-во байт! Между тем автор курса, читать выше, писал:
Вообще-то в PIO тоже делаются многосекторные передачи -- регистр Sector Count никто не отменял. DMA быстрее за счет другого -- обмен данными делается самим контроллером, без участия процессора (проц только настраивает PRD и регистры busmaster'a). Басмастер в PRD позволяет задавать фрагменты произвольного размера, т.к. предназначен не только для секторных передач. Heh, ну это ж всего лишь автор книжки/курса по БД.
Pavia, _BC_ Спасибо за уточнения EvilsInterrupt В чем противоречие-то ? Сам диск читает сектора по 512 байт и кидает в буфер, а "аппаратура магнитных дисков", т.е. контроллер может извлекать из этого буфера данные "любого" размера - от 2 байт до 64К за раз согласно уточнению Pavia PS: процессор тоже читает из ОЗУ в кэш только целые линейки по 32, 64, 128 байт в завис-ти от проца, несмотря на то что ты у него присишь всего один байт или дворд - вот и с диском примерно такая же "петрушка"
Всем спасибо за ваше терпение. Думаю тему можно закрыть. Хотя и порадовался бы еще более глубоким знаниям. С наступающим вас!
HDD может отдавать кол-во байт не кратное сектору. Например так отрабатывают некоторые команды на WDC-based WD