я просто читал до того, как Linux работает в моей ОС-книги, когда я наткнулся на это ..Системный вызов без переключения контекста?
[...] ядро создается как единый, монолитное двоичный. Основная причина - повысить производительность. Поскольку все коды ядра и структуры данных хранятся в одном адресном пространстве, при вызове функции операционной системы или при поставке аппаратного прерывания не требуются переключатели контекста.
Это звучит довольно удивительно для меня, конечно, он должен хранить контекст процесса перед тем, как убежать в режим ядра, чтобы обработать прерывание. Но нормально, я куплю его сейчас. На нескольких страницах, описывая контекст планирования процесса, он сказал:
Оба системных вызова и прерывания, возникающие во время выполнения процесса, будут использовать этот стек.
«этот стек» - это место, где ядро хранит регистры процесса и т. Д.
Разве это не прямое противоречие с первой цитатой? Мне что-то не нравится?
Спасибо. Прошло много времени с тех пор, как я изучил это, но у меня создалось впечатление, что аппаратные прерывания фактически _interrupts_ выполнения и сразу переходят к процедуре обработки, а не для опроса для прерываний позже. Я понял, что если бы процесс выполнялся в режиме ядра, ему все равно нужно было сохранить его контекст до этого перехода, но, возможно, это была моя ошибка? Я полагаю, что теперь это ничем не отличается от любого другого вызова метода, если вызываемый метод правильно обрабатывает используемые регистры. Я правильно понял? – user1130005
Мое понимание заключается в том, что процесс выполняется в пользовательском режиме, и есть действительно переход к режиму контекста в режиме ядра до обработки прерывания. Однако * обработка * прерывание не требует дополнительного переключателя контекста в монолитных ядрах, но в микроядрах (поскольку драйверы устройств находятся в пространстве пользователя). –