В ранее опубликованной статье "SMM
и SMRAM или 128Кб потусторонней памяти. Исследовательская работа №5
и
6", был рассмотрен
режим System Management Mode (SMM) и оперативная память с особым статусом —
System Management RAM (SMRAM), используемая для поддержки данного режима. Был
приведен пример программы, сохраняющей образ Compatible SMRAM в двоичном файле
для последующего анализа и дизассемблирования.

Напомним, что первые реализации SMM, появившиеся еще в процессорах класса 486
использовали 128 Кб памяти SMRAM, которая располагалась в диапазоне адресов
A0000h-BFFFFh. В этом же диапазоне адресуется видео память, поэтому в обычном
режиме (не SMM) память SMRAM недоступна в адресном пространстве, что также
обеспечивает ее защищенность от несанкционированной модификации. При обработке
прерывания System Management Interrupt (SMI), процессор переходит в режим SMM и
на указанный диапазон включается SMRAM.

Главным потребителем SMRAM является BIOS. Так как функциональность и набор
обязанностей BIOS постоянно расширяются, 128 Кб SMRAM уже недостаточно для ряда
современных платформ. Двойное использование диапазона A0000h-BFFFFh для SMRAM и
видео памяти также доставляет ряд неудобств. Поэтому появились новые механизмы
адресации памяти SMRAM, обеспечивающие увеличение ее размера и дополнительную
гибкость при адресации. Рассмотрению этих механизмов посвящена данная статья.
Материал проиллюстрирован исходными текстами программы, сохраняющей образ
Extended SMRAM в двоичном файле.

Чтобы не повторяться, автор концентрирует внимание на новых типах памяти
SMRAM – регионах TSEG (Top Segment) и HSEG (High Segment). Читателю, не
знакомому с основными принципами организации SMM и SMRAM, рекомендуется сначала
обратиться к ранее опубликованной статье.

 

Регион TSEG или Extended SMRAM

Подобно региону Compatible SMRAM, рассмотренному в ранее опубликованной
статье, регион TSEG реализован как специальная область оперативной памяти,
возможность доступа к которой зависит от текущего режима работы процессора. В
обычном режиме (не SMM), доступ блокирован, по всем адресам региона считывается
FFh, запись игнорируется. В режиме SMM доступ осуществляется как к обычной
оперативной памяти. При установке специального состояния SMRAM Open, доступ к
этому региону открыт независимо от режима работы процессора. Это облегчает
задачу инициализации SMRAM для BIOS, а также используется в прилагаемой к статье
программе для чтения содержимого SMRAM.

В отличие от Compatible SMRAM, регион TSEG расположен в "верхней" памяти, его
базовый адрес и размер программируются и при доступе к нему разрешено
кэширование, что способствует повышению производительности при выполнении
процедур в режиме SMM.

 

Регион HSEG

Регион HSEG расположен выше верхней физической границы диапазона оперативной
памяти и используется как альтернативное окно для доступа к Compatible SMRAM.
Например, для большинства чипсетов Intel он находится по фиксированным адресам
FEDA0000h-FEDBFFFFh. При обращении процессора в данный диапазон, чипсет
преобразует адрес и на оперативную память подается адрес 000A0000h-000BFFFFh,
обеспечивающий доступ к Compatible SMRAM.

Преимущества по сравнению с обычным доступом к Compatible SMRAM – отсутствие
конфликта адресов с видео памятью и использование кэширования.

 

Архитектура доступа к SMRAM на примере чипсета Intel P965

Рассмотрим регистры, управляющие доступом к SMRAM, входящие в состав
"северного моста" чипсета Intel P965 (это микросхема Intel 82P965 Memory
Controller Hub). Детальное описание микросхем данного чипсета приведено в [1,2].
Механизм доступа в конфигурационное пространство описан в [13-15].

Регистр SMRAM Control Register имеет адрес в конфигурационном пространстве
Bus=0, Device=0, Function=0, Register=9Dh. Разрядность – 8 бит. Назначение битов
следующее:

Бит 7 (Reserved) зарезервирован, не используется.

