Apa perbedaan antara panggilan Perpustakaan dan panggilan Sistem di Linux?

13

Saya ingin tahu apa perbedaan antara panggilan Perpustakaan dan panggilan Sistem di Linux. Petunjuk apa pun untuk pemahaman yang baik tentang konsep di balik keduanya akan sangat dihargai.

Sen
sumber

Jawaban:

9

Tidak ada yang namanya "panggilan perpustakaan". Anda dapat memanggil fungsi yang ditautkan ke perpustakaan bersama. Dan itu hanya berarti bahwa lintasan perpustakaan dilihat saat runtime untuk menentukan lokasi fungsi yang akan dipanggil.

Panggilan sistem adalah panggilan kernel tingkat rendah yang ditangani oleh kernel.

Falmarri
sumber
Jadi, jika seseorang mengajukan pertanyaan di atas, saya dapat mengartikannya sebagai perbedaan antara panggilan Sistem dan Panggilan Fungsi.
Sen
"man ltrace" memberikan "Pelacak panggilan perpustakaan" :)
ysdx
8

Jika Anda mengetikkan man manshell Anda, Anda akan melihat daftar bagian manual

2 Panggilan sistem (fungsi disediakan oleh kernel)

3 Panggilan perpustakaan (fungsi dalam perpustakaan program)

Misalnya, Anda akan menemukan chmoddi bagian 2 manual saat mengetik man chmod. Dan fprintfdi bagian 3.

uloBasEI
sumber
3

Panggilan sistem ditangani langsung oleh kernel.

Panggilan perpustakaan ditangani oleh perpustakaan yang dinamis (atau terhubung secara statis). Program yang membuat panggilan perpustakaan harus terlebih dahulu mengimpor perpustakaan itu, sebelum panggilan itu berfungsi. Panggil perpustakaan sendiri dapat menggunakan panggilan sistem.

Terkadang perpustakaan disediakan sebagai "ujung depan" untuk panggilan sistem, untuk menyediakan fungsionalitas tambahan atau kemudahan penggunaan yang tidak disediakan oleh kernel.

LawrenceC
sumber
Panggilan perpustakaan tidak harus ditangani oleh perpustakaan dinamis. Perpustakaan dapat ditautkan secara statis sehingga tidak perlu mengimpor (memuat).
jlliagre
Benar. Saya menambahkan info itu.
LawrenceC
Hanya setengah dari itu ...
jlliagre
bukankah seharusnya fungsi dalam file head only juga menjadi bagian dari panggilan perpustakaan?
陳 力
1

Panggilan sistem adalah fungsi yang disediakan sistem operasi untuk digunakan aplikasi. Sedangkan fungsi seperti yang ada di math.h, string.h, dll adalah yang tidak ada hubungannya dengan interfacing dengan sistem operasi.

Yousouser
sumber
1

Pada dasarnya ada dua mode yaitu kernel linux.

  1. Mode pengguna,
  2. Mode kernel.

Kernel linux apa pun berpindah bolak-balik antara dua mode ini. Secara umum, panggilan Library dijalankan dalam mode Pengguna dan Panggilan sistem dieksekusi dalam mode Kernel . Dalam istilah sistem operasi, mode Kernel bersifat Atomic dan dalam mode Supervisory. Hampir semua panggilan Library membutuhkan bantuan dari kernel untuk melakukan tugasnya. Setiap panggilan perpustakaan pada gilirannya panggilan sistem panggilan yang mendasarinya. Mari kita buat ide lebih jelas menggunakan contoh berikut

  1. fopen (): adalah panggilan Library,
  2. open (): adalah panggilan Sistem.

Setiap kali dalam program c, Anda menggunakan fopen () dari file header. Pemrograman lingkungan panggilan system call open () dari kernel dan melakukan tugas pembukaan file-nya. Lagi setelah dieksekusi, aliran kontrol kembali ke mode pengguna.

Untuk mengilustrasikan ini melakukan tugas-tugas berikut

  1. man man: di sini Anda akan menemukan bagian manual dari 1-8 masing-masing memiliki tujuan khusus.
  2. Apakah man fopen: Anda akan melihat istirahat sebagai FOPEN(3), di sini 3 menunjukkan bagian manual 3 dari halaman manual yang merupakan bagian panggilan c-library.
  3. Apakah man open: Anda akan melihat istirahat sebagai OPEN(2), di sini 2 menunjukkan bagian manual 2 dari halaman manual yang merupakan bagian panggilan sistem.

    Semoga Anda mengerti konsepnya.

alpha9eek
sumber
Kernel hanya memiliki satu mode, mode kernel. Proses pengguna memiliki dua mode operasional yang mereka bolak-balik, userland dan kernel.
jlliagre
1

Hanya menambah perbedaan yang disebutkan di sini dalam jawaban lain.

Karena panggilan pustaka hanyalah panggilan fungsi, tidak ada peralihan dari ruang pengguna ke ruang kernel. Di sisi lain, panggilan sistem menghasilkan perpindahan dari ruang pengguna ke ruang kernel karena panggilan sistem beroperasi dalam mode kernel.

cout_display_name
sumber