|
|
|
|
Прямой доступ к диску через прерывания INT 25H и INT 25H
С другой стороны спектра от доступа к устройству с помощью
описателей файлов (ДОМД) лежат прерывания прямого доступа к диску
: "Чтение по абсолютному адресу" (INT 25H) и "Запись по абсолютному адресу" (INT 26H). Согласно названию, прерывания прямого
доступа к диску работают исключительно с блоковыми устройствами,
например с дисками. Задача этих прерываний заключается в обеспечении работы с дисками напрямую, не используя файловую структуру
MS-DOS. Это может быть полезно в двух случаях.
В первом случае, программисты могут считывать или записывать
отдельные части стандартного диска MS-DOS, содержащие файл или
структуру директория. Это часто требуется, когда часть диска становится плохой и невозможно, поэтому, использовать FCB-метод или
ДОМД. В этом случае можно использовать функции прямого доступа к
диску для того, чтобы попробовать восстановить все, что может
быть восстановлено. Кроме того, программы могут считывать и записывать таблицу распределения (FAT) или директории диска, недос-
тупные другим методам. Такая способность требуется утилитам, сортирующим директории, изменяющим атрибуты файлов и т.п.
Во втором случае, использование этих функций может потребоваться в случае, если диск вообще не содержит таблицы распределения файлов или директориев.
Такой диск может быть использован только как диск данных. Такая же ситуация может встретиться при
чтении дисков, записанных в другой операционной среде, такой как CP/M или UCSD-p система. Во всех этих случаях параметры диска,
возвращаемые системе драйвером, делают невозможным доступ к диску любым другим методом. Любая попытка выполнения файловых операций
ввода/вывода, включая чтение директория, возвратит мусор или сообщение об ошибке ("Non-DOS Disk"). Если Вы желаете получить подробную информацию о
том, как MS-DOS определяет формат диска, просмотрите описание команды драйверу "Построить блок параметров
BIOS" в руководстве программиста или ином, аналогичном документе.
Возвращаясь к обеспечению прямого доступа к диску, следует заметить, что INT 25H и INT26H не выполняют блокирование и деблокирование данных.
Блокирование и деблокирование требуются, когда размер физического сектора на диске отличается от размера логической записи, используемого системой.
При блокировании данных система собирает вместе достаточное количество записей для заполнения физического сектора перед сохранением его на диске.
Деблокирование используется при чтении с диска, т.к. один физический сектор может содержать несколько записей. В последнем случае система считывает целый
сектор и, затем, выбирает оттуда требуемые программе записи. Функции доступа к диску по абсолютным адресам считывают и записывают только целые секторы,
так что программист обязан знать размер сектора диска для того, чтобы определить количество считанных или записанных байтов.
В связи с тем, что параметры, используемые этими прерываниями,
передаются драйверу без какого-либо преобразования, операции чтения и записи передают блоки данных размером, кратным длине сектора диска.
Это отличает данный метод доступа от FCB-метода или описатель-ориентированного метода доступа, где ввод/вывод определяется в терминах
логических блоков и записей, а MS-DOS осуществляет преобразование логических блоков в физические секторы.
Последняя особенность функций прямого доступа к диску заключается в том, что они возвращаются из прерываний INT 25H и INT 26H
при помощи команды RETF, а не IRET, оставляя при этом флаги на
стеке. Поэтому, после проверки корректности выполнения функции,
Вы должны убрать флаги со стека.
|
|