Saya telah melalui jawaban pertanyaan ini tetapi tidak begitu mengerti perbedaan antara panggilan sistem dan fungsi perpustakaan. Secara konseptual, apa perbedaan antara keduanya?
sumber
Saya telah melalui jawaban pertanyaan ini tetapi tidak begitu mengerti perbedaan antara panggilan sistem dan fungsi perpustakaan. Secara konseptual, apa perbedaan antara keduanya?
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 malloc
untuk 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 brk
fungsi glibc, yang pada gilirannya memanggil brk
syscall. 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.
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.
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