Преобразование адресов

Недостатком преобразования адресов является реальная адресация. Преобразование адресов открывает двери для виртуальной адресации, при которой любой возможный адрес не является физически доступным для данного экземпляра, но благодаря хитрому использованию аппаратуры и программного обеспечения каждый возможный адрес может стать виртуально доступным для доступа.
При включенном преобразовании адресов архитектура PowerPC преобразует ЕА одним из двух способов: с помощью сегментного преобразования адресов (Segment Address Translation) или блочного преобразования адресов (Block Address Translation) (рис. 8.4). Если преобразование ЕА возможно обеими методами, предпочитается блочное преобразование адресов, которое включено, когда значение MSRiR=l, или MSRDR=1, ИЛИ оба равны 1. Сегментное преобразование адресов разбивает виртуальную память на сегменты, разделяемые на страницы по 4 Кб, представляющие физическую память. Блочное преобразование адресов разбивает память на области размером от 128 до 256 Мб. Терминология преобразования адресов
Когда мы обращаемся к памяти, у нас есть только два метода обращения: реальная адресация, когда каждый элемент адреса описывает базовую единицу (обычно байт) физической памяти, и виртуальная адресация, когда адрес вычисляется в аппаратуре и/или программе. Вот несколько примеров, использования каждого метода:
• Реальная адресация. Физическая память, шины.
• Виртуальная адресация. Эффективные, защищенные и преобразованные адреса.
На PowerPC эффективное адресное пространство считается подмножеством виртуального адресного пространства. Термины линейный, плоский или логический применимы к обоим методам.
Сегментное преобразование адресов: прямое сохранение сегмента Т
Следующий уровень преобразования определяется битом Т, который находится в регистре сегмента. В PowerPC серии 7хх биты 0:3 ЕА выбирают один из 16 регистров сегментов (SR). Регистры сегментов продемонстрированы на рис. 8.5.
Когда бит Т установлен, сегмент считается прямым сегментом хранения для устройства ввода-вывода и не связан с таблицей аппаратных страниц. Адрес ввода-вывода состоят из бита разрешения, BUID, контроллероспецифического поля и битов 4:31 ЕА. Linux не шспользует сегментацию прямого хранения.
Когда обычный сегмент Т сегментного преобразования адресов не установлен, используется поле virtual segment ID (VSID)1.
В соответствии с рис. 8.6,52-битовый virtual address (VA)J формируется объединением битов 20:31 ЕА (отступа внутри данной страницы), битов 4:19 ЕА и битами 8:31 поля %*5ГО выбранного регистра сегмента. Наиболее важные 40 бит VA образуют virtual page (VPN)3. Архитектура PowerPC использует таблицу хешированных страниц для штображения CPN в реальные числа (реальные адреса желаемой страницы в памяти). Функ-та hash использует VPN и значение Storage Description Register 1 (SDR1)4 для хранения получения Page Table Entry (PTE)5. PTE, изображенное на рис. 8.7, представляет собой •-байтовую структуру, содержащую все необходимые атрибуты страницы в памяти.
Битное преобразование адресов
Как следует из его имени, Block Address Translation (ВАТ)6, - это механизм адресации, позволяющий манипулировать последовательными блоками памяти от 125 Кб JD 256 Мб. Регистры ВАТ на архитектуре PowerPC - это привилегированные special pur-РКЕ registers (SPRs)7. Рис. 8.8 иллюстрирует регистры ВАТ.
Формирование реального адреса из регистра ВАТ можно увидеть на рис. 8.9. Четыре регистра Instruction ВАТ (IBAT)1 и четыре регистра Data ВАТ (DBAT)2 можно читать с помощью РРС-инструкций mtspr и mfspr1.
Буферы просмотра преобразований
: Инструкции ВАТ. Примеч. пер. ' ВАТ-данные. Примеч. пер.
' Блочное преобразование адресов реализовано не на всех процессорах PowerPC. В частности, оно не реализовано на G4 и G5. Оно реализовано во встроенных процессорах 4хх.
Translation Lookaside Buffers (TLBs) можно рассматривать как аппаратный кеш с аппаратной защитой системы страниц. Длина TLB зависит от архитектуры PowerPC, а содержит она индекс наиболее используемых РТЕ. Программа работы со страницами должна обеспечивать синхронизацию TLB с таблицей страниц. Когда процессор не может найти страницу в хеш-таблице4, выполняется поиск в таблице страниц Linux. Если страница больше не найдена, генерируется обычная ошибка страницы. Информацию об оптимизации синхронизации таблицы страниц Linux и хеш-таблицы PowerPC можно найти в документе Низкоуровневая оптимизация в ядре PowerPC/Linux Пола Макераса5.
Режим управления доступом к хранимому
При включенном преобразовании адресов (MSRIR=1, и/или MSRDR=1) и используемом сегментном преобразовании адресов или блочном преобразовании адресов режим хранения определяется четырьмя битами: W, I, М и G. Для сегментного преобразования адресов это биты 25:28 второго слова РТЕ и те же биты для второго SPR DBAT. (Бит G заносится в IBAT.) Для сегментного преобразования адресов доступно еще два бита -ссылка и управление, расположенные в РТЕ. Биты R и С устанавливаются аппаратным, либо программным путем. (См. следующую вставку, где обсуждаются биты W, I, М, G, RHC.)