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.
  • instagram viewer
  • 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

MembagikanMenciakMembagikanSurel

Topik-topik yang berkaitan

  • Linux
  • Kernel Linux
  • Sistem administrasi

Tentang Penulis

Fatih Küçükkarakurt (9 Artikel Diterbitkan)

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.

More From Fatih Küçükkarakurt

Berlangganan newsletter kami

Bergabunglah dengan buletin kami untuk kiat teknologi, ulasan, ebook gratis, dan penawaran eksklusif!

Klik di sini untuk berlangganan