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. Những sự kiện như thế này được gọi là sự gián đoạn. Gián đoạn 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 ngắt (phần mềm hoặc phần cứng) xuất hiện, điều khiển được chuyển đến một chương trình con đặc biệt gọi là ISR (Quy trình Dịch vụ Ngắt) có thể xử lý các điều kiện do ngắt tạo ra.
Ngắt là gì?
Thuật ngữ Ngắt thường được dành cho ngắt phần cứng. Chúng là những gián đoạn điều khiển chương trình do các sự kiện phần cứng bên ngoài gây ra. Ở đâ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, xung nhịp CMOS, card mở rộng (card âm thanh, video. thẻ, v.v.). Điều đó có nghĩa là các ngắt 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 đang 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 bộ hẹn giờ phần cứng bên trong hết thời gian có thể gây ra loại gián đoạn này và có thể thông báo cho CPU rằng một thiết bị nhất định cần được chú ý. Trong một 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 trở lại chương trình bình thường. Khi xảy ra ngắt phần cứng và CPU khởi động ISR, các ngắt phần cứng khác sẽ bị vô hiệu hóa (ví dụ: trong 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 quy trình xử lý đặc biệt. Ngoại lệ có thể được xác định là một cái bẫy tự động xảy ra (Một cái bẫy có thể được xác định là một sự chuyển giao quyền điều khiển, đượ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ể nào liên quan đến các trường hợp ngoại lệ (bẫy được tạo ra bằng cách sử dụng một chỉ 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" xảy ra trong quá trình thực thi chương trình. Ví dụ, chia cho 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 sẽ tạm ngừng chương trình mà nó đang thực thi và khởi động ISR. ISR sẽ chứa những gì cần 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 ra một thông báo lỗi phù hợp. Mặc dù một chỉ dẫn cụ thể không gây ra ngoại lệ, nhưng một ngoại lệ sẽ luôn được tạo ra bởi một lệnh. Ví dụ: lỗi chia cho 0 chỉ có thể xảy ra khi thực hiện lệnh chia.
Sự khác biệt giữa Ngắt và Ngoại lệ là gì?
Ngắt là ngắt phần cứng, trong khi các trường hợp 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 đối 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 một ngoại lệ được cung cấp, bạn cần xóa rõ ràng cờ ngắt. Và thường cờ ngắt trên máy tính ảnh hưởng đến (phần cứng) ngắt 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 các trường hợp ngoại lệ.