bibledos/MS11 icon

bibledos/MS11



Названиеbibledos/MS11
Дата конвертации28.08.2012
Размер56.83 Kb.
ТипДокументы
1. /bibledos/COMMAND/MSCOM1.TXT
2. /bibledos/COMMAND/MSCOM2.TXT
3. /bibledos/COMMAND/MSCOM3.TXT
4. /bibledos/COMMAND/MSCOM4.TXT
5. /bibledos/MS00.TXT
6. /bibledos/MS02.TXT
7. /bibledos/MS03.TXT
8. /bibledos/MS04.TXT
9. /bibledos/MS05.TXT
10. /bibledos/MS06.TXT
11. /bibledos/MS07.TXT
12. /bibledos/MS08.TXT
13. /bibledos/MS09.TXT
14. /bibledos/MS10.TXT
15. /bibledos/MS11.TXT
16. /bibledos/MS13.TXT
17. /bibledos/MS14.TXT
18. /bibledos/Ms12.txt
19. /bibledos/Sys_func/APPA1.TXT
20. /bibledos/Sys_func/APPA2.TXT
21. /bibledos/Sys_func/APPBCD.TXT
                                   - 112 -

                              ГЛАВА 11
        СТРУКТУРА ДИСКА И ЕГО ОБСЛУЖИВАНИЕ ОПЕРАЦИОННОЙ СИСТЕМОЙ

   В данной главе рассматривается  физическая структура дисков MS-DOS  и
способы  их  обслуживания  операционной  системой. В процессе обсуждения
термин "диск"  будет относиться  как к  жесткому диску,  так и  к гибкой
дискете, за исключением специально оговариваемых случаев.
   Материал этой  главы предназначен  для изучения  не только  системным
программистом. Он  рассчитан на  пользователей, желающих  добиться более
глубокого понимания  строения операционной  системы. Большим  подспорьем
при   изучении   материала   является   знакомство  с  шестнадцатеpичной
арифметикой и  с программированием  на языке  Ассемблер. Отсутствие этих
знаний, однако, не помешает пониманию основных концепций главы.

                        СТРУКТУРА ДИСКОВ

   В  разделе  рассматриваются  способы  организации  данных  на  диске.
Подробно  обсуждается   содеpжимое  записи   старта  системы,   стpоение
директория диска  и таблицы  размещения файлов.  Для изучения  структуры
диска приводится несколько примеров с пpименением дебаггера.

   ДОРОЖКИ И СЕКТОРА

   Для того, чтобы данные могли  быть записаны на диск, его  поверхность
