Как жесткий диск узнает, где данные начинаются? [Дубликат]

14

Мне всегда было интересно, как жесткий диск находит первый бит данных.

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

Но в таком круговом потоке, как диск узнает, где находится первый и последний бит, чтобы он мог передавать данные в правильном порядке?

Узумаки
источник
КСТАТИ (редко упоминается, но заметно) Есть индекс, чтобы указать начало (и конец) трека. Когда контроллер диска встречает индекс во второй раз, это означает, что он прочитал каждый сектор в дорожке.
опилки

Ответы:

2

Он читает это с диска.

Данные на диске не только структурированы (как говорит @psusi), но и закодированы. Кодирование гарантирует, что записанные данные не могут быть перепутаны для маркеров положения в заголовках секторов, поэтому круговой поток может считываться до тех пор, пока не будет найден целевой маркер положения.

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

ОБНОВИТЬ:

Магнитный носитель - это материал, обладающий магнитным полем с двумя ключевыми свойствами: 1) он никогда не изменяется сам по себе и 2) записывающее устройство может изменять ориентацию поля в любой точке поверхности. При считывании носителя датчик определяет, где поле ориентировано по отношению к датчику и где поле ориентировано по направлению от датчика. Когда датчик перемещается по поверхности, он определяет время этих переходов полярности; первый уровень декодирования переводит эти временные значения в битовые значения . Из-за физически необходимых неопределенностей в этом процессе кодирование не должно требовать длинных отрезков одинаковой полярности; то есть это должно быть кодирование с ограниченной длиной прогона (RLL).

Особенности конструкции жесткого диска, как правило, являются коммерческой тайной, но, по сути, существует два способа гарантировать, что секторальные маркеры никогда не появляются в отраслевом контенте:

  1. Разработайте RLL, который допускает специальные значения, которые никогда не будут результатом кодирования данных содержимого. Эти специальные значения могут быть использованы не только для маркировки границ сектора, но также для исправления ошибок или любой другой вторичной цели.

  2. Используйте второй уровень кодирования, который гарантирует, что значения маркера появляются только на маркерах. Это немного похоже на кодирование URL-адреса, позволяющее «скрывать» специальные символы в URL-адресах, но с дополнительным ограничением, эквивалентным ограничению количества символов, которое может быть добавлено, так что в итоге оно больше похоже на кодирование base64 .

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

ShadSterling
источник
Эта кодировка похожа на кодировку Хаффмана? Если бы кто-то мог привести ясный пример того, как это работает на аппаратном уровне, примерно так: «Голова читает круговой поток данных, такой как 010111010010111010 ... где каждый 111 отмечает начало сектора, а затем ...» Я мог бы тогда принять ответ.
Узумаки
Жесткие диски должны кодировать абстрактные данные как физические свойства магнитного носителя, и результат должен быть легко адресуемым; Кодирование Хаффмана отображает один поток абстрактных данных в (обычно) более короткий поток абстрактных данных (нарушая адресуемость). Они в основном не связаны.
ShadSterling
Мое обновление не добавило ни одного примера, но если вы перейдете по ссылке RLL, у него есть некоторые.
ShadSterling
18

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

psusi
источник
3
Некоторые ссылки или ссылки сделают этот хороший ответ отличным. : D
кошка
1
@cat, я полагаю, «Как работают компьютеры» или «Внутри ПК» Питера Нортона, если какие-то из них все еще находятся в печати ... возможно, несколько новых изданий после тех, что на моей книжной полке.
Псуси
Это не отвечает на вопрос. Вопрос в том, как накопитель знает, где начинается заголовок или поле синхронизации.
Мартин Аргерами
@MartinArgerami - Это ответ на вопрос, потому что он исправляет неправильное представление ОП и вводит важную концепцию секторов. Развертывание до уровня чтения / записи магнитных доменов кажется слишком интенсивным для OP IMO. Если вам / ему нужна более подробная информация, см. Superuser.com/questions/427554/…
опилки
1
@ user134593 - Байты синхронизации всегда после пробела и являются первыми байтами записи. Они просто указывают на начало записи. Следовательно, контроллер диска никогда не конфликтует и не путается с полезной нагрузкой или пользовательскими данными. Вы, кажется, думаете, что это битовый поток (точно так же как OP), но это магнитный носитель, что означает, что вы не можете просто читать или писать в любой момент, когда захотите.
опилки
7

Psusi верен (данные на диске структурированы , и разные части компьютера используют разные части этой структуры), но на самом деле не доходит до вашего вопроса.

Диск действительно ничего не «знает». Он имеет низкоуровневую электронику, которая может считывать маркеры на диске (обычно записанные на заводе-изготовителе или самой головкой диска), считывать блоки данных с диска или записывать блоки данных на диск или определять, находится ли конкретная точка на диске. диск поврежден или поврежден, или что он должен быть перемещен в определенное место на диске. Это обо всем, что он «знает». Читающая головка сама не решает переместиться куда-то еще, что-то выше в машине говорит ей ...

quadruplebucky
источник
2
Но то, что выше, все еще является частью жесткого диска. (Командой чего-то вне жесткого диска, которым командует что-то вне компьютера, которым командует что-то метафизическое, но мы не говорим ни о чем из этого)
user253751
0

В дополнение к другим ответам на жестких дисках, которые наверняка использовались (и могут быть), есть один диск («головка» в терминах цилиндр / головка / сектор), который зарезервирован для данных калибровки / позиционирования, вообще не используется для хранения пользовательских данных. ,

Марк К Коуэн
источник
3
Это не то, что я слышал, у вас есть ссылка на это?
ShadSterling
Да, нет .... это не вещь.
псус
Вы, кажется, имеете в виду поверхность сервопривода / блюдо. . Но это устаревшие технологии , которые я не видел с 14" дисковых пакетов, которые предшествуют ST-506 жестких дисков оригинального IBM PC-XT Винчестер и современные диски используют встроенный усилитель.
опилками
Ах, хорошо, я также не слышал об этом в течение достаточно долгого времени, хотя я объяснил это современными дисками в виде черных ящиков.
Марк К Коуэн
0

Ответ, который вы ищете, состоит из двух частей:

1) Аппаратный контроллер

2) Файловая система

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

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

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

Для получения дополнительной информации следующие разделы в этих статьях Википедии весьма полезны:

См. Введение и раздел 3.1 «Управление пространством» здесь: https://en.wikipedia.org/wiki/File_system

Смотрите раздел 2.1 «Магнитная запись» здесь: https://en.wikipedia.org/wiki/Hard_disk_drive#Magnetic_recording

Мэтью Сальваторе Вильоне
источник