Большие различия между системными вызовами Linux и программными прерываниями INT 80

Из не столь отдаленной картины того, что происходит, может ли кто-нибудь объяснить больше о том, в чем разница между системными вызовами Linux, такими как read() и write() и т. д., и записью их на ассемблере с использованием кода операции x86 INT вместе с настройкой указанные регистры?


person Matthew Hoggan    schedule 13.12.2011    source источник
comment
Задавать вопрос о разнице между системным вызовом и написанием системного вызова на ассемблере — все равно, что спрашивать о разнице между книгой и написанием книги. Одно — сущность, другое — процесс.   -  person Victor Sorokin    schedule 13.12.2011


Ответы (2)


Фактическая функция read() представляет собой библиотечную оболочку C над тем, что называется «шлюзом системного вызова». Оболочка библиотеки C в первую очередь отвечает за такие вещи, как установка errno при сбое, а также за сопоставление между структурами, используемыми в пользовательском пространстве, и структурами, используемыми низкоуровневым системным вызовом.

Шлюз системного вызова, в свою очередь, фактически переключает режим пользователя в режим ядра. Это зависит от архитектуры ЦП — на x86 у вас есть два варианта: один — использовать INT 080h после настройки регистров с номером системного вызова и аргументами; другой - вызвать символ, предоставленный библиотекой, сопоставленной с адресным пространством каждого исполняемого файла, с той же настройкой регистра. Затем эта библиотека выбирает между несколькими возможными вариантами перехода пользователь->ядро, включая SYSENTER, SYSCALL или откат к INT 080h. В других архитектурах используются другие методы. В любом случае ЦП перемещается в пространство ядра, где номер системного вызова используется для поиска соответствующего обработчика в большой таблице.

person bdonlan    schedule 13.12.2011

прерывание - не единственный способ вызвать системный вызов, вы используете специальные инструкции, такие как sysenter, системный вызов или простой переход на определенный адрес в защищенном режиме.

person pinxue    schedule 13.12.2011