Переключатель контекста потока x86: Почему необходимо хранить счетчик программ в TCB? - PullRequest
1 голос
/ 20 октября 2019

Я пытаюсь понять переключение контекста потока. Сейчас у меня есть абстракция: один поток будет вызывать yield(), который абстрагируется как:

yield() {
  new_thread = schedular.next_thread()
  switch(cur_thread, new_thread)
  house_keeping()
}

И switch(cur_thread, new_thread):

switch(cur_thread, new_thread) {
  store all registers into cur_TCB
  load TCB of new_thread
  ret
}

Он говорит, что все регистры, включая %rip будет сохранено. Но если я правильно понимаю, после выполнения ret in switch, return address в новом стеке будет вставлено в %rip.

Итак, мои вопросы: не означает ли это, что сохраненная %rip для new_thread вообще не используется? (Потому что адрес возврата загружается в него немедленно) Почему нам все еще нужно сохранять% rip во время переключения контекста?

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