Внутренние компоненты переключателя контекста Linux: как процесс возвращается в пользовательское пространство после переключения? - PullRequest
0 голосов
/ 19 февраля 2019

Я прочитал аналогичный ответ на вопрос о переключении контекста в StackOverflow: Как на самом деле работают функции schedule () + switch_to () из ядра Linux?

Однако Я все еще озадачен внутренними данными и не понимаю, как только что переключенный процесс (ранее прерванный) возобновит свое выполнение в пользовательском пространстве (если он там был прерван) в Linux.

Пока что общий поток переключения контекста (на v4.20):

  1. процесс выполняется в пользовательском пространстве (скажем, firefox)
  2. ЦПClock генерирует прерывание
  3. Планировщик называется
  4. __ schedule () называется
  5. , если новая задача (скажем,systemd) отличается от текущего, context_switch () вызывается
  6. context_switch вызывает switch_to ()
  7. На этом этапе контекст процессора переключается на следующую задачу, включая стек и виртual адресное пространство
  8. предыдущее задание возвращается context_switch ()

На данный момент я не понимаю, что происходит:

-> Это новое заданиевыполняет?в коде switch_to я не увидел ссылки на указатель инструкций используемой task_struct.

-> Как мой systemd процесс продолжает выполняться в пользовательском пространстве?

-> Должны ли мы где-нибудь попасть в iret?Я видел resume_kernel и resume_userspace символы в entry_32.S , но я не понимаю , как они подключены к планировщику.

-> Почему в структуре task_struct -> thread нет поля указателя инструкции?Как хранится и восстанавливается IP-адрес?

-> Включает ли переключение контекста evey прерывание, за которым следует iret?И поэтому я могу положиться на этот факт, чтобы поймать переключение контекста (перехват загрузки CR3) и одиночный шаг, пока я не выполню iret?

Примечание: я задаю вопрос, потому что я пытаюсьпостроить гипервизор уровня отладчика с поддержкой гостя .Поэтому я разрабатываю функциональность, подобную PTRACE_ATTACH, но используя только API-интерфейсы VMI гипервизоров

Большое спасибо за ваше время и ответы!?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...