Nano Hash - криптовалюты, майнинг, программирование

Различия между различными прерываниями: SCI, SMI, NMI и обычное прерывание

Я изучаю архитектуру Intel. До сих пор я встречал несколько типов прерываний:

  • SCI: System Control Interrupt, системное прерывание, используемое оборудованием для уведомления ОС о событиях ACPI. SCI - это прерывание активного низкого уровня с общим доступом.
  • SMI: прерывание управления системой, прерывание, прозрачное для ОС, генерируемое событиями прерывания в устаревших системах.
  • NMI: немаскируемое прерывание
  • Нормальное прерывание: обрабатывается IDT с вектором 0 ~ 255.

Кто-нибудь может помочь простыми словами сравнить их существенное различие с нижеследующими аспектами?

  • Как они предназначены для использования?
  • Как они создаются?
  • Можем ли мы создать их с помощью программного обеспечения?
  • Как они обрабатываются?

ДОБАВИТЬ 1

  • Каков приоритет между всеми этими типами прерываний?

ДОБАВИТЬ 2

Некоторые связанные темы:

Как определяется вектор прерывания SCI - System Cotnrol?

Различные способы запуска SMI для процессора


Ответы:


1

Вначале процессор x86 имел два контакта, которые могли быть используется для уведомления о входящем прерывании: INTR (запрос прерывания) и NMI (немаскируемое прерывание)

«Контакты

Хотя на рисунке изображен чип 8086, эти контакты оставались неизменными до появления так называемого LAPIC (подробнее об этом ниже) в эпоху Pentium.

INTR при утверждении заставлял ЦП считывать вектор прерывания (или номер прерывания) с шины, прерывать текущую программу и запускать обработчик прерывания, связанный с только что прочитанным вектором прерывания.
Очистка IF (Флаг прерывания) в (E)FLAGS маскирует прерывания, не позволяя ЦП прерывать текущую программу.

В качестве информативного примечания, между INTR и устройством обычно находился чип под названием 8259A, также известный как PIC (программируемый контроллер прерываний).

При утверждении NMI ЦП прерывал текущую программу и запускал обработчик прерывания для вектора прерывания 2. Проще говоря, утверждение NMI генерирует прерывание 2.
Очистка IF не маскирует NMI, однако можно было замаскировать любой сигнал, идущий на вывод NMI на оборудовании: установка MSb порта 70h поможет.

Идея, лежащая в основе NMI, состоит в том, чтобы разделить прерывания на две категории: одна состоит из общих прерываний, прерывания, которые используются устройством при нормальном функционировании системы и которые ОС может захотеть замаскировать; другая категория, сделанная прерываниями, намного более серьезна, что ОС не хотела бы маскировать (за исключением переходных состояний).

NMI генерирует прерывание 2, поэтому NMI использует IVT (таблица векторов прерываний, используемая в реальном режиме) или IDT < / em> (таблица дескрипторов прерываний, используемая в защищенном режиме и т.п.).


Во времена DOS обработчик прерывания 2 устанавливался BIOS, этот обработчик, зависящий от поставщика, считывал проприетарный набор аппаратных регистров, обнаруживал ошибку (например, ошибку ECC памяти, ошибку шины из-за внезапного отключения) и пытался восстановить (например, сброс или очистка памяти).

В то время этот механизм имел смысл, потому что ОС работала вместе с BIOS, и возможность выполнять cli, не влияя на NMI, было большим упрощением.

С появлением защищенного режима обработчик прерывания BIOS 2, созданный для реального режима, стал бесполезным.
Некоторые ядра использовали NMI для реализации сторожевого таймера ядра, поскольку NMI прерывания будут генерироваться даже после cli.


Intel осознала, что использование прерываний для передачи управления микропрограммному обеспечению больше не является решением, поскольку в ЦП можно было добавлять новые режимы выполнения, поэтому требовалось более прозрачное решение.
Поэтому они создали SMM (режим управления системой).

В отличие от обычного прерывания, SMM - это специальный режим ЦП, цитируя главу 34 руководства 2 от Intel:

