Яка різниця між викликом бібліотеки та системним викликом у Linux?


13

Мені хотілося б знати, в чому різниця між викликом бібліотеки та системним викликом у Linux. Будь-які вказівки на добре розуміння понять, що стоять за обома, будуть дуже вдячні.

Відповіді:


9

Не існує насправді такого поняття, як "дзвінок у бібліотеку". Ви можете викликати функцію, пов’язану із спільною бібліотекою. А це просто означає, що шлях бібліотеки шукається під час виконання, щоб визначити місце функції для виклику.

Системні виклики - це дзвінки ядра низького рівня, якими керує ядро.


Тож якщо хтось задає вищезазначене питання, я можу трактувати це як різницю між системним викликом та функціональним викликом.
Сен

"man ltrace" дає мій "
Acer

8

Якщо ви введете man manсвою оболонку, ви побачите список розділів вручну

2 Системні виклики (функції, які надає ядро)

3 Бібліотечні дзвінки (функції в бібліотеках програм)

Наприклад, ви знайдете chmodу розділі 2 цього посібника під час введення man chmod. І fprintfв розділі 3.


3

Системні дзвінки обробляються безпосередньо ядром.

Бібліотечні дзвінки обробляються динамічною (або статично пов'язаною) бібліотекою. Програма, яка здійснює виклик бібліотеки, повинна спочатку імпортувати цю бібліотеку, перш ніж виклик запрацює. Самі виклики бібліотеки можуть використовувати системні дзвінки.

Іноді бібліотеки надаються як "передні" для системних викликів, щоб забезпечити додаткову функціональність або простоту використання, не надані ядром.


Виклики з бібліотеки не обов'язково обробляються динамічною бібліотекою. Бібліотеки можуть бути статично пов'язані, тому не потрібно імпортувати (завантажувати).
jlliagre

Правда. Я додав цю інформацію.
LawrenceC

Лише половина його ...
jlliagre

не повинен функціонувати лише в головному файлі, також бути частиною бібліотечних викликів?
陳 力

1

Системні дзвінки - це функції, які операційна система передбачає для використання програм. Тоді як такі функції, як ті, які є у math.h, string.h тощо, є тими, які не мають нічого спільного із взаємодією з операційною системою.


1

В основному є два режими ядра Linux саме.

  1. Режим користувача,
  2. Режим ядра.

Будь-яке ядро ​​Linux перемикається між цими двома режимами. Як правило, виклики з бібліотеки виконуються в режимі користувача, а системні дзвінки виконуються в режимі ядра . У термінах операційної системи режим ядра має атомний характер і його в режимі нагляду. Практично всі виклики бібліотеки потребують допомоги ядра для виконання своїх завдань. Кожен виклик бібліотеки по черзі викликає базовий системний виклик. Давайте зробимо ідею більш зрозумілою, використовуючи наступний приклад

  1. fopen (): дзвінок у бібліотеку,
  2. open (): системний виклик.

Щоразу в програмі c ви використовуєте fopen () з заголовкового файлу. Програмування середовища викликає системний виклик open () з ядра та виконує його завдання відкриття файлу. Знову після виконання, контрольний потік повертається в режим користувача.

Для ілюстрації цього виконайте наступні завдання

  1. man man: тут ви знайдете ручний розділ 1-8, кожен має конкретне призначення.
  2. Зробити man fopen: ви побачите реакцію як FOPEN(3), тут 3 вказується розділ 3 вручну, що містить чоловічі сторінки, який є секцією дзвінків з бібліотекою.
  3. Зробіть man open: ви побачите реакцію як OPEN(2), тут 2 вказується розділ 2 вручну з підручних сторінок, який є розділом системних викликів.

    Сподіваюся, ви зрозуміли концепцію.


Ядро має лише один режим, режим ядра. Користувацькі процеси мають два режими роботи, вони перемикаються вперед і назад, поле користування та ядро.
jlliagre

1

Просто додайте до відмінностей, згаданих тут в інших відповідях.

Оскільки виклик бібліотеки - це просто виклик функції, переключення з простору користувача на простір ядра не відбувається. З іншого боку, системний виклик призводить до переходу з простору користувача на простір ядра, оскільки системний виклик працює в режимі ядра.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.