▊I.2.4. Область данных на дискете. Размещение файлов Если Вы не тот, кто наверху, значит, Вы тот, кто внизу. Стивен Поттер Область данных (область для хранения содержимого файлов) расположена сразу после Справочника: α) с сектора 0Eh, если диск ▇двухсторонний, β) с сектора 0Ch, если диск ▇односторонний. \/T0/1 ▁▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▚ ▕ При форматировании в Область данных записываются символы с кодом E5h.▕ ▇▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▔ \/T1/1- Следует отметить, что в этой области диска элементарной единицей ко﹣ личества информации является ▇кластер▁ (совокупность двух секторов). Опе﹣ рационная система работает с кластером как с неразрывным целым. Отсюда, в частности, следует, что файл занимает на диске участок памяти, размер которого ▇всегда▁ кратен 1024 байтам. Кластеры нумеруются следующим образом: \/T0/1 ▁▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▏▊▊▊▊▊▊▊▏▊▊▊▊▊▊▊▏▊▊▊▊▊▊▊▏▊▊▊▊▊▏▊▊▊▊▊▊▊▊▊▏▊▊▊▊▊▊▊▊▊▚ ▕ Номера секторов ▕0Ch÷0Dh▕0Eh÷0Fh▕10h÷11h▕ ... ▕59Bh÷59Ch▕59Dh÷59Eh▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ Номер кластера ▕ 02h ▕ 03h ▕ 04h ▕ ... ▕ 712h ▕ 713h ▕ ▇▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▞▊▊▊▊▊▊▊▞▊▊▊▊▊▊▊▞▊▊▊▊▊▊▊▞▊▊▊▊▊▞▊▊▊▊▊▊▊▊▊▞▊▊▊▊▊▊▊▊▊▔ \/T1/1- Номер первого кластера с содержимым файла находится в Справочнике диска. Ссылки на остальные кластеры находятся в Таблице Размещения Фай﹣ лов. Работая с Таблицей Размещения Файлов можно легко восстановить файл, стертый командой DEL или любой аналогичной командой, т.к. при уничтоже﹣ нии файла происходит следующее: 1) код первого символа имени файла устанавливается равным E5h; 2) стирается (обнуляется) вся информация в FAT, относящаяся к этому файлу, а место в ней освобождается для информации о новом файле; 3) информация из "стертого" файла сохраняется на дискете до тех пор, пока на дискету не будет записан новый файл. И до тех пор, пока на диск не записан новый файл, старый файл ▇можно восстановить▁ (если, конечно, Вы знаете, в каких кластерах он размещался до "стирания"!). Теперь мы можем рассмотреть метод выделения кластеров для файлов. При записи на дискету данных из файла для них по одному выделяются кластеры дискеты. Когда необходим очередной кластер для данных, то вы﹣ бирается доступный кластер с наименьшим номером. Такая простая схема используется как при создании файла, так и при его "удлинении" (путем добавления данных в конец файла). Операционная система MSX-DOS выделяет место на дискете по одному кластеру, когда в этом есть необходимость, не заботясь о том, чтобы все данные файла хранились в одной непрерывной области диска. При разработ﹣ ке любой схемы распределения дискового пространства в любой операцион﹣ ной системе приходится выбирать между свободным выделением пространства по одному кластеру (в результате файл может оказаться "размазанным" по всей дискете), и выделением места большими непрерывными сегментами, что усложняет задачу управления пространством на дискете. Операционная сис﹣ тема MSX-DOS использует более простой первый метод. Если дискета пуста, то все доступное на ней место представляет собой одну большую "чистую" область. Когда файлы копируются на такую дискету, они оформляются в виде удобно размещенных ▇непрерывных▁ сегментов диско﹣ вого пространства. Но впоследствии, если файлы будут "удлиняться", то дополнительное место будет выделяться в первых свободных кластерах, ко﹣ торые могут находиться в ▇любом месте дискеты. Когда файлы копируются на новую дискету и не изменяются программис﹣ том, их размещение на диске остается экономичным. Но если создаются или удаляются какие-либо данные, то использование места на дискете стано﹣ вится весьма запутанным. Это очень часто происходит, когда программа создает одновременно два файла. Если файлы увеличиваются параллельно, то их расположение на дискете обязательно будет перемежающимся. Итак, при распределении пространства на дискете операционная система MSX-DOS равномерно использует все пространство и не требует Вашего вме﹣ шательства. Однако все эти преимущества достигаются ценой "размазыва﹣ ния" файлов по дискете. Из-за этого может увеличиться время доступа к файлу, поскольку магнитная головка чтения-записи должна перемещаться по всей дискете для поиска нужных треков. Поскольку обращения к дискете являются наиболее медленными операциями и основными факторами, ограни﹣ чивающими производительность компьютера, такое размещение файлов может породить проблемы, хотя обычно этого не случается. По этой причине необходимо уделять внимание потенциальной проблеме фрагментации пространства, занимаемого файлами на дискете. В тех случа﹣ ях, когда фрагментация файлов покажется Вам нежелательной, скопируйте файл на новую дискету. Это же полезно делать, если Вам покажется, что дисковод слишком долго выполняет поиск треков при чтении файла. При копировании файлов на новую дискету можно заодно улучшить их последовательность, разместив в начале часто использующиеся файлы или переставив их в таком порядке, в каком Вам хотелось бы их видеть в рас﹣ печатке содержимого дискеты. Теперь мы расскажем Вам о структуре текстовых файлов. ▇Текстовый файл в коде ASCII▁ - это наиболее часто использующийся и один из самых важных форматов для файлов данных, размещаемых на диске﹣ тах. Такие файлы содержат обычную алфавитную информацию, тексты или от﹣ четы, состоящие из алфавитных символов. ▇Большинство текстовых редакторов используют текстовый формат▁. Тек﹣ стовый формат используется для хранения исходного текста программ (ис﹣ ходной, нетранслировавшейся версии). Практически все языковые процессо﹣ ры (такие, как интерпретатор языка BASIC, компилятор языка Pascal или Макроассемблер) ожидают ввода файла в текстовом формате. ▇Вообще говоря, имеется три различных категории кодов ASCII и две из ▇них будут нас интересовать▁. Одна▁ категория используется для кодировки данных, таких как буквы, цифры и знаки пунктуации. \/T0/1 ▁▊▊▊▏▊▊▊▊▊▚▊▊▊▏▊▊▊▊▊▚▊▊▊▏▊▊▊▊▊▚▊▊▊▏▊▊▊▊▊▚▊▊▊▏▊▊▊▊▊▚▊▊▊▏▊▊▊▊▊▚▊▊▊▏▊▊▊▊▊▚ ▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕Код▕Клав.▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ 32▕SPACE▕ 55▕ 7 ▕ 78▕ N ▕101▕ e ▕124▕ | ▕211▕ с ▕234▕ Й ▕ ▕ 33▕ ! ▕ 56▕ 8 ▕ 79▕ O ▕102▕ f ▕125▕ } ▕212▕ т ▕235▕ К ▕ ▕ 34▕ " ▕ 57▕ 9 ▕ 80▕ P ▕103▕ g ▕126▕ ~ ▕213▕ у ▕236▕ Л ▕ ▕ 35▕ # ▕ 58▕ : ▕ 81▕ Q ▕104▕ h ▕191▕ ¤ ▕214▕ ж ▕237▕ М ▕ ▕ 36▕ $ ▕ 59▕ ; ▕ 82▕ R ▕105▕ i ▕192▕ ю ▕215▕ в ▕238▕ Н ▕ ▕ 37▕ % ▕ 60▕ < ▕ 83▕ S ▕106▕ j ▕193▕ а ▕216▕ ь ▕239▕ О ▕ ▕ 38▕ & ▕ 61▕ = ▕ 84▕ T ▕107▕ k ▕194▕ б ▕217▕ ы ▕240▕ П ▕ ▕ 39▕ ' ▕ 62▕ > ▕ 85▕ U ▕108▕ l ▕195▕ ц ▕218▕ з ▕241▕ Я ▕ ▕ 40▕ ( ▕ 63▕ ? ▕ 86▕ V ▕109▕ m ▕196▕ д ▕219▕ ш ▕242▕ Р ▕ ▕ 41▕ ) ▕ 64▕ @ ▕ 87▕ W ▕110▕ n ▕197▕ е ▕220▕ э ▕243▕ С ▕ ▕ 42▕ * ▕ 65▕ A ▕ 88▕ X ▕111▕ o ▕198▕ ф ▕221▕ щ ▕244▕ Т ▕ ▕ 43▕ + ▕ 66▕ B ▕ 89▕ Y ▕112▕ p ▕199▕ г ▕222▕ ч ▕245▕ У ▕ ▕ 44▕ , ▕ 67▕ C ▕ 90▕ Z ▕113▕ q ▕200▕ х ▕223▕ ъ ▕246▕ Ж ▕ ▕ 45▕ - ▕ 68▕ D ▕ 91▕ [ ▕114▕ r ▕201▕ и ▕224▕ Ю ▕247▕ В ▕ ▕ 46▕ . ▕ 69▕ E ▕ 92▕ \ ▕115▕ s ▕202▕ й ▕225▕ А ▕248▕ Ь ▕ ▕ 47▕ / ▕ 70▕ F ▕ 93▕ ] ▕116▕ t ▕203▕ к ▕226▕ Б ▕249▕ Ы ▕ ▕ 48▕ O ▕ 71▕ G ▕ 94▕ ^ ▕117▕ u ▕204▕ л ▕227▕ Ц ▕250▕ З ▕ ▕ 49▕ 1 ▕ 72▕ H ▕ 95▕ _ ▕118▕ v ▕205▕ м ▕228▕ Д ▕251▕ Ш ▕ ▕ 50▕ 2 ▕ 73▕ I ▕ 96▕ ` ▕119▕ w ▕206▕ н ▕229▕ Е ▕252▕ Э ▕ ▕ 51▕ 3 ▕ 74▕ J ▕ 97▕ a ▕120▕ x ▕207▕ о ▕230▕ Ф ▕253▕ Щ ▕ ▕ 52▕ 4 ▕ 75▕ K ▕ 98▕ b ▕121▕ y ▕208▕ п ▕231▕ Г ▕254▕ Ч ▕ ▕ 53▕ 5 ▕ 76▕ L ▕ 99▕ c ▕122▕ z ▕209▕ я ▕232▕ Х ▕▊▊▊▞▊▊▊▊▊▔ ▕ 54▕ 6 ▕ 77▕ M ▕100▕ d ▕123▕ { ▕210▕ р ▕233▕ И ▕ ▇▊▊▊▞▊▊▊▊▊▔▊▊▊▞▊▊▊▊▊▔▊▊▊▞▊▊▊▊▊▔▊▊▊▞▊▊▊▊▊▔▊▊▊▞▊▊▊▊▊▔▊▊▊▞▊▊▊▊▊▔ \/T1/1- Вторая▁ категория используется для форматирования, т.е. для указания места, где заканчивается одна строка и начинается другая; эти коды ис﹣ пользуются не только для управления форматом печати, но и для структу﹣ рирования файлов. И, наконец, третья▁ категория служит для управления передачей данных и никак не связана с форматом текстовых файлов. Символы ASCII двух специальных категорий ▊ форматирующие и символы связи, ▊ имеют коды от 0 до 31 и 127. \/T0/1 ▁▊▊▊▊▊▏▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▏▊▊▊▊▊▏▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▏▊▊▊▊▊▏▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▚ ▕ Код ▕ Клавиша (и) ▕ Код ▕ Клавиша (и) ▕ Код ▕ Клавиша (и) ▕ ⁃▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊ ▕ 0 ▕ CTRL+@ ▕ 11 ▕ CLS/HOME ▕ 22 ▕ CTRL+V ▕ ▕ 1 ▕ CTRL+A ▕ 12 ▕ CTRL+L ▕ 23 ▕ CTRL+W ▕ ▕ 2 ▕ CTRL+B ▕ 13 ▕ RETURN ▕ 24 ▕ SELECT ▕ ▕ 3 ▕ CTRL+C ▕ 14 ▕ CTRL+N ▕ 25 ▕ CTRL+Y ▕ ▕ 4 ▕ CTRL+D ▕ 15 ▕ CTRL+O ▕ 26 ▕ CTRL+Z ▕ ▕ 5 ▕ CTRL+E ▕ 16 ▕ CTRL+P ▕ 27 ▕ ESC ▕ ▕ 6 ▕ CTRL+F ▕ 17 ▕ CTRL+Q ▕ 28 ▕ ▊▊▊▶ ▕ ▕ 7 ▕ CTRL+G (BEEP) ▕ 18 ▕ INS ▕ 29 ▕ ◀▊▊▊ ▕ ▕ 8 ▕ BS ▕ 19 ▕ CTRL+S ▕ 30 ▕"стрелка ВВЕРХ"▕ ▕ 9 ▕ TAB ▕ 20 ▕ CTRL+T ▕ 31 ▕"стрелка ВНИЗ" ▕ ▕ 10 ▕ CTRL+J (LF) ▕ 21 ▕ CTRL+U ▕ 127 ▕ DEL ▕ ▇▊▊▊▊▊▞▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▞▊▊▊▊▊▞▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▞▊▊▊▊▊▞▊▊▊▊▊▊▊▊▊▊▊▊▊▊▊▔ \/T1/1- Теперь рассмотрим структуру ▇текстового▁ файла в коде ASCII. Символы текстового файла организуются в ▇строки▁, подобно строкам на бумаге. Гра﹣ ницы строк отмечаются форматирующими символами кода ASCII: возврат каретки▁ ▊ символ с кодом 13 (0Dh) и перевод строки▁ ▊ символ с кодом 10 (0Ah). Можно было бы использовать любой символ для обозначения конца стро﹣ ки, но используются именно эти два символа, поскольку они управляют процессом перехода к новой строке на печатающем устройстве. Одной из причин использования двух символов, обозначающих конец строки, состоит в обеспечении возможности наложения строк. Наиболее часто такая возможность используется для выполнения подчеркивания. При этом на печать в конце строки выдается только символ "возврат каретки", а затем накладывающиеся символы. Поскольку перевод строки не выполнял﹣ ся, новые символы печатаются поверх уже напечатанных. Однако заме﹣ тим, что такую операцию можно произвести с печатающим устройством, но нельзя с дисплеем. Формат текстового файла определяется не только разделением на стро﹣ ки. Все файлы в коде ASCII имеют один общий символ маркер конца файла, код ASCII которого равен 26 (1Ah). Этот маркер однозначно указывает ко﹣ нец файла. Обнаружение положения кода 26 позволяет точно установить размер файла, отличающийся от размера, указанного в Справочнике.