Когда SMM вызывается через прерывание управления системой (SMI), процессор сохраняет текущее состояние процессора (контекст процессора), а затем переключается на отдельную операционную среду, определяемую новым адресным пространством. Исполнительный орган программного обеспечения управления системой (обработчик SMI) начинает выполнение в этой среде, а критический код и данные обработчика SMI находятся в области физической памяти (SMRAM) в этом адресном пространстве. Находясь в SMM, процессор выполняет код обработчика SMI для выполнения таких операций, как отключение неиспользуемых дисковых накопителей или мониторов, выполнение частного кода или перевод всей системы в приостановленное состояние. Когда обработчик SMI завершил свои операции, он выполняет инструкцию возобновления (RSM).

Для входа в SMM необходимо сгенерировать SMI (прерывание управления системой).

Единственный способ войти в SMM - это послать сигнал SMI через вывод SMI # на процессоре или через сообщение SMI, полученное через шину APIC.

В то время как I в SMI означает Interrupt, утверждение SMI # не будет генерировать прерывание в показанном смысле выше.

SMI был представлен в более поздней версии 386, как раз тогда, когда защищенный режим становился популярным.
Он использовался для прозрачного преобразования аппаратного интерфейса, например, наборы микросхем Intel можно запрограммировать для генерации SMI при доступе к портам 60h-64h для обеспечения поддержки устаревших устройств USB.
Это стандартные порты PS2 для работы с мышью и клавиатурой; код SMM прозрачно считывает значение портов 60h-64h и соответствующим образом преобразует эти обращения в USB-обращения.


С появлением Pentium компания Intel представила LAPIC (расширенный локальный программируемый контроллер прерываний), INTR и NMI исчезли, и их заменил LINT0 и LINT1 (локальное прерывание).
LINT0 и LINT1 - это программируемые выводы из главы 10 руководства. 2 от Intel:

«Настраиваемые

При сбросе LINT0 настраивается как INTR, а LINT1 как NMI для обратной совместимости.

