Apa itu Panggilan Sistem Linux?

What Is Linux System Call



Sebelum kita mempelajari definisi panggilan sistem Linux dan memeriksa detail pelaksanaannya, yang terbaik adalah memulai dengan mendefinisikan berbagai lapisan perangkat lunak dari sistem Linux yang khas.

Kernel Linux adalah program khusus yang melakukan booting dan berjalan pada level terendah yang tersedia pada perangkat keras Anda. Ia memiliki tugas mengatur segala sesuatu yang berjalan di komputer, termasuk menangani keyboard, disk, dan acara jaringan untuk menyediakan irisan waktu untuk menjalankan beberapa program secara paralel.







Ketika kernel mengeksekusi program tingkat pengguna, itu memvirtualisasikan ruang memori sehingga program percaya bahwa itu adalah satu-satunya proses yang berjalan di memori. Gelembung pelindung isolasi perangkat keras dan perangkat lunak ini meningkatkan keamanan dan keandalan. Aplikasi yang tidak memiliki hak istimewa tidak dapat mengakses memori milik program lain, dan jika program tersebut mogok, kernel akan berhenti sehingga tidak dapat membahayakan sistem lainnya.



Melanggar Hambatan dengan Panggilan Sistem Linux

Lapisan isolasi antara aplikasi unprivileged ini memberikan batas yang sangat baik untuk melindungi aplikasi lain dan pengguna pada sistem. Namun, tanpa beberapa cara untuk berinteraksi dengan elemen lain di komputer dan dunia luar, program tidak akan dapat mencapai banyak hal.



Untuk memfasilitasi interaksi, kernel menunjuk gerbang perangkat lunak yang memungkinkan program yang sedang berjalan untuk meminta kernel bertindak atas namanya. Antarmuka ini dikenal sebagai panggilan sistem.





Karena Linux mengikuti filosofi UNIX bahwa segala sesuatu adalah file, banyak fungsi dapat dilakukan dengan membuka dan membaca atau menulis ke file, yang dapat berupa perangkat. Di Windows, misalnya, Anda mungkin menggunakan fungsi yang disebut CryptGenRandom untuk mengakses byte acak. Tetapi di Linux, ini dapat dilakukan hanya dengan membuka file /dev/urandom dan membaca byte darinya menggunakan panggilan sistem input/output file standar. Perbedaan penting ini memungkinkan antarmuka panggilan sistem yang lebih sederhana.

Pembungkus Wafer Tipis

Di sebagian besar aplikasi, panggilan sistem tidak dilakukan langsung ke kernel. Hampir semua program tertaut di pustaka C standar, yang menyediakan pembungkus tipis namun penting seputar panggilan sistem Linux. Pustaka memastikan bahwa argumen fungsi disalin ke register prosesor yang benar kemudian mengeluarkan panggilan sistem Linux yang sesuai. Ketika data diterima dari panggilan, pembungkus menginterpretasikan hasil dan mengembalikannya kembali ke program dengan cara yang konsisten.



Di balik layar

Setiap fungsi dalam program yang berinteraksi dengan sistem akhirnya diterjemahkan ke dalam panggilan sistem. Untuk melihat ini dalam tindakan, mari kita mulai dengan contoh dasar.

ruang kosongutama() {
}

Ini mungkin program C paling sepele yang pernah Anda lihat. Itu hanya mendapatkan kontrol melalui titik masuk utama dan kemudian keluar. Itu bahkan tidak mengembalikan nilai karena main didefinisikan sebagai batal. Simpan file sebagai ctest.c dan mari kita kompilasi:

tes gcc.C -yang terbaik

Setelah dikompilasi, kita dapat melihat ukuran file sebagai 8664 byte. Ini mungkin sedikit berbeda pada sistem Anda, tetapi seharusnya sekitar 8k. Itu banyak kode hanya untuk masuk dan keluar! Alasan 8k adalah karena libc runtime disertakan. Bahkan jika kita menghapus simbolnya, itu masih sedikit di atas 6k.

Dalam contoh yang lebih sederhana, kita dapat membuat panggilan sistem Linux untuk keluar daripada bergantung pada runtime C untuk melakukannya untuk kita.

ruang kosong_Mulailah() {
asm('movl $1,%eax;'
'xorl %ebx,%ebx;'
'int $0x80');
}

Di sini kita memindahkan 1 ke register EAX, menghapus register EBX (yang seharusnya berisi nilai kembalian) kemudian memanggil interupsi panggilan sistem Linux 0x80 (atau 128 dalam desimal). Interupsi ini memicu kernel untuk memproses panggilan kita.

Jika kita mengkompilasi contoh baru kita, yang disebut asmtest.c, dan menghapus simbol dan mengecualikan perpustakaan standar:

gcc-S-tes nostdlib.C -o asmtest

kami akan menghasilkan biner kurang dari 1k (di sistem saya, ini menghasilkan 984 byte). Sebagian besar kode ini adalah header yang dapat dieksekusi. Kami sekarang memanggil panggilan sistem Linux langsung.

Untuk Semua Tujuan Praktis

Dalam hampir semua kasus, Anda tidak perlu melakukan panggilan sistem langsung di program C Anda. Namun, jika Anda menggunakan bahasa rakitan, kebutuhan mungkin akan muncul. Namun, dalam pengoptimalan, akan lebih baik untuk membiarkan fungsi pustaka C melakukan panggilan sistem dan hanya memiliki kode kinerja-kritis Anda yang disematkan dalam arahan perakitan.

Cara Memprogram Tutorial Panggilan Sistem

Daftar Semua Panggilan Sistem

Jika Anda ingin melihat daftar semua panggilan sistem yang tersedia untuk Linux, Anda dapat memeriksa halaman referensi ini: Daftar Lengkap Panggilan Sistem di LinuxHint.com, filippo.io/linux-syscall-table/ dan atau syscalls.kernelgrok.com