Лекции по Вычислительным машинам, системам и сетям   

4. Микропроцессор Itanium

4.2. Адресация памяти

Первым широкоизвестным процессором фирмы Intel был процессор i580. Механизм формирования физического адреса оперативной памяти (Аф) в этом процессоре был прост и понятен. Адрес брался из пары регистров или из команды. То есть программист, написав в команде адрес 0777h, мог быть уверен, что процессор обратится именно к ячейке памяти с адресом 0777h и ни к какой другой. Для программиста это удобно, но при написании ОС это приво-дило к неразрешимым проблемам, поскольку абсолютная адресация в корне противоречит концепции загрузки программы в произвольное место оперативной памяти.

Для преодоления этого недостатка, начиная с 16-разрядного процессора i8086, был введен сегментный механизм формирования физического адреса оперативной памяти. Теперь адрес, задаваемый в регистре или команде, представлял собой не физический адрес памяти, а смещение в некоем сегменте относительно начального (базового) адреса этого сегмента. Начальные адреса всех используемых в данный момент сегментов задавались процессору в специальных сегментных регистрах. Поскольку загрузка информации в эти сегментные регистры возлагалась в основном на ОС, никаких особых проблем при перемещении программы в памяти не возникало. Программа загружалась в первое свободное место памяти, а ОС соответствующим образом заполняла сегментные регистры. Сегментный механизм, претерпевая определенные модификации, просуществовал почти три десятилетия, вплоть до создания Pentium IV.

С появлением 32-разрядных процессоров и ОC Windows выяснилось, что и сегментный механизм, с точки зрения простоты реализации ОС, имеет существенные недостатки. При этом основная проблема была связана с реализацией концепции «виртуальной памяти», которая предполагает, что часть сегментов текущего процесса (задачи) находится в оперативной памяти, а другая часть – на жестком диске, подкачиваясь по мере необходимости. Реализация алгорит-мов подкачки сегментов с диска приводила к существенным трудностям, поскольку, в общем случае, сегменты являлись разноразмерными и могли быть очень большими (превышающими имеющийся объем оперативной памяти). Попытка устранения этого недостатка привела, начиная с процессора i386, к появлению страничного механизма формирования физического адреса оперативной памяти. При этом считается, что вся память разбита на страницы фиксированного (как правило, небольшого) размера и для формирования Аф надо знать начальный адрес (или номер) страницы и внутристраничнре смещение.

Страничный механизм в 32-разрядных процессорах фирмы Intel является надстройкой над сегментным механизмом. Процесс формирования физического адреса памяти можно при этом описать следующим образом:

- сначала работает сегментный механизм, формирующий так называемый линейный адрес, который является входным параметром для страничного механизма;

- страничный механизм, используя буфер TLB (translation lookaside buffer) или, если начального адреса нужной страницы в буфере нет, находящиеся в ОП таблицы страниц, транслирует полученный линейный адрес в физический.

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

Современные ОС поддерживают различные модели распределения адресного пространства. Без учета различных нюансов все эти модели можно разделить на два типа.

1. Multiple Address Space (MAS) – разделение адресного пространства между процессами. В такой модели каждому процессу выделяется уникальная область адресного пространства памяти, недоступная другим процессам.

2. Single Address Space (SAS) – единое адресное пространство. Здесь все процессы разделяют единое адресное пространство, а защита от влияния процессов друг на друга осуществляется на уровне доменов (например, страниц или групп страниц).

Механизм адресации процессора Itanium разработан с учетом аппаратной поддержки обоих типов моделей адресного пространства. Для поддержки MAS использу-ются Регистры регионов, идентифицирующие Virtual Regions (виртуальные регионы) внутри адресного пространства. Для поддержки SAS используются механиз-мы защиты домена (Protection Domain mechanisms).

Формирование физического адреса памяти в Itanium происходит по следующей схеме. Из регистра общего назначения (GRi) берется 64-разрядный адрес, который называют виртуальным (Virtual Address). В соответствии с этим адресом определяется Регистр региона, содержащий Идентификатор региона. По идентификатору региона и нашему виртуальному адресу в TLB производится поиск соответствующей Записи (Запись содержит начальный адрес искомой страницы). В описании фирмы Intel Запись называют Translation Entry – элемент трансляции.

Предположим, что искомый элемент трансляции в TLB найден. Процессор проводит ряд проверок (права доступа, соответствие атрибутам страницы и другие) и, если все они прошли успешно, к начальному адресу страницы, взятому из элемента трансляции, пристыковывается внутристраничное смещение, взятое из виртуального адреса. Это и будет искомый Аф.

