2013-04-29 1 views
0

§5.1.2.3.5Как нарушаются прерывания контекста? Как его восстановить?

5 Когда обработка абстрактной машины прерывается получением сигнала, значение объектов, которые не являются ни безблокировочного атомных объектов, ни типа летучие sig_atomic_t не указаны, , как является состоянием среды с плавающей точкой. Значение любого объекта изменен обработчиком, который не является ни блокировки свободной от атомного объекта, ни типа энергозависимой sig_atomic_t становится неопределенной, когда выходы обработчика, как это делает состояние с плавающей точкой среды , если она изменяется обработчик и не восстанавливается до своего исходного состояния .

(курсив мой)

Я принимаю это означает, что в случае прерывания аппаратного/программного обеспечения, если обработчик прерываний выполняет любые вычисления с плавающей запятой (например, на это локальная переменная стека), то прерванный процесс остается в несогласованном состоянии и должен перезапускать все вычисления с плавающей точкой, которые выполнялись. Это что и какие последствия? Как «восстановить контекст»?

+0

будет уши ур вопрос больше !!! – akp

ответ

1

«Стойка с плавающей точкой» относится к настройке исключений с плавающей запятой и режимов округления, измененных такими функциями, как fesetround().

Вы можете сохранить текущую среду с плавающей запятой с помощью fegetenv() и восстановить ее с помощью fesetenv(). Если вы устанавливаете обработчик сигналов, который выполняет операции с плавающей запятой, то он должен это сделать (это гарантирует, что он, например, не изменяет набор в настоящее время поднятых исключений с плавающей запятой для прерванного им кода).

0

Я думаю, что мы можем выполнять операции с плавающей запятой в боковом ядре. но ядро ​​поддерживает его посредством вызова определенных функций, если этот (ваш код) окружен kernel_fpu_begin()/kernel_fpu_end(). Эти функции обрабатывают сохранение и восстановление контекста fpu. Кроме того, они называют preempt_disable()/preempt_enable(), что означает отсутствие спать, ошибки страниц и т.д.

когда-либо происходит любое прерывание, то управляющие регистры текущего запущенного процесса в & другая информация сохраняется. & Работа с прерываниями ядра не имеет значения, в каком состоянии текущий текущий процесс был вызван тем, что процесс будет прерван только после завершения текущего цикла команд. затем сохранить всю информацию & происходит переключение контекста.

Во время восстановления контекста сохраненная информация управления прерванного процесса восстанавливается в стеке &, следующие инструкции выполняются !!!