Mekanisme pensinyalan di kernel Linux memungkinkan aplikasi yang sedang berjalan untuk memberi tahu sistem secara asinkron ketika peristiwa baru terjadi. Karena sifatnya, mekanisme pensinyalan ini umumnya dikenal sebagai interupsi perangkat lunak. Sama seperti interupsi perangkat keras, sinyal mengganggu aliran normal aplikasi, dan tidak dapat diprediksi kapan aplikasi akan menerima sinyal.
Mari selami lebih dalam mekanisme pensinyalan di Linux dan pahami apa yang terjadi di balik layar.
Konsep Sinyal Dasar di Linux
Di Linux, proses menghasilkan sinyal dalam tiga situasi dasar:
- Ketika situasi luar biasa terjadi di sisi perangkat keras. Misalnya, Anda dapat memikirkan peristiwa seperti aplikasi yang mencoba mengakses wilayah di luar ruang alamat yang diizinkan (kesalahan segmentasi) atau menghasilkan kode mesin yang mencakup pembagian dengan nol operasi.
- Situasi seperti penggunaan kombinasi tombol seperti Ctrl + C atau Ctrl + Z di konsol oleh pengguna, mengubah ukuran layar konsol, atau mengirim sinyal mematikan.
- Pengatur waktu yang diatur dalam aplikasi kedaluwarsa, batas CPU yang diberikan ke aplikasi tinggi, data datang ke deskriptor file terbuka, dll.
Konsep sinyal telah ada sejak versi awal Unix. Sebelumnya, ada beberapa perbedaan antara versi Unix mengenai pemrosesan sinyal. Nanti, dengan standarisasi POSIX dibuat untuk manajemen sinyal, Linux dan turunan Unix lainnya mulai mengikuti standar ini. Untuk alasan ini, konsep sinyal Unix dan sinyal POSIX, yang mungkin Anda temui di beberapa dokumen, menunjukkan perbedaannya.
Nomor Sinyal
Sinyal memiliki berbagai nilai numerik, dimulai dengan satu. Misalnya, sinyal 1 adalah MEMPERCEPATKAN sinyal di hampir setiap sistem, atau sinyal 9 adalah a MEMBUNUH sinyal.
Namun, menggunakan nomor ini sangat tidak disarankan saat Anda menggunakan sinyal dalam aplikasi Anda. Untuk sinyal POSIX, sinyal.h file harus ada dalam aplikasi dan pengembang harus menggunakan definisi konstan dari angka terkait seperti: SIGHUP, SIGKILL, dll. alih-alih.
Jika Anda memeriksa /usr/include/signal.h file di sistem Anda, Anda dapat melihat operasi tambahan dan file lain yang disertakan dengan melihat definisi nilai seperti: __USE_POSIX, __USE_XOPEN, __USE_POSIX199309, dll. dalam file. Anda dapat menemukan nomor sinyal yang tersedia di sistem Linux di /usr/include/asm-generic/signal.h file, yang tidak perlu Anda sertakan langsung dalam kode aplikasi Anda.
Pembangkitan dan Pengiriman Sinyal
Pembangkitan sinyal terjadi karena suatu peristiwa. Namun, pengiriman (delivering) sinyal ke aplikasi yang relevan tidak terjadi bersamaan dengan pembangkitan sinyal.
Agar sinyal dapat dikirim ke aplikasi, aplikasi harus sedang berjalan dan memiliki sumber daya CPU. Oleh karena itu, pengiriman sinyal ke aplikasi tertentu terjadi saat aplikasi yang relevan mulai bekerja kembali setelah sakelar konteks.
Konsep Sinyal Tertunda
Selama waktu dari generasi ke transmisi sinyal, sinyal berada dalam keadaan siaga. Anda dapat mengakses jumlah sinyal tertunda dan jumlah sinyal tertunda yang diizinkan untuk suatu proses dari /proc/PID/status mengajukan.
# Untuk proses dengan PID: 2299
cat /proc/2299/status
# Keluaran
...
SigQ: 2/31630
...
Masker Sinyal dan Pemblokiran
Waktu yang tepat dari sinyal akan tiba seringkali tidak dapat diprediksi oleh aplikasi. Oleh karena itu, beberapa gangguan kritis dapat terjadi selama operasi apa pun. Ini dapat menyebabkan masalah besar untuk aplikasi skala besar.
Untuk mencegah beberapa situasi yang tidak diinginkan seperti ini, perlu menggunakan masker sinyal. Dengan demikian dimungkinkan untuk memblokir beberapa sinyal sebelum operasi kritis. Pada tahap ini, penting untuk menyelesaikan bagian kritis dan menghapus blok yang ditentukan. Proses ini adalah sesuatu yang harus diperhatikan oleh pengembang aplikasi.
Saat aplikasi memblokir sebuah sinyal, sinyal lain dengan tipe yang sama yang dihasilkan akan berada dalam status menunggu hingga tidak diblokir. Dalam aplikasi, pengiriman sinyal tertunda juga disediakan segera setelah blok dihapus.
Dengan cara ini, jenis sinyal yang sama yang ditahan pada saat pemblokiran dikirim ke aplikasi hanya sekali setelah pemblokiran dihapus dalam penggunaan normal. Situasinya berbeda untuk sinyal waktu nyata.
Jenis Sinyal Linux
Tindakan default dapat bervariasi sesuai dengan jenis sinyal. Jika aplikasi yang menerima sinyal yang sesuai tidak memiliki fungsi pengendali sinyal, tindakan default akan dilakukan. Terkadang ini berarti menghentikan aplikasi dan terkadang mengabaikan sinyal.
Beberapa sinyal tidak dapat ditangkap pada lapisan aplikasi, sinyal ini selalu melakukan tindakan default (seperti sinyal KILL).
Selain beberapa tindakan yang menyebabkan aplikasi berhenti, file dump inti juga dibuat. File dump inti, dibuat dengan menulis tabel memori virtual dari proses terkait ke disk, membantu pengguna untuk memeriksa informasi keadaan sebelum proses berakhir dengan alat debugging pada tahap selanjutnya.
Nilai-nilai berikut ini didasarkan pada arsitektur MIPS teladan:
Sinyal | Nomor | Tindakan Default | Bisakah Itu Ditangkap? |
---|---|---|---|
SIGHUP | 1 | Hentikan aplikasi | Ya |
TANDA TANGAN | 2 | Hentikan aplikasi | Ya |
SIGQUIT | 3 | Hentikan aplikasi (core dump) | Ya |
SIGILL | 4 | Hentikan aplikasi (core dump) | Ya |
SIGTRAP | 5 | Hentikan aplikasi (core dump) | Ya |
SIGABRT | 6 | Hentikan aplikasi (core dump) | Ya |
SIGFPE | 8 | Hentikan aplikasi (core dump) | Ya |
SIGKILL | 9 | Hentikan aplikasi | Tidak |
SIGBUS | 10 | Hentikan aplikasi (core dump) | Ya |
SIGSEGV | 11 | Hentikan aplikasi (core dump) | Ya |
SIGSYS | 12 | Hentikan aplikasi (core dump) | Ya |
SIGPIPE | 13 | Hentikan aplikasi | Ya |
SIGALRM | 14 | Hentikan aplikasi | Ya |
SIGTERM | 15 | Hentikan aplikasi | Ya |
SIGUSR1 | 16 | Hentikan aplikasi | Ya |
SIGUSR2 | 17 | Hentikan aplikasi | Ya |
SIGCHLD | 18 | Mengabaikan | Ya |
SIGTSTP | 20 | Berhenti | Ya |
SIGURG | 21 | Mengabaikan | Ya |
SIGPOLL | 22 | Hentikan aplikasi | Ya |
SIGSTOP | 23 | Berhenti | Tidak |
SIGCONT | 25 | Lanjutkan jika berhenti | Ya |
SIGTTIN | 26 | Berhenti | Ya |
SIGTTOU | 27 | Berhenti | Ya |
SIGVTALRM | 28 | Hentikan aplikasi | Ya |
SIGPROF | 29 | Hentikan aplikasi | Ya |
SIGXCPU | 30 | Hentikan aplikasi (core dump) | Ya |
SIGXFSZ | 31 | Hentikan aplikasi (core dump) | Ya |
Siklus Hidup Sinyal di Linux
Sinyal melewati tiga tahap. Mereka diproduksi terutama dalam fase produksi, oleh kernel atau proses apa pun, dan diwakili oleh angka. Mereka bekerja dengan ringan dan cepat, karena mereka tidak memiliki beban tambahan. Tetapi jika Anda melihat sisi POSIX, Anda akan melihat bahwa sinyal waktu nyata dapat mengirimkan data tambahan.
Fase pengiriman untuk sinyal datang setelah fase produksi. Biasanya, sinyal mencapai aplikasi dari kernel secepat mungkin. Namun, terkadang aplikasi dapat memblokir sinyal saat melakukan operasi kritis. Dalam kasus seperti itu, sinyal tetap tertunda sampai transaksi terjadi.
Seperti sinyal, proses juga merupakan bagian integral dari ekosistem Linux. Memahami proses apa dan bagaimana cara kerjanya sangat penting jika Anda berencana untuk menjadi administrator sistem Linux.
Apa itu Proses di Linux?
Baca Selanjutnya
Topik-topik yang berkaitan
- Linux
- Kernel Linux
- Sistem administrasi
Tentang Penulis
Seorang insinyur dan pengembang perangkat lunak yang merupakan penggemar matematika dan teknologi. Dia selalu menyukai komputer, matematika dan fisika. Dia telah mengembangkan proyek mesin permainan serta pembelajaran mesin, jaringan saraf tiruan dan perpustakaan aljabar linier. Selain itu terus bekerja pada pembelajaran mesin dan matriks linier.
Berlangganan newsletter kami
Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!
Klik di sini untuk berlangganan