Interrupt
ইন্টারাপ্ট
একটা asynchronous, বাহ্যিক ঘটনা (keypress, timer, device সংকেত) যা বর্তমান instruction-এর সাথে সম্পর্কহীনভাবে CPU-কে তার handler-এ পাঠায় — exception (synchronous) ও trap (deliberate)-এর থেকে আলাদা, যদিও mechanism প্রায় অভিন্ন।
also: exception, trap, interrupt vector table, IDT, NMI, maskable interrupt
তিনটা সম্পর্কিত কিন্তু ভিন্ন প্রক্রিয়া: interrupt বাহ্যিক,
asynchronous (keyboard, timer, network); exception সিঙ্ক্রোনাস,
বর্তমান instruction-এরই ফলাফল (divide by zero, page fault);
trap ইচ্ছাকৃত exception (system call-এর syscall/ecall)।
Common mechanism, চার ধাপ: (১) PC ও flags সংরক্ষণ, (২) একটা fixed interrupt vector table (x86-এ IDT, ২৫৬ entry) থেকে handler-এর ঠিকানা lookup, (৩) handler (OS-এর অংশ, উচ্চতর privilege-এ) execute, (৪) resume — fault-শ্রেণিতে সেই একই instruction থেকে (instruction ব্যর্থ হয়েছিল, তাই পুনরায় চেষ্টা), interrupt/trap-এ পরের instruction থেকে (আগেরটা সফল হয়ে গিয়েছিল)।
Maskable বনাম non-maskable (NMI): বেশিরভাগ interrupt একটা
flag (x86-এ IF) দিয়ে সাময়িক বন্ধ রাখা যায় — একটা handler নিজে
চলাকালীন এভাবেই পুনঃপ্রবেশ (re-entrancy) এড়ায়। NMI মাস্ক করা
যায় না, hardware failure-জাতীয় জরুরি সংকেতের জন্য সংরক্ষিত।
Out-of-order CPU-তে জটিলতা: precise exception পেতে [[reorder-buffer|reorder buffer]] আবশ্যিক — নাহলে “পরের” কোনো instruction speculative ভাবে আগেই architectural state আপডেট করে ফেলতে পারে, exception-এর পর সেই আপডেট পরিষ্কারভাবে ফেরানোর কোনো উপায় থাকে না।