Ngắt và Vào/Ra (Interrupts and I/O):

Một phần của tài liệu đặc điểm kiến trúc cơ bản của MARIE (a Machine Architecture that is Really Intuitive and Easy Đề cương môn cấu trúc và hệ điều hành (Trang 28)

II. các sơ đồ bổ sung:

4.3.2.Ngắt và Vào/Ra (Interrupts and I/O):

Chương 7 đề cập chính đến I/O. Tuy nhiên, chúng ta cần phải thảo luận về một về một vài khái niệm cơ bản của I/O để có thể hiểu được về toàn bộ quá trình của việc thực thi chương trình.

MARIE có hai thanh ghi để chứa đầu vào và đầu ra. Thanh ghi đầu vào chứa dữ liệu được chuyển từ thiết bị đầu vào tới máy tính, thanh ghi đầu ra chứa thông tin sẵn sàng để được gửi đến một thiết bị đầu ra. bộ đếm thời gian được sử dụng bởi hai thanh ghi này là rất quan trọng. Ví dụ, nếu bạn đang nhập đầu vào từ bàn phím và gõ rất nhanh, máy tính phải có khả năng đọc mỗi kí tự được đưa vào thanh ghi đầu vào. Nếu ký tự khác được nhập vào thanh ghi khi máy tính chưa kịp xử lý kí hiệu hiện thời, các ký tự hiện tại sẽ bị mất.

Có nhiều khả năng, bộ xử lý hoạt động rất nhanh mà đầu vào bàn phím lại rất chậm, bộ xử lý có thể đọc cùng một ký tự từ thanh ghi nhiều lần. Chúng ta phải tránh cả hai trường hợp này.

MARIE giải quyết những vấn đề này bằng cách sử dụng phương pháp I/O được điều khiển bởi ngắt (Interrupt - driven I/O). (Thông tin chi tiết về các dạng I/O khác nhau sẽ đc đề cập đến trong Chương 7). Khi CPU thực hiện một lệnh đầu vào hoặc đầu ra, các thiết bị I /O thích hợp sẽ được thông báo. CPU sau đó sẽ tiếp tục các công việc khác cho đến khi thiết bị đã sẵn sàng. Tại thời điểm đó, các thiết bị sẽ gửi một tín hiệu có ngắt đến CPU. CPU xử lý ngắt, sau đó tiếp tục với chu kỳ Nạp-giải mã-thực hiện như bình thường. Quá trình này yêu cầu:

• Một tín hiệu (gián đoạn) từ các thiết bị I/O cho CPU cho biết đầu vào hay đầu ra đã hoàn thành • Một số phương tiện cho phép CPU có thể bỏ qua chu kỳ nạp-giải mã-thực hiện (fetch-decode-

execute cycle) thông thường để "nhận ra" tín hiệu gián đoạn này

Phương pháp hầu hết máy tính sử dụng để xử lý một ngắt là kiểm tra xem ngắt đó có đang chờ ở đầu mỗi chu kỳ Nạp-giải mã-thực hiện hay không, nếu có, ngắt được xử lý, sau đó chu kỳ được tiếp tục. Nếu không có ngắt thì chu kì hoạt động như bình thường.

Quá trình thực hiện được minh họa trong sơ đồ trong Hình 4.

Figure 2: Hình 4.12 - Vòng lệnh kiểm tra ngắt

Thông thường, các thiết bị đầu vào hoặc đầu ra sẽ gửi một ngắt bằng cách sử dụng một thanh ghi đặc biệt, thanh ghi trạng thái (status register) hoặc thanh ghi mã điều kiện (flag). Một bit đặc biệt được thiết lập để chỉ ra nếu có ngắt. Ví dụ, ngay khi đầu vào được nhập vào từ bàn phím, bit này được thiết lập. CPU kiểm tra bit này ở đầu mỗi chu kỳ máy. Nếu có thì CPU sẽ xử lý ngắt, nếu không thì CPU thực hiện chu kì Nạp- giải mã-thực hiện như bình thường, lệnh trong các chương trình xử lý hiện nay được thực hiện bình thường.

Khi CPU tìm thấy các bit ngắt nó thực hiện một thủ tục ngắt được xác định bởi loại ngắt đã xảy ra. Ngắt I/O không phải là phương thức ngắt duy nhất xảy ra khi một chương trình đang được thực hiện. Đã bao giờ bạn gõ một tổ hợp phím Ctrl-break hoặc Ctrl-C để ngừng một chương trình? Đây là ví dụ về một cách ngắt. Ngắt ngoài được tạo ra do ngoại cảnh (như đầu vào / đầu ra hay cúp điện), Ngắt trong được tạo ra bởi một số điều kiện ngoại lệ trong chương trình (chẳng hạn như chia cho 0, tràn , hoặc vi phạm bảo vệ) và Ngắt phần mềm được tạo ra bằng cách thực hiện một lệnh trong chương trình (chẳng hạn một chương trình đòi hỏi chuyển đổi từ việc chạy trong một cấp, chẳng hạn từ cấp độ sử dụng, đến một cấp độ khác, như cấp độ cốt lõi).

Loại ngắt nào cũng có quá trình xử lý như nhau. Sau khi CPU chấp nhận một yêu cầu ngắt, địa chỉ của chương trình ngắt được xác định (thường là do phần cứng) và các routine (rất giống như một thủ tục) được thực hiện. CPU chuyển từ chạy chương trình sang chạy một thủ tục đặc biệt để xử lý ngắt. Chu kỳ nạp-giải mã-thực thi được chạy trên các lệnh trong chương trình ngắt cho đến khi đoạn mã được hoàn thành. CPU sau đó quay lại chương trình nó đang chạy trước khi có ngắt xảy ra. CPU phải quay lại điểm chính xác mà nó đã chạy trong chương trình ban đầu. Do đó, khi CPU chuyển sang các chương trình ngắt, nó phải lưu các nội dung có trong PC, nội dung của tất cả các thanh ghi khác trong CPU, và các điều kiện trạng thái của chương trình ban đầu. Khi các chương trình phục vụ ngắt kết thúc, CPU phục hồi môi trường mà trong đó chương trình ban đầu đã được thực thi, và sau đó bắt đầu nạp, giải mã, và thực hiện các lệnh cho các chương trình ban đầu.

Một phần của tài liệu đặc điểm kiến trúc cơ bản của MARIE (a Machine Architecture that is Really Intuitive and Easy Đề cương môn cấu trúc và hệ điều hành (Trang 28)