Apa perbedaan antara Trap dan Interrupt?

Jawaban:

203

Sebuah perangkap adalah pengecualian dalam proses pengguna. Ini disebabkan oleh pembagian oleh nol atau akses memori tidak valid. Ini juga cara biasa untuk menjalankan rutin kernel ( panggilan sistem ) karena dijalankan dengan prioritas lebih tinggi daripada kode pengguna. Penanganannya sinkron (jadi kode pengguna ditangguhkan dan dilanjutkan setelahnya). Dalam arti mereka "aktif" - sebagian besar waktu, kode mengharapkan jebakan terjadi dan bergantung pada fakta ini.

Sebuah interupsi adalah sesuatu yang dihasilkan oleh perangkat keras (perangkat seperti hard disk, kartu grafis, I / O port, dll). Ini asinkron (yaitu mereka tidak terjadi di tempat-tempat yang dapat diprediksi dalam kode pengguna) atau "pasif" karena interrupt handler harus menunggu sampai akhirnya terjadi.

Anda juga dapat melihat jebakan sebagai jenis interupsi internal-CPU karena penangan untuk penangan jebakan terlihat seperti penangan interupsi (register dan penunjuk simpanan disimpan, ada sakelar konteks, eksekusi dapat dilanjutkan dalam beberapa kasus ketika penghentian) .

Aaron Digulla
sumber
5
Sangat menarik bahwa lxr.free-electrons.com/source/arch/x86/kernel/... membagi dengan nol diinisialisasi sebagai interupsi perangkat keras, mengapa begitu?
Alex Kreimer
8
Karena itu benar-benar sebuah interupsi yang dikirim CPU ketika ALU menemukan masalah ini. Sama seperti kesalahan segmentasi. Namun, tidak semua kesalahan matematika menyebabkan interupsi (tidak meluap).
Aaron Digulla
4
Itu masuk akal. Tapi kemudian, yang agak membingungkan adalah mengapa di kernel Linux sebelumnya diinisialisasi sebagai perangkap perangkat lunak: set_trap_gate (0, & divide_error);
Alex Kreimer
11
Apa maksudmu, " agak membingungkan"? Ini sangat membingungkan :-) Masalahnya di sini adalah bahwa membagi dengan nol adalah gangguan hardware (IRQ / vector 0) tetapi pengembang kernel memiliki beberapa pilihan bagaimana menanganinya. Jadi dari proses pengguna, ini jebakan tetapi dari sisi CPU, ini adalah interupsi. Siapa yang benar? Tidak ada Kedua?
Aaron Digulla
3
Tentu saja, ini hanya berlaku untuk CPU x86. CPU lain bekerja dengan cara berbeda.
Aaron Digulla
110

Perangkap dan interupsi terkait erat. Perangkap adalah jenis pengecualian , dan pengecualian serupa dengan interupsi.

Intel x86 mendefinisikan dua kategori yang tumpang tindih, peristiwa vektor ( interupsi vs pengecualian ), dan kelas pengecualian ( kesalahan vs perangkap vs batal ).

Semua kutipan dalam posting ini berasal dari versi April 2016 dari Manual Pengembang Perangkat Lunak Intel . Untuk perspektif x86 (pasti dan kompleks), saya sarankan membaca bab SDM tentang penanganan Interupsi dan Pengecualian.

Acara Vektor

Vektor Acara ( interupsi dan pengecualian ) menyebabkan prosesor untuk melompat ke penangan interupsi setelah menyimpan banyak keadaan prosesor (cukup sehingga eksekusi dapat dilanjutkan dari titik itu nanti).

Pengecualian dan interupsi memiliki ID, yang disebut vektor, yang menentukan penangan interupsi yang dilompati prosesor. Penangan interupsi dijelaskan dalam Tabel Penjelasan Interupsi.

Terganggu

Interupsi terjadi secara acak selama pelaksanaan suatu program, sebagai respons terhadap sinyal dari perangkat keras. Perangkat keras sistem menggunakan interupsi untuk menangani peristiwa di luar prosesor, seperti permintaan untuk servis perangkat periferal. Perangkat lunak juga dapat menghasilkan interupsi dengan menjalankan instruksi INT n.

Pengecualian

Pengecualian terjadi ketika prosesor mendeteksi kondisi kesalahan saat menjalankan instruksi, seperti pembagian dengan nol. Prosesor mendeteksi berbagai kondisi kesalahan termasuk pelanggaran perlindungan, kesalahan halaman, dan kesalahan mesin internal.