Бит 6 (SMM Space Open) управляет доступом к памяти SMRAM в режиме не SMM. При
установке данного бита в "1", доступ к SMRAM открыт, независимо от режима работы
процессора. При установке в "0" обращение к SMRAM возможно только в режиме SMM.

Бит 5 (SMM Space Closed) управляет выполнением циклов чтения и записи данных
в режиме SMM. При установке "1" циклы чтения и записи данных направляются на
шину ввода-вывода, а циклы чтения команд – на шину памяти. Это позволяет
программе, выполняемой в режиме SMM из диапазона адресов A0000h-BFFFFh
обращаться к видео памяти несмотря на то, что Compatible SMRAM и видео память
используют один и тот же диапазон адресов. При установке "0" все виды обращений
к SMRAM направляются на оперативную память.

Бит 4 (SMM Space Locked) позволяет защитить регистры, управляющие доступом к
SMRAM от несанкционированной модификации. При установке "1" в этом бите,
указанные регистры становятся недоступными для записи, а бит SMM Space Open
принудительно обнуляется. В таком состоянии чипсет будет блокирован до
аппаратного сброса, так как программно обнулить бит SMM Space Locked невозможно.
Данный механизм обеспечивает достаточно эффективную защиту, но на большинстве
платформ, исследованных автором, BIOS его не использует.

Бит 3 (Global SMRAM Enable) управляет доступом ко всем видам памяти SMRAM (Compatible,
TSEG, HSEG). Установка "1" в этом бите разрешает использование SMRAM в режиме
SMM. При "0" доступ к SMRAM запрещен, независимо от режима работы процессора.

Биты 2-0 (Compatible SMM Base Segment) зарезервированы для управления
расположением памяти Compatible SMRAM. В рассматриваемом чипсете ее расположение
фиксировано – A0000h-BFFFFh, а данное битовое поле зафиксировано в состоянии
"010".

Регистр Extended SMRAM Control Register имеет адрес в конфигурационном
пространстве Bus=0, Device=0, Function=0, Register=9Eh. Разрядность – 8 бит.
Назначение битов следующее:

Бит 7 (Enable High SMRAM) разрешает альтернативный метод доступа к Compatible
SMRAM с использованием региона HSEG. При установке "1" , обращения к диапазону
адресов FEDA0000h-FEDBFFFFh перенаправляются на адреса 000A0000h-000BFFFFh. При
установке "0" регион HSEG не используется.

Бит 6 (Invalid SMRAM Access) статусный бит, который аппаратно устанавливается
в "1" если имели место "незаконные" обращения процессора к регионам TSEG и HSEG,
то есть не в режиме SMM и не в состоянии SMM Space Open. Для обнуления этого
бита, программа должна записать "1" в него.

Бит 5 (SMRAM Cacheable) разрешение кэширования диапазонов HSEG и TSEG. Бит
зафиксирован в "1" , кэширование разрешено и его запрет средствами чипсета не
поддерживается.

Бит 4 (SMRAM L1-Cacheable) разрешение кэширования диапазонов HSEG и TSEG в
кэш-памяти 1 уровня. Бит зафиксирован в "1" , кэширование разрешено и его запрет
средствами чипсета не поддерживается.

Бит 3 (SMRAM L2-Cacheable) разрешение кэширования диапазонов HSEG и TSEG в
кэш-памяти 2 уровня. Бит зафиксирован в "1" , кэширование разрешено и его запрет
средствами чипсета не поддерживается.

Биты 2-1 (TSEG Size) управляет размером диапазона TSEG, биты интерпретируются
следующим образом: 00 = 1 Мб, 01 = 2 Мб, 10 = 8 Мб, 11 = не используется.

Бит 0 (TSEG Enable) управляет доступом к памяти Extended SMRAM (TSEG).
Установка "1" в этом бите разрешает использование Extended SMRAM в режиме SMM.
При "0" доступ к Extended SMRAM запрещен, независимо от режима работы
процессора. Для использования Extended SMRAM, бит Global SMRAM Enable в регистре
SMRAM Control Register также должен быть установлен в "1".

