Когда речь идет о структуре информации на дискете (либо на разделе жесткого диска), люди умные употребляют много слов и фраз, которые совершенно непонятны простым смертным. Одно из этих понятий - FAT, что является аббревиатурой от английского File Allocation Table. В русском-жаргонном это слово звучит точно таким же односложным, и по одному только названию ну никак не определишь, что же это такое. Сейчас мы попробуем если не полностью разложить по косточкам это понятие, то, по крайней мере, сделать его более доступным для нормальных людей и для тех, кто болеет компьютерами еще не так давно и у кого эта болезнь еще не приняла безнадежную форму.
Для начала немного истории. В ту далекую пору, когда наши любимые IBM PC еще не родились на свет, мы работали на компьютерах класса ДВК-2. У них такого понятия, как FAT, не существовало. Если на дискетку записывались какие-то файлы, а потом некоторые из них удалялись, то свободное место на дискете оказывалось фрагментированным, что делало невозможным использование его для записи большого файла, поскольку каждый файл должен был представлять собой непрерывный фрагмент данных на дискете. При манипулировании файлами главным условием было то, чтобы на дискете нашелся свободный промежуток, размеры которого позволяют записать нужный файл. Разумеется, после даже непродолжительной интенсивной работы с дискетой эти свободные фрагменты дробились и множились - и тогда нужно было выполнять операцию "сжатия диска" - SQEESE. Она выполнялась специальной программой, которая просто перемещала все файлы на дискете к ее началу, не оставляя между ними свободного пространства. В результате все свободное пространство собиралось в один непрерывный фрагмент, и с дискетой можно было полноценно работать. Появление на дискете плохих блоков резко снижало ее эксплуатационные качества, поскольку они навсегда дробили свободное место на фрагменты. Такой была организация файловой системы в операционной системе Rafos и ее аналогах.
С приходом первых IBM-PC появились первые версии операционной системы MS-DOS, которая и до сих пор уверенно стоит на ногах, несмотря на многочисленные прогнозы ее гибели. Что в первую очередь бросилось в глаза при переходе на нее, так это более рациональная файловая система, основанная на FAT. Суть ее состоит в том, чтобы использовать все свободное пространство диска, как бы оно ни было фрагментировано. Для осуществления этого вся область данных диска делится на так называемые кластеры (cluster), а в самом начале диска располагается сама таблица FAT. В ней содержится ровно столько элементов, сколько кластеров доступно на диске. Каждому кластеру поставлен в соответствие один и только один элемент FAT. Он содержит в себе номер кластера, который является следующим в текущей цепочке кластеров (clusters chain). Таким образом, достаточно лишь знать номер первого кластера в цепочке (а он содержится в оглавлении диска), чтобы по таблице FAT прочесть номера всех кластеров, в которых этот файл содержится, как бы он ни был фрагментирован. Кластеры с поврежденными секторами (bad clusters) помечаются в FAT определенным значением, после чего они уже никогда не используются, но и не доставляют никаких неудобств, кроме определенных потерь доступного свободного места на диске.
Поскольку на дискетах количество кластеров совсем небольшое (на дискете 1,44 Mб их 2848), для элемента таблицы FAT было выделено полтора байта. Конечно, можно было выделить и два байта, но тогда за счет увеличения размеров FAT область данных дискеты сократилась бы на три килобайта: два раза по полтора, - поскольку на дискете находятся две копии таблицы FAT. Видимо, в то далекое время это сочли за серьезное ограничение. Именно такая организация таблицы FAT, где один элемент занимает полтора байта, и получила название FAT-12, потому что полтора байта - это двенадцать бит. Она применяется на дискетах и на жестких дисках малого объема. При такой организации диска на нем можно разместить до 4085 кластеров. На дискетах кластер содержит либо один, либо два сектора, в зависимости от формата дискеты. Вообще же ограничение на размер одного кластера в MS-DOS - 32 килобайта. Это позволяет применять FAT-12 на жестких дисках малого объема. Достоинствами ее является то, что она занимает мало места на диске, требует мало оперативной памяти для ее кэширования. Недостатком - то, что при использовании на разделах больше 64 Mб размер кластера становится максимальным, что приводит к неизбежным потерям свободного места на диске в конечном кластере каждого файла.
Из этих соображений для более объемных жестких дисков предпочтительней использование FAT-16. Принципы и организация ее в точности те же, с тем отличием, что один элемент FAT занимает уже не полтора байта, а два. И что в результате получили? Получили возможность эффективно работать на разделах до 512 Mb, а верхняя планка максимально возможного по объему раздела поднялась со 128 Mb до 2 Gb. Но, опять же, при создании раздела, по размеру превышающего 1GB, размер кластера получается максимальным, потери дискового пространства снова неизбежны, да и винчестеры настолько быстро "растут", что только догоняй. А дробить 6-гигабайтный винчестер на три раздела только лишь потому, что так хочет DOS, не всегда приятно.
И вот, долгожданный подарок от Microsoft: в MS-DOS 7.10 включена поддержка FAT-32. Что она в себе таит? В первое время ее побаивались: несовместимость с некоторыми программами, работающими в прежних версиях, действительно выглядела пугающе для обычного пользователя. Но если учесть, что в каждом таком случае MS-DOS попросту предупреждает пользователя о возможных потерях информации при продолжении выполнения запущенной программы, ничего страшного тут нет. Ведь по-прежнему решает все сам пользователь, без его участия ничего деструктивного не произойдет. Ограничения на максимальный объем раздела снова сняты, потери свободного пространства в последних кластерах цепочек вновь минимизированы. Лишь один недостаток: использование FAT-32 на компьютерах с небольшим объемом оперативной памяти приводит к заметному замедлению производительности из-за увеличения размеров самой FAT. Действительно, на разделе размером 4 Gb сама FAT займет около 8 Mb, что при объеме оперативной памяти 16 Mb значительно затруднит считывание всей таблицы FAT в кэш, что, в свою очередь, приведет к снижению быстродействия системы в целом. Но в таких случаях есть радикальный выход: почаще выполнять оптимизацию диска (Defrag либо SpeedDisk), и тогда интенсивность обращения операционной системы к FAT будет минимизирована. Что же касается конкретно организации FAT-32, то тут не обошлось без обмана. В ней действительно один элемент FAT занимает уже не два байта, в отличие от FAT-16, а четыре, то есть 32 бита. Но весь фокус в том, что для кодирования номера кластера используются не все 32 бита, а только 28 из них. Таким образом, получается, что максимально возможное количество кластеров на диске составляет не 4 294 967 285, как может поначалу показаться, а всего лишь 268 435 445, что при использовании кластера с максимальным размером (32 Kb) позволяет создать раздел объемом чуть поменьше 8 Tb (1 Терабайт = 1024 Gb). Конечно, сейчас такие объемы жестких дисков кажутся нереальными, но ведь не так уж много времени прошло с тех пор, когда на винчестер объемом 80 Mb смотрели как на нечто фантастическое.
Так что же последует за FAT-32? Какой сюрприз нам готовит Microsoft? Судя по тому, что Windows 95/98 все больше и больше приближается к Windows NT, можно ожидать аналогичного решения в организации файловой системы. Или на свет родится новая разновидность FAT? Поживем - увидим!
Константин ФРАНЦЕВ,
[email protected]
Горячие темы