Сложность маршрутизации прерываний и присвоения им приоритета была перенесена на аппаратное обеспечение, внешнее по отношению к ЦП.
Каждое устройство или платформа использовали настраиваемую схему подключения, например, PCI-устройства перекрещивают контакты для прерываний, чтобы минимизировать загрязнение. Появление IOAPIC с его иерархической структурой и [MSI] (https://en.wikipedia.org/wiki/Message_Signaled_Interrupts) добавил больше функциональных уровней в обработку прерываний.


Между тем, было признано, что исключение ОС из-под контроля управления с помощью SMI было не очень хорошей идеей:
ОС может отключать или задросселировать процессор или устройство, может сообщать, регистрировать и т. Д. неисправность.

Сложность работы с оборудованием без стандартизированной информационной поддержки со стороны прошивки и необходимость сделать ОС частью процедур управления достигли высшей точки в спецификациях ACPI.

Вместо того, чтобы полагаться на невидимые режимы ОС, такие как SMM, ACPI определяет интерпретируемый байт-код (AML).
ОС отвечает за выполнение, разработчики прошивки несут ответственность для написания.

Разработчики ACPI решили использовать обычное прерывание, SCI (прерывание системного управления), чтобы привлечь внимание ОС, это прерывание может сигнализироваться любым способом, но оно должно обрабатываться ОС, а не прошивкой.

Цитата из спецификаций ACPI:

Устройство может сигнализировать SCI, чтобы информировать ОС об изменениях в состоянии питания. Например, устройство может инициировать прерывание, чтобы сообщить ОС, что батарея достигла низкого уровня заряда.

SCI - это нормальное прерывание, его вектор (чтение: номер) сообщается в одной из таблиц / структур ACPI.
Вектор SCI можно настроить, запрограммировав набор микросхем, общее значение, используемое в последний раз, когда я читал некоторую таблицу / table было 9.

После SCI ОС обычно определяет источник такого прерывания и выполняет соответствующее действие, обычно это включает выполнение некоторого кода AML в процессе.


Аппаратное прерывание может быть «сгенерировано» программным обеспечением двумя способами, в зависимости от значения слова «сгенерировано»:

  • Программное обеспечение может "стимулировать" работу оборудования.
    Например, таймер можно запрограммировать на немедленное истечение срока действия, чтобы вызвать его прерывание.
    Это можно использовать с любым из источников прерывания, упомянутых выше, NMI / SMI являются немного сложно: LINT0 нужно правильно запрограммировать.

  • Программа может выполнять обработчик прерывания. Это можно сделать со всеми источниками прерывания, но SMI, SMI можно ввести только при аппаратном событии в качестве памяти, в которой находится код SMM. не отображается, если не в SMM.

Обратите внимание, что ОС обычно ожидает, что аппаратное прерывание будет сгенерировано при определенном состоянии оборудования, если не удается найти причину, прерывание обычно классифицируется как ложное, не все ОС / обработчики хорошо справляются с ложными прерываниями.

Приоритеты

В главе 6.9 3-го руководства Intel сообщается о приоритетах прерываний.

1 (Highest) Hardware Reset and Machine Checks
            - RESET
            - Machine Check
2 Trap on Task Switch
            - T flag in TSS is set
3 External Hardware Interventions
            - FLUSH
            - STOPCLK
            - SMI
            - INIT
4 Traps on the Previous Instruction
            - Breakpoints
            - Debug Trap Exceptions (TF flag set or data/I-O breakpoint)
5 Nonmaskable Interrupts (NMI)
6 Maskable Hardware Interrupts
7 Code Breakpoint Fault
8 Faults from Fetching Next Instruction
            - Code-Segment Limit Violation
            - Code Page Fault
9 Faults from Decoding the Next Instruction
            - Instruction length > 15 bytes
            - Invalid Opcode
            - Coprocessor Not Available
10 (Lowest) Faults on Executing an Instruction
            - Overflow
            - Bound error
            - Invalid TSS
            - Segment Not Present
            - Stack fault
            - General Protection
            - Data Page Fault
            - Alignment Check
            - x87 FPU Floating-point exception
            - SIMD floating-point exception
            - Virtualization exception

Таким образом, учитывая, что SCI - просто нормальное прерывание, порядок

Нормальное прерывание / SCI ‹NMI‹ SMI

Обратите внимание, что этот порядок используется, когда несколько прерываний происходят в «одно и то же время».
При обслуживании NMI или в режиме SMI можно разрешить и обработать обычные прерывания / прерывания SCI.

14.11.2016
  • Спасибо за подробный ответ. Я внимательно его прочту, а затем решу, что дальше. 16.11.2016
  • Как вы сказали, SCI - это нормальное прерывание. И его вектор указывается в одной из таблиц ACPI. Итак, как только я узнаю вектор SCI, куда мне его поместить? В IDT? Кто ставил в IDT, прошивку или ОС? Даже после того, как вектор SCI находится в IDT, IDT представляет собой просто карту между вектором прерывания и местоположением кода обработчика прерывания. Как я могу вообще связать аппаратное событие с вектором SCI? 27.03.2017
  • @smwikipedia Извините за поздний ответ. IDT отображает номера прерываний на обработчики, а SCI используется для индексации IDT. Обычно это делает ОС с поддержкой ACPI. Что касается последнего вопроса, это зависит от устройства. Каждое устройство имеет настраиваемые регистры, позволяющие отключить генерацию SCI при определенных событиях. Эта конфигурация иногда выполняется через ACPI AML или напрямую с помощью ввода-вывода. Чтобы быть более конкретным, мне пришлось бы освежить некоторые данные / спецификации, но вы можете ознакомиться с таблицей данных Intel для набора микросхем серии 200, чтобы получить представление 02.04.2017
  • Спасибо за Ваш ответ. Действительно ценю это. Это мне очень помогает. 02.04.2017
  • @smwikipedia Добавил некоторую информацию от Intel 15.05.2017
  • Не могли бы вы мне помочь с этой веткой? stackoverflow.com/questions/44511643/ 13.06.2017
  • Не могли бы вы мне помочь с этой веткой SCI? Спасибо. stackoverflow.com/ questions / 45206171 / 20.07.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..


    © 2024 nano-hash.ru, Nano Hash - криптовалюты, майнинг, программирование