- Đọc/Ghi ngày, tháng, năm
c/ Ngắt ngoại (external interupt): hay cịn gọi là ngắt cứng, đƣợc tạo ra bên ngồi bộ xử lý đang
5.2.1. Đồng hồ ngắt
Để ngăn chặn những ngƣời sử dụng chiếm độc quyền hệ thống (chủ động hoặc bị động), hệ điều hành sẽ cĩ các cơ chế để địi lại CPU. Hệ điều hành cài một đồng hồ ngắt để ngắt các họat động chiếm giữ CPU trong một thời gian xác định. Khi CPU đƣợc trao cho một tiến trình, tiến trình đĩ đƣợc quyền điều khiển CPU cho đến khi nĩ chủ động trả lại CPU hoặc khi đồng hồ ngắt thực hiện ngắt. Nếu ngƣời sử dụng vẫn cịn đang thực thi chƣơng trình, và đồng hồ ngắt xảy ra việc ngắt giờ, thì việc ngắt này sẽ lấy quyền xử lý về lại cho hệ điều hành. Sau đĩ hệ điều hành sẽ quyết định tiến trình nào sẽ đƣợc nhận CPU tiếp theo.
Đồng hồ ngắt giúp đảm bảo đƣợc thời gian hồi đáp hợp lý cho hệ thống đa ngƣời dùng, ngăn cản hệ thống bị treo khi cĩ một ngƣời sử dụng đang thực thi một vịng lặp vơ hạn.
5.2.2. Đa ngắt
Những vấn đề chúng ta vừa nêu trên đƣợc áp dụng cho sự xuất hiện của một ngắt tại một thời điểm. Tuy nhiên, trong thực tế, một lúc cĩ thể xảy ra nhiều ngắt. Chẳng hạn nhƣ, một chƣơng trình cĩ thể nhận dữ liệu từ bên ngồi vào và in ra kết quả tƣơng ứng. Mỗi lần máy in chỉ thực hiện đƣợc một ngắt cho đến khi kết thúc hoạt động in. Bộ điều khiển bus sẽ thực hiện một ngắt mỗi khi cĩ một đơn vị dữ liệu đến. Nhƣ vậy, ngắt điều khiển bus cho phép nhận dữ liệu sẽ xảy ra trong khi ngắt phục vụ in ấn đang thi hành.
Hình 5.4. Quy trình điều khiển đa ngắt
* Cĩ hai cách tiếp cận để giải quyết vấn đề đa ngắt:
Cấm các ngắt họat động trong khi cĩ một ngắt đang tiến hành. Nghĩa là CPU cĩ thể và sẽ bỏ qua các tín hiệu yêu cầu ngắt. Nếu một ngắt xảy ra trong thời gian này thì nĩ sẽ bị treo và sẽ đƣợc kiểm tra sau khi bộ xử lý cho phép ngắt. Do đĩ, khi một chƣơng trình của ngƣời sử dụng đang thực thi và một ngắt xảy ra thì các ngắt khác sẽ bị cấm ngay lập tức. Sau khi thủ tục phục vụ ngắt hồn tất thì các ngắt đƣợc cho phép trƣớc khi tái kích họat chƣơng trình của ngƣời sử dụng và bộ xử lý sẽ kiểm tra xem cĩ ngắt nào xảy ra nữa khơng. Cách tiếp cận này dễ và đơn giản vì các ngắt đƣợc điều khiển theo một thứ tự nghiêm ngặt. Minh hoạ trong hình 5.4(a) cho ta thấy cách xử lý ngắt trong hệ thống đa ngắt theo cách tiếp cận này. Ngắt X đƣợc phục vụ xong thì mới tời lƣợt ngắt Y đƣợc phục vụ.
Xác định thứ tự ƣu tiên cho các ngắt và cho phép ngắt cĩ thứ tự ƣu tiên thấp hơn tự ngắt. Nghĩa là, trong khi một ngắt đang đƣợc phục vụ, nếu cĩ ngắt khác xảy đến, thì hệ thống phải tiến hành kiểm tra thứ tự yêu tiên của các ngắt. Nếu ngắt đang đƣợc phục vụ cĩ độ ƣu tiên cao hơn thì ngắt đến sau sẽ bị bỏ qua. Ngƣợc lại, nếu ngắt đang đƣợc phục vụ cĩ độ ƣu tiên thấp hơn, thì nĩ phải thực hiện viêc “tự ngắt” để cho phép ngắt đến sau thực hiện trƣớc. Minh họa trong hình 5.4(b). Ngắt A
Chƣơng trình ngƣời dùng
Bộ điều khiển ngắt X
Bộ điều khiển ngắt Y
(a) Tiến hành ngắt tuần tự Chƣơng trình ngƣời dùng Bộ điều khiển ngắt Y (b) Tiến hành ngắt lồng (nested) Bộ điều khiển ngắt X
đang đƣợc phục vụ, giả sử ngắt B đến sau nhƣng cĩ độ ƣu tiên cao hơn ngắt A, thì ngắt A phải tự ngắt để trao quyền điều khiển CPU cho ngắt B.
Trở lại ví dụ ban đầu, giả sử một hệ thống cĩ ba thiết bị nhập/xuất: một máy in, một ổ đĩa, và một đƣờng liên lạc với các mức ƣu tiên tăng dần tƣơng ứng là 2, 4, và 5. Hình 5.5 mơ tả một chuỗi các thao tác cĩ thể xảy ra.
Hình 5.5. Một ví dụ về xử lý ngắt cĩ độ ƣu tiên
Một chƣơng trình của ngƣời sử dụng bắt đầu tại thời điểm t=0. Tại thời điểm t=10, một ngắt cho máy in xảy ra; các thơng tin của ngƣời sử dụng đƣợc lƣu trong ngăn xếp của hệ thống và việc thực thi vẫn tiếp tục tại thủ tục phục vụ ngắt của máy in. Trong khi thủ tục này vẫn đang thực thi thì tại thời điểm t=15 một ngắt liên lạc xảy ra. Vì đƣờng liên lạc cĩ mức ƣu tiên cao hơn máy in nên việc ngắt cho nĩ đƣợc ƣu tiên trƣớc Thủ tục phục vụ ngắt của máy in bị ngắt, trạng thái của nĩ lại đƣợc đƣa vào ngăn xếp và việc thực thi vẫn đƣợc tiếp tục với thủ tục phục vụ ngắt của sự liên lạc. Trong khi thủ tục này đang thực thi thì một ngắt cho đĩa xảy ra (t=20). Vì ngắt này cĩ mức ƣu tiên thấp hơn nên nĩ phải chờ và thủ tục phục vụ ngắt của việc liên lạc vẫn hoạt động cho đến khi nĩ hồn tất.
Khi thủ tục phục vụ ngắt cho việc liên lạc kết thúc (t=25) thì trạng thái của bộ xử lý trƣớc đƣợc khơi phục (trạng thái thực thi thủ tục phục vụ ngắt của máy in). Tuy nhiên, trƣớc khi một lệnh trong thủ tục đĩ đƣợc thực thi thì bộ xử lý ƣu tiên cho việc ngắt đĩa cĩ mức ƣu tiên cao hơn và sự điều khiển đƣợc chuyển cho thủ tục phục vụ ngắt của đĩa. Chỉ khi thủ tục này chấm dứt (t=35) thì thủ tục phục vụ ngắt của máy in mới đƣợc tái kích hoạt. Khi thủ tục đĩ kết thúc (t=40) thì sự điều khiển trở về chƣơng trình của ngƣời sử dụng.
Chƣơng trình ngƣời dùng
Phục vụ ngắt của máy in
Phục vụ ngắt của việc liên
lạc Phục vụ ngắt của đĩa t = 0 t = 10 t = 40 t = 15 t = 25 t = 25 t = 35