logo
Материалы по интерфейсам периферий / Для Скрипко / Для пособия ПУ (Восстановлен) (2)

Rll-кодирование

MFM-кодирование использовалось в ранних винчестерах, а также в флоппи-дисководах. Т.к. MFM-кодирование в два раза поднимало объем записываемой информации, такие гибкие диски назывались "double density". MFM-кодирование до сих пор используется в дисководах на магнитных дисках. Для жестких дисков, вскоре, был изобретен более эффективный метод кодирования информации: RLL. В случае с гибкими дисками, новые методы уже не использовались, в силу отсутствия необходимости в переносе больших объемов данных на гибких дисках (это было бы достаточно не надежно), а также, в случае с гибкими дисками требуется совместимость новых стандартов кодирования и старых: любой современный дисковод может читать как FM-, так и MFM-кодированные диски, в то время как принцип RLL-кодирования принципиально отличается от двух предыдущих.

RLL — run length limited или кодирование с ограничением длины поля записи. Этот тип кодирования был более сложным, и, строго говоря, это было семейство схем кодирования. У RLL-кодирования было два параметра, описывающих данный метод кодирования и в связи с этим было именно семейство схем кодирования, а не один метод кодирования.

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

RLL-кодирование было шагом вперед по сравнению с MFM-кодированием. Этот метод кодирования рассматривает группы из нескольких бит, вместо рассмотрения одного бита в один промежуток времени. Идея кодирования состоит в том, чтобы смешивать клоковые смены полярности и смены полярности данных, чтобы допустить более плотную запись на поверхность магнитной пластины. Два параметра, описывающих RLL есть run length и run limit (отсюда и следует имя данного семейства кодирующих схем). Слово run здесь относится к последовательности записываемой информации без смены полярности. Параметр run length — это минимальная длина между двумя сменами полярности, в то время как run limit — это максимальная длина без смены полярности. Как и было сказано ранее, длина между двумя сменами полярности не может быть слишком длинной, иначе у нас потеряется синхронизация бит.

Конкретная схема кодирования пишется как RLL(x,y) или x,y RLL, где x это run length, а y это run limit. Наиболее часто встречающаяся схема кодирования информации на накопителях это RLL(1,7) и RLL(2,7). Для того чтобы произвести кодирование, нужно иметь некий словарь, ставящий в соответствие входные данные выходным, давайте посмотрим на данный словарь в случае 2,7 RLL:

Битовая последовательность

Кодированная последовательность

Количество смен полярности на бит

Вероятность встречи в случайном потоке данных

11

RNNN

1/2

25%

10

NRNN

1/2

25%

011

NNRNNN

1/3

12.5%

010

RNNRNN

2/3

12.5%

000

NNNRNN

1/3

12.5%

0010

NNRNNRNN

2/4

6.25%

0011

NNNNRNNN

1/4

6.25%

Взвешенное среднее

0.4635

100%

Для примера, возьмем следующую последовательность бит: 10001111 (0х8Fh), эта последовательность будет представлена контроллером, как 10-0011011 и закодирована как NRNN-NNNNRNNN-RNNN. Следует заметить, что в данной схеме кодирования, каждая кодируемая последовательность из словаря оканчивается как NN, отсюда и видно, что минимальная длина между двумя сменами полярности равна 2. Максимальная длина, равная 7, будет достигаться в случае кодирования двух последовательностей 0011-0011.

Сравнивая эту таблицу с такими же для FM и MFM, можно увидеть несколько интересных вещей. Наблюдается увеличивающаяся сложность кодирования: используется 7 различных последовательностей, и одновременно рассматривается до 4 бит. Среднее количество смен полярности на один бит равно 0.4635 или примерно 0.5. Это примерно одна треть от FM и примерно две трети от MFM. Так что, по сравнению с FM-кодированием, мы можем записать втрое больше информации на один и тот же участок поверхности.

На рисунке представлено кодированная форма записи байта "10001111" в случае FM, MFM и RLL 2,7 кодирования.