Apakah Panggilan Sistem Linux?

What Is Linux System Call



Sebelum kita membahas definisi panggilan sistem Linux dan memeriksa perincian pelaksanaannya, lebih baik kita mulakan dengan menentukan pelbagai lapisan perisian dari sistem Linux yang khas.

Kernel Linux adalah program khusus yang boot dan berjalan pada tahap yang paling rendah pada perkakasan anda. Ia mempunyai tugas mengatur semua yang berjalan di komputer, termasuk mengendalikan papan kekunci, cakera, dan acara rangkaian untuk menyediakan potongan waktu untuk melaksanakan banyak program secara selari.







Apabila kernel menjalankan program peringkat pengguna, ia memvisualisasikan ruang memori sehingga program percaya bahawa mereka adalah satu-satunya proses yang berjalan dalam memori. Gelembung pelindung pengasingan perkakasan dan perisian ini meningkatkan keselamatan dan kebolehpercayaan. Aplikasi yang tidak berhak tidak dapat mengakses memori milik program lain, dan jika program itu mogok, kernel akan dihentikan sehingga tidak dapat membahayakan sistem yang lain.



Meningkatkan Penghalang dengan Panggilan Sistem Linux

Lapisan pengasingan antara aplikasi yang tidak istimewa memberikan batasan yang sangat baik untuk melindungi aplikasi dan pengguna lain pada sistem. Namun, tanpa ada cara untuk berinteraksi dengan elemen lain dalam komputer dan dunia luar, program tidak akan dapat mencapai apa-apa.



Untuk memudahkan interaksi, kernel menetapkan gerbang perisian yang membolehkan program yang dijalankan meminta agar kernel bertindak atas namanya. Antara muka ini dikenali sebagai panggilan sistem.





Oleh kerana Linux mengikuti falsafah UNIX, semuanya adalah fail, banyak fungsi dapat dilakukan dengan membuka dan membaca atau menulis ke fail, yang boleh menjadi peranti. Di Windows, misalnya, anda mungkin menggunakan fungsi yang disebut CryptGenRandom untuk mengakses bait rawak. Tetapi di Linux, ini dapat dilakukan dengan hanya membuka file / dev / urandom dan membaca bait darinya menggunakan panggilan sistem input / output fail standard. Perbezaan penting ini membolehkan antara muka panggilan sistem lebih mudah.

Pembungkus Wafer-Thin

Di kebanyakan aplikasi, panggilan sistem tidak dilakukan terus ke kernel. Hampir semua program dihubungkan di pustaka C standard, yang menyediakan pembungkus tipis tetapi penting di sekitar panggilan sistem Linux. Perpustakaan memastikan bahawa argumen fungsi disalin ke daftar pemproses yang betul kemudian mengeluarkan panggilan sistem Linux yang sesuai. Apabila data diterima dari panggilan, pembungkus menafsirkan hasilnya dan mengembalikannya ke program secara konsisten.



Disebalik tabir

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

batalutama() {
}

Ini mungkin program C paling remeh yang pernah anda lihat. Ia hanya dapat mengawal melalui pintu masuk utama dan kemudian keluar. Ia bahkan tidak mengembalikan nilai kerana utama didefinisikan sebagai tidak sah. Simpan fail sebagai ctest.c dan mari kita menyusunnya:

ctest gcc.c -ctest tersebut

Setelah disusun, kita dapat melihat ukuran fail sebagai 8664 bait. Ia mungkin sedikit berbeza pada sistem anda, tetapi kira-kira 8k. Itu banyak kod hanya untuk masuk dan keluar! Sebabnya 8k adalah waktu libc libc dimasukkan. Walaupun kita melucutkan simbol, ia masih sedikit lebih dari 6k.

Dalam contoh yang lebih sederhana, kita boleh membuat panggilan sistem Linux untuk keluar daripada bergantung pada waktu runcit C untuk melakukannya untuk kita.

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

Di sini kita memindahkan 1 ke daftar EAX, membersihkan daftar EBX (yang sebaliknya mengandungi nilai pengembalian) kemudian memanggil sistem panggilan Linux mengganggu 0x80 (atau 128 dalam perpuluhan). Selang ini mencetuskan kernel untuk memproses panggilan kami.

Sekiranya kita menyusun contoh baru kita, yang disebut asmtest.c, dan menghilangkan simbol dan mengecualikan perpustakaan standard:

gcc-s-nostdlib asmtest.c -o asmestest

kita akan menghasilkan perduaan kurang dari 1k (pada sistem saya, ia menghasilkan 984 bait). Sebilangan besar kod ini adalah tajuk yang boleh dilaksanakan. Kami sekarang memanggil panggilan sistem Linux langsung.

Untuk Semua Tujuan Praktikal

Dalam hampir semua kes, anda tidak perlu membuat panggilan sistem langsung dalam program C anda. Sekiranya anda menggunakan bahasa perhimpunan, keperluannya mungkin timbul. Namun, dalam pengoptimuman, lebih baik membiarkan fungsi perpustakaan C membuat panggilan sistem dan hanya memasukkan kod kritikal prestasi anda dalam arahan pemasangan.

Cara Mengatur Tutorial Panggilan Sistem

Senarai Semua Panggilan Sistem

Sekiranya anda ingin melihat senarai semua panggilan sistem yang tersedia untuk Linux, anda boleh menyemak halaman rujukan ini: Senarai Penuh Panggilan Sistem di LinuxHint.com, filippo.io/linux-syscall-table/ dan atau syscalls.kernelgrok.com