Системное программное обеспечение персональных ЭВМ


15.5. Программные коммуникации



15.5. Программные коммуникации

Под программными коммуникациями мы понимаем обращения к TSR-программе из других программ. Для чего может понадобиться такое обращение? Во-первых, если речь идет об ISR-программах, то их активизация может происходить только по программному обращению. Во-вторых, при инициализации TSR-программы необходимо проверять, нет ли уже копии этой программы в памяти. Следовательно, запускаемая программа должна обратиться к копии программы уже резидентной в памяти, а резидентная копия должна ответить на это обращение, подтвердив свое присутствие. Наконец, в-третьих, при запуске, например, нашей программы с параметром "/Q", она должна передать резидентной копии команду на самоуничтожение. Список соображений, по которым требуется обеспечение программных коммуникаций можно было бы продолжить.

Для программных коммуникаций можно использовать прерывания, закрепив для этих целей один из свободных векторов. В DOS 3.0 и далее для этих целей введено специальное прерывание 0x2F, именуемое мультиплексным. Каждый процесс (т.е. каждая TSR-программа) закрепляет за собой какую-либо функцию этого прерывания. Функции с номерами от 0 до 0xBF закреплены за DOS (известно, что функция 1 используется программой фоновой печати PRINT, 0xB7 - резидентной утилитой APPEND, 0x11 - внутренними вызовами DOS и т.д.), функции с номерами от 0xC0 до oxFF - для пользовательских программ. Поскольку одновременно несколько пользовательских резидентных программ могут находиться в памяти и использовать мультиплекское прерывание для своих коммуникаций, необходимо обеспечить разделение между ними функций, оставленных пользователям. По спецификациям прерывания 0x2F подфункция 0 (AL=0) любой функции должна обеспечивать индикацию занятости функции. При обращении к подфункции 0 любой функции прерывания 0x2F на выходе мы должны получать в регистре AL код 0 - если функция свободна и может быть захвачена пользовательской программой, или код 0xFF - если функция занята. Каждая программа, подключающаяся к прерыванию 0x2F должна обеспечить такое выполнение подфункции 0 для занимаемой ею функции, остальные подфункции можно назначать и использовать по своему выбору.



- Начало -  - Назад -  - Вперед -