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










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

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

Выполнение кода в расширенной памяти

Всегда было возможно использовать память спецификации расширенной памяти LIM для хранения и выполнения исполняемого кода, но не всегда это было просто. Во-первых, максимальный размер в 64 Кбайт кадра страниц спецификаций до 4.0 ограничивал размер оверлея, который мог бы быть активным в данный момент времени. Также каждому разработчику приходилось разрабатывать полный механизм связывания, который позволял коду в обычной памяти выполнять код, находящийся в расширенной памяти.


У спецификации расширенной памяти LIM 4.0 есть потенциал для смягчения некоторых этих проблем. Теперь могут поддерживаться кадры страниц, большие 64К, хотя менеджеры расширенной памяти, написанные для плат, разработанных для спецификации 3.2, вероятно, не смогут обеспечивать большие размеры кадра страниц. Для способствования отображению и связыванию кодовых объектов в расширенной памяти были введены две новые функции, "Изменить отображение страниц и перейти" (22) и "Изменить отображение страниц и вызвать".


"Изменить отображение страниц и перейти" отображает нуль или более логических страниц (до максимального количества физических страниц, поддерживаемых менеджером расширенной памяти) в кадр страниц и передает управление указанному целевому адресу. В отличие от любой другой функции менеджера расширенной памяти данная функция не возвращает управление команде, следующей за командой "int 67h" (кроме случаев, когда менеджер расширенной памяти обнаруживает ошибку перед переходом к целевому адресу). Программа, которая получает управление в результате выполнения данной функции отвечает за установление собственного связывания по выходе. Когда целевой адрес получает управление, содержимое регистров процессора и флаги являются такими, какими они были, когда было выдано прерывание менеджера расширенной памяти. Таким образом, программы могут передавать параметры целевой программе в регистрах. Контекст отображения, существовавший перед вызовом данной функции не сохраняется.


Функция "Сменить отображение страниц и вызвать" является аналогом удаленной команды CALL 80х86. Аналогично функции "Сменить отображение страниц и перейти" данная функция отображает нуль или более логических страниц (до максимального количества физических страниц, поддерживаемого менеджером расширенной памяти) в кадр страниц и передает управление целевому адресу. Страницы, отображенные перед тем, как происходит передача управления называются новым отображением страниц. В отличие от функции "Сменить отображение страниц и перейти" целевая программа возвращает управление менеджеру расширенной памяти (и по существу, программе, которая выдала "Сменить отображение страниц и вызвать") путем выполнения команды удаленного возврата RETURN. Когда менеджер расширенной памяти вновь получает управление от целевой программы, множество страниц, называемое старым отображением страниц, отображается в кадр страниц и менеджер расширенной памяти возвращает управление исходной вызывавшей программе. Содержимое и нового и старого отображения страниц задается вызывавшей программой. Регистры вызывавшей программы сохраняются в течение процесса. Содержимое регистров при входе в целевую программу является тем же, какое было во время выдачи прерывания менеджера расширенной памяти вызывавшей программой.


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


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

Hosted by uCoz