Klasifikasi Pengecualian

Pengecualian diklasifikasikan sebagai kesalahan , jebakan , atau batal tergantung pada cara mereka dilaporkan dan apakah instruksi yang menyebabkan pengecualian dapat dimulai kembali tanpa kehilangan kelangsungan program atau tugas.

Ringkasan: perangkap menambah pointer instruksi, kesalahan tidak, dan membatalkan 'meledak'.

Perangkap

Sebuah perangkap adalah pengecualian yang dilaporkan segera setelah pelaksanaan instruksi perangkap. Traps memungkinkan eksekusi suatu program atau tugas dilanjutkan tanpa kehilangan kontinuitas program. Alamat balik untuk penangan jebakan menunjuk ke instruksi yang akan dieksekusi setelah instruksi penjebakan.

Kesalahan

Sebuah kesalahan adalah pengecualian yang umumnya dapat dikoreksi dan bahwa, sekali diperbaiki, memungkinkan program untuk restart tanpa kehilangan kontinuitas. Ketika kesalahan dilaporkan, prosesor mengembalikan status mesin ke keadaan sebelum awal pelaksanaan instruksi kesalahan. Alamat pengembalian (isi yang disimpan dari register CS dan EIP) untuk penangan kesalahan menunjuk ke instruksi yang salah, bukan ke instruksi yang mengikuti instruksi yang salah.

Contoh: Kesalahan halaman seringkali dapat dipulihkan. Sepotong ruang alamat aplikasi mungkin telah ditukar ke disk dari ram. Aplikasi akan memicu kesalahan halaman ketika mencoba mengakses memori yang telah ditukar. Kernel dapat menarik memori itu dari disk ke ram, dan kontrol tangan kembali ke aplikasi. Aplikasi akan melanjutkan di mana ia tinggalkan (pada instruksi kesalahan yang mengakses memori yang ditukar), tetapi kali ini akses memori harus berhasil tanpa kesalahan.

Menggugurkan

Sebuah batalkan adalah pengecualian yang tidak selalu melaporkan lokasi yang tepat dari instruksi menyebabkan pengecualian dan tidak memungkinkan restart dari program atau tugas yang menyebabkan pengecualian. Abort digunakan untuk melaporkan kesalahan parah, seperti kesalahan perangkat keras dan nilai tidak konsisten atau ilegal dalam tabel sistem.

Kasus Tepi

Perangkat lunak melakukan interupsi (dipicu oleh instruksi INT) berperilaku seperti perangkap. Instruksi selesai sebelum prosesor menyimpan statusnya dan melompat ke pengendali interupsi.

ruthafjord
sumber
6
Ini adalah jawaban yang bagus. Saya yakin antrian ulasan "Jawaban Terlambat dari Pengguna Baru" memberi saya ujian untuk memastikan saya memperhatikan.
Noumenon
1
Terima kasih! Itu sangat berarti bagi saya :)
ruthafjord
Ini adalah jawaban yang bagus untuk x86. Pertanyaan awalnya cukup umum dan tidak menyebutkan x86. Saya mengedit untuk mencoba mencapai keseimbangan. Mungkin Anda bisa menambahkan paragraf lain di bagian atas jawaban ini untuk menjawab pertanyaan tentang terminologi di luar dunia x86? Dan / atau tinggalkan suntingan lain pada pertanyaan jika Anda pikir saya membuatnya lebih buruk: PI hanya benar-benar tahu x86 sendiri, tetapi mudah-mudahan memang benar bahwa sistem lain menggunakan terminologi yang sangat mirip, dan Anda bisa mengatakannya :)
Peter Cordes
1
Skim yang PPC buku aarchitecture, dan sepertinya definisi mereka sebagian besar tumpang tindih. Mereka memiliki nama baru untuk kasus tepi, dan memperlakukan pengecualian seperti subtipe interupsi, bukan bagian dari kategori yang berbeda.
ruthafjord
1
Saya pikir jawaban ini paling menggambarkannya. Ini membahas garis buram yang bisa ada di antara keduanya. Dan menyebutkan bahwa kesalahan halaman mengakibatkan CPU memasang kembali instruksi, sebuah perangkap melompati instruksi dan melanjutkan.
in70x
9

