Л А Б О Р А Т О Р Н А Я Р А Б О Т А № 1
Л А Б О Р А Т О Р Н А Я Р А Б О Т А № 1
Физическая структура дисковой памяти.
Чтение и анализ содержимого первого сектора ЖМД
Теоретическая часть
Аппаратная часть современных персональных компьютеров (ПК) включает дисковую подсистему памяти на магнитных носителях, которая обычно комплектуется одним или несколькими накопителями на жестких магнитных дисках (ЖМД), условно называемыми винчестерами. Операционная система (ОС) позволяет пользователю разбивать ЖМД на части (разделы), каждая из которых рассматривается как отдельный так называемый логический диск. Поэтому вначале остановимся на логической структуре ЖМД, которая тесно связана с геометрической структурой ЖМД[1].
Конструктивно винчестер состоит из нескольких двухсторонних пластин, на обе стороны которых информация записывается в виде концентрических окружностей, называемых дорожками. Дорожки всех пластин (сторон), расположенные на одном удалении от центра, объединяются понятием цилиндра. Цилиндры, как и дорожки, нумеруются от края диска внутрь. Нумерация начинается с нуля. Стороны дисков также нумеруются, начиная с нулевой.
Чтобы данные могли быть записаны на диск и прочитаны с диска, каждая дорожка разбивается на участки, называемые секторами. Логический размер сектора для всех дисков составляет 512 байт. Секторам присваиваются номера в соответствии с двумя существующими системами нумерации - абсолютной и относительной.
Абсолютная нумерация секторов относится к физическому диску в целом независимо от того, разбит ли он (в случае ЖМД) на логические диски или нет. В этом случае местоположение сектора определяется тремя компонентами: номером магнитной головки (стороны), номером цилиндра (дорожки) и номером собственно сектора в пределах данной дорожки. При этом на каждой дорожке нумерация секторов начинается с 1, а не с нуля.
Относительная нумерация секторов ведется в пределах логических дисков винчестера, а также устанавливается для секторов дискет и флеш-дисков. Каждый логический диск имеют свою собственную относительную нумерацию секторов, начинающуюся с нуля.
Самый первый сектор жесткого диска (сторона 0, цилиндр 0, сектор 1), который называется главным загрузочным сектором (Master Boot Sector), состоит из нескольких частей. Основной из них является так называемая главная загрузочная запись - Master Boot Record (MBR). Формат первого сектора ЖМД представлен в табл.1.
Таблица 1
Номер поля | Смещение | Размер, байт | Содержимое |
00h | Программа главной загрузочной записи MBR | ||
1BEh | Таблица разделов диска - Partition Table | ||
1FEh | Сигнатура AA55h - признак конца сектора |
Поля первого сектора формируются в процессе форматирования диска, а поле 2 дополнительно заполняется во время выполнения процедуры разбиения диска на разделы.
Если загрузка ОС выполняется с винчестера, то весь Master Boot Sector читается в память модулем инициализации BIOS. При этом программа главной загрузочной записи размещается по адресу 7С00:0000h и ей передается управление. Эта программа сканирует содержимое таблицы разделов Partition Table, состоящее из четырех 16-байтных элементов, разбитых на поля. Все элементы таблицы разделов имеют одинаковый формат (табл.2).
Таблица 2
Смеще-ние | Размер, байт | Название поля | Содержимое |
00h | Признак загрузки | 80h - загружаемый раздел 00h - незагружаемый раздел | |
01h 02h 03h | Начало раздела диска | Биты 0 - 7: номер головки (0-255) Биты 0 - 5: номер сектора (1-63) Биты 6 и 7: ст.биты номера цилиндра Биты 0 - 7: мл.биты номера цилиндра (0-1023) | |
04h | Тип раздела | 00h - раздел не используется 01h – для ОС с 12-битовой FAT 04h – для ОС с 16-битовой FAT 05h - расширенный Extended-раздел 06h – для ОС старших версий с 16-битовой FAT | |
05h 06h 07h | Конец раздела диска | Биты 0 - 7: номер головки (0-255) Биты 0 - 5: номер сектора (1-63) Биты 6 и 7: ст. биты номера цилиндра Биты 0 - 7: мл. биты номера цилиндра (0-1023) | |
08h | Номер сектора | Количество секторов перед началом раздела | |
0Ch | Размер раздела | Количество секторов в разделе |
Программа MBR при своем выполнении анализирует содержимое поля "Признак загрузки" каждого элемента и по коду 80h находит загружаемый (активный) раздел. Затем MBR считывает самый первый сектор этого раздела в память. Этот сектор содержит загрузочную запись (Boot Record - BR), которой главная загрузочная запись передает управление для дальнейшего выполнения загрузки модулей ОС, содержащихся в активном разделе.
Рассмотрим содержимое полей элемента таблицы разделов диска.
Содержимое поля "Признак загрузки" является флагом активного раздела. Коды байтов полей "Начало раздела диска" и "Конец раздела диска" определяют координаты границ раздела на диске. Несколько необычное распределение битов в байтах номеров сектора и цилиндра этих полей объясняется тем, что оно соответствует формату загрузки регистров процессора перед обращением к функции 02h чтения физического сектора диска прерывания 13h BIOS, используемого в программе начальной загрузки.
Код в поле "Тип раздела" указывает, какой именно ОС принадлежит данный раздел. Если код равен 1,4 или 6, это означает, что данный раздел используется операционной системой в качестве первичного раздела (Primary Partition), который обычно является загружаемым. В зависимости от того, какой именно код используется для обозначения первичного раздела, меняется одна из характеристик логического диска - размер элемента таблицы размещения файлов. Таблица размещения файлов (FAT – File Allocation Table) рассматривается в следующей лабораторной работе.
Значение кода типа раздела, равное 5, обозначает так называемый расширенный раздел (Extended Partition). Использование этого раздела позволяет создать на ЖМД несколько логических дисков, что решает проблему эффективного применения винчестеров большого объема. Для создания логических дисков используются специальные вспомогательные системные программы (утилиты - диск-менеджеры). Одной из них является утилита FDISK, позволяющей создать один первичный и один расширенный раздел. Первичный раздел обычно используется как логический диск C:, является активным и из него выполняется загрузка ОС. Расширенный раздел может разбиваться утилитой на логические диски D:,E: и т.д. Он не может быть активным, и, следовательно, невозможно выполнить загрузку ОС с логических дисков, расположенных в этом разделе.
Если поле "Тип раздела" содержит код 05h, то физический сектор, определяемый в поле "Начало раздела диска", является не загрузочным сектором расширенного раздела, а по существу вторичным Master Boot-сектором винчестера. Этот сектор содержит собственную таблицу разделов, называемую таблицей логического диска (Logical Drive Table - LDT). Эта таблица определяет местоположение и размер логического диска, с которым ОС обращается как с отдельным физическим диском. Вторичный Master Boot-сектор отличается от основного Master Boot-сектора тем, что он не содержит программы загрузки и имеет в своем составе только два 16-байтных элемента аналогичной структуры, а не четыре, как у Partition Table.
В поле "Тип раздела" первого элемента LDT указывается код 1,4 или 6, а в таком же поле второго элемента таблицы может содержаться код 5 или 0. Если этот код равен 5, то второй элемент LDT определяет вторичный Master Boot-сектор другого логического диска и т.д. В результате LDT всех логических дисков связываются в список (рис. 1), на начало которого указывает элемент таблицы разделов всего диска с кодом 5 в поле "Тип раздела". Если код типа раздела равен 0, то соответствующий элемент не используется.
Рис. 1
Каждый логический диск содержит свой Boot-сектор, две копии таблицы размещения файлов (FAT – File Allocation Table), корневой каталог и область данных[2]).
Для LDT имеется отличие в использовании полей границ логических дисков: если код в поле "Тип раздела" равен 1, 4, 6, границы вычисляются относительно начала расширенного раздела; если этот код равен 5 - то относительно начала физического диска.
Поле элемента таблицы разделов "Номер сектора" хранит число секторов до начала раздела. Оно определяется путем последовательного подсчета секторов, начиная с сектора 1, головки 0, цилиндра 0 физического диска, и увеличения номера сектора на дорожке, затем номера головки и цилиндра.
Число секторов в разделе хранится в 4-байтном поле "Размер раздела". Как и для предыдущего поля, первое слово содержит младшую часть числа, второе - старшую.
Операционная система не предоставляет пользователю средств для непосредственной работы с таблицей разделов диска и главной загрузочной записью. Для обращения к этим системным областям необходимо либо спроектировать свои собственные функции, либо воспользоваться возможностью прямого обращения к самому первому сектору жесткого диска с помощью функции 02h прерывания 13h BIOS, либо использовать средства сервисного программного пакета Norton Utilities и, в частности, утилиту DISKEDIT (в случае, если ОС допускает прямое обращение к ЖМД).
Формат вызова функции 02h прерывания 13h имеет следующий вид:
на входе:
AH = 02h
AL = число читаемых секторов;
CH = номер дорожки;
CL = номер сектора;
DH = номер стороны диска;
DL = физический адрес дисковода (80h для ЖМД);
ES:BX = адрес буфера для данных сектора;
на выходе:
CF = 0, AX = 0000h - функция завершена успешно;
CF = 1, AX = код ошибки - функция завершилась с ошибкой.
Практическая часть
Примечание. Практическая часть работы выполняется в режиме виртуализации операционной системы MS DOS поскольку только эта система обеспечивает возможность непосредственного доступа к аппаратным средствам компьютера и, в частности, к устройствам внешней памяти.
Программная часть работы базируется на использовании средств системного отладчика debug и утилиты DISKEDIT из программного пакета Norton Utilities. При чтении содержимого памяти командами отладчика, в частности командой d, необходимо учитывать, что при выводе числовой информации на экран первый слева байт каждого поля данных является младшим, т.е. значения байтов поля записываются в обратном порядке.
2.1. Ознакомиться с приложением 1, а также приложением 2, в котором представлены команды отладчика debug. Только после этого перейти к выполнению следующих пунктов работы.
2.2. При выполнении данного пункта использовать функцию 02h прерывания 13h BIOS двумя способами:
1) С помощью команд отладчика a <смещение>, g <смещение пустой строки> выполнить ассемблерную последовательность команд, реализующую функцию 02h прерывания 13h. При выполнении команды a задать: <смещение>=100, BX=200. Командой d ES:BX получить на экране дамп первого сектора ЖМД. После команды d ES:BX трижды последовательно задать команду d.
2) С помощью текстового редактора оболочки NC создать текстовый файл[3] mbr.dbg вида:
a 100
mov ah,02
mov al,1
mov ch,0
mov cl,1
mov dh,0
mov dl,80
mov bx,200
int 13
<пустая строка>
g <смещение пустой строки>
r bx
0000
r cx
n master.sec
w es:200
q
<Enter>
Выполнить команду debug<mbr.dbg
В результате содержимое первого сектора ЖМД должно быть получено в файле master.sec текущего каталога.
Второй способ позволяет получить тот же результат, но в более удобной для дальнейшего использования форме.
2.3. Получить дамп MBR, используя первый способ чтения начального сектора винчестера. Проанализировать его занести в отчет таблицу разделов винчестера.
2.4. Используя второй способ чтения начального сектора ЖМД, получить файл master.sec. Проанализировать содержимое файла и занести в отчет таблицу разделов винчестера. Расшифровать значения всех полей элементов таблицы для первичного и расширенного разделов. Данные занести в таблицу, аналогичную табл.2. Сравнить результаты выполнения пунктов 1.3 и 1.4.
2.5. Запустить на выполнение программу просмотра диска DISKEDIT и проанализировать содержимое начального сектора винчестера в текстовом и шестнадцатеричном режимах. Сопоставить полученную информацию с результатами пп.1.3 и 1.4.
Примечание.При работе с программой DISKEDIT запрещается внесение каких-либо изменений в системные таблицы винчестера, т.к. это может сделать диск неспособным к загрузке!
2.6. На основании информации из элемента расширенного раздела, используя программу DISKEDIT, определить местоположение на диске (т.е. найти номер цилиндра, стороны, сектора) вторичного загрузочного сектора логического диска D:. Найти его таблицу разделов, прочитать и расшифровать содержимое элементов этой таблицы.
Содержание отчета
Отчет по лабораторной работе составляется отдельно на каждого студента. Он должен быть оформлен в виде документа Word, и содержать полные результаты по каждому пункту практической части.
Приложение 1
Перекос цилиндров
Перекос цилиндров - сдвиг 0-го сектора каждой последующей дорожки, относительно предыдущей. Используется для увеличения скорости работы диска. Головка тратит, какое-то время на смену дорожки, и если 0-й сектор будет начинаться в том же месте, что и предыдущий, то головка уже проскочит его, и будет ждать целый круг.
Рис. 3. Перекос цилиндров
Перекос цилиндров делают разным в зависимости скоростей вращения и перемещения головок.
Перекос головок – также приходится применять, т.к. на переключение с головки на головку тратится дополнительное время.
Чередование секторов
Если, например, один сектор прочитан, а для второго нет в буфере места, пока данные копируются из буфера в память, второй сектор уже проскочит головку.
Чтобы этого не случилось, применяют чередование секторов (рис. 4).
Рис. 4. Чередование секторов
Если копирование очень медленное, может применяться двукратное или большее чередование.
Разделы диска
После низкоуровневого форматирования диск разбивается на разделы, эти разделы воспринимаются ОС как отдельные логические диски.
Разделы можно использовать для следующих целей:
· Отделить системные файлы от пользовательских (например, своп-файлы).
· Более эффективно использовать дисковое пространство (например, для администрирования).
· На разные разделы можно установить разные ОС.
Основные разделы диска (рис.5):
· Первичный (Primary partition) - некоторые ОС могут загружаться только с первичного раздела.
· Расширенный (Extended partition) - непосредственно данные не содержит, служит для создания логических дисков (создается, что бы обойти ограничение в 4-ре раздела).
· Логический (Logical partition) - может быть любое количество.
Информация о разделах диска записывается в 0-м секторе 0-го цилиндра, головки 0 и называется таблицей разделов.
Таблица разделов (Partition Table) - содержит информацию о разделах, номер начальных секторов и размеры разделов. На Pentium-компьютерах в таблице есть место только для четырех записей, т.е. на диске может быть создано только четыре раздела (к логическим разделам это не относится, их может быть не ограниченное количество).
Сектор, где хранится таблица разделов, называетсяглавной загрузочной записью.
Главная загрузочная запись MBR (Master Boot Record) - содержит загрузочную программу и таблицу разделов.
Активный раздел - раздел, с которого загружается ОС, может быть и логическим. В одном сеансе загрузки может быть только один активный раздел.
Рис. 5. Пример структуры разделов ЖМД
В Windows разделы обычно называются устройствами (логическими дисками). Они именуются буквами латинского алфавита: C:, D:, E: и т.д.
Приложение 2
Теоретическая часть
В первом секторе на первой стороне нулевой дорожки логического диска и первом секторе на нулевой стороне той же дорожки каждой дискеты размещается так называемая загрузочная запись - Boot Record (BR), которая записывается туда программой форматирования диска. Содержимое первого сектора считывается из активного раздела винчестера программой MBR, после чего программная часть загрузочной записи запускается на выполнение. Помимо программной составляющей в загрузочной записи в ее форматированной области хранятся параметры, описывающие характеристики логического диска или дискеты. Эти параметры объединяются в структуру, называемую блоком параметров BIOS - BIOS Parameter Block (BPB). Формат загрузочного сектора логического диска или дискеты представлен в табл.4.
Таблица 4
Номер поля | Смеще-ние | Размер, байт | Содержимое | Примечание |
00h | Код команды EBxx90 перехода на программу начальной загрузки | Форматированная область сектора | ||
03h | Имя и версия ОС | |||
0Bh | Расширенный (Extended) блок BPB | |||
03Eh | Программа начальной загрузки | Неформатирован- ная область сектора | ||
1FEh | Cигнатура AA55h - признак окон-чания загрузочного сектора |
Блок BPB в зависимости от версии ОС и типа FAT, имеет структуру, отличающуюся от аналогичной структуры в более ранних версиях. Он состоит из стандартного BPB и дополнительного расширения [5]. Формат расширенного блока BPB приведен в табл.4.
Таблица 5
Смеще-ние | Размер, байт | Содержимое | Примечание |
0Ch | Количество байтов в одном секторе | Стандартный блок параметров BIOS | |
0Dh | Количество секторов на кластер | ||
0Eh | Количество резервных секторов, включая Boot-сектор | ||
10h | Число таблиц FAT | ||
11h | Максимальное число элементов в корневом каталоге | ||
13h | Общее количество секторов на логическом диске | ||
15h | Тип носителя (media descriptor) | ||
16h | Количество секторов в одной FAT | ||
18h | Количество секторов на дорожке | ||
1Ah | Количество головок | ||
1Ch | Количество "скрытых" секторов | ||
20h | Общее количество секторов на логическом диске | Расширение блока параметров BIOS | |
24h | Физический номер диска | ||
25h | Зарезервировано | ||
26h | Код 29h символа ')' | ||
27h | Двоичный номер диска | ||
28h | Метка диска | ||
36h | Зарезервировано |
Как обычный, так и расширенный блоки параметров BIOS содержат байт-описатель среды носителя данных (media descriptor). Этот байт служит для идентификации носителя данных и может содержать следующие коды, характеризующие носитель данных по количеству сторон и числу секторов на дорожке: FDh - 2 стороны, 9 секторов; F9h - 2 стороны, 15 секторов; F9h - 2 стороны ,9 секторов и F0h - 2 стороны, 15 секторов; F8h - жесткий диск.
Для непосредственного обращения к загрузочной записи можно использовать прерывания MS DOS 25h и 26h, позволяющие выполнять операции чтения и записи сектора соответственно по его относительному (логическому) номеру. Формат этого прерывания для в случае работы с логическим диском объемом свыше 32 Мб, имеет вид:
на входе: AL = адрес дисковода (0=A, 1=B, 2=C и т.д.);
CX = FFFFh - код, определяющий, что работа будет производиться с логическим диском, имеющим размер более 32 Мб;
DS:BX = адрес управляющего блока следующей структуры (табл. 6):
Таблица 6
Размер поля, байт | Содержимое |
Начальный номер логического сектора | |
Число секторов для чтения/записи | |
FAR-адрес буфера для данных |
на выходе:
CF=1 - ошибка, AH = код ошибки;
CF=0 - ошибки нет.
Если размер логического диска менее 32 Мб, формат вызова прерываний 25h,26h несколько иной:
на входе:
AL = адрес дисковода;
CX = количество читаемых (или записываемых) секторов;
DX = начальный номер логического сектора;
DS:BX = адрес буфера для передачи данных;
на выходе:
CF, AH имеют те же значения.
На практике следует учитывать одну важную особенность прерываний 25h,26h: после их выполнения в системном стеке остается одно слово, а именно старое значение регистра флагов. Поэтому после вызова прерывания это слово надо извлечь из стека командой pop и переслать в любой регистр, например CX.
Для чтения секторов диска в память может быть использована также команда l системного отладчика debug.
Практическая часть
2.1. Прочитать загрузочный сектор логического диска A: c помощью прерывания25h, составив для этого фрагмент ассемблерной программы и выполнив его с помощью команды отладчика a. Проанализировать полученный дамп памяти, расшифровать его и заполнить в отчете таблицу форматированной области сектора (см. табл.4 и 5 в теоретической части). При выполнении прерывания 25h принять BX=200.
2.2. Выполнить задание п.1 другим способом, для чего:
а) подготовить в редакторе NC текстовый файл br.dbg вида:
l cs:100<номер логич.диска> <нач.номер читаемого сектора> <число читаемых секторов>
r cx
n boot.sec
w
q
б) выполнить команду debug<br.dbg;
в) получить файл загрузочного сектора boot.sec, проанализировать его содержимое. Сравнить полученные результаты с данными в п.1.
2.3. Выполнить задание п.2 для логических дисков C:,D:. Занести в отчет содержимое форматированной области загрузочных секторов этих дисков.
2.4. Сопоставить результаты по п. 3 с данными, полученными в пп.1, 2. Результаты для дисков A:, C:, D: представить в виде сравнительной таблицы .
2.5. Прочитать и проанализировать содержимое загрузочных секторов дисков A:, C:,D: с помощью программы DISKEDIT. Сравнить полученные результаты с данными, полученными в пп. 1. – 3.
Содержание отчета
Требования к содержанию отчета соответствуют требованиям к отчету в лабораторной работе № 1.
Теоретическая часть
Принципиальной особенностью файловых систем Windows и DOS является их иерархическая, древовидная структура. Файлы, содержащие однородную и взаимосвязанную информацию, объединяются в группы, которые называются каталогами. В файловой структуре каталоги могут быть связаны друг с другом так, что внутри одного каталога могут создаваться другие каталоги, иначе называемые подкаталогами. Каждый подкаталог по своей структуре фактически является обычным файлом, содержащим список входящих в него файлов и подкаталогов.
На любом устройстве дисковой памяти ПК при выполнении операции форматирования средствами ОС (например, командой format в MS DOS) создается основной так называемый корневой каталог диска. Он находится сразу за последней копией FAT и занимает непрерывную область фиксированного размера, который задается при форматировании и определяет максимальное количество файлов и каталогов, зарегистрированных в корневом каталоге. После корневого каталога на диске находится область файлов и подкаталогов корневого каталога. На рис. 1 представлены основные области диска. Такую структуру имеют логические диски и флеш-диски.
Корневой каталог и любой подкаталог состоит из нескольких элементов (дескрипторов), описывающих файлы и подкаталоги данного каталога. Элемент каталога имеет длину 32 байта и формат[6], представленный в табл. 7.
![]() |
Рис. 1
Таблица 7
Номер поля | Смеще-ние | Размер, байт | Содержимое |
00h | Имя файла или каталога (для MS DOS) | ||
08h | Расширение имени файла | ||
0Bh | Атрибуты файла | ||
0Ch | Зарезервировано | ||
16h | Время создания или последней модификации файла | ||
18h | Дата создания или последней модификации файла | ||
1Ah | Номер первого кластера, распределенного файлу | ||
1Ch | Размер файла в байтах |
Рассмотрим подробнее информацию, содержащуюся в полях элементов каталога.
Первое поле отведено для имени файла или каталога, представленного в символьной форме. Если число символов в имени меньше 8, то правые байты заполняются пробелами (код 20h). В первом байте поля могут находиться специальные коды, показывающие особые состояния файла. Код 00h означает, что данный элемент еще не использовался и является свободным. Когда элемент каталога выделяется для вновь создаваемого файла, в этот байт записывается код первого символа имени файла. Код E5h показывает, что соответствующий файл удален из каталога. Помимо модификации поля имени файла изменяется также содержимое соответствующих элементов FAT(они отмечаются кодом (0)000h), но при этом информация в кластерах не изменяется. Это обстоятельство используется в программах восстановления удаленных файлов. Очевидно, что успешное восстановление возможно, если только после удаления файла на диск ничего не записывалось. По коду E5h ОС определяет, что данный элемент каталога можно использовать для нового файла.
Второе поле размещается сразу за полем имени файла и содержит трехбайтовое расширение имени. При необходимости это поле, как и предыдущее, дополняется справа пробелами.
Третье поле содержит информацию об атрибутах (свойствах) файла. Каждый бит этого поля определяет один атрибут и устанавливается в 1, когда файлу назначается тот или иной атрибут. Биты этого поля имеют следующие значения.
Бит 0 отмечает файл, как только читаемый. Такое состояние защищает файл от модификации и удаления.
Биты 1 и 2 при установке в 1 превращают файл соответственно в скрытый и системный. Оба эти атрибута функционально идентичны и при установке любого из них файл не будет появляться в оглавлении каталога. Системные файлы обычно имеют оба этих атрибута.
Бит 3 означает, что данный элемент каталога хранит метку диска. Такой элемент правильно распознается только в корневом каталоге. Сама метка занимает поля имени файла и расширения, которые рассматриваются как одно поле длиной 11 байт. Для такого элемента каталога поля размера файла и номера начального кластера не используются, но поля даты и времени присутствуют.
Бит 4 означает, что элемент каталога описывает файл, являющийся подкаталогом данного каталога. Для таких элементов используются все поля элемента каталога, за исключением поля размера файла, которое содержит нули. Действительный размер подкаталога находится в результате прослеживания его цепочки кластеров в FAT. Сами подкаталоги также состоят из 32-байтных элементов, описывающих файлы и каталоги нижнего уровня. При этом в любом подкаталоге два первых элемента содержат в поле имени специальные коды и имеют специальное назначение. Первый элемент содержит в поле имени строку "._______"(код "." - 2Eh) и служит указателем на содержащий его каталог. В поле номера начального кластера этот элемент хранит номер первого кластера, в котором находится сам подкаталог. Второй специальный элемент содержит в поле имени строку вида "..______". Он служит указателем каталога более высокого уровня по отношению к данному и в поле номера начального кластера хранит номер первого кластера родительского каталога. Если родительским является корневой каталог, то в указанном поле находится нулевое значение. Наличие в подкаталогах двух специальных элементов позволяет ОС организовывать связи между различными уровнями каталогов.
Бит 5 содержит атрибут "архивный", который введен для более простого образования резервных копий файлов с жесткого диска. Он находится в состоянии 0 для всех файлов, которые не изменялись после того, как производилась последняя операция их резервирования. Когда файл модифицируется, бит 5 устанавливается в 1, а когда резервируется - сбрасывается в 0.
Биты 6,7 байта атрибутов не используются.
В заключение следует отметить, что один и тот же файл может иметь несколько атрибутов.
Пятое поле элемента каталога является полем времени и содержит двухбайтовое беззнаковое целое число, которое в закодированном виде показывает время создания или последней модификации файла. Формат поля времени приведен на рис. 2.
№ бит 15 11 10 5 4 0
Часы(0..23) | Минуты(0..59) | Секунды/2(0..29) |
Рис. 2.
Шестое поле элемента каталога используется для хранения даты создания или обновления файла. Формат поля даты приведен на рис. 3.
№ бит 15 9 8 5 4 0
Год(0..119) | Месяц(1..12) | День(1..31) |
Рис. 3.
Для того чтобы получить значение года обновления файла, необходимо прибавить к величине, хранимой в старших семи битах, значение 1980. Отметим, что в полях времени и даты первым размещается младший байт.
Седьмое поле элемента каталога предназначено для хранения номера начального кластера, выделенного файлу. Номер представляется целым беззнаковым числом, первый байт которого имеет смещение 1Ah. Самый первый кластер пространства данных на диске всегда имеет номер 2.
Восьмое поле является последним в элементе каталога и предназначено для хранения размера файла в байтах как четырехбайтного целого беззнакового числа, причем первый байт со смещением 1Ch является младшим, а последний со смещением 1Fh - старшим. Такое поле допускает размеры файлов до 4 Гб.
Практическая часть
Практическая часть работы № 3, как и работ № 1,2 выполняется в режиме виртуализации операционной системы MS DOS.
2.1. Создать на логическом диске A: в корневом каталоге средствами NC или командами DOS структуру подкаталогов S1 – S6, по варианту, задаваемому преподавателем.
Скопировать из текущего или другого каталога винчестера 2-3 файла длиной 80 - 100 Кб (или создать эти файлы) во все подкаталоги диска A:. Командой LABEL задать диску метку.
2.2. Вычислить границы в секторах основных системных областей дискеты. Построить структуру всего диска (см. рис. 1), указав на ней значение границы каждой области в секторах.
2.3. С помощью команд отладчика debugl,d прочитать в память необходимое число секторов корневого каталога диска A:. Найти строки дампа, содержащие следующие дескрипторы: а) файлов корневого каталога; б) подкаталогов корневого каталога; в) метки диска. Занести в отчет структуру каждого элемента, заполнив таблицу 3.
2.4. По номерам начальных кластеров подкаталогов S1 - S6 вычислить соответствующие номера начальных секторов этих подкаталогов. Прочитать секторы в память и проанализировать их содержимое. Найти дескрипторы подкаталогов. Зафиксировать в отчете их структуру и содержимое полей в виде таблицы, структура которой аналогична табл. 8.
2.5. Найти дескрипторы файлов, зарегистрированных в каждом подкаталоге. Занести в таблицу 8 структуру и расшифрованное содержимое полей этих дескрипторов.
Таблица 8
Смещение | Размер, байт | Содержимое в 16-ричном коде | Расшифровка содержимого |
Метка | |||
Файлы корневого каталога | |||
Подкаталоги S1 - S6 | |||
Файлы подкаталогов | |||
Примечание. При необходимости следует прочитать в память не один, а большее число секторов подкаталогов.
Содержание отчета
Требования к содержанию отчета соответствуют требованиям к отчету в лабораторной работе № 1.
[1] Дополнительная информация о геометрии ЖМД приведена в приложении 1.
[2] Структура FAT рассматривается в лабораторной работе № 4.
[3] Командой <Shift – F4> в текущем каталоге
[4] Кроме FAT могут использоваться и другие файловые системы – FAT32, NTFS и др., имеющая иную структуру.
[5]За исключением FAT 32, которая рассматривается во 2-ой части лабораторного практикума
[6] Этот формат имеет название стандарта «8.3»
Л А Б О Р А Т О Р Н А Я Р А Б О Т А № 1