Ngắt so với ngoại lệ
Trong bất kỳ máy tính nào, trong quá trình thực thi chương trình bình thường, có thể có các sự kiện có thể khiến CPU tạm thời dừng lại. Các sự kiện như thế này được gọi là gián đoạn. Ngắt có thể do lỗi phần mềm hoặc phần cứng. Ngắt phần cứng được gọi là (đơn giản) Ngắt, trong khi ngắt phần mềm được gọi là Ngoại lệ. Khi một ngắt (phần mềm hoặc phần cứng) được nâng lên, điều khiển được chuyển đến một chương trình con đặc biệt gọi là ISR (Routine Service Routine) có thể xử lý các điều kiện được đưa ra bởi ngắt.
Ngắt là gì?
Thuật ngữ Ngắt thường được dành riêng cho các ngắt phần cứng. Chúng là các gián đoạn điều khiển chương trình gây ra bởi các sự kiện phần cứng bên ngoài. Ở đây, bên ngoài có nghĩa là bên ngoài CPU. Ngắt phần cứng thường đến từ nhiều nguồn khác nhau như chip hẹn giờ, thiết bị ngoại vi (bàn phím, chuột, v.v.), cổng I / O (nối tiếp, song song, v.v.), ổ đĩa, đồng hồ CMOS, thẻ mở rộng (card âm thanh, video thẻ, v.v.) Điều đó có nghĩa là sự gián đoạn phần cứng hầu như không bao giờ xảy ra do một số sự kiện liên quan đến chương trình thực thi. Ví dụ, một sự kiện như người dùng nhấn phím trên bàn phím hoặc hết giờ hẹn giờ phần cứng bên trong có thể làm tăng loại ngắt này và có thể thông báo cho CPU rằng một thiết bị nào đó cần được chú ý. Trong tình huống như vậy, CPU sẽ dừng những gì nó đang làm (tức là tạm dừng chương trình hiện tại), cung cấp dịch vụ theo yêu cầu của thiết bị và sẽ quay lại chương trình bình thường. Khi xảy ra gián đoạn phần cứng và CPU khởi động ISR, các ngắt phần cứng khác sẽ bị tắt (ví dụ: trong các máy 80 × 86). Nếu bạn cần các ngắt phần cứng khác xảy ra trong khi ISR đang chạy, bạn cần thực hiện điều đó một cách rõ ràng bằng cách xóa cờ ngắt (với lệnh sti). Trong các máy 80 × 86, việc xóa cờ ngắt sẽ chỉ ảnh hưởng đến các ngắt phần cứng.
Ngoại lệ là gì?
Ngoại lệ là một ngắt phần mềm, có thể được xác định là một thủ tục xử lý đặc biệt. Ngoại lệ có thể được xác định là bẫy tự động xảy ra (Bẫy có thể được xác định là chuyển giao quyền kiểm soát, được khởi tạo bởi lập trình viên). Nói chung, không có hướng dẫn cụ thể liên quan đến ngoại lệ (bẫy được tạo bằng hướng dẫn cụ thể). Vì vậy, một ngoại lệ xảy ra do một điều kiện đặc biệt của người dùng xảy ra trong quá trình thực thi chương trình. Ví dụ: chia cho số 0, việc thực thi một opcode bất hợp pháp hoặc lỗi liên quan đến bộ nhớ có thể gây ra ngoại lệ. Bất cứ khi nào một ngoại lệ được đưa ra, CPU tạm thời tạm dừng chương trình mà nó đang thực thi và khởi động ISR. ISR sẽ chứa những gì phải làm với ngoại lệ. Nó có thể khắc phục sự cố hoặc nếu không thể, nó có thể hủy bỏ chương trình một cách duyên dáng bằng cách in một thông báo lỗi phù hợp. Mặc dù một hướng dẫn cụ thể không gây ra ngoại lệ, một ngoại lệ sẽ luôn được gây ra bởi một hướng dẫn. Ví dụ, lỗi chia cho số 0 chỉ có thể xảy ra trong khi thực hiện lệnh chia.
Sự khác biệt giữa Ngắt và Ngoại lệ?
Ngắt là ngắt phần cứng, trong khi ngoại lệ là ngắt phần mềm. Sự xuất hiện của các ngắt phần cứng thường vô hiệu hóa các ngắt phần cứng khác, nhưng điều này không đúng với các trường hợp ngoại lệ. Nếu bạn cần không cho phép ngắt phần cứng cho đến khi có ngoại lệ được cung cấp, bạn cần xóa cờ ngắt một cách rõ ràng. Và thông thường cờ ngắt trên máy tính ảnh hưởng đến ngắt (phần cứng) trái ngược với ngoại lệ. Điều này có nghĩa là xóa cờ này sẽ không ngăn chặn ngoại lệ.