Gián đoạn đấu với Bẫy
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 (đơn giản là) Ngắt, trong khi ngắt phần mềm được gọi là Ngoại lệ hoặc Bẫy. Ngoại lệ là một ngắt phần mềm được tạo tự động, trong khi Bẫy là một ngắt do phần mềm gọi ra do lập trình viên khởi xướng. Khi 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 (Interrupt Service Routine) có thể xử lý các điều kiện do ngắt đưa ra.
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à 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 tình huống như vậy, CPU sẽ dừng bất cứ điều 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 các ngắt phần cứng xảy ra và CPU khởi động ISR, các ngắt phần cứng khác sẽ bị vô hiệu hóa (e.g. trong 80 × 86 máy). 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.
Bẫy là gì?
Bẫy có thể được xác định là sự chuyển giao quyền điều khiển, được khởi tạo bởi người lập trình. Thuật ngữ Bẫy được sử dụng thay thế cho thuật ngữ Ngoại lệ (là một ngắt phần mềm tự động xảy ra). Nhưng một số người có thể tranh luận rằng một cái bẫy chỉ đơn giản là một lệnh gọi chương trình con đặc biệt. Vì vậy, chúng thuộc loại gián đoạn do phần mềm gọi. Ví dụ, trong các máy 80 × 86, một lập trình viên có thể sử dụng lệnh int để bắt đầu một bẫy. Bởi vì một cái bẫy luôn là vô điều kiện, điều khiển sẽ luôn được chuyển đến chương trình con liên kết với cái bẫy. Hướng dẫn chính xác, gọi ra quy trình xử lý bẫy dễ dàng được xác định bởi vì một chỉ dẫn rõ ràng được sử dụng để chỉ định một bẫy.
Sự khác biệt giữa Gián đoạn và Bẫy là gì?
Ngắt là ngắt phần cứng, trong khi bẫy là ngắt do phần mềm gọi. 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 bẫy. Nếu bạn cần không cho phép ngắt phần cứng cho đến khi một bẫy được phục vụ, 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 bẫy. Điều này có nghĩa là xóa cờ này sẽ không ngăn được bẫy. Không giống như bẫy, ngắt phải duy trì trạng thái trước đó của CPU.