Trong môi trường đa lập trình, có một hoặc nhiều bộ xử lý tổng quát và nhiều bộ xử lý I/O. Ngoài ra, một số tiến trình có thể được hoạt động ở bất kỳ thời gian nhất định nào. Dĩ nhiên, hoạt động không có nghĩa là tiến trình hiện đang sử dụng CPU.
Xem xét một tiến trình đang thực hiện thao tác I/O và thao tác vừa hoàn tất. Làm thế nào CPU biết rằng nó đã hoàn tất thao tác I/O của nó để mà lên lịch biểu cho các còn lại? Nói cách khác, nếu bạn là một nhà quản lý và đã giao một nhiệm vụ tới một nhân viên của bạn, làm thế nào mà bạn sẽ được thông báo rằng người đó đã hoàn thành nhiệm vụ?
Có hai cách tiếp cận tổng quát để tìm ra khi một tác vụ được phân công cho một bộ xử lý ngoại vi, ví dụ, bộ xử lý I/O đã được hoàn tất. Đó là dò vòng và ngắt. Dò vòng nghĩa là kiểm tra định kỳ bộ xử lý ngoại vi để xem khi tác vụ đã giao đã hoàn thành. Ngắt, mặt khác, là một cơ chế khi bộ xử lý ngoại vi gửi một tín hiệu bất cứ khi nào nó kết thúc tác vụ. Nhiều
driver được điều khiển theo ngắt, nhưng một số lại được dò vòng. Chúng ta sẽ cung cấp
thông tin thêm về cách hệ thống ngắt làm việc đằng sau ý nghĩa của ngắt và các tình huống trong đó ngắt xảy ra được làm rõ.
Driver là một chương trình tạo thuận lợi cho việc truyền thông giữa thiết bị tương ứng và người dùng thiết bị. Mọi loại thiết bị có driver riêng của nó để tối đa hóa hiệu quả sử dụng và độ chính xác của thiết bị.
Ngắt là một tín hiệu được gửi tới CPU để bắt sự chú ý của nó. Nó có thể được đưa ra bởi các nguồn khác nhau, ví dụ:
Bởi bộ xử lý I/O muốn thông báo cho CPU về việc hoàn tất tác vụ đã được giao. Bởi người dùng có thể nhấn các phím đặc biệt giống như “break” vào bất cứ lúc nào.
Bởi đồng hồ thời gian thực muốn thông báo cho CPU rằng nó đã và đang làm công việc trên tiến trình hiện tại trong một khoảng thời gian dài (có lẽ 1000 lần mỗi giây) và đã đến lúc chuyển sang một tiến trình khác.
Bởi lỗi phát hiện phần cứng đang cố gắng thông báo cho CPU mạch bị trục trặc.
Bởi mạch giám sát nằm trong ALU điều khiển tính chấp nhận kích thước dữ liệu cho hoạt động được thực hiện và bởi thế, kích thước kết quả thao tác.
Đồng hồ được sử dụng để giữ thời gian của ngày. Mọi máy tính cá nhân có một đồng hồ phần cứng được điều khiển theo nguồn pin.Đồng hồ vẫn làm việc thậm chí cả sau khi máy tính đã tắt. Chúng ta có thể điều chỉnh đồng hồ này bằng các phương thức của các phương tiện cập nhật CMOS hoặc từ hệ điều hành. Đồng hồ này được gọi là đồng hồ phần cứng. Một số hệ điều hành (giống như Linux) cũng muốn có một đồng hồ phần mềm.Đồng hồ phần mềm này được thiết đặt bởi đồng hồ phần cứng trong lúc khởi động và khởi động lại hệ thống. Từ đó về sau, nó được cập nhật mỗi lần ngắt đặc thù được tạo ra để hiện thị thời gian chính xác. Truy cập đồng hồ phần mềm cần thời gian xử lý ít hơn truy cập đồng hồ phần cứng.
Bộ định thời được sử dụng để giữ theo dõi thời gian đã trôi qua kể từ lúc nó được thiết đặt lại lần cuối cùng. Một cách sử dụng quan trọng của các bộ định thời là để đảm bảo một tiến trình không sử dụng bộ xử lý trong một khoảng thời gian dài. Dạng bộ định thời này được gọi là bộ định thời theo quãng. Nó được thiết đặt để gửi định kỳ ngắt tới bộ xử lý và để nhắc nhở rằng nó thời gian cho chuyển đổi tiến trình.
Các tín hiệu ngắt có tầm quan trọng và tính cấp bách khác nhau. Trong khi một ngắt lỗi phần cứng thì rất cấp bách và quan trọng, ngắt được đưa ra bởi một bộ xử lý I/O để thông báo cho CPU việc hoàn tất tác vụ thì không phải là cấp bách và cũng không phải rất quan trọng. Do đó, nó làm cho có cảm giác rằng phản ứng của CPU khác nhau tùy theo từng loại ngắt. Các ngắt thì thường được phân loại thành một số lượng nhỏ của các lớp, mỗi chúng có chứa các ngắt chia sẻ các ưu tiên bằng nhau hoặc/và có tính chất tương tự.
Khi bộ xử lý tiếp nhận một ngắt và quyết định xử lý ngắt, nó sẽ phải chuyển đổi từ tiến trình đang chạy hiện tại thành một phần của hệ điều hành mà chịu trách nhiệm về xử lý ngắt. Phần này được gọi là trình xử lý ngắt. Trình xử lý ngắt có một bộ sư tập các thường trình xử lý ngắt, thường trình mỗi lớp ngắt hoặc đôi khi thường trình cho mọi ngắt cụ thể. Chuyển đổi
an toàn từ tiến trình đang chạy tới trình xử lý ngắt đòi hỏi phải làm theo các bước chuyển đổi ngữ cảnh. A phải để lưu nội dung của thanh ghi PC (LC của tiến trình đang chạy hiện tại). Các điểm thanh ghi này chỉ tới câu lệnh tiếp theo của tiến trình đang chạy mà phải được thi hành khi bộ xử lý sau đó chuyển đổi trở lại cho nó. Khi chuyển đổi lại tiến trình, nó sẽ tiếp tục việc thi hành của nó bằng cách tìm nạp và thi hành câu lệnh được chỉ ra bởi LC. Vì vậy, bộ xử lý không thể chấm dứt việc thi hành của câu lệnh hiện tại ở một thời điểm chính xác mà một ngắt được tiếp nhận. Đầu tiên, nó phải hoàn thành câu lệnh hiện tại. Về mặt kỹ thuật, tín hiệu ngắt đến CPU và được lưu trữ trong một số cờ. Cờ được bỏ qua cho đến khi việc thi hành của lệnh máy hiện tại được hoàn tất. Đây là điều vô lễ của tính ưu tiên hay tính cấp bách của ngắt. Có rất ít các ngoại lệ. Một ví dụ là “di chuyển ” câu lệnh trong một số máy tính lớn mà là giả sử di chuyển một khúc dữ liệu lớn, 256 B dữ liệu từ một vị trí của bộ nhớ chính tới một vị trí khác. Câu lệnh này là một lệnh máy, nhưng nó có tính đa lệnh vì nó bao gồm nhiều câu lệnh đọc và ghi bộ nhớ.
CPU luôn luôn tìm kiếm các tín hiệu ngắt ngay trước khi tìm nạp một lệnh mới để thi hành. Nếu có bất kỳ tín hiệu ngắt nào, CPU xử lý chúng theo thứ tự ưu tiên tính khẩn cấp.
Điều gì sẽ sảy ra nếu bỏ qua hoàn toàn một số ngắt? Giả sử bạn đang chạy một chương trình và trong chương trình của bạn (tiến trình) có một thao tác “chia cho không”. Điều này sẽ khiến gây ra một ngắt và, như kết quả, hệ thống sẽ hủy bỏ tín trình của bạn. Bạn có thể muốn biết những gì diễn ra nếu chương trình bỏ qua thao tác “chia cho không” và tiếp tực thi hành. Một số loại ngắt có thể được che dấu. Che dấu một loại ngắt có nghĩa là bỏ qua mọi tín hiệu ngắt. Dĩ nhiên, có các ngắt không thể được che dấu bởi lập trình viên. Ví dụ, lập trình viên không thể che dấu các ngắt lỗi phần cứng. Những ngắt này được gọi là các ngắt không thể che dấu (Non-Maskable Interrupts – NMI). Tuy nhiên, có nhiều ngắt có thể che dấu như “chia cho không” và tràn. Một lệnh đặc quyền gọi là ngắt vô hiệu hóa có thể vô hiệu hóa tất cả các ngắt, nhưng nó không thể được dùng trong thao tác chế độ người dùng. Thao tác ngắt thực hóa tái tạo lại hệ thống ngắt sau khi nó đã được vô hiệu hóa bằng thao tác ngắt vô hiệu hóa.
Tràn xảy ra khi kết quả của một câu lệnh lớn hơn giá trị có thể lưu trữ lớn nhất của kiểu dữ liệu tương ứng của nó. Ví dụ, điều này xảy ra khi hai số kiểu nguyên lớn (64 bit) được cộng và kết quả được giả định được lưu trữ trong một ví trí 64 bit. Tuy nhiên, kết quả quá lớn để lưu trữ trong vị trí đó, gây ra tràn. Hệ mạch ALU ghi nhận tràn này và gửi một tín hiệu ngắt tràn tới cờ ngắt tương ứng.
Tràn dưới xảy ra cho một kết quả âm là không thể lưu trữ trong vị trí dự kiến.