Много раз я читал/слышал аргумент, что многие системные вызовы и т. Д. Были бы неэффективными, поскольку приложение делает переключатель режима, т.е. переходит из режима пользователя в режим ядра и после выполнения системный вызов начинает выполнение в пользовательском режиме, снова переключая переключатель режима.Что такое накладные расходы, связанные с переключением режимов
Мой вопрос в том, что накладные расходы переключателя режима? Сбой кэша процессора или недействительные записи tlb или что происходит, что вызывает накладные расходы?
Обратите внимание, что я спрашиваю о накладных расходах, связанных с переключателем режима, а не переключателем контекста. Я знаю, что переключатель режима и контекстный переключатель - это две разные вещи, и я полностью осведомлен о накладных расходах, связанных с коммутатором контекста, но что я не понимаю, так это то, что накладные расходы вызваны переключателем режима?
Если его возможно, пожалуйста, предоставить некоторую информацию о конкретной * NIX платформы как Linux, FreeBSD, Solaris и т.д.
С уважением
Лали
Не происходит кэширование данных; поэтому я использовал strace для проверки того, что происходит системный вызов. Syscall, по определению, является вызовом в пространство ядра. –
Кроме того, ваше утверждение о том, что переключатель режима эквивалентен контекстному переключателю, неверен. Переключатель контекста включает в себя замену всего состояния процессора и таблиц страниц; это значительная работа, которая не требуется для системных вызовов. Syscall - это простое программное прерывание (сборка x86 «int $ 0x80») –
Итак, в syscall есть только преамбула и инструкция INT? – Juice