Mengganggu vs pengecualian
Di mana -mana komputer, semasa pelaksanaan normal program, mungkin ada peristiwa yang boleh menyebabkan CPU berhenti sementara. Peristiwa seperti ini dipanggil gangguan. Gangguan boleh disebabkan oleh salah satu perisian atau kesalahan perkakasan. Gangguan perkakasan dipanggil (hanya) mengganggu, sementara gangguan perisian dipanggil pengecualian. Sebaik sahaja gangguan (perisian atau perkakasan) dibangkitkan, kawalan dipindahkan ke subrutin khas yang dipanggil ISR (rutin perkhidmatan gangguan) yang boleh mengendalikan syarat -syarat yang dibangkitkan oleh gangguan.
Apa yang mengganggu?
Istilah gangguan biasanya dikhaskan untuk gangguan perkakasan. Mereka adalah gangguan kawalan program yang disebabkan oleh peristiwa perkakasan luaran. Di sini, luaran bermaksud luaran ke CPU. Gangguan perkakasan biasanya datang dari pelbagai sumber seperti cip pemasa, peranti periferal (papan kekunci, tetikus, dll.), Port I/O (bersiri, selari, dll.), pemacu cakera, jam CMOS, kad pengembangan (kad bunyi, kad video, dll). Itu bermaksud gangguan perkakasan hampir tidak pernah berlaku kerana beberapa peristiwa yang berkaitan dengan program pelaksanaan. Sebagai contoh, peristiwa seperti tekan utama pada papan kekunci oleh pengguna, atau pemasa perkakasan dalaman masa keluar dapat meningkatkan gangguan seperti ini dan dapat memaklumkan CPU bahawa peranti tertentu memerlukan perhatian. Dalam keadaan seperti itu CPU akan menghentikan apa yang pernah dilakukannya (saya.e. menjeda program semasa), menyediakan perkhidmatan yang diperlukan oleh peranti dan akan kembali ke program biasa. Apabila gangguan perkakasan berlaku dan CPU memulakan ISR, gangguan perkakasan lain dilumpuhkan (e.g. di 80 × 86 mesin). Sekiranya anda memerlukan gangguan perkakasan lain yang berlaku semasa ISR sedang berjalan, anda perlu melakukannya dengan jelas dengan membersihkan bendera gangguan (dengan arahan STI). Dalam mesin 80 × 86, membersihkan bendera mengganggu hanya akan menjejaskan gangguan perkakasan.
Apa itu pengecualian?
Pengecualian adalah gangguan perisian, yang dapat dikenal pasti sebagai rutin pengendali khas. Pengecualian dapat dikenalpasti sebagai perangkap secara automatik (perangkap dapat dikenalpasti sebagai pemindahan kawalan, yang dimulakan oleh pengaturcara). Umumnya, tidak ada arahan khusus yang berkaitan dengan pengecualian (perangkap dijana menggunakan arahan tertentu). Oleh itu, pengecualian berlaku kerana keadaan "luar biasa" yang berlaku semasa pelaksanaan program. Sebagai contoh, pembahagian dengan sifar, pelaksanaan kod opkod haram atau kesalahan berkaitan memori boleh menyebabkan pengecualian. Setiap kali pengecualian dibangkitkan, CPU sementara menangguhkan program yang sedang dilaksanakan dan memulakan ISR. ISR akan mengandungi apa yang perlu dilakukan dengan pengecualian. Ia boleh membetulkan masalah atau jika tidak mungkin ia dapat membatalkan program dengan anggun dengan mencetak mesej ralat yang sesuai. Walaupun arahan tertentu tidak menyebabkan pengecualian, pengecualian akan selalu disebabkan oleh arahan. Sebagai contoh, pembahagian oleh kesilapan sifar hanya boleh berlaku semasa pelaksanaan arahan bahagian.
Apa perbezaan antara gangguan dan pengecualian?
Gangguan adalah gangguan perkakasan, sementara pengecualian adalah gangguan perisian. Kejadian gangguan perkakasan biasanya melumpuhkan gangguan perkakasan lain, tetapi ini tidak benar untuk pengecualian. Sekiranya anda perlu tidak membenarkan perkakasan mengganggu sehingga pengecualian disampaikan, anda perlu jelas membersihkan bendera gangguan. Dan biasanya bendera mengganggu pada komputer mempengaruhi (perkakasan) mengganggu berbanding dengan pengecualian. Ini bermaksud membersihkan bendera ini tidak akan menghalang pengecualian.