Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Переменные модуля WinDos

Многими подпрограммами модуля WinDos для сообщения об ошибке

используется переменная DosError.

Глава 17. Программирование в защищенном режиме dos

Микропроцессор 80286 дает новый способ адресации к памяти:

защищенный режим виртуальной адресации или просто защищенный ре-

жим. Этот новый режим адресации дает три основных преимущества:

* Адресация к памяти объемом до 16 мегабайт.

* Логическое адресное пространство, превышающее пространство

физических адресов.

* Способ изоляции программ друг от друга, так что одна прог-

рамма не может нарушать другой выполняющейся одновременно

с ней программы.

С помощью Borland Pascal вы легко можете писать работающие в

защищенном режиме прикладные программы DOS без необходимости при-

менения дополнительного "расширителя" DOS. Вы обнаружите, что

многие программы реального режима прекрасно работают в защищенном

режиме. Данная глава поможет вам модифицировать те программы, ко-

торые этого не делают, и прояснит некоторые основные моменты за-

щищенного режима и его отличия от реального режима.

Что такое защищенный режим?

Процессор 80286 и более поздние процессоры поддерживают два

режима операций: защищенный режим и реальный режим. Реальный ре-

жим совместим с работой процессора 8086 и позволяет прикладной

программе адресоваться к памяти объемом до одного мегабайта. За-

щищенный режим расширяет диапазон адресации до 16 мегабайт. Ос-

новное отличие между реальным и защищенным режимом заключается в

способе преобразования процессором логических адресов в физичес-

кие. Логические адреса - это адреса, используемые в прикладной

программе. Как в реальном, также и в защищенном режиме логический

адрес - это 32-разрядное значение, состоящее из 16-битового се-

лектора (адреса сегмента) и 16-битового смещения. Физические ад-

реса - это адреса, которые процессор использует для обмена данны-

ми с компонентами системной памяти. В реальном режиме физический

адрес представляет собой 20-битовое значение, а в защищенном ре-

жиме - 24-битовое.

Когда процессор обращается к памяти (для выборки инструкции

или записи переменной), он генерирует из логического адреса физи-

ческий адрес. В реальном режиме генерация физического адреса сос-

тоит из сдвига селектора (адреса сегмента) на 4 бита влево (это

означает умножение на 16) и прибавления смещения. Полученный в

результате 20-разрядный адрес используется затем для доступа к

памяти.

16Мб-----------------

¦ ¦

--------- ¦ ¦

¦Смещение+- ¦ ¦

L--------- ¦ ¦ ¦

¦ +----------------+

L--+----->----------¦+ сегмент 64К

-->+----------------+-

¦ ¦ ¦

¦ ¦ Пространство ¦

--------- ------- ¦ ¦ адресов ¦

¦Селектор+-+ x 16 +------ ¦ ¦

L--------- L------- ¦ ¦

0L-----------------

Рис. 17.1 Генерация физического адреса в реальном режиме.

Чтобы получить физический адрес в защищенном режиме, селек-

торная часть логического адреса используется в качестве индекса

таблицы дескрипторов. Запись в таблице дескрипторов содержит

24-битовый базовый адрес, к которому затем для образования физи-

ческого адреса прибавляется смещение логического адреса.

16Мб-----------------

¦ ¦

--------- ¦ ¦

¦Смещение+- ¦ ¦

L--------- ¦ ¦ ¦

¦ +----------------+

Таблица дескрипторов L--+----->----------¦+ сегмент 64К

------- -->+----------------+-

+------+ ¦ ¦ ¦

+------+ ¦ ¦ Пространство ¦

+------+ ¦ ¦ адресов ¦

-->+------+---- ¦ ¦

¦ +------+ ¦ ¦

¦ +------+ 0L-----------------

¦ +------+

¦ +------+

¦ +------+

¦ +------+

¦ +------+

¦ +------+

¦ +------+

¦ +------+

--------- ¦ +------+

¦Селектор+-- L-------

L---------

Рис. 17.2 Генерация физического адреса в защищенном режиме.

Каждая запись в таблице дескрипторов называется дескриптором

и определяет сегмент в памяти. Запись таблицы дескрипторов зани-

мает 8 байт, а записанная в дескрипторе информация включает в се-

бя базовый адрес, предельное значение и флаги полномочий доступа

к сегменту.

Записи предельного значения сегмента и полномочий доступа в

дескрипторе определяют размер и тип сегмента. Сегменты могут

иметь размер от 1 до 65536 байт и могут быть сегментами кода или

сегментами данных. Сегменты кода могут содержать выполняемые ма-

шинные инструкции и доступные только по чтению данные. Сегменты

данных могут содержать данные, доступные по чтению и записи. За-

писывать данные в сегменты кода или выполнять инструкции в сег-

ментах данных невозможно. Любая попытка сделать это или попытка

доступа к данным вне границ сегмента вызывает общий сбой по на-

рушению защиты (сокращенно сбой GP). Поэтому режим и называется

защищенным.

По данному адресу в реальном режиме прикладная программа мо-

жет определить физический адрес. В защищенном режиме это обычно

не так, поскольку селекторная часть логического адреса является

индексом в таблице дескрипторов, и сам селектор не имеет прямого

отношения к вычислению физического адреса. Это дает то преиму-

щество, что управление виртуальной памятью можно реализовать, не

влияя на прикладную программу. Например, путем простого обновле-

ния поля базового адреса дескриптора сегмента, операционная сис-

тема может перемещать сегмент в физической памяти без влияния на

использующую сегмент прикладную программу. Прикладная программа

ссылается только на селектор сегмента, и на селектор не влияют

изменения в дескрипторе.

Прикладная программа редко имеет дело с дескрипторами. При

необходимости дескрипторы создаются и уничтожаются операционной

системой и администратором памяти, а прикладная программа знает о

соответствующих селекторах. Селекторы аналогичны описателям фай-

лов - с точки зрения прикладной программы это то, что обслужива-

ется операционной системой, но в операционной системе они работа-

ют как индексы содержащих дополнительную информацию таблиц.

Соседние файлы в предмете Программирование на Pascal