GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana kernel Linux menangani interupsi

Interupsi adalah bagian penting dari cara kerja CPU modern. Misalnya, setiap kali Anda menekan tombol pada keyboard, CPU terganggu sehingga PC dapat membaca input pengguna dari keyboard. Ini terjadi begitu cepat sehingga Anda tidak melihat adanya perubahan atau penurunan dalam pengalaman pengguna.

Apalagi keyboard bukan satu-satunya komponen yang bisa menyebabkan interupsi. Secara umum, ada tiga jenis kejadian yang dapat menyebabkan CPU terganggu:Interupsi perangkat keras , interupsi perangkat lunak , dan pengecualian . Sebelum masuk ke berbagai jenis interupsi, saya akan mendefinisikan beberapa istilah.

Definisi

Permintaan interupsi (IRQ ) diminta oleh pengontrol interupsi yang dapat diprogram (PIC ) dengan tujuan menginterupsi CPU dan menjalankan rutin layanan interupsi (ISR ). ISR adalah program kecil yang memproses data tertentu tergantung pada penyebab IRQ. Pemrosesan normal terputus hingga ISR selesai.

Di masa lalu, IRQ ditangani oleh microchip terpisah—PIC—dan perangkat I/O dihubungkan langsung ke PIC. PIC mengelola berbagai IRQ perangkat keras dan dapat berbicara langsung dengan CPU. Ketika IRQ terjadi, PIC menulis data ke CPU dan mengajukan permintaan interupsi (INTR ) pin.

Saat ini, IRQ ditangani oleh pengontrol interupsi yang dapat diprogram tingkat lanjut (APIC ), yang merupakan bagian dari CPU. Setiap inti memiliki APIC sendiri.

Jenis interupsi

Seperti yang saya sebutkan, interupsi dapat dipisahkan menjadi tiga jenis tergantung pada sumbernya:

Interupsi perangkat keras

Ketika perangkat keras ingin memberi tahu CPU bahwa data tertentu siap untuk diproses (misalnya, entri keyboard atau ketika sebuah paket tiba di antarmuka jaringan), ia mengirimkan IRQ untuk memberi sinyal kepada CPU bahwa data tersedia. Ini memanggil ISR tertentu yang didaftarkan oleh driver perangkat selama kernel dimulai.

Interupsi perangkat lunak

Lebih banyak sumber daya Linux

  • Lembar contekan perintah Linux
  • Lembar contekan perintah Linux tingkat lanjut
  • Kursus online gratis:Ikhtisar Teknis RHEL
  • Lembar contekan jaringan Linux
  • Lembar contekan SELinux
  • Lembar contekan perintah umum Linux
  • Apa itu container Linux?
  • Artikel Linux terbaru kami

Saat Anda memutar video, penting untuk menyinkronkan pemutaran musik dan video sehingga kecepatan musik tidak bervariasi. Ini dicapai melalui interupsi perangkat lunak yang berulang kali diaktifkan oleh sistem pengatur waktu yang tepat (dikenal sebagai jiffies). Timer ini memungkinkan pemutar musik Anda untuk melakukan sinkronisasi. Interupsi perangkat lunak juga dapat dipanggil dengan instruksi khusus untuk membaca atau menulis data ke perangkat keras.

Interupsi perangkat lunak juga penting ketika kemampuan waktu nyata diperlukan (seperti dalam aplikasi industri). Anda dapat menemukan informasi lebih lanjut tentang ini di artikel Yayasan Linux Pengantar Linux real-time untuk pengembang tersemat .

Pengecualian

Pengecualian adalah jenis interupsi yang mungkin Anda ketahui. Ketika CPU menjalankan perintah yang akan menghasilkan pembagian dengan nol atau kesalahan halaman, setiap eksekusi tambahan akan terganggu. Dalam kasus seperti itu, Anda akan diberi tahu melalui jendela pop-up atau dengan melihat kesalahan segmentasi (core dumped) di keluaran konsol. Tetapi tidak setiap pengecualian disebabkan oleh instruksi yang salah.