Регистр TSEG Memory Base имеет адрес в конфигурационном пространстве Bus=0,
Device=0, Function=0, Register=ACh. Разрядность – 32 бита. Содержимое этого
регистра определяет базовый адрес региона TSEG. Биты 31-20 доступны для
перезаписи, биты 19-0 зафиксированы в "0", поэтому адрес всегда кратен 1 MB. Для
рассматриваемого чипсета регион TSEG всегда должен располагаться в последнем
блоке оперативной памяти, примыкающем к ее верхней физической границе, которая
задается с помощью регистра TOLUD.

Регистр TOLUD (Top of Low Usable DRAM) имеет адрес в конфигурационном
пространстве Bus=0, Device=0, Function=0, Register=B0h. Разрядность – 16 бит.
Содержимое этого регистра определяет верхнюю физическую границу оперативной
памяти. Биты 15-4 доступны для перезаписи и соответствуют битам адреса 31-20.
Биты 3-0 зафиксированы в "0".

 

Примечание

Под верхней физической границей оперативной памяти здесь понимается граница,
расположенная в пределах нижних 4 Гб между регионом доступа к оперативной памяти
и регионом Memory-mapped I/O, также расположенным в пределах нижних 4 Гб. В
рассматриваемом чипсете все виды памяти SMRAM находятся в пределах нижних 4 Гб.
Оперативная память, расположенная выше 4 Гб, и регистры, управляющие ее
расположением и размером, не затрагиваются в наших рассуждениях.

 

Регион TSEG и проблема когерентности кэш-памяти

Напомним, что регион TSEG, используемый для доступа к Extended SMRAM,
кэшируется как обычная оперативная память с целью повышения производительности.
Это означает, что когда процессор читает информацию из этого региона, копия
прочитанной информации может оставаться в кэш-памяти и при последующих
обращениях по тем же адресам, вместо чтения оперативной памяти процессор
прочитает информацию из своей кэш-памяти, которая работает значительно быстрее.

Напомним также, что в зависимости от состояния бита SMM Space Open в (бит 6
регистра SMRAM Control Register) чипсет по-разному обрабатывает обращение к
региону TSEG. При SMM Space Open=0 доступ закрыт и по всем адресам считывается
значение FFh. При SMM Space Open=1 доступ открыт, чтение и запись оперативной
памяти выполняется обычным образом.

Теперь представим себе, что за время рабочего сеанса, программа обращалась к
региону TSEG при SMM Space Open=0 и в кэш-памяти осталась копия содержимого
этого региона, затем программа открывает SMRAM, устанавливая бит SMM Space Open=1,
и читает из региона TSEG, рассчитывая получить информацию из оперативной памяти
Extended SMRAM. Чтобы "увидеть" изменившееся после открытия SMRAM содержимое
региона TSEG, процессор должен обратиться к памяти, выполнив соответствующие
транзакции на системной шине. Но если копия информации, которую необходимо
прочитать, имеется в кэш-памяти, то вместо транзакций на системной шине чтение
будет выполнено из кэш-памяти внутри процессора. В результате будет прочитана
"устаревшая" копия региона TSEG. Для программы это будет выглядеть так, как
будто бы открытия SMRAM не произошло.

Одно из решений этой проблемы – очистить кэш-память между операциями открытия
SMRAM и чтения региона TSEG, применив инструкцию WBINVD (Write Back and
Invalidate Cache). Такое решение используется в программе, прилагаемой к статье.

Здесь внимательный читатель может сказать, что рассматриваемая ситуация не
является уникальной. Изменение содержимого оперативной памяти без участия
процессора также происходит, при работе Bus Master устройств, взаимодействующих
с оперативной памятью "в обход" процессора, например контроллеров жесткого диска
или USB. Еще один пример — манипуляции с запретом и разрешением адресной линии
A20, при которых изменяется соответствие между адресом, формируемым программой и
адресом, подаваемым на оперативную память. Тем не менее, в указанных случаях
программисту не нужно заботиться об очистке кэш-памяти. В чем же уникальность
ситуации с TSEG?

При работе Bus Master устройств аппаратно выполняется операция Cache
Invalidation, суть которой в том, что адреса ячеек памяти, в которые
осуществляется запись, передаются в процессор и анализируются контроллером
кэш-памяти. При этом ячейки кэш-памяти, хранящие копии ячеек оперативной памяти,
перезаписанных Bus Master устройством, автоматически объявляются недостоверными.

При запрете и разрешении адресной линии A20 проблем с кэш-памятью не
возникает потому что операция маскирования A20 выполняется внутри процессора и
адрес, получаемый контроллером кэш-памяти, уже откорректирован в соответствии со
статусом линии A20. Сигнал маскирования Gate A20 передается от внешних схем
управления на процессор в явном виде, например, на Socket 775 (Intel) это
контакт с координатами K3, подробности в [3]. Либо для управления маскированием
используются специальные сообщения, передаваемые от чипсета к процессору по
системной шине, такой принцип используется в процессорах классов Socket 1366 (Intel),
Socket 754/939/940/AM2/AM3 (AMD), подробности в [4-5], [6-11].

В отличие от двух выше описанных ситуаций, аппаратных средств, гарантирующих
достоверность информации в кэш-памяти при работе с регионом TSEG, не
предусмотрено. Именно поэтому, кэш-память нужно очищать программно.

 

Источники информации

Электронные документы, доступные на сайте
developer.intel.com.

1) Intel P965 Express Chipset Family Datasheet – For the Intel 82P965 Memory
Controller Hub (MCH). Document Number: 313053-001.
2) Intel I/O Controller Hub 8 (ICH8) Family Datasheet – For the Intel 82801HB
ICH8 and 82801HR ICH8R I/O Controller Hubs. Document Number: 313056-001.
3) Intel Core 2 Extreme Processor X6800 and Intel Core2 Duo Desktop Processor
E6000 and E4000 Sequences Datasheet. Document Number: 313278-004.
4) Intel Core i7 Processor Extreme Edition and Intel Core i7 Processor Datasheet,
Volume 1. Document Number: 320834-001.
5) Intel Core i7 Processor Extreme Edition and Intel Core i7 Processor Datasheet,
Volume 2. Document Number: 320835-002.

Электронные документы, доступные на сайте
developer.amd.com.

6) BIOS and Kernel Developer’s Guide for AMD NPT Family 0Fh Processors.
Publication No. 32559.
7) BIOS and Kernel Developer’s Guide (BKDG) for AMD Family 10h Processors.
Publication No. 31116.
8) AMD Functional Data Sheet, 754 Pin Package. Publication # 31410.
9) AMD Functional Data Sheet, 939 Pin Package. Publication # 31411.
10) AMD Functional Data Sheet, 940 Pin Package. Publication # 31412.

Электронные документы, доступные на сайте
www.hypertransport.org.

11) HyperTransport I/O Link Specification. Revision 3.00. Document #
HTC20051222-0046-0008.

Электронные документы, доступные на сайте
datasheetarchive.com.

(Информация на данном сайте более полная, чем на "родных" сайтах
производителей указанных микросхем.)
12) VIA P4X400 Chipset. VT8754 Single-Chip North Bridge. Для поиска документа
набирать строку "P4X400", "P4X533" или "VT8754".

Электронные документы, доступные на сайте
pcisig.com.

Документы [14], [15] на сайте pcisig.com доступны только для членов PCI
Special Interest Group. Воспользовавшись поисковыми системами, можно найти
данные документы для свободной загрузки.
13) PCI BIOS Specification. Revision 2.1.
14) PCI Local Bus Specification. Revision 3.0.
15) PCI-to-PCI Bridge Architecture Specification. Revision 1.1.

 

Книги

16) В.Л. Григорьев. Микропроцессор i486. Архитектура и программирование.
Москва ТОО "ГРАНАЛ" 1993.
17) М. Гук. Аппаратные средства IBM PC. Энциклопедия. Санкт-Петербург,
издательство "Питер" 2006.

Оставить мнение

Check Also

Используй, свободно! Как работает уязвимость use-after-free в почтовике Exim

В самом популярном на сегодняшний день почтовом сервере Exim был обнаружен опасный баг: ес…