ФЭНДОМ


В целях энергосбережения процессор может останавливаться, когда для него нет полезной работы. С этой целью архитектура предусматривает описываемые далее возможности.

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

Ожидание событий

Выполнение команды WFE вызывает следующие действия:

  • если в данный момент в процессоре установлен регистр событий (event register), этот регистр сбрасывается и процессор продолжает обычную работу (выполняется команда, следующая за WFE);
  • если же регистр событий уже сброшен, процессор может приостановить свою работу до тех пор, пока он не будет извещён о возникновении любого пробуждающего события (WFE wakeup event). Такие события возникают в следующих случаях:
  • при выполнении команды SEV любым процессором многопроцессорной системы;
  • при переходе любого запроса прерывания для данного процессора в состояние ожидания обработки, если в регистре SCR установлен бит SEVONPEND;
  • при поступлении данному процессору любого запроса прерывания, чей приоритет достаточен для вытеснения текущего выполняемого кода (с учётом возможного изменения текущего приоритета с помощью бита PRIS регистра AIRCR и регистров масок);
  • при наступлении любого отладочного события, если отладка разрешена;
  • при наступлении любого другого события, специфического для конкретной реализации.

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

Сброс регистра событий выполняется командой WFE и сбросом процессора.

Ожидание прерываний

Выполнение команды WFI может привести к останову процессора до появления пробуждающего события. К ним относятся:

  • сброс;
  • появление любого запроса асинхронного прерывания, чей приоритет достаточен для вытеснения текущего выполняемого кода (причём при определении достаточности приоритета игнорируется состояние регистра PRIMASK);
  • наступление отладочного события, если отладка разрешена;
  • любые события, специфичные для конкретной реализации.

Сон при выходе из обработчиков прерываний

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

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

Материалы сообщества доступны в соответствии с условиями лицензии CC-BY-SA , если не указано иное.