Pengecualian dapat dibagi lagi menjadi Kesalahan , Perangkap , dan Dibatalkan .

  • Kesalahan: Kesalahan adalah pengecualian yang dapat diperbaiki oleh sistem, misalnya, ketika suatu proses mencoba mengakses data dari halaman memori yang ditukar ke hard drive. Alamat yang diminta berada dalam ruang alamat proses, dan hak aksesnya benar. Jika halaman tidak ada dalam RAM, IRQ dimunculkan dan memulai penangan pengecualian kesalahan halaman untuk memuat halaman memori yang diinginkan ke dalam RAM. Jika operasi berhasil, eksekusi akan dilanjutkan.
  • Perangkap: Perangkap terutama digunakan untuk debugging. Jika Anda mengatur breakpoint dalam sebuah program, Anda memasukkan instruksi khusus yang menyebabkannya memicu jebakan. Jebakan dapat memicu sakelar konteks yang memungkinkan debugger Anda membaca dan menampilkan nilai variabel lokal. Eksekusi dapat dilanjutkan setelahnya. Perangkap juga merupakan cara default untuk menjalankan panggilan sistem (seperti mematikan proses).
  • Dibatalkan: Pembatalan disebabkan oleh kegagalan perangkat keras atau nilai yang tidak konsisten dalam tabel sistem. Abort tidak melaporkan lokasi instruksi yang menyebabkan pengecualian. Ini adalah interupsi yang paling kritis. Abort memanggil penghentian pengecualian yang dibatalkan . sistem , yang menghentikan proses yang menyebabkannya.

Dapatkan langsung

IRQ diurutkan berdasarkan prioritas dalam vektor pada APIC (0=prioritas tertinggi). 32 interupsi pertama (0–31) memiliki urutan tetap yang ditentukan oleh CPU. Anda dapat menemukan ikhtisarnya di halaman Pengecualian OsDev. IRQ berikutnya dapat diberikan secara berbeda. Tabel deskriptor interupsi (IDT ) berisi penugasan antara IRQ dan ISR. Linux mendefinisikan vektor IRQ dari 0 hingga 256 untuk penugasan.

Untuk mencetak daftar interupsi terdaftar di sistem Anda, buka konsol dan ketik:

cat /proc/interrupts

Anda akan melihat sesuatu seperti ini:

Dari kiri ke kanan, kolomnya adalah:vektor IRQ, jumlah interupsi per CPU (0 .. n ), sumber perangkat keras, informasi saluran sumber perangkat keras, dan nama perangkat yang menyebabkan IRQ.

Di bagian bawah tabel, ada beberapa interupsi non-numerik. Mereka adalah interupsi khusus arsitektur, seperti interupsi timer lokal (LOC ) pada IRQ 236. Beberapa di antaranya ditentukan dalam tata letak vektor IRQ Linux di pohon sumber kernel Linux.

Untuk mendapatkan tampilan langsung dari tabel ini, jalankan:

watch -n1 "cat /proc/interrupts"

Kesimpulan

Penanganan IRQ yang tepat sangat penting untuk interaksi yang tepat dari perangkat keras, driver, dan perangkat lunak. Untungnya, kernel Linux melakukan pekerjaan yang sangat baik, dan pengguna PC normal hampir tidak akan memperhatikan apa pun tentang penanganan interupsi kernel secara keseluruhan.

Ini bisa menjadi sangat rumit, dan artikel ini hanya memberikan gambaran singkat tentang topik tersebut. Sumber informasi yang baik untuk menyelami subjek lebih dalam adalah Linux Inside eBook (CC BY-NC-SA 4.0) dan repositori Pengajaran Kernel Linux.


Linux
  1. Bagaimana Linux datang ke mainframe

  2. Siklus hidup pengujian kernel Linux

  3. Cara memutakhirkan Kernel di Desktop Linux

  1. Linux – Bagaimana Mengaktifkan User_namespaces Di Kernel? (untuk `unshare` tanpa hak.)?

  2. Cara membersihkan cache yang digunakan oleh kernel Linux

  3. Bagaimana cara memeriksa HZ di terminal?

  1. Linux – Bagaimana Menemukan Implementasi Panggilan Sistem Kernel Linux?

  2. Linux – Bagaimana Cara Menentukan Modul Yang Menodai Kernel?

  3. Bagaimana Interupsi ditangani di Linux?