Mục từ này đã đạt chất lượng ở mức sản phẩm bước đầu của Đề án Biên soạn Bách khoa toàn thư Việt Nam giai đoạn 1
Ngắt

Ngắt (tiếng Anh Interrupt) là tín hiệu yêu cầu bộ xử lý phải dừng công việc mà nó đang thực hiện để thực hiện một công việc khác. Ngắt có thể được sinh ra bởi phần cứng hoặc bởi phần mềm.

Ý tưởng về ngắt[sửa]

Trong hệ thống máy tính thường có nhiều thiết bị ngoại vi (thiết bị ngoại vi) (xt. Thiết bị ngoại vi máy tính), hầu hết chúng hoạt động với tốc độ thấp hơn CPU rất nhiều, ngoài ra cùng một thao tác của một thiết bị ngoại vi cũng cần các khoảng thời gian rất khác nhau để hoàn thành. Nếu để CPU gửi/nhận từng byte của dòng byte cần trao đổi với thiết bị ngoại vi thì tốc độ hoạt động của CPU bị kéo xuống thấp ngang tốc độ nhận/gửi của thiết bị ngoại vi. Chính vì vậy mỗi thiết bị ngoại vi thường được trang bị một đường dây truyền tín hiệu điện, gọi là đường dây yêu cầu ngắt (interrupt request) để báo cho CPU biết nó cần được chú ý. Khi không phải xử lý yêu cầu ngắt, CPU có thể xử lý các công việc khác, nhờ đó hiệu quả hoạt động của CPU được nâng cao.

Phân loại[sửa]

Ngắt phần cứng (hardware interrupt)[sửa]

Là tín hiệu điện sinh ra bởi một thiết bị phần cứng bên ngoài CPU hoặc bởi một đơn vị chức năng nằm ngay bên trong CPU.

Trường hợp tín hiệu ngắt phần cứng sinh ra bên ngoài CPU: đơn vị phát sinh tín hiệu thường là ổ đĩa hoặc các cổng vào/ra nối với một số thiết bị ngoại vi khác. Thí dụ: đơn vị bàn phím khi phát hiện thấy có một tác động phím (ấn hoặc nhả), nó sẽ sinh ra mã phím, đặt vào cổng bàn phím rồi phát tín hiệu điện báo cho CPU biết để nhận mã phím.

Trường hợp tín hiệu ngắt phần cứng sinh ra bên trong CPU: khi gặp phải điều gì đó khác thường, chẳng hạn chỉ thị mà nó đang thi hành truy cập đến một địa chỉ nhớ không tồn tại, hoặc gặp phép chia cho số không hoặc lỗi bộ nhớ v.v.

Các đường dây báo ngắt phần cứng được gán số thứ tự và quyền ưu tiên khác nhau. Khi được báo có ngắt phần cứng, CPU sẽ cất các thông tin trạng thái của nó và của chương trình mà nó đang thi hành rồi thực hiện chương trình xử lý ngắt. Mỗi loại thiết bị ngoại vi có chương trình xử lý ngắt thích hợp riêng cho nó. Khi chương trình xử lý ngắt kết thúc, CPU lấy các thông tin đã cất và trở lại thực hiện tiếp chương trình bị dừng tại đúng chỗ đã tạm dừng.

Ngắt phần mềm[sửa]

Là lệnh sinh ra bởi một chương trình yêu cầu bộ xử lý thực hiện một chương trình con xử lý ngắt nhất định.

Một số cách phân loại khách[sửa]

  • Ngắt vào/ra: do bộ điều khiển thiết bị vào/ra sinh ra, báo hiệu việc thực hiện thành công một nhiệm vụ, hoặc yêu cầu CPU cung cấp một dịch vụ, hoặc báo hiệu lỗi của thiết bị vào/ra.
  • Ngắt đồng hồ (timer): do đơn vị đồng hồ thời gian thực có trong tất cả các hệ thống máy tính sinh ra mỗi khi nó báo cho CPU và hệ điều hànhbiết để cập nhật thời gian của hệ thống.
  • Ngắt do lỗi phần cứng.
  • Ngắt do chương trình.

Bộ điều khiển ngắt[sửa]

Trong hệ thống máy tính có nhiều thiết bị ngoại vi, đường dây báo ngắt từ mỗi thiết bị ngoại vi không nối trực tiếp với bộ xử lý mà nối với bộ điều khiển ngắt, đây là một chip vi xử lý chuyên dụng, lập trình được, có chức năng hỗ trợ hoạt động của bộ xử lý. Khi có một hoặc nhiều tín hiệu yêu cầu ngắt gửi đến, nó sẽ dựa vào mức ưu tiên của đường tín hiệu để quyết định tín hiệu nào và khi nào sẽ được chuyển đến cho bộ xử lý giải quyết, tức là cho chạy chương trình xử lý ngắt tương ứng.

