System Management Mode

Матеріал з Вікіпедії — вільної енциклопедії.
Jump to navigation Jump to search

Режим системного управління (англ. 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 обробники для деяких чипсетів