Главная · Поиск книг · Поступления книг · 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 ... 30 31 32 33 34 35 36  37 38 39 40 41 42 43 ... 198
         дел,  управляемый MS-DOS, организуется в различные области, вклю-
         чая  нерезидентную  область  программ  или TPA (transient program
         area). Мы также увидели, как TPA управляется посредством использо-
         вания  блоков  управления памятью,  и что каждый процесс включает
         два блока памяти:  блока среды и блока, который мы будем называть
         "блок процесса".  Теперь мы можем перейти к обзору блока процесса
         и рассмотреть отдельные компоненты,  которые включает в себя про-
         цесс MS-DOS.

                             Контекст процесса MS-DOS

             Рис.2-3 в  главе 2 дает нам представление о внутренней струк-
         туре процесса MS-DOS для процессов типа .EXE и  .COM.  Теперь  мы
         можем объединить это с тем,  что уже изучили, для представления в
         памяти более детального образа процесса MS-DOS.  Это новое предс-
         тавление показано на Рис. 3-6.
             На Рис.3-6 имеется  много  деталей,  которые  нам  необходимо
         рассмотреть.  Мы  начнем с сегмента программного префикса или PSP
         (program segment prefix).

                           Сегмент программного префикса

             Сегмент программного префикса (PSP), введенный в главе 2, яв-
         ляется  в некотором смысле "краеугольным камнем" процесса MS-DOS.

                                      - 3-14 -
         Адрес сегмента PSP обеспечивает идентификатор процесса и служит в
         качестве  идентификатора  блока памяти процесса.  Устанавливаемый
         всегда в начале блока процесса PSP также служит в качестве  "хра-
         нилища" для большого количества ценной информации.
             В данном документе PSP представлен в трех представлениях: как
         графическое изображение на Рис.3-7; как подробное описание в таб-
         лице 3-1 и,  наконец, как описание структуры макроассемблера MASM
         STRUC в PSP.INC, приведенной в листинге 3-1. Рисунок дает возмож-
         ность быстрого размещения информации, таблица обеспечивает глуби-
         ну информации, а листинг показывает смещения, необходимые при ис-
         пользовании в программах пользователя.
             Даже беглый взгляд на Рис.3-7 и таблицу 3-1 открывает обилие
         информации, которая может быть полезна программисту.  Однако, не-
         которые элементы PSP требуют гораздо большего пояснения.

            Процесс .COM       Нижние адреса памяти      Процесс .EXE

         |\/\/\/\/\/\/\/\/\/|                        |\/\/\/\/\/\/\/\/\/|
         |COMMAND или преды-|    Предыдущий блок     |COMMAND или преды-|
         |  дущей программы |                        |  дущей программы |
          ------------------                          ------------------
         .------------------.                        .------------------.
         ||  4D/PSP/size/  ||        MCB среды       ||  4D/PSP/size/  ||
         ||----------------||                        ||----------------||
         ||  имя = строка  ||       блок среды       ||  имя = строка  ||
          ------------------                          ------------------
         .------------------.                        .------------------.
         ||  5A/PSP/size/  ||       MCB процесса     ||  4D/PSP/size/  ||
         ||----------------||                        ||----------------||
         ||  PSP программы ||      блок процесса     ||  PSP программы ||
         || - - - - - - - -||                        || - - - - - - - -||
         || Код программы  ||                        || Код программы  ||
         ||   и данные     ||                        || - - - - - - - -||
         || - - - - - - - -||                        || Стек или данные||
         ||                ||                         ------------------
         ||                ||                        .------------------.
         ||"Ни себе, ни лю-||          свободный MCB |   5A/0000/size/  |
         ||       дям"     ||                        |------------------|
         ||                ||                        |                  |
         || - - - - - - - -||                        |                  |
         ||     Стек       ||                        |   Доступна для   |
         ||----------------||                        |   использования  |
         || Недоступна для ||  Неиспользуемая память |                  |
         ||  использования ||                        |                  |
         |/\/\/\/\/\/\/\/\/\|                        |/\/\/\/\/\/\/\/\/\|

                               Верхние адреса памяти
           -------
          ||     || - Память, распределяемая/владеющая процессом
           -------

                    Рис.3-6. Контекст процесса MS-DOS в памяти

                               Адреса завершения PSP

             Таблица 3-1  показывает  три "адреса завершения",  хранимые в
         байтах от 0Ah до 15h PSP. Как уже объяснялось выше, эти копии:

                                      - 3-15 -
         адреса завершения  программы,  адреса  выхода  по  нажатию клавиш
         Control-Break и адреса выхода по критической ошибке выбираются из
         действительных векторов прерываний, размещаемых в int 22h,int 23h
         и int 24h. Чтобы воздействовать на поведение системы во время си-
         туации завершения (такой как, например, выход по внутреннему пре-
         рыванию CONTROL-BREAK/CONTROL-C)  программисту требуется изменить
         основные векторы прерываний. Это можно сделать, используя для по-
         лучения и изменения этих адресов функции "Установить вектор" (Set
         Vector - код 25h) и "Получить вектор" (Get Vector - код 35h).

                           Таблица описателей файлов PSP

             С обработкой  файлов  в сегменте программного префикса связаны
         три "недокументируемых" элемента: адрес таблицы описателей, указа-
         тель описателей и счетчик описателей.  Как увидим потом,  эти эле-
         менты являются относительными.
             Адрес таблицы  описателей содержит указатель длины на таблицу,
         шириной в несколько байт в памяти, размер которой задается счетчи-
         ком описателей.  Каждый байтовый элемент этой таблицы является ин-
         дикатором описателей,  которая может быть открыта  для  файла  или
         устройства.

                                                         Таблица 3-1
                     Содержимое сегмента программного префикса
         ________________________________________________________________
         Шестнадцатиричные|
         -----------------|                  Содержимое
         смещение| размер |
         ________|________|______________________________________________
            00   |    2   | Прерывание int 20h. Содержит инструкцию пре-
                 |        | рывания int 20h (байты CD 20 - шестнадцати-
                 |        | ричные значения). Устаревшее использование.
                 |        | Программист вместо завершения должен исполь-
                 |        | зовать функцию 4Ch, прерывание int 21h.
         ________|________|______________________________________________
            02   |    2   | Вершина памяти. Содержит адрес сегмента, сле-
                 |        | дующего за памятью программы. Это может быть
                 |        | адрес старой памяти DOS (такой как А000) или
                 |        | адрес следующего доступного блока управления
                 |        | памятью.
         ________|________|______________________________________________
            04   |    1   | Зарезервирован.
         ________|________|______________________________________________
            05   |    5   | Длинный вызов диспетчера функций MS-DOS. Со-
                 |        | держит длинный переход к диспетчеру функций
                 |        | MS-DOS для использования с программами типа
                 |        | CP/M. Устаревшее использование. Программы
                 |        | должны вместо вызова MS-DOS использовать пре-
                 |        | рывание int 21h.
         ________|________|______________________________________________
            06   |    2   | Доступная память. Часть смещения длинного вы-
                 |        | зова также содержит количество байтов, дос-
                 |        | тупных в кодовом сегменте программы.
         ________|________|______________________________________________
            0A   |    4   | Адрес завершения программы. Копия адреса пре-
                 |        | рывания int 22h (IP,CS), по которому переда-

                                      - 3-16 -
         ________________________________________________________________
         Шестнадцатиричные|
         -----------------|                  Содержимое
         смещение| размер |
         ________|________|______________________________________________
                 |        | ется управление, когда вводятся Control-Break
                 |        | или Control-C.
         ________|________|______________________________________________
            0E   |    4   | Адрес выхода Control-Break. Копия адреса пре-
                 |        | рывания int 23h (IP,CS), по которому переда-
                 |        | ется управление, когда вводятся Control-Break
                 |        | или Control-C.
            12   |    4   | Адрес выхода по критической ошибке. Копия ад-
                 |        | реса прерывания int 24h (IP,CS), по которому
                 |        | передается управление, когда во время обра-
                 |        | ботки обнаруживается критическая ошибка.
         ________|________|______________________________________________
            16   |    2   | Префикс программного сегмента владельца. Это
                 |        | сегментный адрес сегмента программного префи-
                 |        | кса владельца. Для процессов, не имеющих вла-
                 |        | дельца, это адрес текущего PSP.
         ________|________|______________________________________________
            18   |   14   | Таблица описателей файла. Содержит 20 одиноч-
                 |        | ных байтов "обработки" (индикаторов) в табли-
                 |        | це файлов системы. Первыми 5 из них являются:
                 |        | STDIN, STDOUT, STDERR, AUXIO и LSTOUT. Смотри
                 |        | текст для более подробного объяснения.
         ________|________|______________________________________________
            2C   |    2   | Адрес среды. Адрес сегмента блока среды про-
                 |        | цесса.
         ________|________|______________________________________________
            2E   |    4   | Память переключателя стека. Используется для
                 |        | хранения стекового сегмента процесса и указа-
                 |        | теля (SS:SP), когда процесс выполняет опера-
                 |        | ции в стеке MS-DOS.
         ________|________|______________________________________________
            32   |    2   | Счетчик описателей. Максимальное количество
                 |        | элементов, допускаемое в таблице описателей
                 |        | файла. По умолчанию принимается значение 20.
         ________|________|______________________________________________
            34   |    4   | Адрес таблицы описателей.Длинный указатель на
                 |        | таблицу описателей файла.По умолчанию в теку-
                 |        | щем PSP принимается значение смещения 18 (ше-
                 |        | стнадцатиричное значение).
          _______|_______________________________________________________
            38   |   18   | Зарезервировано.
         ________|________|______________________________________________
Предыдущая страница Следующая страница
1 ... 30 31 32 33 34 35 36  37 38 39 40 41 42 43 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама