Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Николаев СПО ЛР2.doc
Скачиваний:
3
Добавлен:
04.05.2019
Размер:
201.73 Кб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«ТВЕРСКОЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Кафедра электронных вычислительных машин

Отчёт по лабораторной работе №2

По дисциплине “Системное программное обеспечение”

на тему: “ Работа с прямым доступом к диску (FAT12)”.

Выполнил: Николаев В.Ю.

Группа: ВМКСС-0604

Проверил: Неведомский А.Н.

Тверь

2009

Задание

Реализовать графическое приложение, показывающее в виде дерева структуру каталогов всех гибких дисков (FDD), имеющихся в системе, аналогично Проводнику Windows, используя прямой доступ к диску.

Цель

Научиться осуществлять работу с диском в режиме прямого доступа. Научиться осуществлять поиск файлов и каталогов, непосредственно используя данные файловой системы FAT12.

Описание

Приложение, реализуемое в данной лабораторной работе, должно показывать структуру каталогов всех гибких дисков (ГМД), имеющихся в системе (при этом сами диски должны обозначаться одними значками, а их каталоги – другими).

Задача может быть реализована в несколько этапов:

а) определение имеющихся гибких дисков в системе;

б) организация прямого доступа к диску;

в) разбор данных файловой системы с целью поиска каталогов.

Задача ограничена лишь гибкими дисками в целях безопасности целостности данных на жестких дисках, а также по причине простоты файловой системы FAT12, применяемой на гибких дисках.

Определение имеющихся гибких дисков

Для определения гибких дисков, имеющихся в системе, нужно использовать совместно с функцией GetLogicalDriveStrings (или GetLogicalDrives) функцию GetDriveType. Последняя возвращает тип проверяемого диска (сменный / постоянный / CD-ROM и т.д.). В данной лабораторной работе интересен именно первый тип – сменный диск.

Прямой доступ к диску

Принцип организации прямого доступа к диску различается в ОС семейства NT (NT,2000,XP) и семейства 9x (95, 98, ME).

Рассмотрим прямой доступ к диску в Windows NT.

Для того чтобы осуществить прямой доступ к диску в Windows NT, необходимо сначала открыть диск с помощью функции CreateFile. Одной из возможностей этой функции является отображение диска в виде одного большого непрерывного фала. Возвращаемый функцией хендл может использоваться для перемещения указателя по этому файлу (функция SetFilePointer), а также для чтения данных с диска (функция ReadFile). Таким образом, чтобы считать N-й логический сектор диска (нумерация логических секторов начинается с 0), нужно установить указатель открытого файла на позицию N*(байт_на_сектор) и считать (байт_на_сектор) байт.

По завершении работы с диском необходимо закрыть полученный файл с помощью функции CloseHandle.

Файловая система fat12

Обычная дискета содержит 4 основных области:

- загрузочный сектор (boot sector или boot record);

- таблица размещения файлов (file allocation table);

- корневой каталог;

- область данных.

Загрузочный сектор содержит короткую (менее 512 байт) программу начальной загрузки ОС в память компьютера. Независимо от типа ОС и способа форматирования дискеты, эта программа всегда занимает самый первый сектор на самой первой дорожке диска. Также этот сектор содержит всю важную информацию о характеристиках диска. Структура этой информации следующая:

Смещение, байт

Название

Размер, байт

Описание

00h

Команда JMP

3

Длинный или короткий переход на программу загрузчика

03h

Идентификатор

8

Идентификатор версии ОС, с помощью которой отформатирован диск (например, “MSDOS6.0”)

0Bh

Байт/Сектор

2

Размер сектора в байтах

0Dh

Сектор/Кластер

1

Число секторов в кластере

0Eh (*)

Резерв

2

Количество резервных секторов

10h

Число FAT

1

Число копий FAT на диске

11h

Число корневых записей

2

Макс. количество записей в корневом каталоге диска

13h (**)

Всего секторов

2

Общее число секторов на диске

15h

Носитель

1

Тип магнитного носителя

16h

Сектор/FAT

2

Число секторов в каждой из FAT

18h

Сектор/дорожка

2

Число секторов на одну дорожку

1Ah

Число головок

2

Число головок на диске

1Ch

Скрытых секторов

4

Число скрытых секторов на диске

20h

Больших секторов

4

Общее число секторов

24h

Номер накопителя

1

Номер накопителя по BIOS'у

25h

Зарезервировано

1

Резерв

26h

Сигнатура

1

Содержит число 29h

27h

ID тома

4

Идентификатор тома диска

2Bh

Метка тома

11

Копия метки тома

36h

ID типа FAT

8

“FAT12 “ или “FAT16 “

3Eh

Загрузчик

?

Программа загрузчика

36h

Конец загрузочного сектора

* - для формата IBM PC длина зарезервированной области всегда составляет 1 сектор (сектор загрузчика)

** - если более 65535, то равно 0, а действительное число секторов лежит по смещению 20h.

Таблица размещения файлов (FAT) содержит информацию о месторасположении записанных на дискету файлов. ОС выделяет для хранения файла, в зависимости от его длины, один или более кластеров (кластер – единица хранения данных на диске, обычно один кластер равен нескольким секторам), однако ОС не заботится, чтобы запись файла происходила последовательно, поэтому необходимо хранить информацию, по каким именно кластерам раскидан данный файл. В силу особой важности этой информации FAT

существует на диске в двух копиях. FAT дискеты состоит из 12-битовых элементов. Структура таблицы размещения файлов следующая:

Элемент FAT

Выполняемая функция

0

Идентификатор формата

1

Зарезервирован (должен быть FFF)

2

Статус кластера 2

3

Статус кластера 3

...

...

Идентификатор формата может принимать следующие значения:

  • F0 - 3'5/2/18 (дискета 3'5, 2 стороны, 18 секторов)

  • F8 - жесткий диск

  • F9 - 5'25/2/15 или 3'5/2/9

  • FC - 5'25/1/9

  • FD - 5'25/2/9

  • FE - 5'25/1/8

  • FF - 5'25/2/8

Статус кластера может быть следующим:

  • 000 - кластер свободен

  • FF0..FF6 - зарезервирован

  • FF7 - испорчен

  • FF8...FFF - последний кластер

  • иначе - номер следующего кластера файла

Корневой каталог следует непосредственно за FAT. Содержит информацию об основных параметрах файлов (длине, дате создания, и т.д.). Каждая запись в каталоге соответствует тому или иному файлу (кроме, разумеется, метки диска), включает номер первого кластера, назначенного ОС этому файлу, который используется как точка входа в FAT. Начиная с этой точки, каждая запись в FAT содержит номер следующего кластера, распределенного под этот файл, или метку последнего кластера. Структура записи в корневом каталоге следующая:

Смещение

Название

Описание

00h

Имя

Имя файла

0 если запись свободна

05 если первый символ имени файла – E5

E5 если файл удален

2E запись родительского каталога

08h

Расширение

Расширение файла

0Bh

Атрибуты

Атрибуты файла

0Ch

Зарезервировано

Резерв

16h

Время

Время последней перезаписи файла

18h

Дата

Дата последней перезаписи файла

1Ah

Кластер

Номер первого отведенного кластера

1Ch

Размер

Размер файла (4 байта)