5.3 Страничная переадресация
В Intel-совместимых процессорах линейная адресация памяти доступна, начиная с Intel 80386. Благодаря введению механизма линейной адресации можно создавать любое количество адресных пространств. Причём каждая страница линейного адресного пространства может находиться по любому (естественно, выровненному по границе 4 Кб) физическому адресу, а благодаря обработчику #PF и на любом накопителе. В этом случае обработчик #PF лишь загружает страницу с накопителя в физическую память. Процессор всё равно обращается только к физической памяти. Вся физическая память делится на страницы фиксированного размера (4 Кб, 2 Мб, 4 Мб). Каждая страница, независимо от размера выровнена по границе 4 Кб.
Линейная адресация доступна только в защищённом режиме. Для её включения необходимо установить бит PG в регистре CR0. Предварительно необходимо создать в памяти каталог страниц (Page Directory, PD) и таблицы страниц (Page Table, PT), после чего в регистр CR3 загрузить физический адрес каталога страниц.
При включении механизма страничной переадресации процессор будет преобразовывать 32-разрядные линейные адреса в 32-разрядные физические адреса. В процессорах Pentium Pro и более поздних моделях предусмотрена возможность расширения физического адресного пространства до 36 битов за счет изменения механизма страничной организации памяти. Однако здесь мы ее рассматривать не будем.
Страница – область памяти, размер которой составляет либо 4 Кбайт, либо 4 Мбайт, в зависимости от величины гранулы. Для упрощения последующего изложения будем считать, что используются страницы размером 4 Кбайт.
При использовании линейной адресации 32-битный адрес делится на три части (рис. 5.3.):
Номер элемента в каталоге страниц (номер таблицы страниц) – 10 бит. Одна запись из каталога страниц определяет 4 МБайт адресного пространства.
Номер элемента в таблице страниц (номер страницы в таблице страниц) – 10 бит. Одна запись из таблицы страниц определяет 4 КБайт адресного пространства.
Смещение в странице – 12 бит.
При использовании страниц по 4 МБайт вторая часть отсутствует. Смещение в странице определяют младшие 22 бита линейного адреса.
При преобразовании линейного адреса в физический процессор последовательно выполняет описанные ниже действия, которые проиллюстрированы на рис.5.3:
Программа обращается в память, указывая линейный адрес объекта.
Из линейного адреса извлекается значение 10-битового поля, определяющего индекс элемента в страничном каталоге. По этому индексу находится соответствующий элемент страничного каталога, содержащий базовый физический адрес таблицы страниц.
Из линейного адреса извлекается значение 10-битового поля, определяющего индекс элемента в таблице страниц, адрес которой был определен в п. 2. По этому индексу находится соответствующий элемент таблицы страниц, содержащий базовый физический адрес страницы памяти.
К полученному в п. 3 базовому физическому адресу страницы памяти прибавляется значение 12-битового поля смещения, в результате чего получается 32-разрядный физический адрес операнда в памяти.
В зависимости от типа операционной системы, для всех запущенных задач может использоваться только один страничный каталог, либо для каждой задачи создается свой страничный каталог. Возможен также комбинированный вариант.
Для того чтобы завершить рассмотрение страничной организации памяти, отметим, что рассмотренный механизм при логической работоспособности достаточно неэффективен, т.к. требует двух обращений в память для доступа с использованием виртуального адреса. Первый доступ необходим для работы с таблицей, второй - собственно для доступа к данным.
Для того чтобы ускорить трансляцию виртуальных адресов в физические, вводится специальный ассоциативный буфер истории трансляции TLB (translation look-aside buffer). Этот буфер содержит N строк, каждая из которых состоит из виртуального номера страницы и номера соответствующей физической страницы. В буфере размещаются отображения для N виртуальных страниц, номера которых использовались для последних по времени обращений к памяти. Тем самым для локализованных обращений к памяти создаются условия для быстрой трансляции виртуальных адресов в физические, без затрат на время выборки из таблицы страниц. Понятно, что N не может быть достаточно большим в силу того, что буфер должен быть быстрым, и объем оборудования на его построение, как правило, ограничен.
Поэтому если обнаруживается, что в буфере истории трансляции TLB нет требуемого виртуального адреса или для него не задано отображение в физический адрес, то запускается описанный механизм определения отображения виртуального адреса в физический. Полученный физический адрес вместе с соответствующим ему виртуальным адресом затем заносится в буфер TLB. При этом если буфер был полон, то в нем определяется исключаемое отображение одного из виртуальных адресов в соответствующий ему физический. Выбор этого виртуального адреса может производиться по разным алгоритмам. Например, это может быть адрес, к которому реже всех обращались, либо случайно выбранный адрес и т.д.
Следует отметить, что в процессорах широко используется рассмотренный метод ускорения реализации различных отображений путем введения ассоциативного буфера для хранения таблиц отображения, требующего для своего выполнения существенных затрат времени.
В идеале, локализацию данных программ, написанных на языках программирования, выполняет компилятор, учитывающий особенности аппаратных механизмов пересылки данных между уровнями памяти и отображения страниц. Однако не все пользователи удовлетворяются эффективностью, обеспечиваемой компилятором, поэтому вводятся команды процессора и операционной системы, обеспечивающие управление пересылкой данных между уровнями памяти и размещением страниц в основной памяти.
Пример 1. Посмотрим содержимое сегментных регистров и смещение данных в Windows-приложении с указанными ниже сегментами данных и кода:
.386
.model flat, stdcall
option casemap: none
.data
X byte 42h ; объявление и инициализация переменной X
.code
lea eax,X
PrintHex eax
mov ax,cs
PrintHex ax
mov ax,ds
PrintHex ax
mov ax,ss
PrintHex ax
mov ax,es
PrintHex ax
ret
Для этого сохраним эту программу под разными именами, скомпилируем эти файлы и запустим их. Ниже приведено окно сообщений при запуске двух программ. Как можно увидеть смещение данных и содержимое сегментных регистров одинаковое у двух разных приложений. Одинаковое и содержимое счётчика команд (EIP), оно равно 00401000h. Это происходит по причине использования страничной организации памяти, при которой физический адрес вычисляется на основе информации из таблицы страниц запущенных процессов.
eax = 00403000 – смещение переменной
ax = 001B – содержимое регистра сегмента кода
ax = 0023 – содержимое регистра сегмента данных
ax = 0023 – содержимое регистра сегмента стека
ax = 0023 – содержимое дополнительного сегмента данных
eax = 00403000 – смещение переменной
ax = 001B – содержимое регистра сегмента кода
ax = 0023 – содержимое регистра сегмента данных
ax = 0023 – содержимое регистра сегмента стека
ax = 0023 содержимое дополнительного сегмента данных
- Предисловие
- Глава 1. Общие сведения о микропроцессорах
- 1.1 Классификация микропроцессоров
- 1.2 Характеристики микропроцессоров
- 1.2.1 Тактовая частота
- 1.2.2 Архитектура процессора
- 1.2.3 Технологический процесс производства
- 1.2.4 Частота системной шины
- 1.2.5 Размер кэша
- 1.3 Типы архитектур микропроцессоров
- 1.4 Структурная схема микропроцессоров
- 1.4.1 Микропроцессор Фон-Неймана
- 1.4.2 Конвейер
- 1.4.3 Зависимость между частотой и количеством ступеней конвейера
- 1.5 Представление информации в эвм
- 1.5.1 Двоичное представление целых чисел
- 1.5.2 Представление символьной информации
- Глава 2. Архитектура микропроцессоров ia-32
- 2.1 Состав и функции регистров
- 2.1.1 Основные регистры
- 2.1.2 Регистры дополнительных функциональных модулей
- 2.2 Типы адресации
- 2.3 Система команд
- 2.3.1 Классификация команд
- 2.3.2 Формат команды
- 2.3.3 Однобайтовые команды
- 2.3.4 Непосредственно заданные операнды
- 2.3.5 Команды с регистровыми операндами
- 2.3.7 Команды с операндами, расположенными в памяти
- Глава 3. Организация многоуровневой памяти
- 3.1 Принцип построения многоуровневой памяти
- 3.2 Организация кэш-памяти
- 3.3 Протоколы когерентности памяти микропроцессоров
- 3.4 Страничная организация памяти
- Глава 4. Режимы работы процессоров ia-32
- 4.1 Обзор режимов работы
- 4.2 Реальный режим адресации
- 4.3 Защищённый режим
- 4.3.1 Дескрипторные таблицы
- 4.3.2 Дескрипторные регистры
- 4.3.3 Дескриптор
- 4.3.4 Односегментная модель памяти
- 4.3.5 Многосегментная модель памяти
- Глава 5. Страничная организация памяти в процессорах ia‑32
- 5.1 Каталог страниц
- 5.2 Таблица страниц
- 5.3 Страничная переадресация
- 5.4 Диспетчер виртуальных машин системы Microsoft Windows
- Глава 6. Архитектура процессоров с параллелизмом уровня команд
- 6.1 Подходы к использованию ресурса транзисторов в микропроцессорах
- 6.2 Суперскалярные процессоры и процессоры с длинным командным словом
- 6.3 Зависимости между командами, препятствующие их параллельному исполнению
- 6.4 Предварительная выборка команд и предсказание переходов
- 6.5 Условное выполнение команд в vliw-процессорах
- 6.6 Декодирование команд, переименование ресурсов и диспетчеризация
- 6.7 Исполнение команд
- 6.8 Завершение выполнения команды
- 6.9 Направления развития архитектуры процессоров с параллелизмом уровня команд
- Глава 7. Мультитредовые микропроцессоры
- 7.1 Основы мультитредовой архитектуры
- 7.2 Выявление тредов
- 7.3 Мультитредовые процессоры с тредами, выявляемыми путем анализа потоков управления программы
- 7.3.1 Мультитредовая модель выполнения программы
- 7.3.2 Мультитредовые программы
- 7.3.3 Аппаратные средства мультитредовой архитектуры
- 7.3.4 Преимущества мультитредовой архитектуры
- 7.4 Мультитредовые процессоры с тредами, выявляемыми путем анализа потоков данных программы
- 7.5 Специфика мультитредовых моделей распараллеливания
- Глава 8. Модуль обработки вещественных чисел
- 8.1 Представление чисел с плавающей запятой
- 8.2 Состав модуля fpu
- Глава 9. Основы 64-разрядной архитектуры
- 9.1 Состав и назначение регистров микропроцессора ia-64
- 9.2 Особенности архитектуры epic
- 9.3 Архитектура x86-64
- 9.4 Структура одноядерного процессора
- 9.5 Многоядерные процессоры
- 9.6 Зачем нужны “лишние” разряды?
- Глава 10. Современные 64-разрядные микропроцессоры корпораций Intel и amd
- 10.1 Архитектура Intel Core 2
- 10.1.1 Intel Wide Dynamic Execution
- 10.1.2 Intel Intelligent Power Capability
- 10.1.3 Intel Advanced Smart Cache
- 10.1.4 Intel Smart Memory Access
- 10.1.5 Intel Advanced Digital Media Boost
- 10.1.6 Логическая схема процессора
- 10.2 Архитектура Intel Core i7
- 10.2.1 Технология Hyper-Threading в архитектуре Nehalem
- 10.2.2 Иерархия кэш-памяти в архитектуре Nehalem
- 10.3 Хронология развития семейств микропроцессоров с архитектурой Nehalem
- 10.4 Архитектура amd Athlon 64
- 10.4.1 Ядро процессора
- 10.4.3 Контроллер памяти
- 10.4.4 Контроллер HyperTransport
- 10.5 Архитектура amd k10
- 10.4.1 Технология amd Memory Optimizer Technology
- 10.5.2 Ядро процессора
- 10.5.3 Предвыборка данных и инструкций
- 10.5.4 Выборка из кэша
- 10.5.5 Предсказание переходов и ветвлений
- 10.5.6 Процесс декодирования
- 10.5.7 Диспетчеризация и переупорядочение микроопераций
- 10.5.8 Выполнение микроопераций
- 10.5.9 Технологии энергосбережения
- 10.5.10 Шина HyperTransport 3.0
- 10.5.11 Семейство процессоров Barcelona
- 10.5.12 Семейство процессоров Phenom
- Глава 11. Технологии, поддерживаемые современными микропроцессорами
- 11.1 Технологии тепловой защиты
- 11.1.1 Технология Thermal Monitor
- 11.1.2 Технология Thermal Monitor 2
- 11.1.3 Режим аварийного отключения
- 11.2 Технологии энергосбережения
- 11.2.1 Технология Enhanced Intel SpeedStep
- 11.2.2 Технология Cool'n'Quiet
- 11.3 Технология расширенной памяти
- 11.4 Технология антивирусной защиты
- 11.5 Технология виртуализации
- 11.6 Реализация технологий в современных микроархитектурах
- 11.6.2 Em64t – NetBurst
- 11.6.3 Intel Core
- 11.6.4 Intel Atom
- 11.6.5 Nehalem
- 11.6.6 Xeon
- Глава 12. Графические микропроцессоры
- 12.1 Основные термины и определения
- 12.2 Технологии построения трёхмерного изображения
- 12.2.1 Технологии повышения реалистичности трехмерного изображения
- 12.3 Шейдерный процессор
- 12.4 Особенности современных графических процессоров
- Глава 13. Однокристальные микроконтроллеры
- 13.1 Общая характеристика микроконтроллеров
- 13.2 Микроконтроллеры семейства avr
- Почему именно avr?
- 13.3 Общие сведения об омк avr
- 13.4 Характеристики avr-микроконтроллеров
- Глава 14. Технология производства микропроцессоров
- 14.1 Особенности производства процессоров
- 14.2 Новые технологические решения
- 14.3 Технология производства сверхбольших интегральных схем
- I. Выращивание кристалла кремния
- II. Создание проводящих областей
- III. Тестирование
- IV. Изготовление корпуса
- V. Доставка
- 14.4 Перспективы производства сбис
- Англо-русский словарь терминов и аббревиатур
- Библиографический список
- Интернет-ссылки
- 350072. Краснодар, ул. Московская, 2, кор. А.