Panggilan Sistem

Apa itu Panggilan Sistem Linux?

Apa itu Panggilan Sistem Linux?

Perkara Pertama Yang Pertama

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

Kernel Linux adalah program khusus yang boot dan berjalan pada tahap paling rendah yang tersedia 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 beberapa program secara selari.

Apabila kernel melaksanakan 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 dapat menjadi perangkat. 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 byte 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.

kekosongan utama ()

Ini mungkin merupakan 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 -o ctest

Setelah dikompilasi, 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 disertakan. Walaupun kita melucutkan simbol, ia masih sedikit melebihi 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 _start ()
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 melucutkan simbol dan mengecualikan perpustakaan standard:

gcc -s -nostdlib asmtest.c -o asmtest

kami 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 berikut: Senarai Penuh Panggilan Sistem di LinuxHint.com, filippo.io / linux-syscall-table / dan atau syscall.kernelgrok.com

5 Kad Tangkap Permainan Teratas
Kita semua telah melihat dan menyukai streaming permainan permainan di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain terat...
Cara Membangunkan Permainan di Linux
Satu dekad yang lalu, tidak banyak pengguna Linux akan meramalkan bahawa sistem operasi kegemaran mereka suatu hari nanti akan menjadi platform permai...
Port Sumber Terbuka Mesin Permainan Komersial
Rekreasi enjin permainan sumber terbuka dan bebas platform boleh digunakan untuk bermain lama dan juga beberapa tajuk permainan yang baru-baru ini. Ar...