Программный доступ к секторам логического диска

УВН-311 (2016 год)

Цель работы

1)Реализация прямого программного доступа к системным структурам физического диска

2)Реализация операций с файлами/каталогами логического диска на низком уровне - с непосредственным доступом к секторам логического диска.

Общая характеристика

Задания предполагают разработку 16-разрядных программ на языке ассемблера процессоров х86 (или на ЯВУ с ассемблерными вставками), реализующих программный доступ к структурам физического диска (1 часть) и объектам файловой системы логического диска (2 часть) на уровне секторов.

Для пользовательского интерфейса (ввод с клавиатуры, вывод на экран) в программе можно использовать любой системный сервис.

Программный доступ к секторам физического диска

Выполнить чтение из сектора или запись информации в сектор физического диска можно через дисковый сервис BIOS. Он доступен по программному прерыванию INT 13h – функции 2h, 3h, 42h и 43h.

Функции 2h (чтение из секторов в память) и 3h (запись из памяти в сектора) требуют использования координат CHS. Функции 42h (чтение) и 43h (запись) работают с координатами LBA.

Программный доступ в координатах CHS

Возможен для секторов в пределах до 7,84 Гб от начала физического диска.

Функции чтения и записи секторов 2h и 3h имеют одинаковые параметры и отличаются лишь направлением передачи информации.

Входные параметры:

АН - номер функции

DL - номер физического диска: для жестких дисков – 80h (первый), 81h , 82h, 83h

DH - номер головки

СХ - номер цилиндра Cyl (10 бит) и номер сектора Sect (6 бит), записаны согласно формату

15 6 5 0
Cyl 7-0 Cyl 9-8 Sect

CX

AL – количество секторов для чтения/записи

ES:BX - адрес области памяти, куда/откуда будет производиться чтение/запись секторов.

Выходные параметры:

CF = 0 - нет ошибки; 1 - признак ошибки операции и AH содержит код ошибки, возвращаемый BIOS.

АН Тип ошибки
01h Неправильный параметр вызова
02h Не найден адресный маркер
04h Сектор не найден
05h Ошибка при сбросе контроллера
07h Повреждена таблица параметров дисковода
0Аh Обнаружен дефектный сектор
0Вh Обнаружен дефектный цилиндр
10h Ошибка контрольной суммы при чтении
20h Ошибка контроллера
40h Ошибка поиска
80h Диск не отвечает (тайм-аут)
АА Дисковод не готов
ВВh Неизвестная ошибка
ССh Ошибка при записи
Е0h Ошибка регистра состояния
FFh Ошибка определения носителя

Программный доступ в координатах LBA

Адресация LBA позволяет обращаться к любым секторам физического диска размером до 264 секторов. Функции чтения и записи секторов - 42h и 43h имеют одинаковые параметры и отличаются лишь направлением передачи информации.

Входные параметры:

АН - номер функции;

DL - номер физического диска

DS: SI – адрес области параметров, где заданы остальные параметры:

- номер начального сектора в LBA,

- количество считываемых/записываемых секторов,

- адрес памяти, куда/откуда будет производиться чтение/запись секторов.

Формат размещения параметров

Размер поля (в байтах) Значение
1 байт 16 ( длина области в байтах )
1 байт
1 байт количество секторов для чтения/записи
1 байт
4 байта адрес памяти: ст. слово - «указатель сегмента», мл. слово - «внутрисегментный адрес»
8 байт номер начального сектора (в LBA)

Выходные параметры:

CF = 0 - нет ошибки, 1 - признак ошибки чтения/записи и в AH – код ошибки

Программный доступ к секторам логического диска

Обращение к секторам логического диска можно вести в абсолютных LBA координатах от начала физического диска.

Однако, более простым представляется использование программных сервисов, которые обращаются к секторам внутри логического диска, предоставляя возможность относительной нумерации секторов от начала логического диска – 0, 1, 2, …

Для логических дисков FAT12/16 предназначены программные прерывания Int25h (чтение секторов) и Int26h ( запись в сектора). Функция 7305h прерывания int21h является универсальной для всех FAT.

Входные параметры для прерываний Int25h и Int26h:

АL - номер логического диска ( А: - 0, В: - 1, С: - 2, … );

CX - всегда FFFF ;

DS:BX – адрес 10-байтной области в сегменте данных, где подготовлены остальные параметры:

- номер начального сектора для чтения/записи (0, 1, ....)

- количество считываемых/записываемых секторов;

- адрес области памяти, куда/откуда будет производиться чтение/запись секторов, в виде «указатель сегмента: смещение».

4 байта 2 байта 2 байта 2 байта

№ начального сектора количество секторов «смещение» «указатель сегмента»

Выходные параметры:

CF = 0 - нет ошибки; 1 - признак ошибки и в AX - коды ошибок

АН Ошибка AL Ошибка
01h Неправильная команда 00h Ошибка защиты записи
02h Неправильная адресная метка 01h Неизвестное устройство
04h Запрошенный сектор не найден 02h Дисковод не готов
08h Ошибка прямого доступа в память 03h Неизвестная команда
10h Неправильная контрольная сумма 04h Неправильная контрольная сумма
20h Ошибка контроллера 06h Ошибка позиционирования
40h Ошибка позиционирования головок 07h Неизвестный тип носителя
    08h Сектор не найден