Если нужная Запись в TLB отсутствует, процессор может (если соответствующий механизм включен) произвести поиск искомого элемента трансляции в Хэш-таблице (VHPTVirtual Hash Page Table). Эта таблица создается в оперативной памяти операционной системой и ее местоположение процессору известно.

Если нужный элемент трансляции в Хэш-таблице найден, процессор помещает его в TLB и так далее. Если же нужный элемент трансляции отсутствует и в Хэш-таблице, то генерируется особый случай TLB Miss fault. Обработчик этого особого случая, являющийся частью ОС, может найти нужный элемент трансляции в таблицах страниц ОС и поместить его в TLB или в Хэш-таблицу. После этого происходит рестарт отказавшей команды. Этот процесс упрощенно показан на рис. 4.1.

Адресуемая процессором оперативная память представляет собой виртуальный линейный массив объемом 264 байта. Этот массив разбивается на 8 регионов объемом 261 байта каждый. Каждому из регионов присваивается 24-битовый Идентификатор региона, который записывается в один из восьми Регистров региона.

Старшие три бита (63‑61) виртуального адреса и осуществляют выбор Регистра региона, из которого будет взят Идентификатор.

Используя последовательные Идентификаторы регионов, ОС может «сливать» соседние Регионы в одно целое, образуя Регионы большего объема (до 264 байтов при слиянии всех восьми Регионов).

Адресное пространство Региона разбивается на страницы, размер которых для каждого конкретного Региона задает ОС (4 Кбайт, 8 Кбайт, 16 Кбайт, 64 Кбайт, 256 Кбайт, 1 Мбайт, 4 Мбайт, 16 Мбайт, 64 Мбайт или 256 Мбайт).

Рис. 4.1

Виртуальный адрес, взятый из 64-разрядного регистра общего назначения, условно разбивается на три поля. Разряды 63‑61 содержат Номер виртуального региона и, как уже отмечалось, задают Регистр региона, из которого считывается Идентификатор региона. Младшие биты (сколько конкретно – зависит от размера страницы) задают смещение в странице. Это смещение проходит через процесс трансляции без изменений. Оставшиеся биты содержат Номер виртуальной страницы. Процессор производит поиск нужной Записи в TLB, сравнивая соответствующие поля всех Записей с найденным Идентификатором региона и Номером виртуальной страницы.

Если нужная Запись найдена, то начинает работать Механизм защиты домена. Для работы этого механизма каждой Виртуальной странице ставится в соответствие уникальный Ключ защиты (Protection Key).

При запуске нового процесса, ОС записывает все необходимые для данного процесса Ключи защиты в специальный массив регистров (Protection Key Registers). Когда идет обращение к Виртуальной странице и нужная Запись в TLB найдена, процессор достает из этой Записи прописанный в ней Ключ защиты и сравнивает его с содержимым всех регистров массива.

Если сравнения не произошло, то возникает особый случай Key Miss fault. Если в каком-то регистре обнаружен совпадающий ключ защиты, то процессор производит дополнительную проверку на «защиту от записи», «защиту от выполнения» и «защиту от чтения». Атрибуты для этой проверки процессор берет из регистра, в котором обнаружен Ключ.

Если эта проверка оказывается неудачной, то возникает особый случай Key Permission fault.

Если все проверки прошли успешно из Записи считывается Номер физической страницы (по сути это старшие разряды физического адреса страницы) и к нему пристыковывается смещение в странице, взятое из Виртуального адреса.

В состав процессора входят два TLB: TLB команд (ITLB) и TLB данных (DTLB). Первый используется при выборке из памяти очередной команды (вернее, очередной командной группы), второй – при обращении к данным.

Каждый из этих TLB делится на два подмножества: Регистры трансляции (Translation Registers) и Кэш-трансляции (Translation Cache). Граница этих подмножеств в общем случае плавающая, т.е. ОС может сама задавать, сколько элементов TLB будут рассматриваться в качестве Регистров, сколько в качестве Кэша. Основная разница между Регистрами и Кэшем заключается в том, что Записи, хранящиеся в Регистрах меняются крайне редко, а в Кэше, если он заполнен, ‑ при каждом кэш-промахе. То есть в Регистрах ОС «зашивает» Записи, относящиеся к «критическим» областям памяти (например, область ядра ОС), а в КэшеЗаписи для «обычных» областей памяти.



*****

© 2009-2017 Банк лекций siblec.ru
Лекции для преподавателей и студентов. Формальные, технические, естественные, общественные, гуманитарные, и другие науки.