Різниця між системними дзвінками та функціями бібліотеки


Відповіді:


19

Концептуально функція бібліотеки є частиною вашого процесу.

Під час виконання ваш виконуваний код і код будь-яких бібліотек (наприклад, libc.so), від яких залежить, зв'язуються в єдиний процес. Отже, коли ви викликаєте функцію в такій бібліотеці, вона виконується як частина вашого процесу, з однаковими ресурсами та привілеями. Це та сама ідея, як виклик функції, яку ви написали самостійно (за можливими винятками, такими як PLT та / або функції батута, на які ви можете шукати, якщо вам все одно).

Концептуально системний виклик - це спеціальний інтерфейс, який використовується для здійснення дзвінка з вашого коду (який, як правило, непривілейований) до ядра (яке має право ескалації привілеїв у міру необхідності).


Наприклад, див. Linux man brk . Коли програма C вимагає mallocвиділити пам'ять, вона викликає функцію бібліотеки в glibc.

Якщо всередині вже достатньо місця для розподілу , він може виконати будь-яке необхідне управління купою та повернути пам'ять абоненту.

Якщо ні, glibc потрібно запитати більше пам’яті у ядра: він (ймовірно) викликає функцію brkglibc, яка в свою чергу викликає brksyscall. Тільки після того, як управління передається до ядра, через syscall, стан глобальної віртуальної пам’яті можна змінити, щоб резервувати більше пам’яті та відобразити його в адресному просторі вашого процесу.


11

Додавання до непотрібної відповіді:
Бібліотечні функції швидші, ніж системні виклики, і зазвичай не містять дозволів / міркувань безпеки, оскільки вони працюють з привілеями процесу та пам'яттю.

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

Системні дзвінки зазвичай відображаються як використання системного процесора в програмах моніторингу.


0
  1. lib fun підтримуються компілятором, а syscall підтримуються ОС
  2. Libcall є специфічним, в той час як syscall є загальним, наприклад, getc a lib fun може отримати доступ лише до одного символу одночасно не рядком або словом за словом, але відкриття syscall може використовуватися для відкриття текстового файлу, бінарного файлу та багатьох інших типів файлів.

0

виклик бібліотеки - викликає підпрограму, пов'язану з додатком (через включення або додавання бібліотеки).

системний виклик - передає управління в ОС (користувач-> системна система-> ОС) і переводить процесор у привілейований режим

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