Відповіді:
Не існує насправді такого поняття, як "дзвінок у бібліотеку". Ви можете викликати функцію, пов’язану із спільною бібліотекою. А це просто означає, що шлях бібліотеки шукається під час виконання, щоб визначити місце функції для виклику.
Системні виклики - це дзвінки ядра низького рівня, якими керує ядро.
Системні дзвінки обробляються безпосередньо ядром.
Бібліотечні дзвінки обробляються динамічною (або статично пов'язаною) бібліотекою. Програма, яка здійснює виклик бібліотеки, повинна спочатку імпортувати цю бібліотеку, перш ніж виклик запрацює. Самі виклики бібліотеки можуть використовувати системні дзвінки.
Іноді бібліотеки надаються як "передні" для системних викликів, щоб забезпечити додаткову функціональність або простоту використання, не надані ядром.
Системні дзвінки - це функції, які операційна система передбачає для використання програм. Тоді як такі функції, як ті, які є у math.h, string.h тощо, є тими, які не мають нічого спільного із взаємодією з операційною системою.
В основному є два режими ядра Linux саме.
Будь-яке ядро Linux перемикається між цими двома режимами. Як правило, виклики з бібліотеки виконуються в режимі користувача, а системні дзвінки виконуються в режимі ядра . У термінах операційної системи режим ядра має атомний характер і його в режимі нагляду. Практично всі виклики бібліотеки потребують допомоги ядра для виконання своїх завдань. Кожен виклик бібліотеки по черзі викликає базовий системний виклик. Давайте зробимо ідею більш зрозумілою, використовуючи наступний приклад
Щоразу в програмі c ви використовуєте fopen () з заголовкового файлу. Програмування середовища викликає системний виклик open () з ядра та виконує його завдання відкриття файлу. Знову після виконання, контрольний потік повертається в режим користувача.
Для ілюстрації цього виконайте наступні завдання
man man
: тут ви знайдете ручний розділ 1-8, кожен має конкретне призначення.man fopen
: ви побачите реакцію як FOPEN(3)
, тут 3 вказується розділ 3 вручну, що містить чоловічі сторінки, який є секцією дзвінків з бібліотекою.Зробіть man open
: ви побачите реакцію як OPEN(2)
, тут 2 вказується розділ 2 вручну з підручних сторінок, який є розділом системних викликів.
Сподіваюся, ви зрозуміли концепцію.
Просто додайте до відмінностей, згаданих тут в інших відповідях.
Оскільки виклик бібліотеки - це просто виклик функції, переключення з простору користувача на простір ядра не відбувається. З іншого боку, системний виклик призводить до переходу з простору користувача на простір ядра, оскільки системний виклик працює в режимі ядра.