GNU/Linux >> Belajar Linux >  >> Linux

Apa perbedaan antara panggilan sistem dan panggilan perpustakaan?

Melihat komentar, izinkan saya mencoba ini. Layanan sistem adalah prosedur yang dijalankan dengan hak istimewa tinggi (biasanya mode kernel). Yang lainnya adalah panggilan perpustakaan.

Perangkat keras yang mendasarinya menyediakan gerbang bagi aplikasi pengguna untuk memasuki mode kernel. Sistem operasi menjaga gerbang ini untuk keamanan sistem dasar.

Melakukan sedikit penyederhanaan di sini --- metode umum yang digunakan oleh prosesor adalah agar proses memicu pengecualian secara eksplisit (Intel memiliki metode SYSCALL alternatif).

Suatu sistem akan memiliki satu set vektor interupsi/pengecualian (prosedur penunjuk ke penangan) untuk menanggapi pengecualian atau interupsi (misalnya kesalahan halaman, bagi dengan nol). Sistem akan menentukan beberapa kumpulan vektor (biasanya yang bernomor rendah) untuk pengecualian dan interupsi perangkat keras. Namun, mereka biasanya meninggalkan slot untuk digunakan oleh sistem operasi.

Instruksi seperti:

   INT #12

Secara eksplisit akan memicu pengecualian dan menjalankan prosedur ke-12 dalam vektor. Suatu sistem mungkin memungkinkan Anda untuk mensimulasikan pembagian dengan pengecualian nol dengan melakukan hal ini

Mari kita asumsikan bahwa sistem operasi menggunakan vektor 123 untuk layanan sistem.

   INT #123

akan memanggil layanan sistem. Suatu sistem mungkin mencadangkan vektor terpisah untuk setiap layanan sistem atau dapat menggunakan salah satu dan mengirimkannya.

Jadi Anda akan melakukan sesuatu seperti ini:

  MOVL  #23, R0
  INT  #123

Nilai 23 dalam Daftar 0 memberi tahu penangan interupsi untuk memanggil layanan sistem #23.

Jadi Anda dapat melihat bahwa ini semua membutuhkan bahasa assembly. Apa yang dilakukan setiap sistem operasi adalah membuat pembungkus yang dapat dipanggil seperti fungsi dari bahasa tingkat tinggi.

Inilah urutan dari apa yang terjadi:

  1. Seorang pengguna memanggil pembungkus bernama dengan parameter normal. Wrapper menyiapkan register dan tumpukan untuk layanan sistem.

  2. Pembungkus memicu pengecualian yang dikirim ke layanan sistem.

  3. Layanan sistem kemudian harus memeriksa SEMUA parameter. Ini adalah salah satu alasan layanan sistem memiliki overhead yang tinggi. Pengecualian dalam mode kernel menyebabkan layar biru kematian. Jika layanan sistem perlu menulis ke buffer yang disediakan oleh pengguna, layanan perlu memastikan bahwa setiap byte yang dituju adalah memori yang dapat ditulisi.

  4. Layanan sistem melakukan apa pun yang perlu dilakukan.

  5. Layanan sistem menjalankan instruksi perangkat keras untuk kembali dari pengecualian atau interupsi. Itu mengembalikan ke mode pengguna dan kembali ke fungsi pembungkus.

  6. Pembungkus dapat membongkar parameter yang dikembalikan dalam register.

  7. Pembungkus kembali ke pemanggil.


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

Halaman manual mengatakan:

2 Panggilan sistem (fungsi yang disediakan oleh kernel)

3 Panggilan pustaka (berfungsi dalam pustaka program)

Gambar bergambar dapat memperjelas:

dan


Linux
  1. Perbedaan Antara Perintah Menghentikan dan Mematikan?

  2. Perbedaan Antara [[ $a ==Z* ]] Dan [ $a ==Z* ]?

  3. Perbedaan Antara Akun Pengguna dan Layanan?

  1. Apa perbedaan antara strtok_r dan strtok_s di C?

  2. Apa perbedaan antara adduser dan useradd?

  3. Apa perbedaan antara panggilan Perpustakaan dan panggilan Sistem di Linux?

  1. Apa perbedaan antara InnoDB dan MyISAM?

  2. Apa perbedaan antara fsck dan e2fsck?

  3. Apa perbedaan antara $(CC) dan $CC?