Пейджинг и виртуальная память

ОРГАНИЗАЦИЯ ПАМЯТИ

Память, которую процессор адресует на своей шине, называется физической памятью. Физическая память организована как последовательность 8-битных байтов. Каждому байту присваивается уникальный адрес, называемый физическим адресом. Физическое адресное пространство колеблется от нуля до максимума 236 - 1 (64 ГБ), если процессор не поддерживает архитектуру Intel 64. Архитектура Intel 64 представляет изменения в физическом и линейном адресном пространстве; они описаны в разделе 3.3.3, разделе 3.3.4 и разделе 3.3.7.

Практически любая операционная система или исполнительный директор, предназначенные для работы с процессором IA-32 или Intel 64, будут использовать средства управления памятью процессора для доступа к памяти. Эти средства предоставляют такие функции, как сегментация и пейджинг, которые позволяют эффективно и надежно управлять памятью. Управление памятью подробно описано в главе 3 «Управление памятью с защищенным режимом» в Руководстве разработчика программного обеспечения Intel® 64 и IA-32, том 3A. В следующих параграфах описываются основные методы адресации памяти при использовании управления памятью.

Модели памяти IA-32

При использовании средств управления памятью процессора программы напрямую не адресуют физическую память. Вместо этого они получают доступ к памяти с использованием одной из трех моделей памяти: плоский, сегментированный или реальный адресный режим:

• Модель с плоской памятью. Память отображается программой как единое непрерывное адресное пространство (рисунок 3-3). Это пространство называется линейным адресным пространством. Код, данные и стеки содержатся в этом адресном пространстве. Линейное адресное пространство является адресным адресом, с адресами, последовательно идущими от 0 до 232 - 1 (если не в режиме 64 бит). Адрес для любого байта в линейном адресном пространстве называется линейным адресом.

• Сегментированная модель памяти. Память появляется в программе как группа независимых адресных пространств, называемых сегментами. Код, данные и стеки обычно содержатся в отдельных сегментах. Для обращения к байту в сегменте программа выдает логический адрес. Это состоит из селектора сегментов и смещения (логические адреса часто называются дальними указателями). Селектор сегментов идентифицирует сегмент, к которому нужно получить доступ, и смещение идентифицирует байт в адресном пространстве сегмента. Программы, запущенные на процессоре IA-32, могут обрабатывать до 16383 сегментов разных размеров и типов, а каждый сегмент может достигать 232 байта.

Внутри все сегменты, определенные для системы, отображаются в линейное адресное пространство процессора. Чтобы получить доступ к памяти, процессор таким образом переводит каждый логический адрес в линейный адрес. Этот перевод является прозрачным для прикладной программы.

Основной причиной использования сегментированной памяти является повышение надежности программ и систем. Например, размещение стека программы в отдельном сегменте предотвращает рост стека в пространство кода или данных и инструкции или данные перезаписи соответственно.

• Модель памяти режима реального времени. Это модель памяти для процессора Intel 8086. Он поддерживается для обеспечения совместимости с существующими программами, написанными для работы на процессоре Intel 8086. Режим realaddress использует определенную реализацию сегментированной памяти, в которой линейное адресное пространство для программы и операционной системы / исполнительной системы состоит из массива сегментов размером до 64 Кбайт каждый. Максимальный размер линейного адресного пространства в режиме реального адреса составляет 220 байт.

См. Также: Глава 20, «Эмуляция 8086», Руководство разработчика программного обеспечения Intel® 64 и IA-32, том 3B.

Пейджинг и виртуальная память

С моделью с плоской или сегментированной памятью линейное адресное пространство отображается в физическое адресное пространство процессора либо напрямую, либо через пейджинг. При использовании прямого сопоставления (пейджинг отключен) каждый линейный адрес имеет взаимно однозначное соответствие физическому адресу. Линейные адреса отправляются на адресные строки процессора без перевода.

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

Кроме того, механизм поискового вызова архитектуры IA-32 включает в себя расширения, которые поддерживают:

• Расширения физических адресов (PAE) для адресации физического адресного пространства более 4 ГБ.

• Расширения размера страницы (PSE) для отображения линейного адреса на физический адрес на 4-мегабайтных страницах.

См. Также: Глава 3 «Управление памятью с защищенным режимом» в программном обеспечении Intel® 64 и IA-32

Руководство разработчика, том 3A.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: