System Management Mode
Режим системного керування (англ. System Management Mode, SMM) — режим виконання на процесорах x86/x86-64, при якому припиняється виконання іншого коду (включаючи операційні системи і гіпервізор), і запускається спеціальна програма, що зберігається в SMRAM в найбільш привілейованому режимі.
Технологія SMM була вперше реалізована в мікропроцесорі Intel 386SL. Спочатку SMM працював тільки на спеціальних процесорах (SL), але в 1992 році була впроваджена в 80486 і Intel Pentium. AMD реалізувала технологію в Enhanced Am486 (1994). Усі більш сучасні x86/x86-64 процесори підтримують її.
Серед можливих застосувань SMM:
- Обробка системних помилок, таких як помилки пам'яті і чипсета;
- Функції захисту, наприклад вимкнення процесорів при сильному перегріві;
- Глибокі рівні енергозбереження;
- Керування живленням, наприклад, схемами зміни напруги (VRM);
- Емуляція периферії, яка була не реалізована на материнській платі або реалізація якої містить помилки;
- Емуляція миші та клавіатури PS/2, при використанні USB-версій пристроїв;
- Централізована конфігурація системи, наприклад на ноутбуках Toshiba і IBM;
- Обхід систем захисту, вбудованих в ОС;
- Емуляція або передача викликів на модуль Trusted Platform Module (TPM)
Також SMM є ідеальним режимом роботи для шкідливих програм (наприклад, руткітів), оскільки виявити їх присутність у такому випадку надзвичайно важко.
Активація SMM
SMM активується за допомогою переривань SMI (system management interrupt — переривання системного керування), яке виникає:
- За сигналом від чипсета або периферії на материнській платі. Використовується виділений контакт процесора SMI # .
- Програмний SMI, посланий системним ПЗ через порт введення / виводу (часто використовується порт номер 0B2h).
- Запис за адресою введення / виведення, для якого мікропрограмно встановлено необхідність активації SMM.
На найближчому кордоні інструкцій після отримання сигналу SMI #, процесор зберігає свій стан в пам'яті і переходить в SMM. Для виходу з SMM і відновлення стану процесора використовується інструкція RSM
(0x0F 0xAA).
Проблеми
- Згідно з архітектурою SMM, переривання SMI не можуть бути заблоковані операційною системою
- На старих чипсетах (до 2006 року) не виставлявся біт D_LOCK для захисту пам'яті SMM (що дозволяло створювати SMM-уразливості)
- Через те, що програми обробки SMM (SMI handler) встановлюються з базової мікропрограми BIOS, передбачувані налаштування важливої периферії (наприклад, APIC) в ОС і програмах SMM можуть не збігатися
- Робота в режимі SMM призупиняє роботу ОС. Стан процесора зберігається в SMRAM, а кеші write-back повинні бути скинуті. Через це можуть порушитися вимоги жорсткого реального часу. ОС Windows і ядро Linux встановлюють «SMI Timeout» — період часу, в який будь-яка програма SMM повинна повернути керування операційній системі.
- Для визначення входу процесора в SMM може знадобитися цифровий логічний аналізатор (додаткове обладнання). При роботі в SMM виставляється сигнал процесора SMIACT # .
- Отримання кодів програм SMM для їх аналізу та налагодження також вимагає логічного аналізатора або зворотної розробки мікропрограм BIOS, через те, що під час виконання пам'ять TSEG, що зберігає програми SMM, недоступна ОС.
Див. також
- Процесор MediaGX, що використовує SMM для емуляції апаратних функцій
- Extensible Firmware Interface (EFI)
- Coreboot, який реалізує SMM/SMI обробники для деяких чипсетів