Perbedaan antara panggilan sistem dan fungsi perpustakaan


Jawaban:


19

Secara konseptual, fungsi perpustakaan adalah bagian dari proses Anda.

Pada saat run-time, kode Anda yang dapat dieksekusi dan kode perpustakaan apa pun (seperti libc.so) yang bergantung padanya, ditautkan ke dalam satu proses tunggal. Jadi, ketika Anda memanggil fungsi di perpustakaan seperti itu, itu dijalankan sebagai bagian dari proses Anda, dengan sumber daya dan hak istimewa yang sama. Ini adalah ide yang sama dengan memanggil fungsi yang Anda tulis sendiri (dengan kemungkinan pengecualian seperti fungsi PLT dan / atau trampolin, yang dapat Anda cari jika Anda peduli).

Secara konseptual, panggilan sistem adalah antarmuka khusus yang digunakan untuk melakukan panggilan dari kode Anda (yang umumnya tidak terjangkau) ke kernel (yang memiliki hak untuk meningkatkan hak istimewa yang diperlukan).


Sebagai contoh, lihat man Linux brk . Ketika sebuah program C memanggil mallocuntuk mengalokasikan memori, ia memanggil fungsi perpustakaan di glibc.

Jika sudah ada ruang yang cukup untuk alokasi di dalam proses , ia dapat melakukan manajemen tumpukan yang diperlukan dan mengembalikan memori ke pemanggil.

Jika tidak, glibc perlu meminta lebih banyak memori dari kernel: itu (mungkin) memanggil brkfungsi glibc, yang pada gilirannya memanggil brksyscall. Hanya sekali kontrol telah dilewatkan ke kernel, melalui syscall, dapat keadaan memori virtual global diubah untuk cadangan lebih banyak memori, dan memetakannya ke ruang alamat proses Anda.


11

Menambah jawaban Useless ':
Fungsi perpustakaan lebih cepat dari panggilan sistem, dan biasanya tidak mengandung pertimbangan izin / keamanan, karena mereka berjalan dengan hak istimewa proses dan ingatannya.

Syscalls di sisi lain, karena mereka berjalan di kernel, memiliki akses ke semua yang ada di sistem, dan oleh karena itu mereka perlu mengontrol apa yang dapat dilakukan proses panggilan ketika memanggil mereka (memverifikasi bahwa ia memiliki izin untuk membuka file, untuk contoh), di samping itu, karena syscalls berada di kernel, memanggil mereka memerlukan saklar konteks di CPU, yang merupakan proses yang sangat berat relatif hanya dengan memanggil panggilan perpustakaan.

Syscalls biasanya mencerminkan penggunaan CPU sistem dalam program pemantauan.


0
  1. Lib menyenangkan adalah compiler yang didukung sementara syscall didukung OS
  2. Libcall bersifat spesifik sedangkan syscall bersifat umum, seperti getc a lib fun hanya dapat mengakses satu karakter pada satu waktu, bukan string atau kata demi kata, tetapi membuka syscall dapat digunakan untuk membuka file teks, file biner, dan banyak lagi jenis file lainnya.

0

panggilan perpustakaan - mengaktifkan subrutin yang ditautkan ke aplikasi (melalui termasuk atau menambahkan perpustakaan).

system call - mentransfer kontrol ke OS (user-> system proc-> OS), dan menempatkan prosesor dalam mode privilege

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.