В чем разница между системным вызовом и вызовом библиотеки?
может кто-нибудь объяснить различия для этих двух в linux? Пожалуйста, заходите как можно глубже в каждый шаг операционной системы.
4 ответов
вызовы ядра низкого уровня, которые обрабатываются ядром, являются системными вызовами.
на главной странице написано:
2 системных вызова (функции, предоставляемые ядром)
3 вызова библиотеки (функции в программных библиотеках)
живописное изображение может сделать его ясным:
и
глядя на комментарий, позвольте мне попробовать это. Системы обслуживания-это процедура, которая выполняется с повышенными привилегиями (обычно в режиме ядра). Все остальное-библиотечный звонок.
базовое оборудование обеспечивает ворота для пользователей приложений, чтобы войти в режим ядра. Операционная система охраняет эти ворота для базовой безопасности системы.
немного упрощение здесь - - - общий метод, используемый процессорами, заключается в том, чтобы процесс явно инициировал исключение (Intel имеет альтернативный метод SYSCALL).
система будет иметь набор векторов прерываний / исключений (указатель на процедуры обработчика) для ответа на исключение или прерывания (например, ошибка страницы, деление на ноль). Система определит некоторый набор векторов (обычно с низкими номерами) для аппаратных исключений и прерываний. Однако они обычно оставляют слоты для использования операционной системой.
инструкция что-то вроде:
INT #12
будет явно вызовите исключение и вызовите 12-ю процедуру в векторе. Система может позволить вам имитировать деление на ноль исключения, делая это
предположим, что операционная система использует вектор 123 для системных служб.
INT #123
вызовет системную службу. Система может зарезервировать отдельный вектор для каждой системной службы или использовать его и отправлять.
таким образом, вы сделали бы что-то вроде этого:
MOVL #23, R0
INT #123
значение 23 в регистре 0 сообщает обработчику прерываний вызвать системную службу #23.
таким образом, вы можете видеть, что все это требует ассемблера. Каждая операционная система создает оболочку, которая может быть вызвана как функции из языков высокого уровня.
Это и есть последовательность того, что происходит:
пользователь вызывает именованную оболочку с обычными параметрами. Оболочка настраивает регистры и стек для системной службы.
В оболочка запускает исключение, которое отправляется в системную службу.
затем системная служба должна проверить все параметры. Это одна из причин, по которой Системные службы имеют высокие накладные расходы. Исключения в режиме ядра вызывают синие экраны смерти. Если системной службе необходимо записать в буфер, предоставленный пользователем, она должна убедиться, что каждый байт, в который она записывает, является записываемой памятью.
системная служба делает все, что ей нужно делать.
системная служба выполняет аппаратную инструкцию для возврата из исключения или прерывания. Это возвращает в пользовательский режим и обратно к функции-оболочке.
обертка может распаковывать параметры, возвращенные в регистрах.
обертка возвращается вызывающему объекту.
системные вызовы и вызовы библиотек аналогичны в том, что они предоставляются приложению средой. Разница между ними заключается в том, что системные вызовы реализуются в ядре, а библиотечные-в пользовательском пространстве. Чтобы сделать системный вызов, приложение должно выполнить специальную аппаратно - и системно-зависимую инструкцию (обычно прерывание или специальное SYSENTER
call) инструкция, которая запускает переключатель контекста и передает управление ядру. Библиотечные звонки, on с другой стороны, ничем не отличается от обычных вызовов функций (единственное отличие заключается в том, что код находится не в основном исполняемом файле, а в общих библиотеках).
библиотечные функции-это обычная функция, которая помещается в коллекцию функций, называемую библиотекой .
системные вызовы-это запрос на обслуживание ОС.