3

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

3 ответа3

4

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

В ранних жестких дисках ПК (например, 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) может быть легко получена путем опроса накопителя с помощью команды ATA Identify Device .

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


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

2

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

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

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

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

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

2

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

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

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

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

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

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