Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 55 56 57 58 59 60 61  62 63 64 65 66 67 68 ... 198
         на завершение проходят через обработчик прерываний,  который зас-
         тавляет диспетчер int 21h выполнить запрос на завершение.
             Когда инициируется  файл  COMMAND.COM,  он устанавливает свою
         собственную ISR int 24h;  она является той подпрограммой, которая
         выдает сообщение "Abort,  retry or ignore ?" (Завершить аварийно,
         повторить или игнорировать ?).  Другие программы также могут объ-
         являть свои собственные подпрограммы ISR int 24h.

                                Загрузка программы

             Все программы загружает общая служба BIOS. Подпрограмма функ-
         ции AH=4Bh int 21h устанавливает операционную среду, распределяет
         память  для загрузки программы, загружает программу с диска и со-
         здает PSP. Для загрузки программы она использует наибольший  блок
         памяти. Файлы типа .EXE указывают свою потребность в памяти в за-
         головке программы,  и подпрограмма загрузки  устанавливает  соот-
         ветствующий размер блока памяти. Размер файла типа .COM определя-
         ется его  минимальной  потребностью  в  памяти,  но  подпрограмма
         загрузки  не настраивает размер блока для файлов типа .COM.  Файл
         типа .COM начнет выполняться во всем блоке памяти, распределенным
         для него.
             Обычно DOS начинает загрузку программы,  потому что пользова-
         тель указал ее имя после  приглашения,  введенного оболочкой. За-
         гружаемая при этом программа называется порождаемой, а программа,
         выдающая запрос на загрузку,  называется порождающей. Порождающая
         программа создает блок параметров,  содержащий адрес таблицы сре-
         ды, адрес командной строки и адреса двух блоков управления файла-
         ми (FCB - file control block). Порождающая программа передает ад-
         рес  этого  блока  параметров  и  адрес спецификации файла в коде
         ASCIIZ в подпрограмму выполнения загрузки,  используя  запрос  на
         выполнение функции AX=4B00h прерывания int 21h. Порождающая прог-
         рамма может указать явно размещение операционной среды  или может
         выдать  запрос на копирование своей операционной среды путем ука-
         зания нуля в качестве начального сегмента среды. Если порождающая
         программа не имеет среды,  но при этом выдает запрос, чтобы копи-
         ровалась ее среда, то порожденная программа не будет иметь опера-
         ционной среды.
             В предыдущем  разделе  обсуждались подробности загрузки прог-
         рамм. Этот процесс важен, но не настолько интересен, как реализа-
         ция  TSR.  После  загрузки образа программы с диска,  DOS создает

                                      - 4-28 -
         сегмент префикса программы.  Содержимое этого PSP является важным
         для TSR. Та же самая программа, которая обслуживает запрос созда-
         ния PSP (int 21h AH=26h),  создает PSP для подпрограммы загрузки.
             Перед вызовом подпрограммы создания PSP, подпрограмма загруз-
         ки  устанавливает флаг,  который заставляет подпрограмму создания
         PSP инициализировать JFT порожденного процесса. Подпрограмма соз-
         дания PSP  рассматривает каждый вход в JFT порождающего процесса,
         находит соответствующий ему вход SFT,  и клонирует ссылку до  тех
         пор, пока в SFT не будет установлен бит "не наследовать", или ес-
         ли вход не будет соответствовать сетевому FCB.  Клонирование уве-
         личивает  счетчик  ссылки  SFT  и копирует SFN в JFT порожденного
         процесса. Обычно говорят, что порожденный процесс "наследует" эти
         файлы. Файл COMMAND.COM использует наследственность для обеспече-
         ния переназначения устройств стандартного ввода stdin и стандарт-
         ного  вывода  stdout.  Так как прикладная программа наследует эти
         файлы,  то она не должна выполнять их явное открытие.  Входы  JFT
         для этих описателей уже содержат допустимые номера системных фай-
         лов,  скопированных из порождающего процесса. Второй побочный эф-
         фект установки флага состоит в том, что PSP порожденного процесса
         становится текущим PSP. Подпрограмма создания PSP:
          - заполняет несколько других полей PSP;
          - копирует в PSP порожденного процесса содержимое текущих входов
            IVT для прерываний по завершению (int 22h),  break (int 23h) и
            критической ошибки (int 24h);
          - возвращает управление в подпрограмму загрузки.
                Подпрограмма загрузки:
          - заполняет адреса  среды, инициализирует два входа FCB PSP;
          - копирует адрес возврата управления порождающего  процесса  для
            вектора завершения (int 22h);
          - устанавливает адрес передачи с диска в PSP  порожденного  про-
            цесса 80h;
          - инициализирует регистры ES,  DS, SS и SP и передает управление
            в порожденный процесс.

                               Завершение программы

             Имеется несколько  различных  способов  завершения выполнения
         обычной программы. Наиболее общими являются использование функции
         AH=4Ch и функции AH=00h прерывания int 21h.  Все запросы заверше-
         ния обрабатывает общая подпрограмма DOS. При завершении программы
         эта  подпрограмма  копирует адреса критической ошибки (int 24h) и
         прерывания ISR (int 23h),  сохраненные в PSP для  IVT,  закрывает
         все  файлы и освобождает всю память,  относящуюся к текущему про-
         цессу.  Управление возвращается по адресу завершения  (int  22h).
         Если завершающий процесс не модифицировал вход IVT для адреса за-
         вершения,  то программа,  загрузившая программу завершения, снова
         получит  управление  для  выполнения инструкции,  непосредственно
         следующей за запросом загрузки.  Затем,  как  обычно,  управление
         возвращается в файл COMMAND.COM. Критические ошибки вызывают ава-
         рийные завершения. Одна и та же  программа  обрабатывает  запросы
         аварийного и обычного завершения, различие заключается лишь в вы-
         работке разного кода завершения, сохраняемого во внутренней пере-
         менной DOS.
             Освобождение памяти является простым процессом. DOS распреде-
         ляет память на блоки.  Каждому блоку памяти непосредственно пред-
         шествует 16-байтовый блок управления памятью (MCB).  Область  MCB
         содержит  размер следующего блока и записи PSP владельца.  Слово,
         стоящее во главе списка,  содержит сегмент первого блока управле-

                                      - 4-29 -
         ния памятью. Подпрограмма завершения DOS просматривает список MCB
         для нахождения блоков,  которыми владеет текущий процесс.  Всякий
         раз,  когда подпрограмма завершения находит очередной блок, кото-
         рым владеет процесс, она устанавливает поле владельца MCB в нуль,
         указывая,  тем самым, что блок  свободен. Таким образом, при про-
         смотре MCB освобождаются все блоки памяти, которыми владел завер-
         шаемый процесс, включая операционную среду. Для освобождения сво-
         ей среды программе не нужно предпринимать специальных действий.
             Подпрограмма завершения DOS получает адрес JFT из PSP текуще-
         го (завершающего) процесса и просматривает JFT для поиска  откры-
         тых файлов. При этом подпрограмма завершения закрывает каждый от-
         крытый файл.  Для каждого открытого файла  подпрограмма  закрытия
         уменьшает счетчик ссылок SFT.  Если счетчик ссылок станет нулевым
         и файлом владеет текущая программа,  то подпрограмма закрытия ос-
         вобождает  вход SFT.  Входы,  соответствующие наследуемым файлам,
         будут иметь счетчики ссылок, значения которых больше 1; входы SFT
         для этих ссылок останутся. (Так как завершающая программа все еще
         имеет текущий PSP, то любая попытка закрытия этих входов приведет
         к  отказу;  поле  "владелец  PSP"  этих  входов SFT содержит файл
         COMMAND.COM, выступающий в качестве их владельца).
             В DOS  имеется две функции "завершить и оставить резидентной"
         - int 27h и int 21h AH=31h. Функция int 27h является устаревшей и
         внутри DOS она отображается в запрос int 31h.  Запросы "завершить
         и оставить резидентной" обрабатываются одной и той же подпрограм-
         мой завершения.  При выполнении запроса "завершить и оставить ре-
         зидентной" подпрограмма завершения не закрывает никакие  файлы  и
         не  освобождает никакую память,  но она модифицирует размер блока
         памяти,  содержащий PSP.  Завершающая программа указывает  размер
         нового блока памяти в качестве аргумента для запроса "завершить и
         оставить резидентной".  Любые индикаторы обработки,  которые были
         допустимы  перед  выдачей запроса "завершить и оставить резидент-
         ной", будут действительны и после повторной активации TSR.

                           Загрузка и инициализация TSR

             TSR может быть либо файлом .COM, либо файлом .EXE. DOS загру-
         жает все программы одним и тем же способом. Каждая программа име-
         ет сегмент программного префикса (PSP),  код программы и  данные.
         Различие между TSR и стандартными прикладными программами состоит
         в том,  что TSR выполняет несколько основных задач для подготовки
         самой себя к последующей повторной активации.
             При инициализации TSR является программой переднего  плана  и
         ей  полностью доступна вся система DOS.  При выполнении TSR в ка-
         честве программы переднего плана ей доступна определенная  инфор-
         мация. TSR должна записывать любую часть этой информации на одном
         из этапов ее инициализации. Во время инициализации TSR обычно вы-
         полняет следующие действия:
             - проверяет версию используемой DOS;
             - размещает важные структуры данных DOS;
             - "захватывает" один или более векторов прерываний;
             - проверяет  типы имеющихся дисплейных адаптеров и периферий-
               ных устройств;
             - выполняет  некоторую дополнительно указанную прикладную об-
               работку;
             - вычисляет  объем  памяти,  необходимый для размещения рези-
               дентной подпрограммы.
             Процесс инициализации TSR завершается,  когда программа вызы-

                                      - 4-30 -
         вает функцию "завершить и  оставить  резидентной"  (int  21h  AH=
         31h). Важно подчеркнуть тот факт, что раз TSR завершается, то она
         больше не является программой переднего плана.  Фоновые программы
         являются  как  бы неожиданными посетителями,  следовательно,  они
         должны быть очень аккуратными при выполнении своих  функций.  На-
         чальным  заданием программы инициализации должна быть запись сос-
         тояния системы таким образом, чтобы TSR могла бы повторно активи-
         роваться без разрушения операционной системы.
             Короче говоря, подпрограмма инициализации получает стартовав-
         шую  программу,  гарантирует,  что  TSR сможет быть выполнена при
         последующем вызове,  вычисляет требуемый размер памяти для  рези-
         дентной подпрограммы,  и, наконец, выдает запрос "завершить и ос-
         тавить резидентной" (int 21h AH=31h) для  возврата  управления  в
         DOS.

                         Проверка версии используемой DOS

             Перед выполнением каких-либо действий многие подпрограммы TSR
         рассчитывают на конкретную версию, недокументированные возможнос-
         ти  DOS  и  определенный порядок проверки версии текущей системы.
Предыдущая страница Следующая страница
1 ... 55 56 57 58 59 60 61  62 63 64 65 66 67 68 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама