В принципе каждый виртуальный адрес вызывает обращение к двум физическим адресам: одно для выборки соответствующей записи из таблицы страниц и еще одно — для обращения к адресуемым данным. Следовательно, простая схема виртуальной памяти, по сути, удваивает время обращения к памяти. Для преодоления этой проблемы большинство реально использующихся схем виртуальной памяти использует специальный высокоскоростной кэш для записейтаблицы страниц, который обычно называют буфером быстрого преобразования адреса, или простобуфером поиска трансляции (translation look aside buffer — TLB). Этот кэш функционирует так же, как и обычный кэш памяти (см. главу 1, "Обзор компьютерных систем") и содержит те записи таблицы страниц, которые использовались последними. Организация аппаратной поддержки использования TLB показана на рис. 8.7. Получив виртуальный адрес, процессор сперва просматривает TLB. Если требуемая запись найдена, процессор получает номер кадра и формирует реальный адрес. Если запись в TLB не найдена, то процессор использует номер страницы в качестве индекса для таблицы страниц процесса и просматривает соответствующую запись. Если бит присутствия в ней установлен, значит, искомая страница находится в основной памяти, и процессор просто получает номер кадра из записи таблицы страниц и формирует реальный адрес, одновременно внося использованную запись таблицы страниц в TLB. И, наконец, если бит присутствия не установлен, значит, искомой страницы в основной памяти нет, и процессор генерируетошибку обращения к странице. В этот момент подключается операционная система, которая загружает требуемую страницу в основную память и обновляет таблицу страниц.
На рис. 8.8 приведена диаграмма использования TLB. На ней показано, что если требующаяся страница отсутствует в основной памяти, то прерывание ошибки обращения к странице вызывает соответствующую программу обработки. Для упрощения диаграммы в ней не отражен тот факт, что в процессе выполнения операций ввода-вывода операционная система может параллельно с медленными операциями дискового ввода-вывода выполнять другой процесс.
Исходя из принципа локализации большинство обращений к виртуальной памяти, будут сосредоточены в недавно использованных страницах, и соответствующие записи будут находиться в кэше, так что с помощьюTLB повышается эффективность работы виртуальной памяти, что, например, показано при изучении VAX TLB [CLAR85, SATY81].
В организации TLB имеется ряд особенностей. Так, поскольку TLB содержит только некоторые из записей таблицы страниц, индексация записей в TLB на основе номера страницы не представляется возможной; вместо этого каждая запись TLB должна наряду с полной информацией из записи таблицы страниц включать также номер страницы. Процессор аппаратно способен одновременно опрашивать ряд записей TLB для определения того, какаяиз них соответствует заданному номеру страницы. Такая методика известна как ассоциативное отображение (associative mapping), в отличие от прямого отображения, или индексирования, применяемого для поиска в таблице страниц, как показано на рис. 8.9. Конструкция TLB должна также предусматривать способ организации записей в кэше и принятия решения о том, какая из старых записей должна быть удалена при внесении в кэш новой записи. Впрочем, этим вопросам следует уделять внимание при разработке любого аппаратного кэша. Однако они не входят в круг вопросов, рассматриваемых в нашей книге; заинтересованному читателю можно порекомендовать обратиться к специализированной литературе на эту тему (например, [STALOO]).
И, наконец, механизм виртуальной памяти должен взаимодействовать с кэшем (кэшем основной памяти, не TLB). Это взаимодействие продемонстрировано на рис. 8.10. Виртуальный адрес, вообще говоря, представляет собой пару "номер страницы — смещение". Сначала происходит обращение к TLB для выяснения, имеется ли в нем соответствующая запись таблицы страниц. При положительном результате путем объединения номера кадра и смещения генерируется реальный (физический) адрес (если требуемой записи в TLB нет, ее получаютиз таблицы страниц). После того как сгенерирован реальный адрес, представляющий собой дескриптор и остальную часть адреса, выполняетсяобращение к кэшу для выяснения,не содержится ли в нем блок с интересующим нас словом. Если ответ положительный, то требуемое значение передается процессору; в противном случае происходит выборка слова из основной памяти.
Читатель должен оценить сложность аппаратного обеспечения процессора, вовлеченного в единственное обращение к памяти, когда виртуальный адрес преобразуется в реальный. Это приводит к обращению к записи таблицы страниц, которая может оказаться в TLB, в основной памяти или на диске. Само слово, к которому осуществляется обращение, тоже может оказаться в разных местах — в кэше, в основной памяти или на диске. В последнем случае соответствующая страница должна быть загружена в основную память, а блок, содержащий слово, — в кэш. Кроме того, должна быть обновлена запись для данной страницы в таблице страниц.