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










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

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

Два способа задания физических страниц

Начальное рассмотрение физических страниц в связи со спецификацией расширенной памяти LIM 3.2 установило, что физические страницы определяются порядковым номером (от 0 до 3 в спецификации расширенной памяти LIM 3.2). В спецификации расширенной памяти LIM 4.0 обеспечивается дополнительный способ задания физических страниц: фактическим адресом сегмента начала физической страницы. Например, если адрес кадра страниц, возвращенный функцией "Получить адрес кадра страниц", был равен CC00h, третья физическая страница в пределах кадра страниц могла бы определяться своим порядковым номером, 2, или адресом сегмента, D400h. Данный адрес сегмента был вычислен путем прибавления трижды размера физической страницы (в параграфах) к базовому адресу кадра страниц.


Любые функции спецификации расширенной памяти LIM 4.0, берущие номера физических страниц в качестве параметров, позволяют указание физических страниц порядковыми номерами или адресами сегментов. Вы можете выбирать наиболее удобный для Вашей программы метод путем задания кода подфункции в регистре AL для функций спецификации расширенной памяти 4.0, которые принимают номера физических страниц. Код подфункции 00h показывает, что значения физических страниц определены порядковыми номерами физических страниц, в то время как код подфункции 01h показывает, что значения физических страниц заданы соответствующими адресами сегментов.


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


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


На рис. 7-3 показана гипотетическая конфигурация расширенной памяти 384К, которая используется двумя программами, электронной таблицей и программой буферизации принтера. Иллюстрируются некоторые динамические отношения между программами, обработчиками, логическими страницами и физическими страницами, а именно:


* Две (или более) независимых программы могут пользоваться расширенной памятью одновременно без взаимного влияния.


* У одной программы может быть более одного обработчика спецификации расширенной памяти, размещенного для нее, - фоновая задача в примере обладает двумя обработчиками.


* Последовательно пронумерованные логические страницы не приходится отображать в последовательные физические страницы - активная приоритетная программа имеет логические страницы 6, 7, 2 и 1, отображенные в физические страницы 0-3.


Функция "Передвинуть/обменять область памяти" (24), которая была добавлена как часть спецификации расширенной памяти LIM 4.0 обеспечивает исчерпывающие средства для управления передвижением областей данных, длиной до 1Мбайта, между расширенной памятью и обычной памятью. Данная функция также позволяет передвигать или обменивать данные, когда обе указанные области находятся в пределах расширенной памяти или, когда обе области находятся в обычной памяти.


Подфункция передвижения (00h) копирует содержимое области-источника в область-приемник. Если указанные области перекрываются, менеджер расширенной памяти выбирает такое направление передвижения, чтобы область-приемник получала неповрежденную копию области источника. Когда часть области-источника перекрывается целевой областью в течение операции передвижения, менеджер расширенной памяти возвратит код состояния, указывающий на это (как всегда в регистре AH).


Подфункция обмена (01h) обменивает местами две области памяти: любая или обе области могут быть в расширенной памяти или в отличие от подфункции передвижения подфункция обмена не разрешает задания перекрывающихся областей.


Удобной чертой обеих подфункций является то, что операции передвижения или обмена на меняют контекста текущего отображения. Любые логические страницы, которые Ваша программа могла отобразить в кадр страниц, не будут изменяться функцией 25, так что для Вашей программы нет необходимости сохранять контекст отображения перед применением данной функции.


Функция "Передвинуть/обменять область памяти" избавляет программиста от нескольких утомительных программных работ, связанных с управлением расширенной памятью, которые были жизненным фактом в более ранних версиях спецификации расширенной памяти LIM. Тем не менее, важно контролировать код состояния, возвращаемый данной функцией. Существуют 13 различных ошибок, которые могут случиться в течение операции передвижения или обмена.


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

Hosted by uCoz