1

Как определяется начальный контекст потока (состояние регистров) при создании потока?

Например: текущий контекст потока eax = 0x4, ebx = 0x9000, ecx = 0xfff и т.д. Создается поток, чтобы начать выполнение с 0xbfbfbf. Кажется очевидным, что eip потока будет установлен в 0xbfbfbf, но как насчет других регистров. Они скопированы из текущего потока? Они установлены на 0x00000000? Указатель стека одинаков? Я хочу знать, что происходит с начальным контекстом потока при создании потока. Я проверил книги по Google и ОС и не нашел того, что искал.

Кроме того, это тот же процесс в других ОС, в частности, в Linux и Windows?

1 ответ1

0

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

В основном это работает так:

  1. Новая структура задачи выделена.

  2. Поля в этой новой структуре задач заполняются, однако желательно. Это включает регистры, указатель стека и так далее.

  3. Структура задач помечена как готовая к выполнению и добавлена в список задач планировщика.

  4. Планировщик решает запланировать новый поток, загружает его контекст из структуры задачи и переключается на него.

  5. Теперь у потока есть все регистры, стек и указатель инструкций, заполненный для него потоком создания.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .