Panggilan Sistem

Apa itu Panggilan Sistem Linux??

Apa itu Panggilan Sistem Linux??

Hal Pertama Pertama

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. Ini memiliki tugas mengatur semua yang berjalan di komputer, termasuk menangani keyboard, disk, dan acara jaringan untuk menyediakan irisan waktu untuk menjalankan beberapa program secara paralel.

Ketika kernel menjalankan 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 yang tidak memiliki hak istimewa ini memberikan batas yang sangat baik untuk melindungi aplikasi dan pengguna lain di sistem. Namun, tanpa beberapa cara untuk berinteraksi dengan elemen lain di komputer dan dunia luar, program tidak akan dapat menyelesaikan 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 "semuanya adalah file", banyak fungsi dapat dilakukan dengan membuka dan membaca atau menulis ke file, yang bisa 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 system. Untuk melihat ini beraksi, mari kita mulai dengan contoh dasar.

batal utama()

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 -o ctest

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! Alasannya 8k adalah karena libc runtime disertakan. Bahkan jika kita menghapus simbolnya, itu masih sedikit lebih dari 6k.

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

batal _mulai()
asm("movl $1,%eax;"
"xorl %ebx,%ebx;"
"int  $0x80");

Di sini kita pindahkan 1 ke register EAX, hapus register EBX (yang seharusnya berisi nilai kembalian) lalu panggil 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 -nostdlib asmtest.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 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 Majelis.

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

Alat Berguna untuk Gamer Linux
Jika Anda suka bermain game di Linux, kemungkinan besar Anda telah menggunakan aplikasi dan utilitas seperti Wine, Lutris, dan OBS Studio untuk mening...
Game Remaster HD untuk Linux yang Belum Pernah Rilis Linux Sebelumnya
Banyak pengembang dan penerbit game datang dengan remaster HD dari game lama untuk memperpanjang umur waralaba, harap penggemar meminta kompatibilitas...
Cara Menggunakan AutoKey untuk Mengotomatiskan Game Linux
AutoKey adalah utilitas otomatisasi desktop untuk Linux dan X11, diprogram dengan Python 3, GTK dan Qt. Dengan menggunakan skrip dan fungsionalitas MA...