необходимо  структурировать  -  т.е.  разделить  на  сектора  и дорожки.
ДОРОЖКИ - это концентрическе окружности, покрывающие поверхность диска. Ближайшей к краю диска дорожке присвоен номер 0, следующей за ней - 1 и т.д. Если дискета двусторонняя, то пронумерованы обе ее стороны. Номер первой стороны - 0, номер второй - 1. Каждая дорожка pазбивается на участки, называемые секторами. Секторам также присваиваются номера. Первому сектору на дорожке присваивается номер 1, второму - 2 и т.д. Обычно сектор занимает 512 байт. ГИБКИЕ ДИСКЕТЫ На стандартной 5 1/4-дюймовой дискете дорожки разбиты на 8 или 9 секторов. В MS-DOS версий 1.Х используются дискеты, имеющие по 8 секторов на дорожке. Более поздние версии MS-DOS предполагают использование дискет с разбиением дорожки на девять секторов. Во всех версях дискеты имеют по 40 дорожек (на каждой стороне). В версиях 2.Х и 3.Х можно работать с дискетами, имеющими по 8 секторов на дорожке. Дискеты с 9 секторами на дорожке непригодны для версий 1.Х. 5 1/4-дюймовые дискеты уплотненного формата имеют по 15 секторов на дорожке и по 80 дорожек на каждой стороне. Эти дискеты требуют наличия соответствующих дисководов, имеющихся только в системе версии 3.3. MS-DOS версии 3.3 позволяет использовать еще один тип дискет - 3 1/2 -дюймовые двухсторонние дискеты, имеющие на одной стороне по 80 дорожек и по 9 или 18 секторов на дорожке. В табл.11-1 приведены характеристики всех дискет, используемых в MS-DOS. ТАБЛИЦА 11-1 ХАРАКТЕРИСТИКИ ДИСКЕТ MS-DOS ------------------------------------------------------------------------ Диаметр Кол-во сторон Кол-во дорожек Кол-во секторов Объем памяти дискеты дискеты на 1-ой стороне на дорожке дискеты ------------------------------------------------------------------------ 5 1/4 дюйма 1 40 8/9 160К/180К 5 1/4 дюйма 2 40 8/9 320K/360K 5 1/4 дюйма 2 80 15 1.2M * 3 1/2 дюйма 2 80 9 720K * 3 1/2 дюйма 2 80 18 1.44M * ------------------------------------------------------------------------ - 113 - ЖЕСТКИЕ ДИСКИ Жесткий диск состоит из одной или нескольких круглых пластин. Для хранения информации используются обе поверхности пластины. Каждая поверхность разбивается на дорожки, дорожки, в свою очередь, - на сектора. Дорожки одинакового радиуса составляют цилиндр. Таким образом, все нулевые дорожки составляют цилиндр с номером ноль, дорожки с номером 1 - цилиндр с номером 1 и т.д. Стандартный 10-мегабайтный диск состоит из двух пластин - 306 цилиндров (по 4 дорожки в цилиндре и по 17 секторов на дорожке). Общее число дорожек на диске - 1224 (306 цилиндров х 4 дорожки). Общее число секторов - 20 808 (1224 дорожек х 17 секторов). Общее число байтов - 10 653 696 (20 808 секторов х 512 байтов). 1 цилиндр и 4 сектора каждого из оставшихся цилиндров резервируются для системного пользования. Итого для хранения данных остается 9 994 240 байт памяти. ФОРМАТИРОВАНИЕ ДИСКА Команда FORMAT служит для разбиения диска на дорожки и сектора. При этом на диск записываются данные, необходимые пpи его дальнейшем использовании. В последующих разделах подробно рассматривается работа этой команды. ЗАПИСЬ СТАРТА СИСТЕМЫ На нулевой стороне каждого диска с первого сектора нулевой дорожки команда FORMAT формирует особую запись - запись старта MS-DOS. Она состоит из: 1) таблицы, содержащей информацию о диске; 2) машинного кода, загружающего файлы IO.SYS и MSDOS.SYS (см.раздел "Системные файлы") в память компьютера. Первые 4 байта стартовой записи занимает машинный код команды. Она отсылает систему к адресу в стартовой записи, по котоpому находится код загрузки системных файлов. Таблица, содержащая информацию о диске, записана в промежутке между этой командой и кодом загрузки. ТАБЛИЦА РАЗМЕЩЕНИЯ ФАЙЛОВ И ДИРЕКТОРИЙ В дополнение команда FORMAT фоpмиpует таблицу размещения файлов (FAT) и директорий диска. Обе эти структуры тесно связаны с организацией доступа к файлам. На каждом диске имеется две копии FAT. Эта таблица имеет исключительное значение при обслуживании файлов, поэтому в случае потери первой копии FAT, система получает доступ ко второй. На стандартной дискете, имеющей по 8 секторов на дорожке, FAT занимает 1 сектор. На стандартной дискете с 9-ю секторами на дорожке для таблицы отводится 2 сектора. На 10-мегабайтном жестком диске FAT занимает 8 секторов. На стандартной односторонней дискете 4 сектора занимает директорий. На двухсторонней дискете он занимает 7 секторов. На двухсторонней дискете уплотненного формата - 14 секторов. На 10-мегабайтном жестком диске - 32 сектора. В табл.11-2 приводятся физические адреса стартовой записи MS-DOS, таблицы размещения файлов и директория на стандартных 5 1/4-дюймовых дискетах с девятью секторами не дорожке. - 114 - ТАБЛИЦА 11-2 ФИЗИЧЕСКИЕ АДРЕСА СТАРТОВОЙ ЗАПИСИ СИСТЕМЫ, ТАБЛИЦЫ РАЗМЕЩЕНИЯ ФАЙЛОВ И ДИРЕКТОРИЯ НА СТАНДАРТНОЙ 5 1/4-ДЮЙМОВОЙ ДИСКЕТЕ ------------------------------------------------------------------------ 8 секторов на дорожку 9 секторов на дорожку ------------------------------------------------------------------------ Односторонняя Двухсторонняя Одностороняя Двухсторонняя дискета дискета дискета дискета ------------------------------------------------------------------------ Запись старта Сектор 1 Сектор 1 Сектор 1 Сектор 1 Дорожка 0 Дорожка 0 Дорожка 0 Дорожка 0 Сторона 0 Сторона 0 ------------------------------------------------------------------------ FAT, 1-я копия Сектор 2 Сектор 2 Сектора 2-3 Сектора 2-3 Дорожка 0 Дорожка 0 Дорожка 0 Дорожка 0 Сторона 0 Сторона 0 ------------------------------------------------------------------------ FAT, 2-я копия Сектор 3 Сектор 3 Сектора 4-5 Сектора 4-5 Дорожка 0 Дорожка 0 Дорожка 0 Дорожка 0 Сторона 0 Сторона 0 ------------------------------------------------------------------------ Директорий Сектора 4-7 Сектора 4-7 Сектора 6-9 Сектора 6-9 Дорожка 0 Дорожка 0 Дорожка 0 Дорожка 0 Сторона 0 Сторона 0 ------------------------------------------------------------------------ Сектора 1-3 Сектора 1-3 Сектора 1-3 Дорожка 0 Дорожка 0 Дорожка 0 Сторона 1 Сторона 1 ------------------------------------------------------------------------ СИСТЕМНЫЕ ФАЙЛЫ Если в командной стpоке FORMAT указан параметр /s, то на форматируемый диск записываются копии системных файлов. В MS-DOS имеется три системных файла - IO.SYS, MSDOS.SYS и COMMAND.COM. В системе PC-DOS файл IO.SYS называется IBMBIO.COM, а файл MSDOS.SYS - IBMDOS.COM. Системные файлы хранятся на диске, с которого загружается операционная система. Файлы записываются в строго определенном порядке и имеют стpого определенное месторасположение. IO.SYS pазмещается непосpедственно после директория диска. Файл содержит рабочие драйверы операционной системы. Драйвер - это программа в машинном коде, обеспечивающая интерфейс между операционной системой и периферийным устройством (см.гл.14). Так как IO.SYS отвечает за связь с физическими устройствами, то он должен быть идеально подогнан под конкретную систему и поэтому обычно организуется фирмой-изготовителем. MSDOS.SYS записывается непосpедственно после файла IO.SYS. MSDOS.SYS - это ядро операционной системы. Файл отбирает все запросы на сервисное обслуживание (например, открытие или чтение файла) и передает их в файл IO.SYS. Протокол взаимодействия MSDOS.SYS и IO.SYS идентичен протоколу взаимодействия двух операционных систем. Поэтому считается, что файл MSDOS.SYS независим от электронного оборудования (внешних устройств и самого компьютера). Файл COMMAND.COM является интерпретатором команд MS-DOS. Он служит интерфейсом между операционной системой и пользователем. Команды файла выводят на экран стандартный запрос системы, обрабатывают посланные с клавиатуры команды (переводят в машинный код) и т.п. COMMAND.COM состоит из трех компонент: резидентной, переменной и инициализирующей (см.гл.12). СОВМЕСТИМОСТЬ ОПЕРАЦИОННЫХ СИСТЕМ Обычно системное мат.обеспечение DOS подгоняется к конкретной машине. При этом оно конструируется так, чтобы могло подойти для любой машины, совместимой с данной. (Например, для операционных систем PC-DOS или MS-DOS версий COMPAQ или Cordata). Единственная область, где мат.обеспечение разных операционных систем сильно дифференцировано, - - 115 - это файл IO.SYS. Напомним, что он непосредственно связан с физическим устройством электронного оборудования и организуется независимо каждой фирмой-изготовителем. Однако, электронное оборудование разных систем сходно по своему строению, и это обеспечивает совместимость IO.SYS по основным параметрам. Благодаря такой совместимости пользователь может без затруднений сменить операционную систему на своей вычислительной машине. Однако, при переходе в другую систему следует помнить, что ее системные файлы, как правило, отличаются по размеру от системных файлов системы, работавшей ранее. Если системные файлы данной системы больше системных файлов предыдущей (не укладываются в отведенное предыдущей системой место), то перехода в эту опеpационную систему может не произойти. В дополнение, в некоторых операционных системах предусмотрены программы с автоматическими процедурами, которые устанавливают строго определенный размер каждого системного файла. Тогда если размеры системных файлов той и другой системы не совпадают, то процедуры данной операционной системы не срабатывают и она вылетает. СТРУКТУРА ДИРЕКТОРИЯ И ТАБЛИЦЫ РАЗМЕЩЕНИЯ ФАЙЛОВ (FAT) В первой части раздела детально описывается структура директория и таблицы размещения файлов. Во второй части приводятся пояснительные примеры с использованием дебаггера. СТРУКТУРА ДИРЕКТОРИЯ Директорий - это таблица-описание содержимого диска. Каждому файлу в таблице соответствует одна запись. Запись занимает 32 байта, разбитых на 8 участков или полей. В каждое поле записывается информация, используемая системой при обслуживании файла. В табл.11-3 приводится краткое описание содержимого каждого поля. Название поля Короткий адрес ------------------- | Имя файла | 0-7 ------------------- | Расширение | 8-10 ------------------- | Атрибуты | 11 ------------------- |Для нужд системы | 12-21 ------------------- Часть директория | Метка времени | 22-23 ----------------------------- ------------------- | | | | | | | | | Метка даты | 24-25 | | | | | | | | ------------------- | | | | | | | | |Начальный кластер| 26-27 | | | | | | | | ------------------- | | | | | | | | | Размер файла | 28-29 | | | | | | | | | правое слово | | | | | | | | | ------------------- --|-------------------------- | Размер файла | 30-31 | | левое слово | |---> Запись директория ------------------- Рис.11-4. Структура записи директория - 116 - ТАБЛИЦА 11-3 ОПИСАНИЕ ПОЛЕЙ ЗАПИСИ ДИРЕКТОРИЯ ------------------------------------------------------------------------ Байты Описание ------------------------------------------------------------------------ 0-7 Имя файла. Если имя состоит менее, чем из 8 символов, то оно дополняется пробелами. Если в первом байте поля находится одно из следующих значений, это означает: 00Н Данная запись не заполнена и ранее не заполнялась данными. Если MS-DOS обнаруживает такую запись, то она целиком пропускается, что сокращает время поиска требуемого файла. Е5Н Запись относится к уничтоженному файлу. При уничтожении файл физически остается на диске, а в соответствующей ему записи директория в поле "имя файла" изменяется значение первого байта. Программы восстановления "стертых" файлов основаны именно на этой особенности. В MS-DOS версий 1.Х значение Е5Н может обозначать свободную (пустую) запись. 2ЕН Запись относится к директорию или поддиректорию. Если второй байт этого поля имеет то же значение, то в 26 и 27 байтах данной записи записан номер первого кластера родительского директория. Родительский директорий является корневым, если эти байты равны 00Н. (Стpоение кластеров рассматриваются ниже). 8-10 Расширение имени файла. Если расширение занимает менее трех байтов, то оно дополняется пробелами. 11 Атрибуты файла. Атрибуты опpеделяются комбинацией битов 11-го байта записи. Система считает, что файлу присвоен данный атрибут, если соответствующий бит равен 1. Если он равен 0, пpинимается, что данный атрибут не установлен. Бит Атрибут файла (если значение бита равно 1) 1 "Скрытый файл". При введении команды DIR имя файла с этим атрибутом не выводится на экран. (Ниже см. раздел "Изменение бита атрибута "скрытый файл"). 2 "Системный файл". Системные файлы используются при загрузке MS-DOS. В MS-DOS версий 1.Х файл не может иметь следующих атрибутов (соответствующий бит может принимать только нулевое значение): 0 "Только чтение". Файл можно только читать. При любой попытке записи в файл, генерируется сообщение об ошибке. 3 "Метка тома". Переменные в поле "имя файла" и "расширение" составляют метку данного диска. Все остальные поля этой записи не пpосматриваются. Запись должна входить в корневой директорий и быть на диске единственной. 4 "Поддиректорий". Запись относится к поддиректорию. 5 "Архив". Означает, что данный файл был обработан, а не откопирован командой BACKUP. При использовании BACKUP для копирования файла, архивный бит очищается. 12-21 Резервируются MS-DOS для системного пользования. 22-23 "Маpкеp времени". Содержит время создания файла или последней его коppектиpовки. Нумерация битов начинается с первого бита 22-го байта. Байт 22 включает биты 0-7, байт 23 - биты 8-15. В битах 11-15 записывается значение часа (0-23), в битах 5-10 - значение минут (0-59), в битах 0-4 - значение секунд (0-59). Числа хранятся в двоичном представлении. 24-25 "Маpкеp даты". Содержит дату создания файла или последней его коppектиpовки. Нумерация битов начинается с первого бита 24-го байта. Байт 24 включает биты 0-7, байт 25 - 8-15. Биты 9-15 используются для хранения значения года (1980=0), биты 5-8 - для хранения значения месяца (1-12), биты 0-4 - значения дня месяца (1-31). Числа хранятся в двоичном представлении. - 117 - ------------------------------------------------------------------------ Байты Описание ------------------------------------------------------------------------ 26-27 "Начальный кластер". По значению этого поля определяется начальный адрес файла на диске. Кластеры pассматpиваются в следующем разделе. 28-31 "Размер файла". В первом слове (байты 28 и 29) хранится последняя часть значения, во втором (байты 30 и 31) - первая. В обоих случаях крайний значащий байт - первый. ------------------------------------------------------------------------ Чтобы посмотреть физическое строение директория, ниже мы воспользуемся дебаггером. ------------------------------------------------------------------------ | ИЗМЕНЕНИЕ ЗНАЧЕНИЯ БИТА АТРИБУТА "СКРЫТЫЙ ФАЙЛ" | | | | Команда ATTRIB (см.гл.3) позволяет изменять значение бита атрибутов| |"только чтение" и "архив".Однако ATTRIB не может изменить значение | |бита "скрытый файл". | | Для введения двух программ на ассемблере, приведенных в листинге | |11-1, использовался дебаггер. Программа HIDE.COM устанавливает бит| |атpибута "скpытый файл" (значение бита pавно 1). Программа UNHIDE.COM| |его очищает (значение бита равно 0). | | Чтобы установить значение бита, вводится "hide [filename.ext]".| |Чтобы очистить - "unhide [filename.ext]". Отметим, что системные файлы| |остаются скрытыми и после очистки бита атрибута. Чтобы "открыть" эти| |файлы, нужно очистить биты двух атрибутов - "системный" и "скрытый| |файл". | | Для получения программ листинга 11-1 вводятся команды, в начале и в| |конце помеченные символом "обратный слэш" (например, \int 20\). | ------------------------------------------------------------------------ ЛИСТИНГ 11-1 HIDE.COM и UNHIDE.COM. ДВЕ ПРОГРАММЫ НА АССЕМБЛЕРЕ СООТВЕТСТВЕННО УСТАНАВЛИВАЮЩАЯ И ОЧИЩАЮЩАЯ ЗНАЧЕНИЕ БИТА АТРИБУТА "СКРЫТЫЙ ФАЙЛ" C>debug -a 68D8:100 \mov cx,[0080]\ ;Длина программы в байтах 68D8:104 \xor ch,ch\ ;Очистка старшего байта 68D8:106 \dec cx\ ;Незанятое программой место 68D8:107 \mov si,0082\ ;Указатель первой буквы имени файла 68D8:10A \mov di,0159\ ;Указатель буфера 68D8:10D \repnz movsb\ ;Размещение программы в буфере 68D8:10F \mov byte ptr [di],00\ ;Добавление 00 к имени файла в буфере 68D8:112 \mov dx,0159\ ;Указатель 1-го символа в буфере 68D8:115 \mov ax,4300\ ;Обращение к функции атрибута файла 68D8:118 \int 21\ ;Обращение к MS-DOS 68D8:11A \jc 012c\ ;Уход в случае ошибки 68D8:11C \or cx,0002\ ;Установка бита атрибута 68D8:120 \mov ax,4301\ ;Назначение функции атрибута файла 68D8:123 \int 21\ ;Обращение к MS-DOS 68D8:125 \jc 012c\ ;Уход в случае ошибки 68D8:127 \mov dx,0135\ ;Указатель сообщения нормальн.заверш. 68D8:12A \jmp 012f\ ;Уход в случае ошибки 68D8:12C \mov dx,0143\ ;Указатель сообщения об ошибке 68D8:12F \mov ah,09\ ;Отображение строковой функции 68D8:131 \int 21\ ;Обращение к MS-DOS 68D8:133 \int 20\ ;Прерывание работы программы 68D8:135 <--- Нажмите Enter -e 135 'File hidden' Od Oa '$' 'Unable to hide file' Od Oa '$' -f 159 L40 00 ;Начало буфера -n hide.com -rcx CX 0000 - 118 - :60 -w 100 Writing 0060 bytes -a 10a 68D8:10A \mov di,0174\ 68D8:10D <--- Нажмите Enter -a 112 68D8:112 \mov dx,0174\ 68D8:115 <--- Нажмите Enter -a 11c 68D8:11C \and cx,fffd\ ;Значение fffd заменяется на fff9 для системных файлов 68D8:120 <--- Нажмите Enter -a 12c 68D8:12C \mov dx,0150\ 68D8:12F <--- Нажмите Enter -e 135 'Hidden attribute removed' Od Oa '$' -e 150 'Unable to remove hidden attribute' Od Oa '$' -f 174 L40 00 -n unhide.com -rcx CX 0060 :1b4 -w 100 Writing 01B4 bytes -q C> ТАБЛИЦА РАЗМЕЩЕНИЯ ФАЙЛОВ Директорий - это таблица-описание содержимого диска. Таблица размещения файлов представляет собой карту с адресами файлов на диске. Каждому файлу в таблице соответствует группа записей, описывающих его физическое расположение на диске. MS-DOS pазбивает файл на кластеры. В табл.11-4 приводится количество секторов в кластере на стандартных дисках MS-DOS. Размер кластера на жестком диске зависит от количества мини-дисков, на которые он был разбит при форматировании. ТАБЛИЦА 11-4 КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ НА ДИСКАХ РАЗНОГО ТИПА ------------------------------------------------------------------------ ТИП ДИСКА КОЛИЧЕСТВО СЕКТОРОВ В КЛАСТЕРЕ ------------------------------------------------------------------------ Стандартная односторонняя дискета 1 Стандартная двухсторонняя дискета 2 Дискета уплотненного формата 1 10-мегабайтный жесткий диск 8 (под мини-диск диск отводится целиком) ------------------------------------------------------------------------ Кластерам присваиваются номера в соответствии с их физическим расположением на диске. Первый кластер расположен непосpедственно за директорием, второй - непосpедственно за первым кластером и т.д. На одностронних дискетах номера кластеров возрастают в порядке возрастания номеров сегментов. Кластеры последовательно заполняют сектора на дорожке диска. За кластером, занимающим последний сегмент на дорожке, следует кластер, занимающий первый сегмент следующей дорожки (рис.11-5). При этом номер кластера увеличивается на 1. На двухсторонней дискете нумерация производится следующим образом. На 0-ой стороне номера кластера возрастает в порядке возрастания номеров сектора. Затем кластеры начинают заполнять дорожку с тем же номером на стороне 1, и опять нумерация кластеров возрастает с ростом номеров сегментов. Заполнив дорожку на стороне 1, кластеры продолжают заполнять - 119 - следующую дорожку с первого сегмента на стороне 0. Нумерация кластеров возрастает непрерывно (рис.11-6). В MS-DOS имеется два способа получения содержимого таблицы размещения файлов. Первый способ сложней второго. Он обычно используется для маленьких дисков (менее 20 Мб памяти). Второй способ используется для больших дисков. Понять его очень просто, познакомившись с технологией первого способа. Сектора 1 2 3 4 5 6 7 8 9 ------------------------------------------------------------------------ |Запись| FAT | FAT | FAT | FAT |Дирек- |Дирек- |Дирек- |Дирек- | |стаpта|копия 1|копия 1|копия 2|копия 2| торий | тоpий | тоpий | тоpий | ------------------------------------------------------------------------ Дорожка 0 ------------------------------------------------------------------------ Кластер|Кластер| | | | | | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | ------------------------------------------------------------------------ Дорожка 1 ------------------------------------------------------------------------ Кластер|Кластер| | | | | | | | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | ------------------------------------------------------------------------ Дорожка 2 ................................................................. ------------------------------------------------------------------------ Кластер|Кластер| | | | | | | | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | ------------------------------------------------------------------------ Дорожка 39 Рис.11-5. Расположение записи старта системы, таблицы размещения файлов, директория диска и кластеров на стандартной односторонней дискете с девятью секторами на дорожке Из рис.11-5 и 11-6 видно, что на стандартных дискетах помещается более 300 кластеров. Каждая запись таблицы размещения файлов (FAT) должна включать номер одного из них. Следовательно, длина записи определяется максимальным значением номера кластера (наибольший номер кластера должен укладываться в запись). Максимальное значение, помещающееся в байте, - 256 (интервал значений байта 00Н-FFH). Следовательно, байт не подходит для использования его в качестве записи FAT. Максимальное значение, помещающееся в двух байтах, - 65 536 (0000H-FFFFH). Это значение намного превышает требуемое. Поэтому pазpаботчики MS-DOS решили сэкономить дисковую память и отвели под запись FAT 1,5 байта памяти. Интервал значений для 1.5 байтов - 000H-FFFH. Хотя использование неполного байта непривычно для пользователя, все же подход оказался удачным - он не очень сложен для понимания и прекрасно работает на практике. Кроме этого, максимальное значение для 1.5 байтов - 4096, подходит для дискет уплотненного формата (содержащих 2 371 кластер) и для 10-мегабайтных жестких дисков (2 587 кластеров). - 120 - Сторона 0 Сторона 1 ------------------ ------ ------------------ ------ 1 |Запись| | | | | |Дирек-| 9 | 18 | |350 | 1 |старта|Кла-|Кла-| |Кла-| Сектора |торий | | | | | |------|стер|стер| |стер| (малень- |------|----|----| |----| 2 | FAT | 5 | 14 | . |346 | кие квад- |Дирек-| | | . | | 2 |копия1| | | . | | раты) |торий |Кла-|Кла-| . | | |------|----|----| . |----| |------|стер|стер| . |351-| 3 | FAT | | | . | | |Дирек-| 10 | 19 | . | | 3 |копия1|Кла-|Кла-| . |Кла-| |торий | | | . | | |------|стер|стер| . |стер| Кластер |------|----|----| . |----| 4 | FAT | 6 | 15 | . |347 | занимает | | | | . | | 4 |копия2| | | . | | 2 сектора | Кла- | | | . | | |------|----|----| . |----| |-стер-|-11-|-20-| . |352-| 5 | FAT | | | . | | | 2 | | | . | | 5 |копия2| | | . | | | | | | . | | |------|-7--|-16-| . |348-| |------|----|----| . |----| 6 |Дирек-| | | . | | | | | | . | | 6 |торий | | | . | | | Кла- | | | . | | |------|----|----| . |----| |-стер-|-12-|-21-| . |353-| 7 |Дирек-| | | . | | | 3 | | | . | | 7 |торий | | | . | | | | | | . | | |------|-8--|-17-| . |349-| |------|----|----| . |----| 8 |Дирек-| | | . | | | | | | . | | 8 |торий | | | . | | | Кла- | | | . | | |------|----|----| . |----|<--Кластер |-стер-|-13-|-22-| . |354-| 9 |Дирек-| | | . | | продолжен | 4 | | | . | | 9 |торий | 9 | 18 | |350 | на сторо- | | | | | | ------------------ ------ не 1 ------------------ ------ Доро- Доро- Доро- Доро- Доро- Доро- Доро- Доро- жка 0 жка 1 жка 2 жка 39 жка 0 жка 1 жка 2 жка 39 Рис.11-6. Расположение записи старта системы, таблицы размещения файлов, директория диска и кластеров на стандартной двухсторонней дискете с девятью секторами на дорожке При вычислении номера кластера по таблице размещения файлов первым шагом MS-DOS является получение номера первого кластера файла. Этот номер находится в 26-27 байтах соответствующей записи директория (рис.11-7а). Затем вычисляется номер второго кластера. Для этого значение первого номера умножается на 1,5 и целая часть полученного произведения рассматривается как адрес слова в таблице размещения файлов (рис.11-7b). Это слово представляет собой необработанный номер кластера (рассчитываемый номер в неявном виде). Затем полученное слово обрабатывается следующим образом. Если номер первого кластера четный, то номер следующего кластера - это число из трех младших шестнадцатеричных цифр слова. Если он был нечетным, то номер следующего кластера состоит из трех старших цифр слова (рис.11-7c). Чтобы найти номер следующего кластера, номер второго кластера опять умножается на 1,5. Затем по адресу, равному целой части произведения, из таблицы выбирается слово и обрабатывается аналогичным образом: если номер второго кластера четный, отбрасывается старшая цифра, если нечетный - младшая. Полученное шестнадцатеричное число из трех цифр принимается за номер следующего кластера. Этот процесс повторяется до тех пор, пока полученное в результате число не попадет в интервал значений FF8-FFF. Номера с этими значениями обозначают последний кластер файла. Не пугайтесь запутанности процесса вычислений. При рассмотрении примера, приведенного в следующем разделе, все встанет на свои места. Процедура вычисления номера кластера на дисках с большой памятью аналогична рассмотренной. На большом диске помещается 4 096 кластеров, поэтому запись таблицы размещения не может состоять из 1,5 байтов. Под нее отводится 2 байта. Номер первого кластера считывается из директория и затем увеличивается вдвое. Произведение рассматривается как адрес следующего кластера внутри таблицы. То есть слово (2 байта) с полученным - 121 - результатом представляет собой номер следующего кластера. Первым в таблице записан младший байт, вторым - старший. ДИРЕКТОРИЙ |-------------------|-|--------| 0 26 27 31 |<----- Запись директория ---->| (A) В 26 и 27 байте хранится номер первого кластера ТАБЛИЦА РАЗМЕЩЕНИЯ ФАЙЛОВ YY' XX' |-------------------|---|-----------| 0 * |<--- записи с --->| номерами кластеров (B) Номер первого кластера х 1,5 = произведению. Целая часть произведения - это адрес в FAT, где хранится номеp втоpого кластеpа (*). СЛОВО, ВЫБИРАЕМОЕ ПО ПОЛУЧЕННОМУ АДРЕСУ В FAT = XX'YY' Номер 2-го кластера = XX'Y <-------| |--------| (если номер 1-го нечетный) | |--|----| | |----| X|X' Y|Y' |----| ИЛИ |--|----| | | |--------| | Номер 2-го кластера = X'YY' <-----------------------------| (если номер 1-го четный) (C) Обработка слова, находящегося по рассчитанному адресу, для получения номера следующего кластера Рис.11-7. Последовательность операций MS-DOS при заполнении FAT В табл.11-5 приведен список номеров кластера, интерпретирующихся опеpационной системой особым образом. ТАБЛИЦА 11-5 ИНТЕРПРЕТАЦИЯ MS-DOS ЗНАЧЕНИЙ 1,5-БАЙТНЫХ И 2-БАЙТНЫХ НОМЕРОВ КЛАСТЕРА ------------------------------------------------------------------------ ЗНАЧЕНИЕ ИНТЕРПРЕТАЦИЯ ------------------------------------------------------------------------ (0)000 Свободный кластер (F)FF0-(F)FF6 Кластер, используемый для системного польз. (F)FF7 Запорченный кластер (F)FF8-(F)FFF Последний кластер файла (X)XXX Кластер входит в цепочку ------------------------------------------------------------------------ ИЗУЧЕНИЕ СТРУКТУРЫ ДИСКА С ПОМОЩЬЮ ДЕБАГГЕРА В данном разделе для изучения структуры диска используется дебаггер - сервисная утилита MS-DOS. Здесь подробно рассматpивается структура директория и таблицы размещения файлов на стандартной 5 1/2-дюймовой дискете. При желании вы можете проделать пpиведенные в pазделе пpоцедуpы на своей машине. Чтобы закрепить ваши знания о дебаггере, пpосмотpите девятую главу. В примерах используется рабочая копия системы, записанная на стандартной двухсторонней дискете с 9-ю секторами на дорожке (дискета, с которой загружается MS-DOS). При работе с жестким диском или с дискетой уплотненного формата, результат может отличаться от полученного. Однако, метод изучения структуры диска остается неизменным. - 122 - ДИРЕКТОРИЙ Загрузите машину, если вы этого еще не сделали. При появлении стандартного запроса системы наберите debug и нажмите Enter. Дебаггер загрузится в память и получит управление. Появление стандартного запроса дебаггера (дефиса) означает его готовность к работе. A>debug - Для начала загрузим в память первый сектор директория. Напомним, что мы работаем с двухсторонней дискетой с 9-ю секторами на дорожке. Из рис.11-6 видно, что первый сектор директория - это первый сектор на нулевой дорожке нулевой стороны дискеты. Для определения номера сектора относительно сектора 1 на нулевой дорожке нулевой стороны дискеты, в MS-DOS используется термин ОТНОСИТЕЛЬНОГО НОМЕРА СЕКТОРА. Относительный сектор 0 соответствует сектору 1 на нулевой дорожке нулевой стороны дискеты. Относительный сектор 1 соответствует сектору 2 на нулевой дорожке нулевой стороны дискеты, и т.д. до сектора 9, являющегося относительным сектором 8. В версиях 2.Х и 3.Х следующий относительный сектор (9) будет соответствовать сектору 1 на нулевой дорожке стороны 1. В версии 1.Х используется другая схема нумерации: относительные сектора последовательно нумеруются сначала на стороне 0, а затем нумерация продолжается на стороне 1. Дело в том, что при загрузке секторов в память дебаггер пользуется их относительной нумерацией. Например, следующая команда загружает по адресу CS:100 пятый относительный сектор (т.е. шестой сектор на нулевой дорожке нулевой стороны дискеты на дисководе А). Если вы работаете с дискетой для версий 1.Х, то вместо "05" нужно поставить "03": -L CS:100 0 05 01 - При введении этой команды первый сектор директория загружается в память машины. Выведем на экран первые 48 байтов загруженного сектора. Начальная часть дампа, которую мы будем детально рассматривать, является первой записью директория. При желании дамп можно вывести на печать. Для этого перед введением команды нужно нажать Ctrl-PrtSc (при включенном принтере). -d CS:100 L30 976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO SYS'.... ----------------------- -------- 976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d... 976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS SYS'.... В левой части экpана расположены адреса памяти. На другой машине вы можете получить дpугие адреса. Центральная часть - это собственно дамп. Содержимое памяти отображается в шестнадцатеричном представлении. Рассмотрим дамп более подробно: ИМЯ ФАЙЛА И РАСШИРЕНИЕ (байты 0-7 и 8-10). Подчеркнутая часть первой строки - это первые восемь байтов записи. Эти восемь байтов составляют поле "имя файла" первой записи директория. Отметим, что оно состоит из символов и пробелов. В правой части экрана, где находится представление содержимого памяти в коде ASCII, можно прочесть имя файла - "IO". Три следующие байта составляют поле "расширение имени файла" (53 59 53). В правой колонке читаем - "SYS". АТРИБУТЫ (11-й байт). Следующий байт - это поле атрибутов файла. Атрибуты представлены набором значений битов данного байта. -d CS:100 L30 976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO SYS'.... -- - 976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d... 976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS SYS'.... - 123 - Значение одиннадцатого байта - 27Н. При битовом рассмотрении этого значения, получаем: Бит: 7 6 5 4 3 2 1 0 Значение: 0 0 1 0 0 1 1 1 То есть установлены биты с номерами 0, 1, 2 и 5. Это означает, что файлу IO.SYS присвоены атрибуты "только чтение", "скрытый файл", "системный файл" и "архив" (см.табл.11-3). РЕЗЕРВИРОВАНИЕ (байты 12-21). Следующие 10 байтов (со значением 00Н) составляют поле байтов, резервируемых для нужд системы. Это поле оpганизовано pазpаботчиками MS-DOS. ВРЕМЯ (байты 22-23). Эти байты составляют поле "маpкеp времени" (43 4Е), сюда заносится время создания или последней коppектиpовки файла. Чтобы прочитать значение поля, необходимо его побитовое рассмотрение. -d CS:100 L30 976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO SYS'.... 976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d... ----- -- 976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS SYS'.... Значения этих байтов записываются в "обратном" порядке ("обpатный" поpядок описан выше). Итак, битовое представление шестнадцатеричного слова (2 байта) со значением 4Е 43: Значение: 1 1 0 0 1 1 1 0 0 1 0 0 0 0 1 1 Бит: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 |<---- Часы ---->| |<---- Минуты ---->| |<-- Секунды ->| В битах 11-15 находится значения часа дня в двоичном представлении. Это значение равно 1+8, или 9. Биты 5-10 содержат значение минут. В нашем примере оно равно 2+16+32=50. Биты 0-4 - значение секунд. Оно равно 1+2=3. Комбиниpуя полученные результаты, получим время создания или последней коppектиpовки файла (с точностью до двух секунд): 9:50:06 утра. ДАТА (байты 24-25). Эти байты составляют поле "маpкеp даты" (65 08), сюда заносится дата создания или последней коppектиpовки файла. Чтобы пpочитать значение поля, необходимо его побитовое рассмотрение. -d CS:100 L30 976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO SYS'.... 976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d... ----- -- 976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS SYS'.... Значения байтов записываются в "обратном" порядке. Итак, битовое представление шестнадцатеричного слова со значением 08 65: Значение: 0 0 0 0 1 0 0 0 0 1 1 0 0 1 0 1 Бит: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 |<------- Год -------->| |<- Месяц ->| |<--- День --->| Биты 9-15 содержат значения года в двоичном представлении (отсчет производится от числа 1980). Значение года равно 4. Это означает, что файл IO.SYS организован в 4+1980=1984 году. Биты 5-8 содержат значение месяца. В нашем примере оно равно 1+2=3. Биты 0-4 содержат значение дня месяца. Оно равно 1+4=5. Комбиниpуя полученные результаты, получим дату создания или последней коppектиpовки файла: 5 марта 1984 года. Итак, файл IO.SYS был создан 5 марта 1984 года в 9:50:06 утра. ПЕРВЫЙ КЛАСТЕР (байты 26-27). В данном слове содержится номер первого кластера файла IO.SYS. Значение слова записано в "обратном" порядке и pавно 00 02 (в шестнадцатеричном представлении). - 124 - -d CS:100 L30 976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO SYS'.... 976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d... ----- -- 976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS SYS'.... РАЗМЕР ФАЙЛА (байты 28-31). Данное слово составляет поле, где хранится размер занимаемой файлом памяти в байтах. Значение записано в "обратном" порядке и pавно 00 00 13 E4 в шестнадцатеричном представлении (в десятичном представлении - 5 092 байта). -d CS:100 L30 976:100 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 IO SYS'.... 976:110 00 00 00 00 00 00 43 4E-65 08 02 00 E4 13 00 00 ......CNs...d... ----------- ---- 976:120 4D 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS SYS'.... Итак, мы завершаем изучение структуры записи директория MS-DOS. Теперь pассмотрим структуру FAT и значение таблицы pазмещения файлов в операционной системе. ТАБЛИЦА РАЗМЕЩЕНИЯ ФАЙЛОВ Из рис.11-6 видно, что первым сектором первой копии FAT является второй сектор на нулевой дорожке нулевой стороны дискеты. Его относительный номер - 1. Загрузим его в память машины по адресу CS:300. Если вы работали параллельно с автором, то ваш дебеггер загружен, а системная дискета находится на устройстве A. Введите команду: -L CS:300 0 01 01 После отключения дисковода введите: -d CS:300 L20 На экране появится заданный участок: 976:300 FD FF FF 03 40 00 05 60-00 FF 8F 00 09 A0 00 0B ....@..'........ 976:310 C0 00 0D E0 00 0F 00 01-11 20 01 13 40 01 15 60 @..'........@..' Это дамп первых 32 байтов таблицы размещения файлов. Первый байт устанавливается в соответствии с типом используемого диска (см.табл. 11-6). В нашем случае значение первого байта обозначает двухстороннюю дискету с девятью секторами на дорожке. Это значение равно FD. Второй и третий байты таблицы всегда равны FFH. ТАБЛИЦА 11-6 ПЕРВЫЙ БАЙТ FAT ДЛЯ ДИСКЕТ РАЗЛИЧОГО ТИПА ------------------------------------------------------------------------ Значение байта Тип дискеты ------------------------------------------------------------------------ FF Двухсторонняя, 8 секторов на дорожке FE Односторонняя, 8 секторов на дорожке FD Двухсторонняя, 9 секторов на дорожке FC Односторонняя, 9 секторов на дорожке F9 Двухсторонняя, 15 секторов на дорожке F8 Жесткий диск ------------------------------------------------------------------------ Из предыдущего раздела известно, что номер первого кластера файла IO.SYS равен 02Н (или просто 2). Вычислим номер второго кластера. Для этого 02Н умножим на 1,5. Полученное произведение (3Н или 3) служит для системы адресом от начала таблицы, где хранится слово, обрабатываемое для получения номера кластера. Система выбирает и обрабатывает слово записанное в FAT по этому адресу: - 125 - -d CS:300 L20 976:300 FD FF FF 03 40 00 05 60-00 FF 8F 00 09 A0 00 0B ....@..'........ ----- 976:310 C0 00 0D E0 00 0F 00 01-11 20 01 13 40 01 15 60 @..'........@..' В нашем примере значения 03 40 записаны с третьего байта таблицы (номер первого байта равен 0). Так как значение записывается в "обратном" порядке, то наше слово читается как 4003Н. Каждая запись FAT состоит из 1,5 байтов. Поэтому полученное значение преобразуется. Если номер предыдущего кластера четный (в нашем случае 2), то отбрасывается старшая цифра. Если он нечетный, то отбрасывается младшая. Номер первого кластера равен 2 - номер четный. Отбрасываем старшую цифру числа 4003Н и получаем 003. Это номер второго кластера. Для вычисления номера третьего кластера умножим его на 1,5. Произведение равно 4,5. Система отбрасывает ",5" и считает, что "4" - это номер байта таблицы, где хранится слово с номером кластера. -d CS:300 L20 976:300 FD FF FF 03 40 00 05 60-00 FF 8F 00 09 A0 00 0B ....@..'........ ----- 976:310 C0 00 0D E0 00 0F 00 01-11 20 01 13 40 01 15 60 @..'........@..' Слово, записанное с 4-го байта, содержит значение 40 00. Реально это значение 0040Н. Так как номер предыдущего кластера нечетный, отбрасываем младшую цифру и получаем число 004. Это номер третьего кластера IO.SYS. Аналогично вычисляется номер четвертого кластера - 5 и номер пятого - 6. Посмотрим, что произойдет при вычислении номера шестого кластера. Умножим номер предыдущего кластера на 1,5: 6х1,5=9. Соответствующее слово в таблице - FF F8: -d CS:300 L20 976:300 FD FF FF 03 40 00 05 60-00 FF 8F 00 09 A0 00 0B ....@..'........ ----- 976:310 C0 00 0D E0 00 0F 00 01-11 20 01 13 40 01 15 60 @..'........@..' Это слово содержит число 8FFFH. Так как номер предыдущего кластера был четным, то отбрасывается старшая цифра этого числа (8). Результат находится в интервале значений FF8-FFF и является маркером конца файла. То есть полученное число обозначает последний кластер файла IO.SYS. По таблице размещения файлов MS-DOS осуществляет доступ к любому файлу на диске, свободно ориентируясь среди множества кластеров. FAT настолько важна пpи любой дисковой операции, что на каждом диске организуются две ее копии. Предполагается, что вторая копия предназначена для использования в случае повреждения первой. Однако, по причинам, известным только разработчикам MS-DOS, вторая копия никогда не используется. СИСТЕМНОЕ ОБСЛУЖИВАНИЕ ФАЙЛОВ MS-DOS обеспечивает две технологии обслуживания файлов. Первая была разработана при создании версий 1.Х. Эта технология основана на использовании структур данных, называемых блоками управления файлом (FCB). В то время подавляющее большинство компьюьеров работало под управлением операционной системы CPM. Блоки FCB обеспечивали совместимость файлов MS-DOS с файлами этой системы. При разработке MS-DOS версий 2.Х, когда была предложена иерархическая структура организации файлов, была разработана вторая технология их обслуживания. Она основана на использовании ссылок на управляющую запись файла и не требует организации FCB. После того, как эта технология была опробована на операционной системе UNIX, она получила широкое распространение. Данный раздел включает описание и той, и другой технологии. СТРУКТУРА БЛОКА УПРАВЛЕНИЯ ФАЙЛОМ Блок управления файлом представляет собой 36-байтный блок, pасположенный в памяти машины. Блок разбит на 10 отдельных полей, описание которых приводится в табл.11-7. - 126 - ТАБЛИЦА 11-7 ОПИСАНИЕ БЛОКА УПРАВЛЕНИЯ ФАЙЛОМ ------------------------------------------------------------------------ Байты Описание поля ------------------------------------------------------------------------ 00 НОМЕР ДИСКОВОДА. Указывается программистом. 0 рабочий дисковод 1 дисковод A 2 дисковод B 3 дисковод С и т.д. ------------------------------------------------------------------------ 01-08 ИМЯ ФАЙЛА (который будет создаваться, читаться или куда будет осуществляться запись). Указывается программистом. Если имя включает менее восьми символов, поле дополняется пробелами. Поле может также включать допустимое имя устройства (разделитель - двоеточие - в этом случае отбрасывается). ------------------------------------------------------------------------ 09-0B РАСШИРЕНИЕ. Указывается программистом. Если расширение включает менее трех символов, поле дополняется пробелами. 0C-0F НОМЕР ОБРАБАТЫВАЕМОГО БЛОКА. Блок состоит из 128 записей. Размер записи хранится в байтах 0EH и 0FH блока управления файлом. Нумерация блоков производится относительно первого блока файла (номер первого блока файла равен 00). В процессе операции открытия файла номеру обрабатываемого блока присваивается значение 0. При операциях последовательного чтения или записи поиск определенной записи осуществляется по ее номеру (20Н-ый байт FCB) и номеру обрабатываемого блока (т.е. запись находится внутри обрабатываемого блока). ------------------------------------------------------------------------ 0E-0F РАЗМЕР ЛОГИЧЕСКОЙ ЗАПИСИ. В процессе операции открытия файла в поле записывается значение 80Н. ------------------------------------------------------------------------ 10-13 РАЗМЕР ФАЙЛА в байтах. В процессе открытия файла его размер выбирается из директория и помещается в данное поле, причем младшее слово записывается в байтах 10Н-11Н, а старшее - в байтах 12Н-13Н. Программист не должен изменять это значение. ------------------------------------------------------------------------ 14-15 ДАТА создания или последней коppектиpовки файла. Значение даты также выбирается из директория в процессе открытия файла. Программист не должен изменять данное значение. Байт: |<-------- 15H --------->| |<-------- 14H ------->| Бит: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 |<--- Год от 1980 --->| |<- Месяц -->| |<-- День --->| ------------------------------------------------------------------------ 16-1F РЕЗЕРВИРУЕТСЯ для системного пользования. Программист не должен коppектиpовать значение этого поля. ------------------------------------------------------------------------ 20 ОТНОСИТЕЛЬНЫЙ НОМЕР обрабатываемой записи. В поле находится относительный номер записи (0-127) обрабатываемого блока (байты 0CH-0DH). В процессе открытия файла поле не обрабатывается. ------------------------------------------------------------------------ 21-24 КЛЮЧ. Это поле используется для файлов прямой организации, когда записи нумеруются в соответствии с их позицией по отношению к первой записи файла. Ключ первой записи равен 0 ________________________________________________________________________ Если файлу пpисвоен один или несколько атрибутов, то для его обслуживания организуется расширенный блок управления файлом. Из табл.11-8 видно, что расширенный блок состоит из стандартного блока, дополненного заголовком из 7 байтов. Нумерация байтов заголовка - 127 - производится относительно первого (0-го) байта стандартного FCB. Номера имеют отрицательные значения. ТАБЛИЦА 11-8 ОПИСАНИЕ ЗАГОЛОВКА РАСШИРЕННОГО БЛОКА УПРАВЛЕНИЯ ФАЙЛОМ ------------------------------------------------------------------------ Байты Описание поля ------------------------------------------------------------------------ -07 ФЛАГ. Его значение равно FFH. Оно обозначает начало заголовка расширенного FCB. ------------------------------------------------------------------------ -06 - -02 Резервируются системой ------------------------------------------------------------------------ -01 ПОЛЕ АТРИБУТОВ файла: 02Н "скрытый" файл 04Н "системный файл" 00Н файл с другими атрибутами ________________________________________________________________________ ИСПОЛЬЗОВАНИЕ FCB Пpежде чем произвести любую операцию с файлом, необходимо ввести всю необходимую для FCB информацию. Сразу после организации блока (в памяти), пользователь производит запись адреса сегмента FCB в регистр DS и адрес FCB внутри сегмента (короткий адрес) - в регистр DX. Таким образом, значение DS:DX можно pассматpивать как поинтер, пpименяющийся при поиске блока управления файлом. После этого в регистр AH необходимо записать значение сервисной функции (см.приложение А) и установить начальные значения регистров, задействованных в процессе работы этой функции. Затем опеpационной системе посылается команда на прерывание 21 (шестнадцатеричное число). Прерывание 21 - это функция-диспетчер. Она отсылает систему к регистру AH, и в соответствии со значением регистра производится обслуживающая операция. Сервисные функции MS-DOS обеспечивают выполнение вспомогательных операций MS-DOS. Если команду на прерывание 21 получает выполняемая программа, то управление передается MS-DOS. Для файла с заданным FCB выполняется сервисная функция и управление возвращается обратно в программу. Программа продолжает нормально выполняться. Большим недостатком при выполнении сервисных функций является требование организации FCB для каждого файла. В MS-DOS 2 этот недостаток устраняется введением ссылки на управляющую запись файла. ССЫЛКИ НА УПРАВЛЯЮЩУЮ ЗАПИСЬ ФАЙЛА В MS-DOS версий 2.Х и 3.Х разработана группа сервисных функций, не требующих организации блока управления файлом. Перед операцией открытия или создания файла в памяти оpганизуется запись, включающая шифр устройства, спецификатор пути, имя и расширение этого файла. Затем в регистры DS и DX помещается длинный адрес записи. Таким образом, значение DS:DX может служить поинтером пpи ее поиске. И, наконец, производится обращение либо к функции создания (функция 3СН), либо к функции открытия (функция 3DH) файла. После выполнения функции в регистр AX записывается код возврата - 16-битовое значение - ссылка на управляющую запись. Этот код впоследствии используется пpи организации доступа к файлу. Система заботится о массе ньюансов. Программисту остается лишь обеспечивать соответствие ссылок обpабатываемым файлам. Версии 2.Х и 3.Х обеспечивают доступ к файлам и по первой технологии. Первая разработка включена в систему для совместимости программ, работающих под управлением pанних версий MS-DOS, с более поздними версиями опеpационной системы. Программы, написанные в поздних версиях, не могут работать в версиях 1.Х.



Похожие:

bibledos/MS11 iconДокументы
1. /APPA1.TXT
2. /APPA2.TXT
3. /APPBCD.TXT
bibledos/MS11 iconДокументы
1. /APPA1.TXT
2. /APPA2.TXT
3. /APPBCD.TXT
bibledos/MS11 iconДокументы
1. /APPA1.TXT
2. /APPA2.TXT
3. /APPBCD.TXT
Разместите кнопку на своём сайте:
Документы


База данных защищена авторским правом ©podelise.ru 2000-2014
При копировании материала обязательно указание активной ссылки открытой для индексации.
обратиться к администрации
Документы

Разработка сайта — Веб студия Адаманов