Sampukan lwn Pengecualian
Dalam mana-mana komputer, semasa pelaksanaan program biasa, mungkin terdapat peristiwa yang boleh menyebabkan CPU terhenti buat sementara waktu. Peristiwa seperti ini dipanggil gangguan. Gangguan boleh disebabkan oleh sama ada kerosakan perisian atau perkakasan. Gangguan perkakasan dipanggil (sekadar) Gangguan, manakala gangguan perisian dipanggil Pengecualian. Sebaik sahaja gangguan (perisian atau perkakasan) dinaikkan, kawalan dipindahkan ke subrutin khas yang dipanggil ISR (Rutin Perkhidmatan Interrupt) yang boleh mengendalikan keadaan yang ditimbulkan oleh gangguan.
Apakah itu Gangguan?
Istilah Gangguan biasanya dikhaskan untuk gangguan perkakasan. Ia adalah gangguan kawalan program yang disebabkan oleh peristiwa perkakasan luaran. Di sini, luaran bermaksud luaran kepada CPU. Gangguan perkakasan biasanya datang daripada pelbagai sumber seperti cip pemasa, peranti persisian (papan kekunci, tetikus, dll.), port I/O (bersiri, selari, dll.), pemacu cakera, jam CMOS, kad pengembangan (kad bunyi, video). kad, dll). Ini bermakna gangguan perkakasan hampir tidak pernah berlaku disebabkan oleh beberapa peristiwa yang berkaitan dengan program pelaksanaan. Contohnya, peristiwa seperti penekanan kekunci pada papan kekunci oleh pengguna, atau pemasa pemasa perkakasan dalaman yang tamat masa boleh menimbulkan gangguan jenis ini dan boleh memaklumkan CPU bahawa peranti tertentu memerlukan perhatian. Dalam keadaan seperti itu CPU akan menghentikan apa yang pernah ia lakukan (iaitu menjeda atur cara semasa), menyediakan perkhidmatan yang diperlukan oleh peranti dan akan kembali ke program biasa. Apabila gangguan perkakasan berlaku dan CPU memulakan ISR, gangguan perkakasan lain dinyahdayakan (cth. dalam mesin 80×86). Jika anda memerlukan gangguan perkakasan lain berlaku semasa ISR berjalan, anda perlu melakukannya secara eksplisit dengan mengosongkan bendera gangguan (dengan arahan sti). Dalam mesin 80×86, mengosongkan bendera gangguan hanya akan menjejaskan gangguan perkakasan.
Apakah Pengecualian?
Exception ialah gangguan perisian, yang boleh dikenal pasti sebagai rutin pengendali khas. Pengecualian boleh dikenal pasti sebagai perangkap yang berlaku secara automatik (Perangkap boleh dikenal pasti sebagai pemindahan kawalan, yang dimulakan oleh pengaturcara). Secara amnya, tiada arahan khusus yang dikaitkan dengan pengecualian (perangkap dijana menggunakan arahan khusus). Jadi, pengecualian berlaku disebabkan oleh keadaan "luar biasa" yang berlaku semasa pelaksanaan program. Contohnya, pembahagian dengan sifar, pelaksanaan opcode haram atau kesalahan berkaitan memori boleh menyebabkan pengecualian. Apabila pengecualian dinaikkan, CPU menggantung sementara program yang sedang dijalankan dan memulakan ISR. ISR akan mengandungi perkara yang perlu dilakukan dengan pengecualian. Ia mungkin membetulkan masalah atau jika tidak mungkin ia boleh membatalkan program dengan anggun dengan mencetak mesej ralat yang sesuai. Walaupun arahan khusus tidak menyebabkan pengecualian, pengecualian akan sentiasa disebabkan oleh arahan. Contohnya, pembahagian dengan ralat sifar hanya boleh berlaku semasa pelaksanaan arahan pembahagian.
Apakah perbezaan antara Gangguan dan Pengecualian?
Gangguan ialah gangguan perkakasan, manakala pengecualian ialah gangguan perisian. Kejadian gangguan perkakasan biasanya melumpuhkan gangguan perkakasan lain, tetapi ini tidak benar untuk pengecualian. Jika anda perlu tidak membenarkan gangguan perkakasan sehingga pengecualian disampaikan, anda perlu mengosongkan bendera gangguan secara eksplisit. Dan biasanya bendera interrupt pada komputer mempengaruhi (perkakasan) interrupts berbanding pengecualian. Ini bermakna mengosongkan bendera ini tidak akan menghalang pengecualian.