Я пройшов відповідь на це питання, але не зовсім розумію різницю між системними викликами та функціями бібліотеки. Концептуально, яка різниця між ними?
Я пройшов відповідь на це питання, але не зовсім розумію різницю між системними викликами та функціями бібліотеки. Концептуально, яка різниця між ними?
Відповіді:
Концептуально функція бібліотеки є частиною вашого процесу.
Під час виконання ваш виконуваний код і код будь-яких бібліотек (наприклад, libc.so), від яких залежить, зв'язуються в єдиний процес. Отже, коли ви викликаєте функцію в такій бібліотеці, вона виконується як частина вашого процесу, з однаковими ресурсами та привілеями. Це та сама ідея, як виклик функції, яку ви написали самостійно (за можливими винятками, такими як PLT та / або функції батута, на які ви можете шукати, якщо вам все одно).
Концептуально системний виклик - це спеціальний інтерфейс, який використовується для здійснення дзвінка з вашого коду (який, як правило, непривілейований) до ядра (яке має право ескалації привілеїв у міру необхідності).
Наприклад, див. Linux man brk . Коли програма C вимагає malloc
виділити пам'ять, вона викликає функцію бібліотеки в glibc.
Якщо всередині вже достатньо місця для розподілу , він може виконати будь-яке необхідне управління купою та повернути пам'ять абоненту.
Якщо ні, glibc потрібно запитати більше пам’яті у ядра: він (ймовірно) викликає функцію brk
glibc, яка в свою чергу викликає brk
syscall. Тільки після того, як управління передається до ядра, через syscall, стан глобальної віртуальної пам’яті можна змінити, щоб резервувати більше пам’яті та відобразити його в адресному просторі вашого процесу.
Додавання до непотрібної відповіді:
Бібліотечні функції швидші, ніж системні виклики, і зазвичай не містять дозволів / міркувань безпеки, оскільки вони працюють з привілеями процесу та пам'яттю.
З іншого боку, Syscalls, оскільки вони працюють в ядрі, мають доступ до всього в системі, і тому їм потрібно контролювати, що може робити процес виклику, коли він викликає їх (переконайтеся, що він має дозволи на відкриття файлу, для приклад), крім того, оскільки системні виклики знаходяться в ядрі, для виклику їх потрібен контекстний комутатор у процесорі, що є дуже важким процесом відносно просто виклику виклику бібліотеки.
Системні дзвінки зазвичай відображаються як використання системного процесора в програмах моніторингу.
виклик бібліотеки - викликає підпрограму, пов'язану з додатком (через включення або додавання бібліотеки).
системний виклик - передає управління в ОС (користувач-> системна система-> ОС) і переводить процесор у привілейований режим