Компьютерные науки - Учебники на русском языке - Скачать бесплатно
процедуры ввода с клавиатуры с одной из восьми возможных комбинаций
ожидания нажатия клавиши, отображения введенных символов на экране и
проверки нажатия клавиши Ctrl-Break. Чтобы не путаться в их назначении,
удобно представить все вышесказанное в виде следующей таблицы:
Функция Ожидание Эхо Проверка Ctrl-Break
-------- -------- ---- --------------------
1 да да да
6 нет нет нет
7 да нет нет
8 да нет да
Кроме того, функция 6 дублирует еще и функцию вывода на экран. Ясно,
что эти процедуры реализуют базовые операции, которые затем используются
командами ДОС, и они вовсе не претендуют на логическую законченность при
обслуживании клавиатуры.
Функция номер 9 используется для вывода на экран дисплея строки
символов, причем каждый из символов выводится так же, как это делает
функция 2. Определенная странность работы этой функции, которая уменьшает
ее полезность, заключается в том, что вместо использования счетчика
символов в строке, в качестве ограничителя используется знак денежной
единицы, "$". Это лишний раз демонстрирует, что ДОС разрабатывалась не как
универсальная система, а как средство для решения определенных специальных
задач.
Функция номер 10, шестнадцатиричное значение А, обеспечивает
буферированный ввод с клавиатуры. В то время как остальные функции ввода
немедленно передают введенный символ, эта функция накапливает законченную
логическую единицу ввода, которая завершается нажатием клавиши "ввод"
(ENTER). Остальные функции ввода с клавиатуры позволяют программам
немедленно реагировать на введенные символы. Однако им присущ такой
недостаток как необходимость программного выполнения любых операций
редактирования, например, интерпретации клавиши возврата на одну позицию,
означающей стирание предыдущего символа. Функция номер 10 передает все
стандартные средства редактирования ДОС в распоряжение Вашей программы,
что может оказаться очень удобным. Каждую из функций нужно использовать в
своем случае, что позволит Вам наиболее эффективно пользоваться
возможностями, представленными в Ваше распоряжение операционной системой.
Чтобы воспользоваться функцией 10, в Вашей программе должен быть
предусмотрен буфер ввода, размер которого может изменяться. Первый байт
указывает ДОС размер буфера, а второй байт используется ДОС, чтобы
сообщить Вам, сколько символов находится в буфере.
Функция номер 11, шестнадцатиричное значение В, используется для
проверки, нажата ли какая-нибудь клавиша на клавиатуре, без ее ввода.
Подобно функции 6, эта функция не ожидает пока будет нажата клавиша. Но, в
отличие от функции 6, если клавиша нажата, ее код не вводится и
производится проверка нажатия клавиш Ctrl-Break.
Функция номер 12, шестнадцатиричное значение С, очищает буфер ввода с
клавиатуры от всех введенных в него символов. Может так случиться, что
пользователь начнет набирать символы на клавиатуре прежде чем начнется
ввод. Если программа обнаруживает ошибку и посылает пользователю сообщение
об ошибке, необходимо иметь уверенность в том, что введенные с клавиатуры
символы являются ответом на сообщение об ошибке, а не остатком чего-либо
введенного раньше. Для этого и служит функция 12, очищающая буфер ввода.
(Пояснение того, как работает буфер ввода можно найти в главе 10). Эта
функция обычно предшествует выполнению функций 1,6,7,8 и 10. Буфер, о
котором идет речь, является внутренним буфером, а не буфером программы,
использующимся в функции 10.
Далее следуют функции обслуживания дискет. Чтобы лучше понять, о чем
здесь пойдет речь, необходимо обратиться к информации об организации
файлов на дискетах, имеющейся в главе 5. Для использования большинства из
этих функций необходим блок управления файлом (FCB) ДОС, который мы здесь
описывать не будем.
Функция номер 13, шестнадцатиричное значение D, используется для
сброса дисковой подсистемы. Если был изменен номер дисковода, выбираемого
по умолчанию, им снова делается дисковод А. См. также функцию 25.
Функция номер 14, шестнадцатиричное значение Е, используется с для
установления номера дисковода, выбираемого по умолчанию. Дисковод задается
номером от 0 до 3, что соответствует идентификаторам от А до D. См. также
функцию 25.
Функция номер 15, шестнадцатиричное значение F, используется, чтобы
открыть дисковый файл. Ваша программа должна сформировать блок управления
файлом стандартного формата ДОС, включающий имя файла. Если файл не найден
на дискете, то программе возвращается признак ошибки. Если необходимо в
случае отсутствия файла с указанным именем создать новый файл с таким
именем, следует использовать функцию 22. Фактическое открытие файла
устанавливает логическое соединение между элементом справочника файлов и
блоком управления файлом в программе.
Функция номер 16, шестнадцатиричное значение 10, используется, чтобы
закрыть файл, который был открыт функцией 15. Практический смысл функции
закрытия файла заключается в модификации элемента справочника файла на
дискете.
Функция номер 17, шестнадцатиричное значение 11, используется для
запуска поиска в справочнике файлов дискеты. Эта функция используется при
указании неполных или родовых имен файлов, таких как "В:*.ВАК" или
"???QQ.INC". Если найдено подходящее имя, тогда ДОС сформирует полный блок
управления файлом для этого файла, что позволит Вашей программе открыть
файл. Использование родовых имен повышает гибкость и расширяет возможности
работы с файлами.
Функция номер 18, шестнадцатиричное значение 12, используется для
продолжения поиска файлов по родовому имени, начатого функцией 17. Функция
17 запускает поиск и возвращает первое из подходящих имен. Функция 18
продолжает поиск и возвращает имена всех последующих подходящих файлов.
Функция номер 19, шестнадцатиричное значение 13, используется для
удаления файла с дискеты. Заданное имя файла может быть родовым, так что
не требуется использовать функции 17 и 18 для удаления группы файлов.
Функция номер 20, шестнадцатиричное значение 14, используется для
последовательного чтения файла. Из файла считывается очередная запись.
Если чтение завершилось неудачей, то передается признак ошибки.
Функция номер 21, шестнадцатиричное значение 15, используется для
последовательной записи в файл. Если операция записи прошла неудачно, то
передается признак ошибки.
Эти функции последовательного чтения и записи, а также функции
прямого чтения и записи, 33 и 34, описанные ниже, используются только для
записей фиксированной длины - ДОС не обеспечивает средств для работы с
записями переменной длины, например, строками в текстовом файле. Для
работы с записями переменной длины Ваши программы должны осуществлять
логическую обработку записей. Одно из лучших средств для этого заключается
в описании файла в терминах ДОС как последовательного файла с записями
длиной в один байт, которые Вы сможете читать и писать посимвольно.
Функция номер 22, шестнадцатиричное значение 16, используется для
"создания" файла. Если файл с таким именем существует, то он используется
повторно; если нет - то создается новый элемент справочника файлов с
нулевой длиной данных. Эта функция также открывает файл, так что ее можно
использовать вместо функции 15, если файл необходимо открыть, независимо
то того, существует файл или нет. Функция 23, шестнадцатиричное значение
17, используется для переименования одного или нескольких файлов. Для этой
функции также могут использоваться родовые имена.
Функции с номером 24 не существует. Функция номер 25,
шестнадцатиричное значение 19, используется для определения номера
дисковода, использующегося сейчас по умолчанию. Числовой код дисковода от
0 до 3 соответствует именам от А до D. См. также функции 13 и 14.
Функция номер 26, шестнадцатиричное значение 1А, используется для
установления адреса рабочей области диска, DTA, в которой будут
выполняться операции с дискетой. Если Ваши программы не заменяют область
DTA, устанавливаемую по умолчанию, в ней будет всего 128 байт и нельзя
будет пересылать записи большей длины. DTA - это не то же самое, что буфер
чтения/записи секторов, используемый ДОС.
Функция номер 27, шестнадцатиричное значение 1В, используется для
определения адреса памяти, по которому находится таблица размещения файлов
текущего дисковода и другой информации о дискете. Эта функция может быть
использована для просмотра таблицы размещения файлов, например, чтобы
установить сколько места осталось на дискете. Начиная с версии 2.00 ДОС
эта функция обеспечивает доступ только к первой части ТРФ, которая
определяет тип дискеты.
Функции с номерами от 28 до 32 не существуют. Функция номер 33,
шестнадцатиричное значение 21, используется для чтения произвольной
записи, указываемой логическим номером записи. ДОС вычисляет положение
произвольной записи по фиксированной длине записи и ее номеру.
Функция номер 34, шестнадцатиричное значение 22, используется для
произвольной записи на дискету.
Функция номер 35, шестнадцатиричное значение 23, используется для
определения размера файла. При использовании этой функции имеет место ряд
странностей. Можно использовать родовое имя файла. Файл не должен быть
открыт. Размер файла определяется в терминах длины записи, указанной в
блоке управления неоткрытым файлом. Чтобы получить размер файла в байтах,
необходимо установить размер записи равным одному байту.
Функция номер 36, шестнадцатиричное значение 24, используется при
переходе от последовательного режима к произвольному. Она устанавливает
поле произвольной записи в ту же позицию, в которой находится текущая
последовательная запись.
Следующие две функции не относятся к обслуживанию дискет.
Функция номер 37, шестнадцатиричное значение 25, используется для
установки вектора прерывания. Поскольку вектора прерываний устанавливаются
очень просто, непонятно для чего нужна эта функция - разве что для
обеспечения дополнительной степени защиты.
Функция номер 38, шестнадцатиричное значение 26, используется для
создания нового программного сегмента в порядке подготовки к запуску
зависимой программы.
Теперь мы снова вернемся к функциям, обслуживающим файлы на дискетах.
Функция номер 39, шестнадцатиричное значение 27, используется для чтения
нескольких записей, начиная с произвольной позиции в файле.
Эта функция может быть использована вместо нескольких отдельных
вызовов функции 33, если объем памяти позволяет считывать целые блоки из
файлов.
Функция номер 40, шестнадцатиричное значение 28, используется при
записи в файл, начиная с произвольной позиции, нескольких записей.
Функция номер 41, шестнадцатиричное значение 29, используется для
преобразования имени файла в том виде, в каком оно вводится пользователем,
например, "В:CHAPTER.4", в формат блока управления файлом, который
используется ДОС. Это несомненно очень полезная функция, которая позволяет
вводить имена файлов в обычном виде и возлагать всю работу по разбору и
преобразованию на ДОС. Если необходимо, эта функция позволит Вам задать
идентификатор дисковода, имя файла или расширение имени по умолчанию,
когда они не указаны в анализируемой строке. Эта функция также позволяет
преобразовывать родовые имена файлов, включающие звездочку в формат
родового имени, состоящего из вопросительных знаков, как того требует
формат блока управления файлом.
Функция номер 42, шестнадцатиричное значение 2А, используется для
считывания системной даты. Дата выдается в виде трех двоичных чисел,
соответствующих году, месяцу и дню месяца. Как мы увидим в главе 11, дата
автоматически модифицируется при первом же запросе даты или времени после
очередной полуночи. Это происходит при любом запросе времени, включая
модификацию времени создания файла в элементе справочника файлов. Если
время не запрашивалось в промежутке от полуночи до полуночи хотя бы один
раз, то дата будет неверной.
Функция номер 43, шестнадцатиричное значение 2В, используется для
установки системной даты.
Функция номер 44, шестнадцатиричное значение 2С, используется для
считывания системного времени. Время выдается в часах, минутах, секундах и
сотых долях секунды. Счетчик таймера, использующийся для подсчета
системного времени, изменяется примерно 18 раз в секунду, так что значение
сотых долей секунды довольно приблизительно. Поскольку таймер должен
перезапускаться примерно каждые 0,0546 секунды, его нельзя использовать
для измерения очень коротких промежутков времени. Вычисление сотых долей
секунды, однако, выполняется точно по показаниям счетчика таймера и через
определенный промежуток времени значения сотых долей секунды будут
равномерно распределены в диапазоне от 0 до 99. Это означает, что Ваши
программы могут использовать системное время для генерации
псевдо-случайных чисел.
Функция номер 45, шестнадцатиричное значение 2D, используется для
установки системного времени.
Функция номер 46, шестнадцатиричное значение 2Е, используется для
управления верификацией записи на дискету. Если верификация разрешена, то
каждая операция записи будет проверяться на возможность возникновения
ошибки путем повторного считывания данных и их сравнения с исходными
данными. Маловероятно, что Вам потребуется эта функция, так как дискеты
достаточно надежны и довольно значительные проверки выполняются
автоматически. Но, если Вам потребуется верификация, то используйте
функцию 46.
Мы перечислили все имеющиеся функции ДОС. Позднее, когда мы
рассмотрим все возможности, предоставляемые системой BIOS в ПЗУ, Вы
заметите, что некоторые функции дублируются. Однако, в большинстве случаев
ДОС и BIOS в ПЗУ обслуживают совершенно различные нужды.
В следующей главе мы начинаем рассмотрение важного предмета - дискет
и форматов хранения данных на дискетах.
ГЛАВА 5. ОРГАНИЗАЦИЯ ВНЕШНЕЙ ПАМЯТИ
Дискеты стали не только стандартным, но и самым распространенным
носителем программ и данных для персональных компьютеров. В этой главе
будут приведены все необходимые сведения о дискетах, об особенностях их
структуризации. Кроме того, вы сможете кое-что узнать о защите от
копирования.
Весь материал, приведенный в настоящей главе, относится к семейству
компьютеров IВМ/РС, совместимыми с ними компьютерами, а также ко всем
компьютерам, работающим под управлением операционной системы МS-DOS.
Другие компьютеры могут использовать другие размеры дискет и форматы
данных.
Как уже указывалось в предыдущей главе, начиная с версии ДОС 2.00,
подключение к системе дискет новых типов осуществляется довольно просто.
Схема выполнения этой процедуры предполагает, что новые типы дисков
используются таким же образом, как те дискеты, которые были исходно
доступны для IBM/PC. Следовательно, вся информация, изложенная в этой
главе, может применяться и к тем новым дисковым устройствам, которые будут
добавлены в Вашу систему, за исключением конкретных чисел, задающих
специфические функции.
5.1. Устройство гибкого магнитного диска (дискеты)
Гибкие диски, как известно, являются идеальным носителем для внешней
памяти персональных компьютеров, подобных IBM/PC. Их размеры удобны, цена
не высока и они достаточно надежны в эксплуатации. При известной
осторожности в обращении дискеты очень редко портятся. Именно по этому
дискеты стали наиболее популярным носителем информации задолго до
появления компьютеров IBM/PC. Вполне естественно, что фирма ИБМ обратилась
к дискетам, выбирая носитель информации для своего компьютера IBM/PC.
Кратко рассмотрим, что собой представляет сама дискета. (Простая
схема приведена на рис.5.1.) Дискета представляет собой круглый кусок
гибкого пластика, покрытый магнитным окислом, напоминающим покрытие других
известных магнитных носителей, например, магнитных лент. Магнитные диски,
использующиеся на больших компьютерах, изготавливаются из жестких
металлических пластин, а для дискет используются гибкие пластиковые
кружки, что и дало им популярное название "гибкие" или "флоппи" - диски.
То, что эти диски были сделаны гибкими, значительно уменьшило вероятность
их повреждения при обращении с ними и это в значительной мере определило
их успех.
Круглый диск с магнитным покрытием всегда помещен в квадратный
предохранительный конверт. Внутренняя поверхность этого конверта покрыта
слоем белого фетро-подобного материала, помогающим в защите дискеты. Он
служит как для смягчения ударов, так и для улавливания пыли.
Квадратный предохранительный конверт, который по неизвестной причине
практически всегда имеет черный цвет, имеет четыре отверстия, каждое из
которых имеет свое собственное назначение. Отверстие в центре
предназначено для захвата дискеты приводом дисковода. Через это отверстие
механизм дисковода захватывает гибкий диск, чтобы привести его во
вращение.
Второе отверстие в предохранительном конверте представляет собой
продолговатую прорезь, через которую осуществляется доступ к дискете
головок чтения/записи. Через эту прорезь осуществляется процесс чтения и
записи информации.
Третье отверстие представляет собой небольшую дырочку возле
центрального отверстия. Это отверстие в конверте позволяет следить за
небольшим индексным отверстием в самой дискете. Индексное отверстие
используется для указания начала и конца дорожки на дискете. Это индексное
отверстие служит для определения точки отсчета при чтении или записи
информации.Если Вы никогда не видели индексного отверстия, осторожно
поверните дискету внутри конверта, пока оно не совместится с отверстием в
конверте. В дискетах такого типа, который используется в IBM/PC, это
единственное отверстие в пластиковом кружке.
Четвертое отверстие - квадратная прорезь на краю предохранительного
конверта - служит в качестве признака защиты записи. Практически все
магнитные носители используют те или иные признаки защиты от записи. Если
эта прорезь открыта, то запись на эту дискету может выполняться
дисководом, если же она закрыта, то дискета защищена от записи. В
конвертах некоторых дискет вообще нет такой прорези, что полностью
исключает возможность случайного стирания записанных на ней данных.
Отсутствие прорезей защиты записи характерно для многих дискет с
программным обеспечением IBM/PC, в частности, с самой операционной
системой ДОС. Эти дискеты записываются на специальных дисководах,
игнорирующих признак защиты записи.
Не следует, однако, считать, что заклеив прорезь защиты записи Вы
полностью защитите свои дискеты от случайного стирания. Закрытая прорезь
говорит только о том, что правильно работающий дисковод не будет пытаться
выполнять запись на такую дискету. Неисправный дисковод может делать все
что угодно, независимо от наличия или отсутствия признака защиты. Конечно,
маловероятно утратить данные именно таким образом, но все же это может
произойти.
5.2. Форматы хранения информации
Данные на дискете размещаются по "дорожкам". Дорожка - это замкнутая
окружность на поверхности дискеты, размещенная на определенном расстоянии
от центрального отверстия. Стандартный формат дискеты для IBM/PC имеет 40
дорожек.
Каждая дорожка разделена на части, называемые "секторами" или
"записями". Сектора представляют собой основную единицу хранения
информации на дискете. При чтении или записи устройство считывает или
записывает всегда целый сектор, независимо от объема запрашиваемой
информации несмотря на отсутствие ограничений. Хотя Вы, точнее Ваши
программы, могут организовывать свои данные в единицах произвольного
размера, компьютер и дисковод всегда работают с секторами, что, как
правило, скрыто от пользователя.
Термин "запись" иногда используется в том же смысле, что и "сектор".
Лучше будет оставить слово "запись" для обозначения логических единиц
хранения информации в наших программах и использовать слово "сектор" для
обозначения физической единицы хранения информации на дискете.
Данные могут размещаться как на одной стороне дискеты, так и на двух
сторонах. Схема размещения секторов на дискете показана на рис. 5.2.
Сейчас нужно ненадолго прерваться и договориться о терминологии.
Дискета имеет одну или две стороны; на каждой стороне по 40 дорожек; по
восемь секторов на дорожке и по 512 байт в каждом секторе. Как к ним
обращаться? В этой книге будет использоваться способ нумерации, принятый
во всех руководствах фирмы "ИБМ", хотя он и несколько противоречив.
Стороны нумеруются как 0 и 1, односторонняя дискета имеет только сторону с
номером 0 . Дорожки нумеруются с 0 по 39 ; причем дорожка 0 находится
ближе всего к внешнему краю дискеты, а дорожка 39 ближе к центру. Начало
дискеты находится на нулевой дорожке. Сектора, похоже просто чтобы сделать
их в чем-то отличающимися, нумеруются с 1 по 8. Таким образом, первый
сектор диска имеет номер 1 и располагается на нулевой дорожке нулевой
стороны.
Данные внутри сектора размещаются и адресуются произвольно. Если
пользоваться смещениями, то для первого байта смещение будет равно нулю,
для второго - единице, и так далее. В дальнейшем мы будем обращаться к
данным как по смещению (начиная с 0), так и по порядковому номеру (начиная
с 1), как в конкретном случае будет удобнее.
Сектора на дискете имеют определенную последовательность и, когда это
возможно, они используются в этой последовательности. Последовательность
начинается с самого первого сектора на дискете, за которым следуют
остальные сектора этой же дорожки (нулевой) со второго по восьмой. У
двухсторонних дискет за восьмым сектором нулевой стороны следует первый
сектор той же дорожки, но первой стороны. Как при одностороннем, так и при
двухстороннем формате дискет за последним сектором одной дорожки следует
первый сектор следующей дорожки.
Вы, вероятно, уже заметили, что на двухсторонних дискетах прежде чем
переходить к очередной дорожке, изменяется сторона, так что используется
одна дорожка на обеих сторонах, прежде чем система перейдет к следующей
дорожке. Таким образом, получается, что лучше было бы использовать при
обращении к конкретному сектору последовательность дорожка-сторона-сектор,
а не - сторона-дорожка-сектор, поскольку они используются именно в таком
порядке. Тем не менее, во всех руководствах фирмы "ИБМ" обычно указывают
сектор, задавая сторону, потом дорожку, а потом номер сектора и мы тоже
будем пользоваться такой же последовательностью.
5.3. Типы дискет и проблемы защиты от копирования
Типов дискет насчитывается значительно больше, чем используется
семейством компьютеров IBM/PC. Рассмотрим эти типы, чтобы лучше понимать,
что именно используется для IBM/PC.
Обычные гибкие диски имеют один из двух размеров. Больший формат
имеет диаметр 203 мм (8 дюймов), а меньший - 133 мм (5,25 дюйма). Недавно
появившиеся так называемые "микро-флоппи", диаметром 89 мм (3,5 дюйма),
заключены в твердую упаковку и, строго говоря, не являются гибкими
дисками.
Компьютеры IBM/PC, подобно большинству персональных компьютеров,
используют мини-диски диаметром 133 мм (5,25 дюйма), а компьютер IBM
Displaywriter (довольно близкий к РС по своим характеристикам) использует
больший формат.
Еще одной характеристикой дискеты, является плотность записи. В сфере
персональных компьютеров используются различные плотности записи, а
существующая терминология не всегда понятна. Стандартные дискеты,
используемые IBM/PC, имеют плотность записи, называемую двойной, что
позволяет записывать и считывать 40 дорожек данных на поверхности дискеты.
Другой использующийся формат называется учетверенной плотностью, что на
том же пространстве позволяет иметь 80 дорожек. Иногда плотность записи
обозначается в количестве дорожек на дюйм. Двойная плотность, нормальная
для IBM/PC, составляет 48 дорожек на дюйм (48 ТРI), а учетверенная
плотность составляет 96 дорожек на дюйм (96 ТРI).
Существует два способа разбивки (разметки) дорожек на сектора. Один
из них называется фиксированным или аппаратным, а второй - программным.
Если размер сектора задан жестко и определяется механическими
характеристиками устройства, то такая разметка называется фиксированной.
При фиксированной разметке индексные отверстия, расположенные по кругу,
обозначают начало каждого сектора и, следовательно, его положение на
дискете точно определено. Альтернативой для такой разметки служит
программная разметка.
Для стандартных дисков персональных компьютеров, размером 133 мм
(5,25 дюйма), расположение дорожек на диске и число сторон определяются
характеристиками самих дисков и дисководов и, по существу, являются
неизменными. Однако, количество секторов на дорожке и их размер
определяются программно, в процессе форматирования. Именно поэтому гибкие
диски называют дисками с программной разметкой секторов (soft-sector).
Форматирование (определение характеристик секторов) выполняется либо
программами операционной системы, либо базовой системы ввода/вывода
(BIOS).
Размер сектора 133 мм диска, поддерживаемого системой BIOS, может
составлять 128, 256, 512, и 1024 байта. ДОС (версий 1.ХХ-3.1)
ориентирована на использование секторов, размером 512 байт.
В ранних версиях ДОС использовалось ограниченное число дисковых
форматов. Начиная с версии 2.00 и во всех последующих используется четыре
основных формата. Различие между форматами определяется числом
используемых сторон диска и числом секторов на дорожке: одно- или
двухсторонний диск и 8 или 9 секторов на дорожке.
---------------------------------------------------------------
Обозначение Кол-во Количество Количество Объем
сторон секторов дорожек (Кбайт)
---------------------------------------------------------------
S-8 1 8 40 160
D-9 2 8 40 320
S-9 1 9 40 180
D-9 2 9 40 360
---------------------------------------------------------------
Причина существования четырех различных форматов проста, фирма хочет
быть уверена, что все версии ДОС смогут поддерживать программы,
разработанные для любых, самых ранних версий.
Первые модели IBM/PC оснащались односторонними гибкими дисками.
Впоследствии начали выпускаться дисководы для двухсторонних дисков.
В ранних версиях ДОС на каждой дорожке размещалось восемь 512-байтных
секторов, хотя на той же дорожке можно легко разместить и десять. Позже
установили, что достаточно надежно размещать на дорожке девять секторов,
после чего девятисекторный формат стал стандартным.
Увеличение числа форматов тесно связано с развитием операционной
системы ДОС. Первоначальная версия ДОС поддерживала всего один формат,
который я обозначил как S-8. В следующей версии появился формат D-8. В
версию 2.00 были включены девятисекторные форматы S-9 и D-9. В версии 2.10
новых форматов не появилось, а в версию 3.0 был включен формат с
учетверенной плотностью записи, который будет кратко рассмотрен несколько
позже.
Широкое применение получили только два формата: S-8 и D-9. Формат S-8
является как бы наименьшим общим делителем, он традиционно используется
для коммерческих программ, что гарантирует ее считывание в любой версии
ДОС.
Форматы с учетверенной плотностью записи
------------------------------------------
Как читатель уже наверное обратил внимание, все четыре стандартных
формата имеют одинаковое количество дорожек. Во всех этих форматах
используется по 40 дорожек. Это связано с тем, что дисководы, наиболее
часто использовавшиеся в семействе машин IBM/PC, разрабатывались для
чтения/записи сорока дорожек. Некоторые дисководы с 133-мм дисками и
практически все дисководы для 89-мм (3,5 дюйма) дисков позволяют
записывать 80 дорожек. Они получили название устройств с учетверенной
плотностью записи. Среди форматов, использующихся такими устройствами,
наибольшее распространение получили форматы QD-9 и QD-15.
_______________________________________________________________
Обозначение Количество Количество Количество Объем
сторон секторов дорожек (КБайт)
_______________________________________________________________
QD-9 2 9 80 720
QD-15 2 15 80 1200
_______________________________________________________________
Формат QD-9 отличается от D-9 только удвоенным числом дорожек. Формат
QD-9 чаще всего используется не для стандартных 133-мм дисков, а для 89-мм
(3,5 дюйма) микродисков. Дисководы с учетверенной плотностью записи могут
подключаться к обычному компьютеру IBM/PC как нестандартные устройства,
если включить в ДОС соответствующий драйвер. Предполагается, что этот
формат будет использоваться очень широко в самом ближайшем будущем.
Формат большой емкости QD-15, используемый в компьютере IBM/PC модели
АТ, имеет в каждой из 80 дорожек по 15 секторов, размером 512 байт. Это
стало возможным благодаря использованию в компьютере АТ специальных
дискет, магнитное покрытие которых отличается от обычного. Только при
условии использования этих дисков и специальных дисководов может
применяться такой формат.
Формат жесткого диска
---------------------
Накопители на жестких магнитных дисках большой емкости, такие как
10-мегабайтный жесткий диск компьютера ХТ или 20-мегабайтный диск
компьютера АТ, имеют собственные форматы, на которых необходимо
остановиться особо.
Любой диск имеет физический и логический формат. Физический формат
диска определяет размер сектора (в байтах), число секторов на дорожке (или
в цилиндре - для жестких дисков), число дорожек (цилиндров) и число
сторон. Логический формат диска определяет способ организации информации
на диске и фиксирует размещение информации различных типов.
В отличие от гибких дисков, физический и логический формат которых
устанавливается в процессе форматирования дискеты, жесткие диски поступают
к потребителю с определенным физическим форматом, который устанавливается
в процессе изготовления диска. Логическая структура жесткого диска
устанавливается пользователем, причем это должно быть сделано прежде чем
начнется использование диска операционной системой.Установка логической
структуры диска выполняется в два этапа. Во-первых, жесткий диск можно
разбить на части, каждая из которых может использоваться своей
операционной системой. Далее, каждую из этих частей необходимо
отформатировать в соответствии с требованиями той определенной системы,
для которой она предназначена.
Физические форматы жестких дисков:
______________________________________________________________
Тип Число Число Число Объем
компьютера сторон секторов цилиндров (МБ)
______________________________________________________________
ХТ 4 17 306 10
АТ 4 17 615 20
______________________________________________________________
Вернемся теперь к процессу форматирования. Данные на дискетах не
могут записываться и считываться произвольно. Необходимо обрамление данных
специальными электронными сигналами, записанными на дискете.
Это обрамление называется форматирующим. Поэтому, новые дискеты до их
использования должны быть отформатированы командой FORMAT операционной
системы ДОС.
Основная часть процесса форматирования состоит в записи адресных
меток, идентифицирующих каждый сектор, и указывающих его размер. Изучив
более подробно способы доступа к данным, хранящимся на дискете, Вы
увидите, что одна из ошибок, возникающих при чтении или записи, состоит в
отсутствии адресных меток.
Команда FORMAT не только размечает сектора дискет, формируя адресные
метки, но также устанавливает определенное значение в поля данных всех
секторов. Это значение (F6/16) или символьный код CHR$(246) позволяет
определять, использовался ли когда-нибудь определенный сектор или нет.
Одна из основных причин использования программной разметки
заключается, вероятно, в обеспечении средств защиты от копирования.
Операционная система ДОС позволяет считывать и записывать только сектора
стандартного размера 512 байт, хотя сами дисководы могут работать с
секторами произвольного размера. Можно написать такую программу, которая
не будет использовать средства ДОС для работы с гибким диском и будет
хранить часть своей информации или даже всю информацию в секторах
нестандартного размера, которые не будут читаться стандартными программами
ДОС. В этом и заключается основной принцип защиты от копирования в IBM/PC.
Хотя существуют различные способы защиты от копирования, наиболее простой
заключается в использовании секторов нестандартного размера. Обычно, лишь
небольшая часть информации хранится на защищенной от копирования дискете в
нестандартных секторах, а основная часть данных может храниться в обычных
512-байтных секторах.
Понятно, что все эти различные типы дискет практически несовместимы.
Одно из немногих исключений связано с одновременным использованием одно- и
двухсторонних дискет. Однако, для совместимости дискет важны даже не
физические различия. Для совместного использования дискеты должны иметь
совместимую логическую разметку (например, размещение справочника файлов).
Из-за логических различий невозможно просто перенести данные с дискеты
компьютера "Эппл" в память компьютера IBM/PC, или из операционной системы
ДОС в операционную систему СР/М-86. Для этого нужно написать специальную
программу преобразования, которая сможет выполнять эту задачу.
5.4. Стандартный накопитель информации на гибких магнитных дисках
Иногда какой-либо компании удается сделать столь хорошую продукцию,
что она становится промышленным стандартом, захватывая существенную часть
рынка за счет собственных объемов продаж и продаж близких имитаций этой
продукции.Это произошло с серией накопителей на гибких магнитных дисках ТМ
100 фирмы "Тэндон". Судя по всему, фирма "ИБМ" приняла эти дисководы в
качестве эталонных и, насколько можно о чем-либо судить в этой сфере
тщательно хранящихся секретов, только дисководы серии ТМ 100 фирмы
"Тэндон" поставляются фирмой "ИБМ" в качестве официального дисковода для
IBM/PC.
Существует четыре популярных варианта дисководов ТМ 100. Рассмотрим
эти варианты подробнее.
Устройства ТМ 100-1 предназначены для работы с односторонними дисками
с двойной плотностью записи (т.е., с 40 дорожками). Это устройство входило
в стандартный комплект первой версии IBM/PC. Позднее, одновременно с
внедрением ДОС версии 1.10, фирма "ИБМ" начала использовать дисководы ТМ
100-2, работающие по-прежнему с двойной плотностью, но уже с
двухсторонними дисками, что позволило вдвое увеличить объем хранения
информации. Ниже мы рассмотрим, как операционная система ДОС использует
разные типы дискет). Оставшиеся две модели, ТМ 100-3 и ТМ 100-4,
устройства позволяющие работать с одно- и двухсторонними дисками с
учетверенной плотностью записи, т.е. с восьмьюдесятью дорожками на
поверхности дискеты.
Не совсем понятно решение фирмы "ИБМ" использовать односторонние
дискеты наряду с двухсторонними. С точки зрения дальних перспектив
компьютера такое решение выглядит неразумным. Наиболее вероятной причиной
использования односторонних дискет является желание фирмы ИБМ снизить цену
своего компьютера, которая и так существенно превышает цену обычных
домашних компьютеров.
Имеется ряд признаков, свидетельствующих о стремлении фирмы предельно
снизить цену базовой модели. По крайней мере, это единственный аргумент
которым можно объяснить появление практически нигде не использующейся
модели с накопителем на кассетной магнитной ленте и применения
односторонних дискет в первых модификациях IBM/PC. Расчет делался на то,
что серьезные пользователи, думающие о перспективе, будут приобретать
машины, оснащенные более мощными дисками, а чтобы не отпугнуть
колеблющегося новичка высокой ценой, фирма ИБМ выбрала из всех имеющихся
дисководов устройство с наиболее умеренной ценой - устройство с
односторонними дисками.
5.5. Принципы хранения файлов
Можно использовать различные схемы для организации, хранения и учета
данных на дискете. Каждая из схем имеет свои достоинства и недостатки с
точки зрения эффективности использования пространства памяти дискеты,
скорости доступа, безопасности и качества хранения данных. (Понятие
качества хранения данных подразумевает вероятность каких-либо нарушений
при хранении и трудность восстановления данных, если нарушения произошли.)
Разработка схемы хранения данных состоит в искусстве сочетания всех этих
аспектов, иногда противоречащих друг другу.
В этом параграфе будет описана схема хранения данных, используемая в
MS-ДОС. Прежде чем перейти к подробному рассмотрению схемы хранения,
опишем ее в общих чертах. Первое, что следует подчеркнуть, это
использование для хранения данных стандартных 512-байтных секторов.
Второе. Все сектора извлекаются из общего пула свободных секторов -
никакие сектора или области на дискете не резервируются (исключение
составляет область для размещения системных файлов IBMBIO.COM и
IBMDOS.COM, о чем будет сказано ниже). Третье. Распределение секторов
данных и обьединение секторов, образующих файл данных, выполняется
независимо от обслуживания самих секторов данных, с помощью механизма,
получившего название Таблицы Распределения Файлов (ТРФ). И последнее.
Каждая дискета имеет справочник или таблицу содержимого, которая служит
для учета файлов, хранящихся на дискете файлов. Описанная схема хранения
данных предполагает существование четырех различных типов секторов, один
из которых используется для хранения данных, а три других имеют
специальное назначение.
Как уже упоминалось в предыдущей главе, любая дискета, которая должна
использоваться для запуска операционной системы, должна иметь программу
загрузки, записывающуюся в самом первом секторе дискеты. Программа
загрузки всегда записывается в первый сектор любой форматируемой дискеты
(если задан соответствующий режим форматирования) независимо от того,
будет ли она когда-нибудь использоваться для запуска системы. Сектор с
программой загрузки представляет собой первый специальный тип сектора в
ДОС.
Второй специальный тип сектора используется для хранения таблицы
таблицы размещения файлов (ТРФ). ТРФ занимает два сектора, следующих за
сектором с программой загрузки. Таблица размещения файлов служит для
индикации занятости секторов данных на дискете.
Третий и последний специальный тип сектора используется для хранения
справочника дискеты. Справочник располагается следом за ТРФ. Справочник
может иметь различные размеры: односторонние дискеты имеют четыре сектора
справочника, а двусторонние дискеты - семь.
Все эти сектора специального назначения занимают семь первых секторов
односторонней дискеты или десять - двусторонней. Bcе остальные сектора
используются для хранения данных. На рис. 5.3 показано размещение всех
этих четырех типов секторов на дискете.
Справочник и таблица размещения файлов располагаются в начале
дискеты. На первый взгляд это представляется оптимальным размещением.
Однако, при доступе к файлу ДОС сначала должен найти элемент этого файла в
справочнике, а потом обратиться собственно к данным на дискете. В среднем,
расстояние между справочником и собственно файлом на дискете составляет 20
дорожек, то есть, практически половину дискеты. Перемещение головок
чтения-записи в дисководе является самой медленной операцией. Так что
расстояние между справочником и самим файлом может иметь важное значение с
точки зрения временных характеристик работы.
Если бы справочник располагался в середине дискеты, то среднее
расстояние до секторов данных уменьшилось бы вдвое, т.е., до 10 дорожек. С
другой стороны, работа с пространством данных, состоящим из двух частей,
по обе стороны от справочника, будет значительно сложнее. Для операционных
систем персональных компьютеров выгода от размещения справочника посредине
дискеты слишком мала, чтобы браться за разрешение возникающих при этом
дополнительных проблем. Такой прием обычно используется в больших
компьютерных системах.
Далее мы подробно рассмотрим справочник дискеты и таблицу размещения
файлов. Разобравшись в этом вопросе нам легче будет понять, как
производится распределение пространства на диске между файлами.
5.6. Организация справочника
Справочник дискеты содержит список всех файлов, находящихся на
дискете. Элементы справочника содержат всю необходимую информацию о файле,
за исключением информации о размещении файла (которая хранится в ТРФ).
Каждый элемент справочника имеет длину 32 байта. Следовательно, в
512-байтном секторе помещается ровно 16 элементов справочника. На
односторонней дискете выделено 4 сектора для справочника, что позволяет
хранить 64 элемента справочника. Семь секторов справочника двусторонней
дискеты позволяет разместить 112 элементов.
Большая часть из 32 байтов элемента справочника используется для
хранения информации о файле, однако имеется ряд неиспользуемых полей,
зарезервированных для дальнейшего использования. Одно из различий между
версиями ДОС 1.00 и 1.10 заключается в использовании некоторых из этих
полей, а ДОС версии 2.00 еще более расширяет использование справочника.
Теперь подробно рассмотрим каждую часть элемента справочника.Листинг
программы 5.1 содержит об'явления форматов данных на языке Паскаль, а
листинг 5.3 содержит несколько процедур для работы со справочником -
чтения, интерпретации и записи обратно на дискету.
Программа DiskLook, входящая в пакет программ, прилагаемых к этой
книге, разработана для отображения полной информации из справочника
дискеты. Во время изучения этой главы можно использовать эту программу,
чтобы лучше понять назначение всех полей элемента справочника. Если
используется программа DiskLook, то для получения на экране информации из
справочника нужно нажать функциональную клавишу F4.
Каждый элемент справочника состоит из восьми частей или полей
следующего назначения:
ИМЯ ФАЙЛА: Это поле имеет длину восемь байт, расположенных в элементе
справочника со смещениями от 0 до 7 и содержит имя файла. Если длина имени
меньше восьми символов, то недостающие символы заменяются пробелами.
Правилами оформления имен файлов в ДОС запрещается включать пробелы в
середину имени файла. Но такие имена файлов все же могут создаваться. Это
можно делать на языке Бейсик, поскольку в нем ограничителем имени служат
кавычки. Например, следующий оператор Бейсика позволяет создать файл, имя
которого содержит пробел:
OPEN "AA BB.FIL"
Программа "IBM Typing Tutor", написанная на Бейсике, использует
файлы, имена которых содержит пробелы. При использовании программы поиска
имени файла в справочнике, не следует считать, что имя файла завершается
первым же встреченным пробелом - имя может продолжаться и после этого
пробела.
Если первый байт имени файла имеет шестнадцатеричное значение Е5,
CHR$(229), это означает, что элемент справочника не используется. Это
может значить, что он никогда не использовался или что файл, которому
соответствовал этот элемент, уже уничтожен. Проверка второго байта имени
позволяет установить отличие неиспользовавшегося элемента от элемента
уничтоженного файла (если значение второго байта больше символьного кода
"Z", этот элемент не использовался). В последних версиях ДОС
неиспользованные элементы справочника содержат в первом байте 0.
После уничтожения файла с ним происходит следующее: занимаемое им
место возвращается в общий пул (об этом будет подробнее сказано в
следующем разделе) и первый символ имени файла заменяется
шестнадцатеричным кодом Е5, CHR$(229). Вся информация в элементе
справочника, за исключением первого символа имени, сохраняется. Благодаря
этому, программа DiskLook может отображать имена уничтоженных файлов, а
программа подобная UnErase - восстанавливать файлы.
Еще один код, который может встретиться в первом байте имени файла -
это шестнадцатеричный код 2Е, который указывает на справочник нижнего
уровня.
РАСШИРЕНИE: Это поле имеет длину три байта, которые расположены со
смещениями от 8 до 10 от начала элемента справочника. Оно содержит
расширение имени файла. Как и в случае с самим именем, короткое расширение
дополняется пробелами. Если файл не имеет расширения, то это поле содержит
три пробела.
АТРИБУТ: Это поле состоит из одного байта, расположенного со
смещением 11 от начала элемента справочника. Поле атрибута используется
для установления признака "скрытого" файла, т.е. такого файла, имя
которого не обнаруживается обычными программами работы со справочниками.
Два бита этого байта служат для индикации атрибутов "скрытого" и
"системного" файла. Остальные шесть бит не были определены в ранних
версиях ДОС и только начиная с версии 2.00 часть из них стала
использоваться. Во всех более ранних версиях эти биты не определены и
устанавливаются в нуль.
Седьмой бит байта атрибутов с числовым значением 2 определяет скрытый
файл, а шестой, с числовым значением 4, - системный файл. Таким образом,
обычный видимый файл будет иметь нулевой байт атрибута, для скрытого файла
байт атрибута имеет значение 2, для системного файла - 4, а для скрытого
системного файла - 6.
Хотя обработка системного атрибута осуществляется независимо от
скрытого, оба эти атрибута практически совпадают по своему функциональному
назначению. При использовании любого из них файл становится "невидимым"
для обычных программ работы со справочниками. Системный атрибут
зарезервирован не для использования в будущем, а (по сведениям фирмы
"Майкрософт") для обеспечения совместимости с другими операционными
системами.
В версиях ДОС, следующих за версией 2.00 используются еще четыре
бита. Бит 0 (с единичным значением) указывает, что файл доступен только
для чтения. Такой файл защищен от изменений и уничтожения средствами ДОС.
Бит 3 (с числовым значением 8) указывает, что элемент справочника
содержит метку тома. Сама метка хранится в полях имени файла и расширения,
которые воспринимаются в этом случае как одно целое.
Бит 4 (с числовым значением 16) используется для указания элементов
справочника, соответствующих справочникам нижнего уровня. Поскольку
справочники нижнего уровня хранятся на диске подобно обычным файлам
данных, им необходим собственный элемент в корневом справочнике. В этом
элементе используются все поля, кроме размера файла, в данном случае
равного нулю. Действительный размер файла справочника нижнего уровня легко
определяется из соответствующей последовательности в ТРФ.
Бит 5 (с числовым значением 32) предусмотрен для облегчения создания
резервных копий файлов на жестких дисках. Для файлов на гибких дисках этот
атрибут практически бесполезен.
ЗАРЕЗЕРВИРОВАННОЕ ПОЛЕ: Это поле зарезервировано для возможного
использования в будущем. В первой версии ДОС это поле имело длину 12 байт,
но в дальнейшем его сократили до 10 байт, расположенных со смещениями от
12 до 21 относительно начала элемента справочника.
Любые новые операции над справочником файлов, которые могут
использовать это поле. Когда элемент справочника находится в активном
состоянии (используется), то эти байты принимают значение 00. В исходном
состоянии байты этого поля имеют шестнадцатеричные значения F6,
установленные командой FORMAT. Любые другие значения этого поля указывают
на какой-либо вариант его использования.
ВРЕМЯ: Это поле имеет длину два байта в формате 16-разрядного целого
числа без знака, расположенные со смещениями 22 и 23 относительно начала
элемента. Начиная с версии ДОС 1.10 в этом поле хранится время создания
или модификации файла. В первой версии ДОС хранилась только дата, а это
поле было частью зарезервированного поля.
Большинство операций, использующих это поле, таких как операция
распечатки содержимого справочника DIR, выдают время с точностью до минут,
хотя число хранящееся в поле времени позволяет определить время с
точностью до двух секунд.
Код времени, хранящийся как 16-разрядное целое число без знака,
вычисляется по следующей формуле:
время = часы * 2048 + минуты * 32 + секунды / 2
ДАТА : Это поле состоит из двух байт, хранящихся со смещениями 24 и
25 от начала элемента. Как и время, даты хранятся в виде целого
16-разрядного числа без знака, которое вычисляется по формуле:
Дата = (год - 1980) * 512 + Месяц * 32 + День
Диапазон изменения лет составляет от 1980 до 2099, причем хранятся
они в виде относительных величин от 0 до 199. Хотя формат позволяет
задавать относительный номер года 127 (что соответствует 2107 году),
программы ДОС позволяют работать с годами только до 2099. Никто, правда,
не ожидает, что ДОС будет использоваться так долго.
Как формат, так и размещение полей даты и времени подобраны таким
образом, чтобы вместе они образовывали единое четырехбайтовое поле,
которое можно использовать в операциях сравнения. Достаточно просто
извлекать компоненты даты и времени из соответствующих полей и вычислять
их разность. Например, для разделения даты на составные части можно
использовать следующие формулы, записанные на Паскале:
год := 1980 + поле_даты div 512
месяц := (поле_даты mod 512) div 32
день := поле_даты mod 32
НОМЕР НАЧАЛЬНОГО КЛАСТЕРА : Это двухбайтовое поле, расположенное со
смещением 26, 27 от начала элемента, содержит 16-разрядное число,
являющееся смещением до начальной точки файла в таблице размещения файлов
(ТРФ); подробнее от этом сказано в следующем разделе. Начальный кластер
является первой частью пространства данных на дискете.
РАЗМЕР ФАЙЛА : Это поле состоит из четырех байтов, размещенных со
смещениями от 28 до 31 от начала элемента. Размер файла задается в байтах
и хранится в формате четырехбайтового целого числа без знака, которое
может рассматриваться как пара двухбайтовых чисел. Размер файла не всегда
указывает точное число байтов. Для всех файлов это поле должно
соответствовать размеру файла в секторах.( Если по какой-либо причине это
не так, то процедура ДОС CHKDSK сообщит об ошибке и установит правильную
длину.)
Для программных файлов, представленных в формате типа ".COM" и для
файлов, созданных из данных фиксированной длины, только поле размера файла
позволяет точно определить, где находится конец данных. Для этих файлов
значение в поле размера файла хранится с точностью до байта.
Для файлов некоторых других форматов такая точность не обязательна и
размер файла, указанный в соответствующем поле, может отличаться от
действительного. Наиболее часто это случается с текстовыми файлами,
которые будут описаны в разделе 5.9 . Текстовые файлы в коде ASCII имеют
маркер (признак) конца файла, хранящийся в самом файле, который фиксирует
точный конец данных. По этой причине многие программы, работающие с
текстовыми файлами, не слишком заботятся о сохранении действительного
размера файла.
Например, если программа формирует текстовой файл не побайтно, а
блоками по 128 байт, то ДОС определит размер файла с точностью до 127
байт. Для программ редактирования текстов значительно эффективнее читать и
записывать данные большими блоками, чем делать это побайтно. Такой подход
является довольно распространенным и не следует чересчур доверять значению
размера файла, по крайней мере, для текстовых файлов.
Справочники нижнего уровня
__________________________
Существуют два типа справочников: корневые и справочники нижнего
уровня. Содержимое и характер использования справочников обоих типов по
существу одинаковы - те и другие хранят имена файлов и сведения о них и их
расположении на диске. Однако, характеристики этих справочников
различаются. Корневые справочники (или просто справочники) имеют
фиксированный размер и хранятся в определенном месте на дискете.
Справочник нижнего уровня является дополнением корневого справочника и
может храниться как обычный файл в любом месте на дискете. Справочники
нижнего уровня могут использоваться любой версией ДОС, следующей за
версией 2.00.
Справочники нижних уровней хранятся в пространстве данных диска как
обычные файлы. Форматы полей и содержимое справочников нижнего уровня
такие же как у корневого справочника, с той лишь разницей, что размер
справочника нижнего уровня не ограничен. Справочники нижнего уровня всегда
связаны с порождающим справочником, который может быть как корневым
справочником, так и справочником более высокого уровня.
В порождающем справочнике всегда имеется элемент для справочника
нижнего уровня,отличающийся от обычного элемента установленным битом 4
байта атрибутов и нулевым значением размера файла. Действительный размер
справочника можно определить, проследив всю цепочку в таблице размещения
файлов.
При создании справочников нижнего уровня в них выделяются два
элемента, в которых в качестве имени файла указана точка и две точки ( "."
и "..").
Элемент с одной точкой относится к этому справочнику, а элемент с
двумя точками - к его порождающему справочнику. Номера начальных кластеров
в этих элементах указывают соответственно местоположение самого
справочника и его порождающего.
Если номер начального кластера для порождающего справочника равен
нулю, то порождающим является корневой справочник.
Когда размер файла уменьшается, ДОС возвращает освободившееся место
на дискете в общий пул. Однако, если информация о файле хранится в
справочнике нижнего уровня, то освободившееся место нельзя будет
использовать, пока не будет уничтожен весь этот справочник.
5.7 Структура Таблицы Размещения Файлов (ТРФ)
Процедура распределения пространства памяти на дискете между файлами
реализуется с помощью таблицы размещения файлов (ТРФ). Использование ТРФ и
интерпретация ее содержимого представляет собою непростую задачу -
следовательно необходимо некоторое более подробное разъяснение. Основной
принцип организации ТРФ заключается в создании таблицы, каждый элемент
которой соответствует одному кластеру или фрагменту дискового пространства
выделяемого файлу. Элементы таблицы содержат признаки занятости кластера
или что он свободен и может быть отведен для файла. Доступные или
свободные элементы таблицы содержат нулевые значения. Участки пространства
на дискете, принадлежащие файлу, связаны в цепочку. Элемент справочника
файла содержит номер элемента в ТРФ, который соответствует первому из
участков, выделенных для файла. Элемент ТРФ содержит номер элемента
следующего файла и так далее, пока не будет достигнут последний участок
файла. В последнем элементе ТРФ для файла находится признак конца файла.
Схема такой организации изображена на рис. 5.4 .
Такова в общих чертах схема ТРФ. Рассмотрим теперь ее подробнее.
Во-первых, рассмотрим кластеры выделяемого пространства памяти. Для
односторонних дискет пространство выделяется по одному сектору. Для
двухсторонних дискет выделяются каждый раз два сектора . Если в кластер
входит больше одного сектора, то объединяются последовательные сектора.
Для двухсторонних дискет кластер состоит из четного и нечетного секторов
одной и той же дорожки. Таким образом, каждая дорожка двухсторонней
дискеты состоит из четырех кластеров на каждой стороне или всего восьми
кластеров. В первый кластер входят сектора 1 и 2, во второй - 3 и 4 и так
далее . (Если будут добавлены диски большей емкости, то можно будет
организовать кластеры большего размера. В четвертой главе уже упоминалось,
как можно динамически включить в BIOS программы обслуживания устройств для
ДОС всех версий, начиная с версии 2.00. Описанная методика позволяет
добавлять дисковые устройства, логическая организация которых будет
совместима с используемыми дискетами. Помимо других характеристик, которые
могут задаваться для новых устройств, можно указать и число секторов в
кластере.)
Выделение места на двухсторонней дискете двухсекторными кластерами
может показаться нерациональным, ведь в ряде случаев файл будет
использовать лишь часть первого из двух секторов. Однако, пространство на
двухсторонних дискетах теряется ничуть не больше чем на одностронних.
Выделение пространства кластерами большими одного сектора позволяет
ограничить увеличение размеров таблицы размещения файлов при использовании
дискет все больших и больших размеров.
Раздел данных дискеты начинается сразу за справочником и занимает все
место до конца дискеты. Первый кластер данных имеет номер 2 (почему это
так, Вы сейчас поймете). На рис.5.5 изображено расположение кластеров на
одно и двухсторонних дискетах.
Как на односторонних, так и на двухсторонних дискетах хранится две
копии ТРФ. Они находятся в секторах 2 и 3 нулевой дорожки нулевой стороны.
Предполагается, что эти копии должны быть идентичны. Хранение двух
экземпляров ТРФ представляет собой простую предосторожность, связанную с
большой важностью информации, содержащейся в таблице. Восстановление
запорченного справочника намного проще восстановления поврежденной ТРФ.
Полезность хранения двух копий ТРФ зависит от многих факторов, таких
как степень возможного повреждения дискеты, степень совершенства программ
или квалификация пользователей, выполняющих процедуры восстановления
информации. Версии ДОС, предшествовавшие версии 2.00, не включали
специальных средств восстановления информации на дисках.
Как мне кажется, для ТРФ выделено два сектора не столько для того
чтобы хранить две копии, сколько для обеспечения возможности увеличения
этой таблицы в будущем. Она, конечно, не может увеличиваться до
бесконечности, но два сектора позволяют увеличить ее объем вдвое.
Теперь можно подробно рассмотреть кодировку ТРФ. Простой подсчет
показывает, что на дискете помещается больше 300 кластеров. Элемент ТРФ
должен позволять хранить номер другого элемента ТРФ, а максимальный номер,
который может храниться в одном байте - 255, следовательно, длина элемента
ТРФ должна быть больше байта. С другой стороны, в 512-байтном секторе
нельзя поместить больше 300 элементов ТРФ длиной по два байта. Для решения
этой проблемы была разработана довольно сложная схема оформления элементов
ТРФ в виде трех шестнадцатиричных цифр, т.е. длиной в полтора байта (12
разрядов).
Схема хранения чисел в виде полуторабайтных кодов выглядит довольно
странно, хотя на машинном языке это реализуется очень просто.
Таблица при хранении сворачивается следующим образом:
последовательные элементы ТРФ разбиваются на пары, обьединяющие два 1,5
байтовых значения, в последовательность из трех байтов для каждой пары
/Здесь используется архитектурная особенность микропроцессоров фирмы
"Интел", связанная с последовательностью хранения отдельных байтов в
машинном слове (Прим.пер.)/. Для получения значения, хранящегося в
элементе ТРФ с номером Х, нужно выполнить следующие действия: сначала
необходимо умножить Х на 1.5 (для этого выполняется умножение на 3 с
последующим делением на 2), затем полученное число используется в качестве
смещения в ТРФ.
Двухбайтное число, хранящееся по указанному адресу загружается в
регистр. Теперь в регистре находится четыре шестнадцатиричных цифры, а
необходимы только три из них. Если номер элемента ТРФ нечетный, то нужно
отбросить последнюю цифру, а если он четный - то первую. Если описание Вам
не совсем понятно,взгляните на рис. 5.6, который изображает процессы
упаковки и распаковки пар элементов ТРФ, выполняемые вручную.
Рис.5.7 показывает связь между ТРФ в том виде, в каком она хранится
на диске, и ТРФ в виде таблицы. ДОС переписывает ТРФ в память, но хранит
ее в исходном, упакованном формате. Таблица ТРФ, показанная на рис.5.7,
представляет собой логическую структуру ТРФ.
Чтобы увидеть ТРФ в исходном виде, воспользуйтесь программами DEBUG
или DISKLOOK для считывания ТРФ с дискеты. О программе DEBUG мы подробнее
расскажем в главе 6, а пока приведем те команды, которые нужно ввести для
считывания ТРФ:
L0011
DOL200
При работе с программой Disklook, нажмите функциональную клавишу F7
|