Системные вызовы: UNIX, Linux, BSD и Solaris
-
07-07-2019 - |
Вопрос
Существуют ли различия между количеством системных вызовов в основных вариантах * NIX?
Какие системные вызовы будут поддерживаться повсеместно?
Решение
Все, что не является стандартом posix, может быть дополнительным системным вызовом или дополнительными функциональными возможностями библиотеки над уровнем системных вызовов. Если ваша цель - записать переносимый код-стик в posix и максимально использовать библиотеку c (в отличие от прямых системных вызовов).
Если вам просто любопытно, они очень разные. Вам не нужно много поддерживать системные вызовы, чтобы быть posix-совместимым. Он определяет интерфейсы, которые вам нужно поддерживать, но решать, будете ли вы делать это посредством вызова ядра или перехода в общую библиотеку.
Mac OS X даже не гарантирует двоичную совместимость для системных вызовов между выпусками, они считают их частными интерфейсами между системными библиотеками и ОС. То, что большинство людей считают системными вызовами, на самом деле представляют собой небольшие заглушки в динамической библиотеке, которые обращаются к ядру, и если вы делаете системные вызовы напрямую, вместо того, чтобы ссылаться на эту динамическую библиотеку и вызывать функции-заглушки, ваш код может прерваться между ОС релизов.
Эта гибкость означает, что ряд ОС реализуют системные вызовы, которые полностью отличаются от того, что им нужно для поддержки posix, а затем решают проблемы, возникающие в их библиотеках. Например, реализация многопоточности Linux основана на системном вызове clone (), и они занимаются большей частью бухгалтерии, чтобы заставить интерфейс pthreads работать в своих библиотеках.
Таким образом, если ваша цель состоит в том, чтобы реализовать стандартную библиотеку, которая не привязана ни к чему другому и работает на нескольких Unix-системах, в некоторых случаях вы можете столкнуться с некоторыми сложностями. Если ваша цель - написать что-то, связанное со стандартными библиотеками в различных Unix-системах, вы можете получить в целом унифицированный интерфейс.
Другие советы
Лучшее, что я могу найти - это Unix- Шпаргалки Linux-BSD , для различных вариантов системных вызовов, сравниваются с Системные вызовы Solaris .
Только для Unix количество системных вызовов увеличилось в четыре или более раз в зависимости от того, что вы подразумеваете под "системным вызовом".
Первое издание Advanced UNIX Programming было сосредоточено только на 70 подлинных системных вызовах ядра, например, open, read и write; но не библиотечные вызовы, такие как fopen, fread и fwrite.
Во втором издании около 300. (Всего около 1100 вызовов стандартных функций, но многие из них являются частью библиотеки Standard C или, очевидно, не являются средствами ядра.)
Сегодняшний UNIX имеет потоки, сигналы в реальном времени, асинхронный ввод-вывод и новые функции межпроцессного взаимодействия (POSIX IPC), ни один из которых не существовал 20 лет назад