Кодирование частотной модуляцией
Кодирование частотной модуляцией (англ. Frequency modulation encoding, FM) — это метод хранения данных, который широко использовался в ранних дисководах гибких и жёстких дисков. Данные модифицируются с помощью дифференциального манчестерского кодирования при записи, чтобы обеспечить восстановление тактовой синхронизации и устранить временны́е эффекты, известные как «дрожание» («джиттер») , наблюдаемые на дисковых носителях. Этот метод был впервые применён на дисководах мейнфреймов IBM и стал практически универсальным для ранних дискетах миникомпьютеров и микрокомпьютеров. В случае дискет, FM-кодирование позволяло хранить около 80 КБ данных на диске диаметром 5,25 дюйма.
IBM начало внедрять более эффективное MFM-кодирование с 1970-го года. Они назвали этот формат «двойной плотностью», а исходный FM формат стал «одинарной плотностью». MFM было труднее реализовать и он не был распространён до начала 1980-х годов, когда появились недорогие многофункциональные MFM контроллеры гибких дисков, такие как WD1770. Это привело к быстрому вытеснению FM-кодирования в пользу MFM к середине 1980-х годов.
Лежащий в основе механизм хранения
В современных компьютерах основная память хранит двоичную информацию с помощью двух различных электрических сигналов, обычно напряжений. В DRAM например, наличие напряжения выше определённого порога представляет собой единицу, а любое напряжение ниже этого значения — ноль. Буква "A" в кодировке ASCII в двоичном виде выглядит как 01000001, что в типичной микросхеме DRAM конца 1970-х годов, такой как Mostek MK4116, может храниться в виде последовательности напряжений 0 и 5 В в отдельных конденсаторах, составляющих память[1].
В отличие от этого, системы магнитной записи, такие как дискеты, записывают эти данные как изменения магнитной полярности. Это связано с тем, как данные считываются и записываются с использованием магнитной индукции. При чтении диск вращается, и его поверхность быстро проходит мимо головки чтения-записи, маленького электромагнита. Когда полярность магнитного заряда под головкой на диске меняется, в головке индуцируется кратковременный электрический импульс, который считывается как единица, а участок, где полярность не меняется, соответствует нулю[2]. Чтобы закодировать ту же букву A, предполагая, что предыдущие данные заканчивались нулём, на диске использовалась бы последовательность 01111110. Первый переход от нуля к единице приводит к выводу единицы, последующий поток единиц не даёт никакого сигнала, а последний переход от единицы к нулю формирует финальную единицу[2].
Помимо того, что данные хранятся в паттернах, требующих оперативного преобразования в их внутренний формат и обратно, диски сталкиваются с дополнительными проблемами, связанными с их аналоговой природой – шумом, механическими эффектами и другими проблемами. В частности, диски страдают от эффекта, известного как дрожание, вызванного небольшими изменениями во времени, когда носитель ускоряется и замедляется во время вращения. Одна из форм неизбежного джиттера обусловлена гистерезисом магнитной среды, что может привести к эффекту, известному как битовый сдвиг, который вызывает растяжение во времени цепочек магнитных переходов. Эти эффекты затрудняют определение того, к какому биту относится конкретный переход[2].
Для решения этой проблемы диски используют некий механизм восстановления синхронизации с помощью дополнительных сигналов, записанных на диск. При считывании данных тактовый сигнал отделяется, и биты данных становятся чётко различимы в сигнале, после чего их можно аккуратно выровнять и поместить в соответствующие ячейки памяти[2].
Кодирование
FM-кодирование использует простую систему для кодирования исходных данных таким образом, чтобы каждый бит данных содержал по крайней мере один переход, обеспечивая достаточное количество переходов в течение заданного периода для успешного восстановления тактовой частоты. Для этого оно работает с базовым периодом данных, вдвое превышающим максимальную частоту записывающего носителя. Эти периоды известны как «тактовые окна», содержащие до одного тактового перехода и одного перехода данных на окно. Поскольку каждый бит данных требует двух минимальных временны́х интервалов, FM-кодирование хранит примерно половину теоретически возможного объёма на данном носителе[2].
FM использует реализацию дифференциального манчестерского кодирования. Ноль в исходных данных кодируется как один переход магнитного потока в течение одного периода, а единица кодируется двумя переходами. Например, если байт данных из исходной системы содержит биты 01000001, контроллер гибких дисков преобразует его в последовательность 1011101010101011, вставляя дополнительные сигналы перед каждым битом для представления тактового сигнала. Когда этот сигнал затем передаётся на головку чтения/записи, полярность будет меняться каждый раз при наличии импульса. В этом примере, если головка находилась в нижнем состоянии в конце записи последних данных, ведущая единица переключит её в верхнее состояние, а следующий ноль оставит её там. В результате в этом окне будет один переход. Следующий бит сначала переключит состояние обратно в нижнее, а затем снова в верхнее, что приведёт к двум переходам в окне[2].
Для кодирования этих переходов система должна принимать цифровые данные с хост-компьютера, а затем перекодировать их в формат FM. При чтении система должна снова выделить тактовый сигнал и оставить только биты данных. Поскольку система FM очень проста, её можно было реализовать в виде однокристальных решений, используя технологии производства полупроводников конца 1970-х годов. Это значительно снизило стоимость реализации полного контроллера накопителя, который в основном состоял из тактового генератора, микросхемы контроллера накопителя, микросхемы для связи с хост-компьютером и некоторого буферного запоминающего устройства. Особенно популярным был Western Digital FD1771 и его модификации[3].
Кодирование данных и форматы
Приведённый выше материал касается записи байтов на диск, но это упрощение. На большинстве дисков единицей данных является сектор, и отдельные байты внутри него не имеют значения для контроллера. При записи данных контроллеру передаётся полный сектор данных, и ему поручается записать его как единую атомарную операцию в виде последовательности битов. Контроллер не может выровнять биты по байтам, основываясь только на FM-информации. Таким образом, при чтении необходимо выравнивать не только биты внутри данных, но и всю начальную точку данных сектора в целом[2].
Это достигается не схемой кодирования, а форматом диска. Когда контроллер записывает сектор данных, он добавляет заголовок, содержащий информацию о следующих данных, а также адрес сектора, чтобы его можно было найти в будущем. В процессе записи контроллер также записывает серию специальных «синхробайтов» перед заголовком и данными. В формате IBM это состоит из серии тринадцати нулей, за которыми следуют три шестнадцатеричных A1 перед областями заголовка и данных. Они не кодируются FM, поэтому контроллер может легко идентифицировать их на лету. Контроллер фиксируется на этих сигналах, чтобы найти начало данных, которые сразу следуют за последним синхробайтом. После этого он считывает каждые восемь бит в последующие байты в буфере[2].
Замена на MFM
В системе частотной модуляции (FM) каждый бит данных требует двух переходных периодов[4], что позволяет использовать лишь половину потенциальной ёмкости диска. Это привело к разработке более совершённых методов кодирования, которые более эффективно используют доступное пространство. Наиболее распространённой заменой стало MFM-кодирование. В этой системе в каждом окне записывался только один бит, который генерировал базовый тактовый сигнал. Значение бита (1 или 0) кодировалось положением импульса в окне. Единицы кодировались импульсами в центре окна, а нули — импульсами в конце[2].
Поскольку точность синхронизации переходов более требовательна, MFM требует более сложного решения для восстановления тактового сигнала. Обычно это реализуется с помощью петли фазовой автоподстройки частоты или аналогичной системы, которая генерирует стабильный выходной тактовый сигнал из зашумлённого входного. Это выходило за рамки возможностей недорогих интегральных схем конца 1970-х годов, поэтому FM оставался популярным в эпоху ранних домашних компьютеров в начале 1980-х. Микросхемы MFM существовали и использовались на более дорогих платформах, таких как IBM PC, но их применение требовало выполнения восстановления тактового сигнала внешним оборудованием, так называемым «разделителем данных». Производство интегральных схем стремительно развивалось в этот период, и к середине 1980-х появились универсальные контроллеры MFM, а рынок быстро перешёл на формат двойной плотности[2].
Примечания
Литература
- Demetrios A Michalopoulos. New Products: Single-chip floppy disk formatter/controller // Computer. — IEEE, 1976. — Октябрь (т. 9, вып. 10). — doi:10.1109/C-M.1976.218414.
- Bob Lutz, Paolo Melloni, Larry Wakeman. TL/F/9419 Floppy Disk Data Separator Design Guide for the DP8473. — National Semiconductor, 1995.
Библиография
- Kees Schouhamer Immink. Runlength-Limited Sequences // Proceedings of the IEEE. — 1990. — Декабрь (т. 78, вып. 11). — С. 1745–1759. — doi:10.1109/5.63306.