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

330
VortixDev

Подключив мой 32-ГБ USB-накопитель к компьютеру, откуда компьютер узнает, что это 32-ГБ накопитель? Где хранится эта информация и как ее можно найти?

3
Когда вы подключаете любое USB-устройство, операционная система спрашивает «кто вы?» и устройства отвечают и обрабатываются ОС соответственно. 5 лет назад 2

3 ответа на вопрос

4
sawdust

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

В ранних жестких дисках ПК (например, ST506, MFM, RLL) требовались пользовательские параметры геометрии привода (т. Е. Число секторов на дорожке, количество головок R / W и количество цилиндров) для адресации CHS . Конечно, (IBM) ПК предполагали / определяли размер сектора в 512 байт.
Эти параметры обычно хранятся в BIOS компьютера.

Диски IDE представили набор команд ATA, который включал Identify Deviceкоманду (с использованием кода команды 0xEC), которая сообщала геометрию диска и другую информацию.
В версии 3 ATAPI ответ на эту команду включал total number of user addressable sectors. (У меня нет более ранней версии спецификации ATAPI, поэтому я не уверен, что именно было в ответе до ATA-3.)
Используя общее количество секторов и размер сектора, общую емкость накопителя легко рассчитывается.
Поскольку современные версии ATA (например, диски SATA с записью битов зоны) больше не поддерживают адресацию CHS, геометрия накопителя не имеет значения (и даже не постоянна из-за записи битов зоны ).

Флэш-накопители USB просто используют USB в качестве транспортного протокола и реализуют набор команд ATA так же, как HDDS и SSD. Таким образом, емкость флэш-накопителей USB (и жестких дисков SATA / SSD) может быть легко получена путем опроса накопителя с помощью команды ATA Identify Device.

SD-карты имеют собственный командный протокол для использования через интерфейс. Емкость, скорость и другая информация о карте передаются в виде ответа через командную строку (а не через интерфейс данных карты).


Операционные системы в основном предоставляют пользователю доступ к устройствам хранения данных, таким как жесткие диски и твердотельные накопители, в качестве файловых систем.
По соглашениям ПК, диск должен быть разделен, а файловая система должна существовать в разделе диска. Обратите внимание, что дискеты и, при желании, USB-накопители не разбиты на разделы.
Значимые параметры диска (т.е. адреса начального и конечного сектора / LBA) разделов извлекаются из таблицы разделов (расположенной в секторе (ах) MBR или GPT).

2
music2myear

ОС более или менее полностью зависит от диска для передачи информации о емкости диска.

Этот факт используется в своих интересах ...

  • для хороших целей в большинстве распространенных твердотельных накопителей, где значительная часть дискового пространства сохраняется для кэширования и в качестве резервного хранилища, когда диск начинает стареть

  • и для плохих целей, когда дешевые USB-накопители утверждают, что они намного больше, чем они есть на самом деле, даже обманывая ОС, чтобы записать больше данных, чем они способны сохранить

Диски всех типов содержат небольшие объемы энергонезависимой памяти, в которой содержится эта информация и которая сообщает ОС о подключении.

2
LawrenceC

ПК не управляют приводом напрямую, они выдают команды на хост-адаптер или контроллер на шине. Для современных накопителей (начиная с конца 80-х и начала 90-х годов) адаптер / контроллер направляет эти команды в ЦП на накопителе, на котором выполняется встроенное ПО. Стандартизированные шины и соответствующие им схемы команд включают в себя ATA, AHCI, SCSI, SAS.

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

Например: стандарт ATA-1 (очень старый) описывает команду «Идентифицировать диск», которая возвращает значения CHS диска, по которым можно определить емкость. Так что это будет первая команда, которую ОС отправляет на диск перед выполнением любых операций чтения / записи.

Я не думаю, что диски до ATA, такие как диски MFM или RLL, имели интеллектуальную прошивку (кроме форматирования) - для этих систем начала 80-х вы должны были знать «Тип диска» - который был просто известной емкостью, или непосредственно установить пользовательскую емкость в BIOS.

С USB это тот же принцип - есть команды, отправляемые через USB, которые общаются с контроллером, который получает информацию вместо чтения / записи данных.