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

Виртуальная память UltraSparc III

UltraSPARC III — это 64-разрядная машина, которая поддерживает виртуальную память со страничной организацией и с 64-разрядными виртуальными адресами. Тем не менее по разным причинам программы не могут использовать 64-разряд- ное виртуальное адресное пространство целиком. Поддерживается только 44 би­та, поэтому программы не могут превышать 1,8 х 1013 байт. Доступная виртуаль­ная память делится на 2 зоны по 243 байт каждая, одна из которых находится в верхней части виртуального адресного пространства, другая — в нижней. Между ними находится свободная область, адреса которой не используются. Попытка об­ратиться к ним вызовет ошибку отсутствия страницы.

Максимальная физическая память компьютера UltraSPARC III составляет 241 байт (2200 Гбайт). Поддерживается 4 размера страниц: 8, 64 и 512 Кбайт, а также 4 Мбайт. Механизм отображения этих страниц показан на рис. 6.15.


Из-за огромного виртуального адресного пространства обычная таблица страниц (как в Pentium 4) будет непрактичной. В UltraSPARC III применяется совершенно другой подход. Диспетчер памяти поддерживает так называемый буфер быстрого преобразования (Translation Lookaside Buffer, TLB). Этот буфер отображает номера виртуальных страниц на номера физических страничных кадров. Для страниц размером в 8 Кбайт существуют 231 номеров виртуальных страниц, то есть более двух миллиардов. Естественно, не все они могут быть ото­бражены.

Поэтому TLB содержит только номера тех виртуальных страниц, которые ис­пользовались последними. Страницы команд и данных рассматриваются отдельно. Для каждой из этих категорий в TLB включены номера 64-х последних вир­туальных страниц. Каждый элемент этого буфера включает номер виртуальной страницы и соответствующий ему номер физического страничного кадра. Когда номер процесса, называемый контекстом, и виртуальный адрес передаются диспетчеру памяти, диспетчер с помощью специальной схемы одновременно срав­нивает номер виртуальной страницы со всеми элементами буфера TLB для данного контекста. Если обнаруживается совпадение, номер страничного кадра в этом элементе буфера соединяется со смещением, взятым из виртуального адреса, чтобы получить 41-разрядный физический адрес и обработать некоторые флаги (например, биты защиты). Буфер быстрого преобразования адреса изо­бражен на рис. 6.16, а.

Если совпадение не обнаруживается, то есть имеет место TLB-промах (по аналогии с кэш-промахом), вызывается исключение, которое перехватываетсяи обрабатывается операционной системой. Отметим, что TLB-промах отлича­ется от ошибки отсутствия страницы. TLB-промах может произойти, даже если нужная страница присутствует в памяти. Теоретически операционная система может сама загрузить новый элемент этого буфера для нужной виртуальной страницы. Однако для ускорения данной операции к работе подключается аппаратное обеспечение.


Операционная система сохраняет наиболее часто используемые элементы бу­фера TLB в так называемом буфере хранения преобразований (Translation Storage Buffer, TSB). Этот буфер построен как кэш-память прямого отображения виртуальных страниц. Каждый 16-байтный элемент буфера TSB указывает на одну виртуальную страницу pi содержит бит достоверности, номер контекста, тег виртуального адреса, номер физической страницы и несколько флаговых битов. Если размер кэш-памяти составляет, скажем, 8192 элемента, тогда все виртуаль­ные страницы, у которых младшие 13 бит отображаются на 0000000000000, мо­гут претендовать на элемент 0 в данной таблице. Точно так же все виртуальные страницы, у которых младшие биты отображаются на 0000000000001, претенду­ют на элемент 1 в этой таблице, как показано на рис. 6.16, б. Размер таблицы оп­ределяется программно и передается диспетчеру памяти через специальные ре­гистры, доступные только для операционной системы. При TLB-промахе операционная система проверяет, нет ли нужной вирту­альной страницы в соответствующем элементе буфера TSB. Диспетчер памяти вычисляет адрес этого элемента и помещает его в свой внутренний регистр, дос­тупный для операционной системы. Если нужный элемент в буфере TSB есть, то один из элементов удаляется из буфера TLB и на его место копируется элемент из буфера буфере TSB. То, какой элемент нужно выкинуть, определяется аппа­ратно с помощью алгоритма LRU.

Если нужной виртуальной страницы не обнаруживается, операционная сис­тема ищет информацию о странице в таблице трансляции. Поскольку здесь ап­паратное обеспечение в поиске элементов не участвует, операционная система может использовать любой формат. Например, она может хэшировать номер виртуальной страницы, разделив его на какое-либо число р, и использовать оста­ток для индексирования таблицы указателей, каждый из которых указывает на связанный список виртуальных страниц, разделенных на р. Отметим, что эти элементы — не собственно страницы, а элементы буфера TSB. Если поиск стра­ницы в таблице трансляции привел к нахождению нужной страницы в памяти, то элемент TSB в кэш-памяти обновляется. Если в результате поиска обнаружи­лось, что нужной страницы нет в памяти, происходит стандартная ошибка отсут­ствия страницы.

Сравним схемы разбиения на страницы Pentium 4 и UltraSPARC III. Pen­tium 4 поддерживает «чистую» сегментацию, «чистое» разбиение на страницы и сегментацию в сочетании с разбиением на страницы. UltraSPARC II поддержи­вает только разбиение на страницы. Pentium 4 в случае TLB-промаха перезагружает элемент буфера TLB аппаратно. UltraSPARC III в случае TLB-промаха просто передает управление операционной системе.

Причина этого отличия состоит в том, что в Pentium 4 32-разрядные сегмен­ты, а такие маленькие сегменты (только 1 млн страниц) могут обрабатываться лишь с помощью таблиц страниц. Теоретически у Pentium 4 могли бы возник­нуть проблемы, если бы программа использовала тысячи сегментов, но так как ни одна из версий Windows или UNIX не поддерживает более одного сегмента на процесс, никаких проблем не возникает. UltraSPARC III — 64-разрядная ма­шина. Она может содержать до 2 млрд страниц, поэтому механизм таблиц стра­ниц не работает. В будущем все машины будут иметь 64-разрядные виртуальные адресные пространства, и схема UltraSPARC III станет нормой.