Структура thread_struct
содержит два из этих ESP
полей: esp0
и esp
. Однако они относятся к четырем полям в структуре tss_segment_32
: esp0
, esp1
, esp2
и esp
.
На самом деле они существуют в TSS, так что это скорее что-то от Intel, чем от Linus et al.
Что касается того, почему TSS содержит их, цифры логичны, если вы знаете, как работает модель защиты под x86. На самом деле это уровни кольца (кроме esp
, который соответствует уровню кольца 3, несмотря на то, что на самом деле он не называется esp3
).
Другими словами, они содержат указатель стека для использования в кольце, в котором вы выполняете. Поскольку Linux использует только кольцо 0 (режим ядра) и кольцо 3 (режим пользователя), esp0
и esp
— единственные, которые должны быть спасен.
Кроме того, я думаю, что единственной ОС, которую я когда-либо видел, использующей другое кольцо, была OS/2, которая использовала кольцо 2 для определенных операций ввода-вывода. Процессы, которым разрешено выполнять эти операции, должны были быть специально помечены, и ОС должна была запускать их в кольце 2, чтобы обеспечить беспрепятственный доступ к вводу-выводу, не допуская остановки ядра.
person
paxdiablo
schedule
19.01.2011