Примечание: все это "80x86 специфично" (разные ЦП, например, ARM, разные), и для 80x86 есть (на практике незначительные) различия между защищенным режимом (используется для 32-битных ядер) и длиннымmode (используется для 64-битных ядер).
ЦП имеет регистр задач, который отслеживает (виртуальный) адрес структуры, называемой сегментом состояния задачи.Для длительного режима;эта структура содержит значение для загрузки в RSP при переходе на более высокий уровень привилегий и при использовании функции таблицы стеков прерываний CPU.
Когда происходит любое прерывание, CPU получает информацию из соответствующей записи в таблице дескрипторов прерываний (включая определение уровня привилегий для переключения и использования прерывания с использованием функции таблицы стеков прерываний);затем (если стек изменяется) использует соответствующее поле в Сегменте состояния задачи (находится через. Регистр задач), чтобы определить, что загружать в RSP
.
Во время загрузки ядро создает эти массивы иструктуры для CPU (IDT, TSS) и задает регистр задач;и во время переключения задач ядро изменяет поле RSP0
в TSS (которое определяет, что загружать в RSP
, когда ЦП переключается с более низкого уровня привилегий на CPL = 0), так что это различное значение для каждой задачи (поэтомучто каждая задача имеет свой стек ядра).Внутренне ядро будет иметь некоторую другую структуру данных («блок управления задачами»), которая отслеживает значение для копирования в поле RSP0
во время переключений задач.