2016-06-28 13 views
0

Как мы знаем, ARM имеет некоторые накренился регистры, такие как SP и Л.Р.. Другими словами, в то время как в IRQ режиме, sp_usrlr_usr) невидима, то есть, затененное sp_irq. Итак, мой вопрос заключается в том, как обработчик прерываний сохраняет sp_usr. Некоторые люди могут подумать, что это не нужно, потому что sp_usr автоматически останется неизменным во время обработки прерывания, так как он невидим и недоступен в irq. Тем не менее, это не всегда так. Рассмотрим следующий сценарий:На ARM, как сохранить sp_usr регистр, если поток работает в пользовательском режиме прерывается

a) Thread A работает в пространстве пользователя.

b) Возникает внешнее прерывание.

c) Обработчик работает и обнаруживает, что Thread B с более высоким приоритетом получил ресурс, который он ожидал, поэтому решает перепланировать.

d) Сохраняет контекст резьбы A. Теперь Thread B работает, первым в режиме SVC, а затем обратно в пользователе режима. Это как раз в тот момент, когда значение sp_usr переопределяется нити В.

е) Thread B вызывает что-то вроде сна. Thread A возобновит работу с того места, где оно было прервано.

Итак, если sp_usr не был сохранен, когда поток A был прерван, как бы поток A восстановил его контекст?

+0

Очевидно, что SP & LR необходимо сохранить и позже восстановить. Они должны храниться, когда процессор находится в режиме пользователя или системы. –

+0

Вы должны уточнить, какую версию архитектуры ARM вы рассматриваете, это может повлиять на деталь ответа. –

+0

@Sean Houlihane Я использую ARMv7 Cortex-A9 – xiaokaoy

ответ

1

sp_usr должен быть сохранен до переключения контекста в поток B, а затем, когда поток B переходит в режим сна и восстанавливается контекст потока A. Если sp_usr для потока A не сохраняется, он теряется. Обычно в контекстном переключении текущий sp сохраняется в контрольном блоке текущих задач. Когда выбрано новое задание, sp восстанавливается из блока управления новыми задачами.

Смотрите эту тему: ARM. Access user R13 and R14 from Supervisor mode

Много это зависит, на котором рука архитектура вы используете!

 Смежные вопросы

  • Нет связанных вопросов^_^