На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 4 / "Список списков" Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

"Список списков"

DOS записывает адреса системных таблиц как описателей так и FCB в структуру данных, известную как "список списков". Эта структура данных содержит и другую важную информацию. Вашему TSR может понадобиться просмотреть содержимое этого списка или некоторые структуры данных, на которые он указывает. Недокументированная функция AH=52h прерывания int 21h возвращает адрес списка списков в паре регистров ES:BX. Фрагмент программы, приведенной на листинге 4-11 показывает, как найти этот список.



                        Листинг 4-11. Поиск списка списков
         ----------------------------------------------------------------

         ListAddr        DW    0,0

                         mov   ah,52h ; запрос DOS, где он размешен
                         int   21h    ; (недокументированная функция)
                         mov   ListAddr,bx ; адрес возвращается в ex:bx
                         mov   ListAddr+2,es
         ----------------------------------------------------------------

Короче говоря, имеются вполне определенные функции для разных входов в список списков. Блочное устройство (обычно диск) записывает информацию о структуре файловой системы в блок управления устройством (DCB). Данные DCB обычно включают размер диска, количество входов в корневой директорий, количество FAT и т.д. DOS записывает адрес системных часов в качестве оптимизатора производительности. Вдобавок к обработке запросов о времени и дате, DOS записывает временные метки при каждой записи FCB и затем записывает время самого последнего обращения к записи описателя. DOS использует сохраненный адрес клавиатуры для проверки сигнала break и для сообщения об ошибках "деление на нуль". DOS предполагает, что клавиатура имеет ISR int 1Bh, так что ISR клавиатуры может обрабатывать break немедленно. Для операций над блочными устройствами DOS использует текущий директорий. DOS поддерживает список используемых кэш-блоков для обработки запросов на чтение/запись отдельных блоков и для обращения к блокам директория и FAT. Длина каждого кэш-блока указана в DOS_W_MaxSector. Заголовками для таблиц описателей и FCB файловой системы являются, соответственно, DOS_D_HDLSFT и DOS_D_FCBSFT. Листинг 4-12 показывает содержимое этого списка.



                        Листинг 4-12. Формат списка списков
         ----------------------------------------------------------------

         DOS                   STRUC
         DOS_D_DCB       DD    0 ; начало списка для последовательности
                                 ; блоков управления устройством (DCВ)
         DOS_D_HDLSFT    DD    0 ; начало списка описателя SFT
         DOS_D_Clock     DD    0 ; оглавление устройства для CurClk
         DOS_D_Console   DD    0 ; оглавление устройства для консоли
         DOS_W_MaxSector DW    0 ; размер наибольшего сектора
         DOS_D_Cache     DD    0 ; начало списка для блоков управления
                                 ; кеш (CCB)
         DOS_D_CDS       DD    0 ; адрес структуры текущего каталога
         DOS_D_FCBSFT    DD    0 ; начало списка FCB SFT
         DOS_W_Unknown   DW    0 ; неизвестно
         DOS_B_DriveCountDB    0 ; максимальное количество драйверов
                                 ; (значение устанавливается по lastdrive=)
         DOS_B_LastDrive DB    0 ; текущее количество драйверов
         DOS             ENDS
         ----------------------------------------------------------------

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz