Программный доступ к секторам логического диска
УВН-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-разрядного приложения.