Ngắt
Hệ điều hành |
---|
Các tính năng chung |
Trong máy tính, ngắt (hay còn gọi là bẫy) là một phản ứng của bộ xử lý đối với một sự kiện cần được phần mềm chú ý. Điều kiện ngắt cảnh báo bộ xử lý và phục vụ như một yêu cầu bộ xử lý ngắt đoạn mã đang thực thi khi được phép, để sự kiện có thể được xử lý kịp thời. Nếu yêu cầu được chấp nhận, bộ xử lý sẽ phản hồi bằng cách tạm dừng các hoạt động hiện tại của nó, lưu trạng thái của nó và thực thi một chức năng được gọi là trình xử lý ngắt (hoặc quy trình dịch vụ ngắt, ISR) để đối phó với sự kiện. Sự gián đoạn này là tạm thời và, trừ khi ngắt chỉ ra một lỗi nghiêm trọng, bộ xử lý sẽ tiếp tục các hoạt động bình thường sau khi trình xử lý ngắt kết thúc.[1]
Ngắt thường được sử dụng bởi các thiết bị phần cứng để chỉ ra những thay đổi trạng thái vật lý hoặc điện tử cần được chú ý. Ngắt cũng thường được sử dụng để thực hiện đa nhiệm máy tính, đặc biệt là trong tính toán thời gian thực. Các hệ thống sử dụng ngắt theo những cách này được cho là điều khiển ngắt.[2]
Phân loại
[sửa | sửa mã nguồn]Các tín hiệu ngắt có thể được phát ra để đáp ứng với các sự kiện phần cứng hoặc phần mềm. Chúng được phân loại là ngắt phần cứng hoặc ngắt phần mềm, tương ứng. Đối với bất kỳ bộ xử lý cụ thể nào, số lượng kiểu ngắt bị giới hạn bởi kiến trúc của máy.
Ngắt phần cứng
[sửa | sửa mã nguồn]Ngắt phần cứng là một điều kiện liên quan đến trạng thái của phần cứng có thể được báo hiệu bởi thiết bị phần cứng bên ngoài, ví dụ: dòng yêu cầu ngắt (IRQ) trên PC hoặc được phát hiện bởi các thiết bị nhúng trong logic của bộ xử lý (ví dụ: bộ hẹn giờ CPU trong IBM System/370), để thông báo rằng thiết bị cần được chú ý từ hệ điều hành[3], hoặc ít nhất là một chương trình đang kiểm soát CPU. Các thiết bị bên ngoài như vậy có thể là một phần của máy tính (ví dụ: bộ điều khiển đĩa) hoặc chúng có thể là thiết bị ngoại vi bên ngoài. Ví dụ: nhấn phím bàn phím hoặc di chuyển chuột được cắm vào cổng PS/2 sẽ kích hoạt ngắt phần cứng khiến bộ xử lý đọc vị trí phím hoặc chuột.
Các ngắt phần cứng có thể đến không đồng bộ đối với xung nhịp của bộ xử lý và bất kỳ lúc nào trong khi thực hiện lệnh. Do đó, tất cả các tín hiệu ngắt phần cứng được điều hòa bằng cách đồng bộ hóa chúng với đồng hồ bộ xử lý và chỉ hoạt động ở các ranh giới thực thi lệnh.
Trong nhiều hệ thống, mỗi thiết bị được liên kết với một tín hiệu IRQ cụ thể. Điều này giúp bạn có thể nhanh chóng xác định thiết bị phần cứng nào đang yêu cầu dịch vụ và tiến hành bảo dưỡng thiết bị đó.
Trên một số hệ thống cũ hơn [4] tất cả các ngắt đều đến cùng một vị trí và Hệ điều hành sử dụng một lệnh chuyên biệt để xác định mức ưu tiên cao nhất của ngắt chưa được che dấu. Trên các hệ thống hiện đại thường có một quy trình ngắt riêng biệt cho từng loại ngắt hoặc cho từng nguồn ngắt, thường được thực hiện dưới dạng một hoặc nhiều bảng vectơ ngắt.
Ngắt phần mềm
[sửa | sửa mã nguồn]Một ngắt phần mềm được yêu cầu bởi chính bản thân bộ xử lý khi nó thực thi một số lệnh đậc biệt hay gặp phải một số điều kiện nhất định. Tất cả các ngắt mềm đều đi kèm với một trình xử lý ngắt đặc biệt.
Có thể tạo ra một ngắt mềm bằng cách thực hiện một câu lênh đặc biệt, chúng hoạt động tương tự với các lời gọi hàm và được sử dụng cho nhiều mục đích như sử dụng các dịch vụ của hệ điều hành hay tương tác với trình điều khiển thiết bị (ví dụ như đọc hay ghi đĩa). Các ngắt mềm cũng có thể bị gây ra bởi các lỗi thực thi chương trình hay bởi hệ thống bộ nhớ ảo.
Thông thường nhân hệ điều hành sẽ tiếp nhận và xử lý các ngắt mềm. Một số ngắt mềm được xử lý mà chuơng trình không hề có ý thức: ví dụ như cách giải quyết thông thường của một lỗi page là làm cho page đó truy cập được trong bộ nhớ thực. Tuy nhiên, trong một số trường hợp khác một lỗi phân đoạn khi đó hệ điều hành sẽ thực thi một callback. Trên các hệ điều hành dạng Unix điều này bao gồm gửi đi một tín hiệu như SIGSEGV, SIGBUS, SIGILL hay SIGFPE, sau đó tín hiệu sẽ gọi một trình xử lý tín hiệu hay thực thi một hành động mặc định (kết thúc chương trình).
Trong một tiến trình của nhân, thường có một số loại ngắt mềm nào đó không được phép xảy ra. Nếu chúng xảy ra thì khi đó hệ điều hành sẽ bị treo.
Tham khảo
[sửa | sửa mã nguồn]- ^ Jonathan Corbet; Alessandro Rubini; Greg Kroah-Hartman (2005). “Linux Device Drivers, Third Edition, Chapter 10. Interrupt Handling” (PDF). O'Reilly Media. tr. 269. Truy cập ngày 25 tháng 12 năm 2014.
Then it's just a matter of cleaning up, running software interrupts, and getting back to regular work. The "regular work" may well have changed as a result of an interrupt (the handler could
wake_up
a process, for example), so the last thing that happens on return from an interrupt is a possible rescheduling of the processor. - ^ Rosenthal, Scott (tháng 5 năm 1995). “Basics of Interrupts”. Bản gốc lưu trữ ngày 26 tháng 4 năm 2016. Truy cập ngày 11 tháng 11 năm 2010.
- ^ “Hardware interrupts”. Truy cập ngày 9 tháng 2 năm 2014.
- ^ “Interrupt Instructions”. Control Data 3600 Computer System Reference Manual (PDF). Control Data Corporation. tháng 7 năm 1964. tr. 4-6. 60021300.
Liên kết ngoài
[sửa | sửa mã nguồn]
- Interrupts Made Easy
- Interrupts for Microchip PIC Microcontroller
- IBM PC Interrupt Table
- University of Alberta CMPUT 296 Concrete Computing Notes on Interrupts, archived from the original on ngày 13 tháng 3 năm 2012