┬I.2. Схема хранения данных на дискете Золотое правило Мэрфи: у каждого облада╨ теля золота - свои правила. Закон Мэрфи Опишем схему хранения данных, используемую в MSX-DOS: 1) для хранения данных используются стандартные 512-байтные сектора; 2) никакие сектора или области на дискете не резервируются; 3) распределение секторов данных и объединение секторов, образующих файл данных, выполняется независимо от обслуживания самих секторов дан╨ ных, с помощью механизма, получившего название \/T0/1 ─┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬│ ┴ Таблица Размещения Файлов ┴ ┴ (ТРФ или FAT ┬ "Files Allocation Table") ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ \/T1/1- 4) каждая дискета имеет каталог, который служит для учета файлов, хранящихся на дискете. Описанная схема хранения данных предполагает существование ┌четырех различных типов секторов, один из которых используется для хранения данных, а три других имеют специальное назначение. Любая дискета имеет ┌программу загрузки операционной системы,─ записы╨ вающуюся в самом первом секторе дискеты (┌нулевом секторе─), который на╨ зывается ┌загрузочным сектором (англ. ┬ "boot sector")─. Программа загрузки всегда записывается в загрузочный сектор любой форматируемой дискеты независимо от того, будет ли данная дискета ког╨ да-нибудь использоваться для запуска операционной системы. Сектор с программой загрузки и запуска системы представляет собой ▄пeрвый─ специ╨ альный тип сектора в MSX-DOS. ▄Второй─ специальный тип сектора используется для хранения Таблицы Размещения Файлов (FAT). FAT занимает два или три (в зависимости от па╨ раметров форматирования) сектора, непосредственно следующих за сектором с программой загрузки. Таблица Размещения Файлов служит для индикации занятости секторов данных на дискете. ▄Третий─ и последний специальный тип сектора используется для хранения ┌каталога─ ("Directory", директории, Справочник) дискеты. Каталог распо╨ лагается вслед за Таблицей Размещения Файлов и занимает ┌семь─ секторов на дискете. Эти сектора специального назначения занимают └двенадцать первых сек╨ └торов односторонней дискеты─ или └четырнадцать - двухсторонней─. Все ос╨ тальные сектора ("Data Area") используются для хранения ┌данных. Каталог и Таблица Размещения Файлов располагаются в начале дискеты. На первый взгляд это представляется оптимальным размещением. Однако при доступе к файлу операционная система MSX-DOS сначала должна найти эле╨ мент этого файла в каталоге, а потом обратиться собственно к данным на носителе. В среднем, расстояние между каталогом и файлом на дискете составляет 20 треков, то есть, практически половину дискеты. Перемеще╨ ние головок чтения-записи в дисководе является самой медленной опера╨ цией. Так что расстояние между каталогом и самим файлом может иметь важное значение с точки зрения временных характеристик работы. Если бы каталог располагался в середине дискеты, то среднее рассто╨ яние до секторов данных уменьшилось бы вдвое, т.е. до 10 треков. С дру╨ гой стороны, работа с пространством данных, состоящим из двух частей (по обе стороны от каталога) будет значительно сложнее. Для операцион╨ ных систем персональных компьютеров выгода от размещения каталога в се╨ редине дискеты слишком мала, чтобы браться за разрешение возникающих при этом дополнительных проблем. Итак, область памяти на диске распределена следующим образом: \/T0/1 ─┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬│ ┴ Загрузочный ┴ Информация о дискете и ┴ ┴ сектор ┴ программа, запускающая MSX-DOS ┴ ┴("boot sector")┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┼┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ Таблица Разме-┴ ┴ ┴ щения Файлов ┴ Информация о занятости кластеров дискеты ┴ ┴ ("FAT") ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┼┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ Каталог ┴ Информация о файлах ┴ ┴ ("Directory") ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┼┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ Область данных┴ Область для размещения содержимого файлов ┴ ┴ ("Data Area") ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ \/T1/1- Приведем схему расположения и нумерации секторов для: \/T0/1 ─┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬│ ┴ ┴ ┴ a) ┌одностороннего диска─: ┴ ┴ ┴ ┴ ─┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬│ ┴ ┴ ┴O сектор┴1 сектор┴2 сектор┴3 сектор┴4 сектор┴ ┴ ┴ ┌┬┬▌┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┐ ┴ ┴ ┴ ┴░┬┬┬┬┬┬FAT ┬┬┬┬┬▐┴░┬┬ Копия FAT ┬┬▐┴ ┴ ┴ ┴ ┴ ┴ Загрузочный сектор ("Boot sector") ┴ ┴ ┴ ┴ ┴ ┴ ─┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬│ ┴ ┴ ┴5 сектор┴6 сектор┴7 сектор┴8 сектор┴9 сектор┴A сектор┴B сектор┴ ┴ ┴ ┌┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┐ ┴ ┴ ┴░┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬ Каталог ("Directory") ┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬▐┴ ┴ ┴ ┴ ┴ ┴ ┴ ─┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬│ ┴ ┴ ┴C сектор┴D сектор┴E сектор┴F сектор┴10 сектор┴11 сектор┴ ... ┴ ┴ ┴ └┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┼┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┼┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬┼┬┬┬┬┬┬┘ ┴ ┴ ┴ 2-й кластер ┴ 3-й кластер ┴ 4-й кластер ┴ ... ┴ ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┐ ┴ ┴ ┴░┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬ Область данных ("Data Area") ┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬▐┴ ┴ ┴ ┴ └┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┘ ┴ ┴ ┴ b) ┌двухстороннего диска:─ ┴ ┴ ┴ ┴ ─┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬│ ┴ ┴ ┴0 сектор┴1 сектор┴2 сектор┴3 сектор┴4 сектор┴5 сектор┴6 сектор┴ ┴ ┴ ┌┬┬▌┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┐ ┴ ┴ ┴ ┴░┬┬┬┬┬┬┬┬┬ FAT ┬┬┬┬┬┬┬┬┬┬▐┴░┬┬┬┬┬┬ Копия FAT ┬┬┬┬┬┬┬▐┴ ┴ ┴ ┴ ┴ ┴ Загрузочный сектор ("Boot sector") ┴ ┴ ┴ ┴ ┴ ┴ ─┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬│ ┴ ┴ ┴7 сектор┴8 сектор┴9 сектор┴A сектор┴B сектор┴C сектор┴D сектор┴ ┴ ┴ ┌┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┐ ┴ ┴ ┴░┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬ Каталог ("Directory") ┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬▐┴ ┴ ┴ ┴ ┴ ┴ ┴ ─┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬├┬┬┬┬┬┬┬┬┬├┬┬┬┬│ ┴ ┴ ┴E сектор┴F сектор┴10 сектор┴11 сектор┴12 сектор┴13 сектор┴ ...┴ ┴ ┴ └┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┼┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬┼┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬┼┬┬┬┬┘ ┴ ┴ ┴ 2-й кластер ┴ 3-й кластер ┴ 4-й кластер ┴ ...┴ ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┤┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┤┬┬┬┬┐ ┴ ┴ ┴░┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬ Область данных ("Data Area") ┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬▐┴ ┴ ┴ ┴ ┌┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┬┐ \/T1/1- ┌Обратите внимание, что первый кластер области данных имеет номер 002!