Как реализован системный вызов в 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
Как реализован системный вызов в Linux?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.