Ngắt có thể che được: Trong khi bộ xử lý hoạt động, có một số lệnh khi đang thực hiện nếu phải tạm dừng giữa chừng thì sẽ gây nên sự suy giảm hiệu năng của máy tính rất nghiêm trọng, hoặc thậm chí không thể tiếp tục thực hiện lệnh đó một cách đúng đắn. Chính vì vậy những người thiết kế bộ vi xử lý và bộ điều khiển ngắt làm cho nó có khả năng che được hoặc không che được một số tín hiệu yêu cầu ngắt trong một khoảng thời gian nhất định.

Chương trình xử lý ngắt[sửa]

Là chương trình con của hệ điều hành, nó có thể được chứa sẵn trong bộ nhớ ROM hoặc được nạp từ bộ nhớ ngoài vào bộ nhớ RAM trong quá trình khởi động máy tính. Mỗi chương trình xử lý ngắt thực hiện một nhiệm vụ cụ thể, thí dụ nhận một mã ký tự từ bàn phím, đọc một cung hoặc một tệp từ ổ đĩa…

Vector ngắt và bảng vector ngắt: Giống như mọi chương trình khác, chương trình con xử lý ngắt có thể phải được sửa đổi hoặc thậm chí là thay thế bất cứ khi nào cần. Chính vì vậy cần có phương pháp định danh, lưu trữ trong bộ nhớ và gọi các chương trình con này một cách hiệu quả và nhanh chóng. Hệ điều hành lưu trữ địa chỉ bộ nhớ của tất cả các chương trình con xử lý ngắt ở một vùng nhớ xác định do hệ điều hành quản lý gọi là bảng vector ngắt, bảng này được chia thành các mục (entry) được đánh số thứ tự bắt đầu từ 0, mỗi mục được gọi là một vector ngắt, mục số 0 được gọi là vector ngắt số 0 v.v. hệ điều hành luôn gán cố định mỗi vector ngắt với một chương trình con xử lý ngắt tương ứng với một loại thiết bị ngoại vi nhất định. Thí dụ trong các máy IBM PC và các máy tương thích với nó, vector ngắt số 9 luôn trỏ đến chương trình xử lý ngắt bàn phím.

Nếu cần phải sửa chương trình xử lý ngắt và dẫn đến việc phải nạp nó vào bộ nhớ ở địa chỉ khác trước, thì chỉ cần gán giá trị địa chỉ mới cho vector ngắt tương ứng là có thể gọi được chương trình xử lý ngắt này như bình thường.

Kích thước bảng vector ngắt phải đủ lớn để chứa được địa chỉ của tất cả các chương trình con xử lý ngắt của hệ điều hành có và dự kiến sẽ có trong tương lai. Kích thước bảng vector ngắt của nhiều loại máy tính là một vài ki-lô bytes.

Vị trí của bảng vector ngắt trong bộ nhớ: Bảng vector ngắt là một cơ sở dữ liệu của hệ điều hành, sau khi nó được thiết lập giá trị và các chương trình xử lý ngắt đã được nạp vào bộ nhớ thì mới có thể gọi thực hiện các chương trình con xử lý ngắt. Chính vì vậy các hệ điều hành thường sử dụng miền bộ nhớ đầu tiên để chứa bảng vector ngắt.

Việc sửa chương trình xử lý ngắt và gán lại giá trị mới cho vector ngắt thường do nhà phát triển hệ điều hành thực hiện. Tuy nhiên, công việc này cũng có thể được thực hiện bởi những người lập trình. Thí dụ, để xây dựng bộ gõ tiếng Việt (như Unikey chẳng hạn) người lập trình cho ứng dụng này phải “chặn” ngắt bàn phím, tức là gán giá trị mới cho vector ngắt bàn phím để cho nó trỏ đến chương trình của mình, còn giá trị cũ của vector ngắt thì được lưu trữ trong vùng dữ liệu của chương trình. Chương trình này sẽ chạy mỗi khi có tác động phím, sau khi hoàn thành công việc nó lại gọi chương trình xử lý ngắt ban đầu theo địa chỉ mà nó đã lưu trữ.

Tài liệu tham khảo[sửa]

  1. A.S. Tannenbaum, Structured Computer Organization, 6th Edition, Pearson, 2013. ISBN 10: 0-13-291652-5, ISBN 13: 978-0-13-291652-3.
  2. Benjamin W. Wah, Wiley Encyclopedia of Computer Science and Engineering, Publisher: Wiley- interscience, 2008. ISBN-10: 0471383937, ISBN-13: 978-0471383932.
  3. John J. Donovan, Systems programming, New York, McGraw-Hill, 1972.