Переключение задач на x86-32
Что означают ESP и SS? Например, если я делаю переключение задач с TASK_1 с уровнем привилегий кольца 0 на другой TASK_2 с тем же уровнем привилегий кольца 0. который будет использоваться (ESP и SS) или (SS0 и ESP0) после завершения переключения контекста,
1- Используются ли SS0, SS1, SS2 только в случае переключения стека "внутри" задачи?
2- Может ли SS удерживать сегмент стека любого уровня привилегий или он предназначен для сегмента стека только для кольца 3?
1 ответ
Я предполагаю, что вы говорите о 32-битном TSS (сегмент состояния задачи), который представляет собой структуру в памяти, используемую процессором для различных целей. В полях ESP и SS центральный процессор сохраняет ESP и SS старой задачи и восстанавливает значения ESP и SS новой задачи при переключении управляемой задачи центральным процессором. Эти поля сохраняются и восстанавливаются при переключении задач, как и другие поля регистров общего назначения и сегментов (например, EAX или DS).
Поля ESP0, ESP1, ESP2, SS0, SS1, SS2 никогда не используются при переключении задач. Они используются только тогда, когда прерывание или исключение приводят к переходу на более привилегированный уровень в той же задаче. Это приводит к переключению стека, соответствующие значения ESP # и SS # из текущего TSS загружаются в регистры ESP и SS, а старые значения ESP и SS сохраняются в новом стеке. Эти поля TSS никогда не изменяются процессором. Когда обработчик прерываний возвращается к менее привилегированному коду, ЦП восстанавливает сохраненные значения ESP и SS из стека.
Хотя переключение задач может привести к изменению уровня привилегий ЦП, оно никогда не вызывает изменения уровня привилегий задачи. Новая задача возобновляет выполнение с тем же уровнем привилегий, который был при предыдущем выполнении.
Обратите внимание, что хотя 32-битный защищенный режим по существу требует, чтобы ОС настраивала TSS, она не требует, чтобы ОС использовала TSS для переключения задач. Операционная система также может переключать задачи вручную, используя свои собственные механизмы, и так работает большинство 32-битных операционных систем x86. (А поскольку ЦП не обеспечивает механизм переключения задач в длинном 64-битном режиме, именно так работают все 64-битные операционные системы x86.)