Замечание!! После вызова прерываний 25h и 26h для удаления забытого последнего слова из системного стека надо выполнить команду POP reg16, где reg16 - любой 16-разрядный регистр

Входные параметры функция 7305h прерывания int21h:

АХ – номер функции – 7305h

DL - номер логического диска ( А: - 1, В: - 2, С: - 3 и т.д.); Нумерация с 1 !

CX - код FFFFh ;

SI – признак доступа: 0 – чтение, 1 – запись.

При записи биты 14-13 регистра SI дают характеристику секторов: 00 - неопределенные сектора, 01 – сектора FAT таблицы, 10 – сектора корневого каталога, 11 – сектора файла/каталога.

DS:BX – адрес 10-байтной области параметров (аналогично Int 25h/26h)

Выходные параметры:

CF = 0 - нет ошибки; 1 - есть ошибка и AX - код ошибки.

Задания. Часть 1: операции с разделами и логическими дисками

Номер задания выдается индивидуально.

Задания
Информация о разделах на жестком диске: тип, координаты в CHS и LBA, размер
Информация о наличии расширенного раздела и его размере в Гб
Информация о первом логическом диске расширенного раздела: тип ф.с., координаты начала в LBA, размер
Информация о втором логическом диске расширенного раздела: тип ф.с., координаты начала в LBA, размер
Информация о количестве логических дисков в расширенном разделе и их файловых системах
Удаление второго логического диска из расширенного раздела
Удаление первого логического диска (из двух) в расширенном разделе.
Уменьшение размера раздела до заданного значения
Создание нового раздела заданного типа и размера
Создание расширенного раздела и одного логического диска в нем
Удаление разделов
Объединение двух смежных основных разделов в один
Объединение двух логических дисков в расширенном разделе в один
Создание основного раздела
Информация об объеме свободного пространства в расширенном разделе для создания логических дисков
Создание в расширенном разделе второго логического диска
Удаление основного раздела и создание на его месте нового раздела заданного размера
Информация о наличии в расширенном разделе логических дисков NTFS и их размеров
Информация о наличии расширенного раздела и количестве логических дисков в нем
Информация о количестве разделов на жестком диске и их типах
Информация об активном основном разделе: тип файловой системы, координаты начала в CHS и LBA, размер
Информация об основных разделах жесткого диска: размер и тип файловой системы
   
   
   
   

Задания. Часть 2: Операции с файлами и каталогами в файловой системе ФАТ

Номер задания выдается индивидуально.

Задания
  Получить информацию об объекте файловой системы
Количество записей о файлах в каталоге
Дата модификации файла
Размер файла (в байтах)
Атрибуты файла
Файлы с указанными атрибутами в каталоге
Оглавление каталога: перечень имен объектов и их тип – файл/каталог
«Старейший» файл в каталоге
Время создания файла
Самый «маленький» файл в каталоге
Номера кластеров, выделенных файлу
Скрытые файлы в каталоге
Имена подкаталогов в каталоге
Физический размер каталога (в кластерах)
Информационный размер каталога (в байтах)
Удаленные файлы из каталога на FAT16
Имена фрагментированных файлов в каталоге
Степень фрагментации файла
Самый фрагментированный файл в каталоге
Размер свободного пространства (в байтах) в последнем кластере файла
Фактический размер корневого каталога в FAT32 (в секторах)
«Информационный размер» корневого каталога (в байтах)
Свободное место в корневом каталоге FAT16 (в байтах)
Удаленные файлы из корневого каталога FAT32
Файлы с длинными именами менее 13 символов
Файл с самым длинным исходным именем
   
  Операции с объектами файловой системы
Создание нового файла
Дозапись в существующий файл
Создание нового каталога
Уменьшение файла
Переименование файла/каталога
Вывод содержимого файла на экран (постранично)
Перемещение файла в другой каталог
Копирование файла (на одном логическом диске)
Объединение двух файлов
Удаление файла с возможностью восстановления (мягкое)
Удаление файла (жесткое)
Изменение битовых атрибутов файла
Упорядочивание записей в каталоге по заданному полю (тип, имя, размер или дата создания)
«Затирание» файла
Дефрагментация файла/каталога
   
   

Исходные общие ограничения:

- Выбор файловой системы FAT (FAT12,16 или 32) по усмотрению, если в условии задания это не оговорено

- Стандартные имена файлов/каталогов (формат 8.3) при вводе с клавиатуры

- Подкаталоги в пути к объекту занимают не более одного кластера.

Принятие других ограничений (по конкретному варианту заданию) должно согласовываться индивидуально в процессе выполнения задания!

Содержание пояснительной записки к курсовому проекту

Пояснительная записка к курсовому проекту оформляется для каждой части задания и должна содержать:

Титульный лист

2. Содержание пояснительной записки с указанием страниц

Задание

4. Принятые ограничения (обязательно должны быть предварительно согласованы!)

Общие положения

- описание системных дисковых структур, обращение к которым будет происходить в работе и используемых в них сведений

- используемый сервис для программного обращения к секторам диска

- используемая среда для подготовки и отладки 16-разрядного приложения.

Наши рекомендации