Perangkat lunak komputer dikembangkan untuk mengotomatisasi beberapa tugas atau memecahkan beberapa masalah. Either way, perangkat lunak mencapai tujuan dengan bantuan logika yang ditulis oleh pengembang perangkat lunak itu. Setiap logika memerlukan beberapa layanan seperti menghitung panjang string, membuka file, dll. Layanan standar dilayani oleh beberapa fungsi atau panggilan yang disediakan untuk tujuan ini saja.
Seperti untuk menghitung panjang string, ada ada fungsi standar seperti strlen(), untuk membuka file, ada fungsi seperti open() dan fopen(). Kami menyebut fungsi ini sebagai fungsi standar karena aplikasi apa pun dapat menggunakannya.
Fungsi standar ini dapat diklasifikasikan ke dalam dua kategori utama :
- Panggilan fungsi perpustakaan.
- Panggilan fungsi sistem.
Pada artikel ini, kami akan mencoba membahas konsep di balik sistem dan panggilan perpustakaan dalam berbagai poin dan di mana pun diperlukan, saya akan memberikan perbedaan di antara keduanya.
1. Fungsi perpustakaan Vs Panggilan sistem
Fungsi-fungsi yang merupakan bagian dari library C standar dikenal sebagai fungsi Library. Misalnya fungsi manipulasi string standar seperti strcmp(), strlen() dll adalah semua fungsi library.
Fungsi yang mengubah mode eksekusi program dari mode pengguna ke mode kernel dikenal sebagai panggilan sistem. Panggilan ini diperlukan jika beberapa layanan diperlukan oleh program dari kernel. Misalnya, jika kita ingin mengubah tanggal dan waktu sistem atau jika kita ingin membuat soket jaringan maka layanan ini hanya dapat disediakan oleh kernel dan oleh karena itu kasus ini memerlukan panggilan sistem. Misalnya, socket() adalah panggilan sistem.
2. Mengapa kita membutuhkan panggilan sistem?
Panggilan sistem bertindak sebagai titik masuk ke kernel OS. Ada tugas-tugas tertentu yang hanya dapat dilakukan jika suatu proses berjalan dalam mode kernel. Contoh tugas-tugas ini dapat berinteraksi dengan perangkat keras dll. Jadi, jika suatu proses ingin melakukan tugas semacam itu, maka proses itu harus berjalan dalam mode kernel yang dimungkinkan oleh panggilan sistem.
3. Jenis fungsi perpustakaan
Fungsi perpustakaan dapat terdiri dari dua jenis :
- Fungsi yang tidak memanggil panggilan sistem apa pun.
- Fungsi yang melakukan panggilan sistem.
Ada fungsi perpustakaan yang tidak membuat panggilan sistem apa pun. Misalnya, fungsi manipulasi string seperti strlen() dll termasuk dalam kategori ini. Selain itu, terdapat fungsi library yang selanjutnya melakukan panggilan sistem, misalnya fungsi fopen() yang merupakan fungsi library standar tetapi secara internal menggunakan panggilan sistem open().
4. Interaksi antar komponen
Diagram berikut untuk menggambarkan bagaimana fungsi Library, panggilan sistem, kode aplikasi berinteraksi satu sama lain.
Diagram di atas memperjelas bahwa kode aplikasi dapat berinteraksi dengan fungsi Library atau panggilan sistem. Selain itu, fungsi perpustakaan juga dapat memanggil fungsi sistem dari dalam. Tetapi hanya panggilan sistem yang memiliki akses ke kernel yang selanjutnya dapat mengakses perangkat keras komputer.
5. fopen() vs buka()
Beberapa dari kita mungkin berpendapat bahwa mengapa kita memiliki dua fungsi untuk operasi yang sama yaitu membuka file?
Nah, jawabannya adalah fakta bahwa fopen() adalah fungsi perpustakaan yang menyediakan layanan I/O buffer untuk membuka file sementara open() adalah panggilan sistem yang menyediakan layanan I/O non-buffer. Meskipun fungsi open() juga tersedia untuk digunakan aplikasi, tetapi aplikasi harus menghindari menggunakannya secara langsung.
Secara umum, jika ada fungsi library yang sesuai dengan panggilan sistem, maka aplikasi harus menggunakan fungsi library karena :
- Fungsi pustaka bersifat portabel yang berarti aplikasi yang menggunakan fungsi pustaka standar akan berjalan di semua sistem. Sementara di sisi lain, aplikasi yang bergantung pada panggilan sistem yang sesuai mungkin tidak berjalan di setiap sistem karena antarmuka panggilan sistem dapat bervariasi dari satu sistem ke sistem lainnya.
- Kadang-kadang fungsi pustaka yang sesuai membuat beban ke panggilan sistem menjadi lebih rendah yang mengakibatkan peralihan yang tidak sering dari mode pengguna ke mode kernel. Misalnya jika ada aplikasi yang sangat sering membaca data dari file, maka menggunakan fread() alih-alih read() akan memberikan buffered I/O yang berarti bahwa tidak setiap panggilan ke fread() akan menghasilkan panggilan ke panggilan sistem baca (). Fread() dapat membaca potongan data yang lebih besar (daripada yang dibutuhkan oleh pengguna) sekaligus dan selanjutnya fread() tidak akan memerlukan panggilan ke fungsi sistem read().
6. Apakah malloc() adalah panggilan sistem?
Ini adalah salah satu kesalahpahaman yang sangat populer yang dimiliki orang. Mari kita perjelas bahwa malloc() bukan panggilan sistem. Panggilan fungsi malloc() adalah panggilan fungsi perpustakaan yang selanjutnya menggunakan panggilan sistem brk() atau sbrk() untuk alokasi memori.
7. Panggilan sistem :Mengganti mode eksekusi
Secara tradisional, mekanisme menaikkan interupsi 'int $0x80' ke kernel digunakan. Setelah menjebak interupsi, kernel memprosesnya dan mengubah mode eksekusi dari pengguna ke mode kernel. Saat ini, instruksi systenter/sysexit digunakan untuk mengganti mode eksekusi.
8. Beberapa perbedaan lainnya
Selain semua hal di atas, berikut adalah beberapa perbedaan lagi antara panggilan sistem dan perpustakaan:
- Fungsi library ditautkan ke program pengguna dan dijalankan di ruang pengguna sementara panggilan sistem tidak ditautkan ke program pengguna dan dijalankan di ruang kernel.
- Waktu eksekusi fungsi library dihitung dalam waktu tingkat pengguna sementara waktu eksekusi panggilan sistem dihitung sebagai bagian dari waktu sistem.
- Fungsi pustaka dapat di-debug dengan mudah menggunakan debugger sementara panggilan Sistem tidak dapat di-debug karena dijalankan oleh kernel.