Jawaban:
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) .
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.
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.
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 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.
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'.
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.
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.
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.
Perangkat lunak melakukan interupsi (dipicu oleh instruksi INT) berperilaku seperti perangkap. Instruksi selesai sebelum prosesor menyimpan statusnya dan melompat ke pengendali interupsi.
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)
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 ).
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.
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.
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.
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.
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.