Как реализован системный вызов в Linux?

Это зависит от того, что os вы подразумеваете под системным os вызовом. Вы имеете в виду linux вызов библиотеки C (через operating-system glibc) или реальный системный os вызов? В конце вызовов библиотеки operating-system C всегда используются системные operating-system вызовы.

Старый способ выполнения operating-system системных вызовов заключался os в использовании программного linux прерывания, то есть с помощью operating-system инструкции int. В Windows был os int 0x2e, а в Linux - int 0x80. ОС устанавливает linux обработчик прерывания для linux 0x2e или 0x80 в таблице дескрипторов linux прерываний (IDT). Затем этот operating-systems обработчик выполняет системный linux вызов. Он копирует аргументы operating-systems из пользовательского режима os в режим ядра (это регулируется linux соглашением для конкретной operating-systems ОС). В Linux аргументы передаются operating-systems с использованием ebx, ecx, edx, esi и operating-system edi. В Windows аргументы копируются operating-system из стека. Затем обработчик operating-systems выполняет своего рода поиск linux (чтобы найти адрес функции) и linux выполняет системный вызов. После os завершения системного вызова linux инструкция iret возвращается operating-system в пользовательский режим.

Новый linux способ - sysenter и sysexit. Эти две инструкции operating-systems в основном делают за вас operating-systems всю работу с регистром. Операционная operating-systems система устанавливает инструкции os через регистры, специфичные operating-system для модели (MSR). После этого linux это практически то же самое, что operating-systems и при использовании int.

linux

operating-system

2022-11-18T16:51:29+00:00