Secara umum, istilah-istilah seperti pengecualian, kesalahan, aborsi, Perangkap , dan Interupsi semuanya memiliki arti yang sama dan disebut "Interupsi".

Datang ke perbedaan antara Trap dan Interrupt:

Trap: Apakah seorang programmer memulai dan diharapkan mentransfer kontrol ke rutinitas handler khusus. (Misalnya: instruksi INT 80x86 adalah contoh yang baik)

Dimana sebagai

Interrupt (Hardware): Adalah gangguan kontrol program berdasarkan peristiwa perangkat keras eksternal eksternal ke CPU (Misalnya: Menekan tombol pada keyboard atau waktu habis pada chip timer)

Cheshar
sumber
Definisi yang bagus. Sumber?
alexlomba87
6

Sebuah perangkap adalah jenis khusus dari interupsi yang sering disebut sebagai software interrupt . Sebuah interupsi adalah istilah yang lebih umum yang mencakup interupsi hardware (interupsi dari perangkat hardware) dan interupsi perangkat lunak (interupsi dari perangkat lunak, seperti perangkap ).

Paul R
sumber
4
Hal ini semakin membingungkan bahkan beberapa penulis (Tanenbaum) menyebut "perangkap perangkat keras." Jika kita dapat memiliki jebakan perangkat keras dan interupsi perangkat lunak, jelas definisi tersebut cukup berlumpur dan dapat berjalan baik, selalu membutuhkan kata perangkat keras atau perangkat lunak.
The111
3

Perangkap dipanggil oleh kode seperti program dan digunakan misalnya untuk memanggil rutinitas OS (yaitu biasanya sinkron). Interupsi disebut oleh peristiwa (berkali-kali perangkat keras, seperti kartu jaringan yang menerima data, atau pengatur waktu CPU), dan - seperti namanya - mengganggu aliran kontrol normal, karena CPU harus beralih ke rutin driver untuk menangani acara.

jujur
sumber
2

Interupsi adalah perubahan aliran yang dihasilkan perangkat keras dalam sistem. Penangan interupsi dipanggil untuk menangani penyebab interupsi; kontrol kemudian dikembalikan ke konteks dan instruksi yang terputus. Jebakan adalah gangguan yang dihasilkan perangkat lunak. Interupsi dapat digunakan untuk memberi sinyal penyelesaian I / O untuk meniadakan perlunya polling perangkat. Jebakan dapat digunakan untuk memanggil rutinitas sistem operasi atau untuk menangkap kesalahan aritmatika.

Dinesh Reddy
sumber
2

Saya pikir Jebakan disebabkan oleh pelaksanaan instruksi saat ini dan dengan demikian mereka disebut sebagai peristiwa sinkron. sedangkan interupsi disebabkan oleh instruksi independen yang berjalan di prosesor yang terkait dengan peristiwa eksternal dan dengan demikian dikenal sebagai yang tidak sinkron.

chetan pawar
sumber
2

Interupsi adalah interupsi perangkat keras, sedangkan perangkap adalah interupsi perangkat lunak. Kejadian gangguan perangkat keras biasanya menonaktifkan gangguan perangkat keras lainnya, tetapi ini tidak berlaku untuk jebakan. Jika Anda perlu melarang perangkat keras mengganggu hingga jebakan disajikan, Anda perlu menghapus tanda interupsi secara eksplisit. Dan biasanya flag interrupt pada komputer mempengaruhi interupsi (hardware) sebagai lawan dari trap. Ini berarti bahwa membersihkan bendera ini tidak akan mencegah jebakan. Tidak seperti jebakan, interupsi harus mempertahankan status CPU sebelumnya.

Anamik Sarvaiya
sumber
1

Jebakan adalah gangguan perangkat lunak. Jika Anda menulis sebuah program di mana Anda mendeklarasikan variabel yang memiliki nilai nol dibagi maka itu diperlakukan sebagai jebakan. Setiap kali Anda menjalankan program ini akan menjebak kesalahan yang sama pada saat yang sama. Panggilan sistem adalah versi khusus dari jebakan di mana suatu program meminta os untuk layanannya yang diperlukan. Dalam hal interupsi (kata umum untuk gangguan hardware) seperti kesalahan i / o, cpu terputus secara acak dan tentu saja itu bukan kesalahan programmer kami. Ini adalah perangkat keras yang membawa mereka.

Sanketssj5
sumber
1
Bisakah Anda menjelaskan bagaimana system call adalah jebakan?
Radha Gogia