Когда во время программного прерывания x86 происходит переключение контекста?
Я спрашиваю об этом, потому что я пытаюсь реализовать прерывания в моем игрушечном ядре. Итак, я знаю, что когда происходит прерывание, процессор помещает в стек различные биты информации. Тем не менее, везде, где я ищу в Интернете, отображается разная информация в разном порядке. Я также знаю, что если прерывание произошло в пользовательском режиме (кольцо 3), ЦП должен переключиться в режим ядра (кольцо 0), прежде чем он сможет выполнить ISR. Я думаю, что это как-то связано сTSS
а такжеss
а такжеesp
Однако я не уверен. Я прочитал различные объяснения по всему Интернету и пока не нашел в них ни одного единообразия.
Такмой вопрос в чемточный порядок (x86) ЦП помещает данные в стек во время прерывания и когда это делает, и в какой момент времени он переключает контекст черезTSS
и как это влияет на данные, которые помещаются в стек, если вообще?
Что я узнал из исследований (поправьте меня, если не прав): Я уверен, что процессор толкаетeflags
, cs
а такжеeip
на стек, а такжеerror code
при необходимости во время прерывания. Тем не менее, это все, что толкнуло? Я читал в другом месте, чтоss
а такжеesp
подталкивают, но я не знаю, происходит ли это все время, илиЗачем это толкнуло.
Кроме того, я считаю, что процессор будет выглядеть вTSS
для кольца0ss
а такжеesp
а такжев какой-то момент загрузить их, но я не уверен, когда. Возможно, это происходит сразу после прерывания? Кроме того, как этоcs
а такжеds
во время всего этого? Являетсяcs
загружается процессором из записи вIDT
? Как насчетds
? Должен ли я загрузить это вручную?
Извините, если это неправильное место, чтобы спросить, я не уверен, где еще я должен.