Hệ thống ngắt

Một phần của tài liệu Giáo trình Nguyên lý hệ điều hành (Nghề: Công nghệ thông tin - Cao đẳng) - Trường CĐ Nghề Kỹ thuật Công nghệ (Trang 72 - 80)

1.1 .Khái niệm quá trình

5. Hệ thống ngắt

Mục tiêu : Nắm được khái niệm ngắt, phân loại ngắt Nắm được quy trình xử lý ngắt.

5.1. Khái niệm ngắt

Tồn tại mối quan hệ giữa các bộ phận trong hệ điều hành, ví dụ: điều phối,

thực hiện quá trình và hệ thống con vào – ra. Thơng thường khi hết hạn lượng tử thời gian hay hoàn thiện vào/ra nảy sinh ngắt. Ngắt sinh ra những sự kiện khác và xử lý ngắt là những phương tiện quan trọng của điều khiển CPU. Xem xét chương trình thực hiện các lệnh một cách tuần tự, trong đó có lệnh chuyển điều

khiển vơ điều kiện và có điều kiện. Ngắt có thể được xác định như là một chương trình gắn vào truyền điều khiển cho một chương trình khác thực hiện tại thời điểm ngắt. Ngắt được coi như cách thức truyền điều khiển cho quá trình xử lý ngắt chưa được biết từ quá trình bị ngắt.

Ngắt được phân chia ra hai lớp cơ bản: ngắt trong và ngắt ngoài.

-Ngắt trong liên quan đến các sự kiện liên kết tới công việc của CPU và để đồng bộ hoạt động của nó. Ví dụ: tràn ơ khi cộng hay trừ dấu phẩy động, xuất hiện phép chia cho 0; thực hiện phép tốn dấu phẩy động truyền hoặc xóa phần bậc; vi phạm địa chỉ bộ nhớ, thiếu vắng segment hoặc trang, mã lệnh sai…

-Ngắt ngoài: được xảy ra theo các hiện tượng liên quan ngoài thực hiện của CPU: ngắt vào-ra, ngắt do sơ đồ kiểm tra, ngắt từ CPU khác, ngắt do hết lượng tử thời gian.v.v…

5.2. Xử lý ngắt

Như vậy, ngắt là một hiện tượng xảy ra có thể độc lập với sự làm việc của CPU. Một vấn đề được đặt ra là thời điểm xử lý ngắt: xử lý ngắt lúc nào là thích hợp nhất khi quan hệ với lệnh máy đang thực hiện. Ngắt xảy ra có thể hoặc do sự thực hiện lệnh, hoặc do tác động từ chính bản thân lệnh. Nếu cơ chế xử lý ngắt khơng thích hợp sẽ loại bỏ chính lệnh máy đang thực hiện. Thuận lợi hơn cả là xử lý ngắt sau khi thực hiện lệnh và việc ghi nhận ngắt là độc lập với sự thực hiện lệnh. Cơ chế ghi nhận ngắt là nằm ngồi các chương trình xử lý ngắt.

Có rất nhiều phương pháp liên quan đến xử lý ngắt nhưng quy trình chung có thể được mơ tả qua các bước:

1. Tại những ô nhớ quy định, ghi nhận các đặc trưng của số hiệu ngắt vừa phát sinh (tùy thuộc vào số liệu được đưa vào ơ nhớ tương ứng). Ví dụ với máy IBM 360-370 có các số hiệu để phân biệt các kiểu ngắt như sau:

-Ngắt vào-ra

-Ngắt theo chương trình: vi phạm cách thức phương tiện máy: lệnh khơng chính quy; dữ liệu khơng chính quy;

-Ngắt hướng tới supervisor (gọi chương trình supervisor và thay chế độ làm việc của CPU);

-Ngắt ngồi: có tín hiệu hướng tới CPU, ngắt theo thời gian, ngắt khi có tín hiệu của các bộ xử lý khác…;

-Ngắt theo sơ đồ kiểm tra.

2. Ghi nhớ trạng thái của quá trình bị ngắt: giá trị bộ đếm lệnh (chú ý từ trạng thái chương trình PSW: Program Status Word, trên bàn điều khiển có một hàng đèn tương ứng với từ máy…)

3. Thanh ghi địa chỉ lệnh hướng tới địa chỉ để xử lý ngắt. 4. Ngắt được xử lý.

5. Quay lại quá trình đã bị ngắt (nếu được)

Các bước 1-3 do các thành phần chức năng của máy tính đảm nhận, bước 4-5 do chương trình xử lý ngắt đảm nhận.

Bước 4. chương trình xử lý ngắt tiến hành các công việc:

Ghi nhớ bổ sung một số thông tin mà do cách thức phương tiện (bước 2) chưa ghi hết, ví dụ, bước 2 ghi PSW cịn chương trình xử lý ngắt phải

thanh ghi chung và cơng việc nói trên địi hỏi một vùng bộ nhớ nhất định (chẳng hạn, với IBM, EC đòi hỏi vùng 72 bytes cho 16 thanh và 2 địa chỉ chuyển đổi).

Định danh chương trình xử lý ngắt.

Thơng tin bước 3 là bộ phận đối với chương trình xử lý ngắt: mỗi loại ngắt có thể do một chương trình ngắt riêng, ví dụ ngắt do vào ra (thiết lập cách thức phương tiện ở bước 1) khác biệt hoàn toàn với ngắt hướng tới supervisor (phân tích tác động tiếp theo supervisor).

- Thực hiện tác động tương ứng với ngắt đã được định danh.

Các tác động này hết sức đơn giản. Ví dụ, chỉ thiết lập dấu hiệu nào đó như trạng thái tràn ơ, hoặc quay lại băng từ chuyển sang việc chuẩn bị đọc nếu đã đọc sai.v.v…

Nếu khơng q gấp, chương trình xử lý ngắt tương ứng sẽ được ghi vào dịng xếp hàng q trình ở trạng thái chuẩn bị.

Chương trình xử lý ngắt đảm bảo việc quay về trạng thái bình thường của CPU (chọn quá trình người dùng để thực hiện) tùy thuộc vào:

-Kiểu ngắt;

-Kiểu của chương trình điều phối CPU được sử dụng.

Từ các yếu tố trên sẽ xác định công việc kết khối, về trạng thái chuẩn bị và các công việc được chọn tiếp theo…

Chú ý:

Một số tác động của chương trình xử lý ngắt được thực hiện chậm nếu để ở bộ nhớ ngoài cho nên đưa ra giải pháp một số bộ phận của chương trình xử lý ngắt được đặt thường trực trong bộ nhớ trong như là một phần trong nhân hệ thống. Nếu chương trình xử lý ngắt q lớn, nó được chia làm hai phần: phần thường trực và phần không thường trực.

Nhiều ngắt có quan hệ đến điều khiển CPU (ngắt theo thời gian, ngắt theo hoạt động thiết bị, ngắt hồn thiện vào/ra). Q trình do điều phối làm khơng chỉ là q trình người dùng mà cịn là những bộ phận khác nhau của hệ điều hành (bao hàm chương trình xử lý ngắt mức 2; chương trình con thống kê; điều phối chính; tải và thậm chí chính cả điều phối).

Ngắt đa mức

Ngắt xảy ra có thể đối với chương trình người dùng, có thể xảy ra chính trong q trình đang xử lý ngắt. Đây là tình huống được gọi là ngắt đa mức. Xử lý ngắt đa mức ra sao?

-Phân cấp các loại ngắt theo độ ưu tiên, thông thường ngắt liên quan tới cách thức kĩ thuật có độ ưu tiên thấp hơn so với các ngắt có liên quan đến hệ điều hành. Ví dụ: ngắt gọi supervisor có độ ưu tiên cao hơn so với ngắt vào/ra.

-Chọn ngắt nào được xử lý trước tiên: ngắt cũ và ngắt mới, việc đó tùy thuộc vào kiểu của hai ngắt. Ngắt mới hoặc được giải quyết ngay (ngắt trội hơn), hoặc bị hủy bỏ, hoặc chờ để giải quyết tiếp theo.

Xử lý ngắt đa mức theo các độ ưu tiên khác nhau được đảm bảo theo các cách thức phương tiện khác nhau ghi nhận mỗi kiểu ngắt khác nhau trên các ô nhớ khác nhau.

6. Hiện tượng bế tắc

6.1. Khái niệm bế tắc

Bế tắc là hiện tượng khi một nhóm các q trình bị kết khối một cách lâu dài do mỗi q trình trong nhóm đang chiếm một tập con các tài ngun để hồn thiện q trình đó và chờ đợi việc giải phóng một số tài nguyên cịn lại đang bị các q trình thuộc cùng nhóm đang chiếm giữ.

Một trong các ví dụ dễ thấy là hiện tượng u cầu chu trình các thiết bị: có 3 q trình, A đang chiếm giữ thiết bị và địi hỏi thiết bị 2, B đang chiếm giữ thiết bị 2 và đòi hỏi thiết bị 3, C đang chiếm giữ thiết bị 3 và địi hỏi thiết bị 1.

Chúng ta có hai q trình Pr1 và Pr2. Chúng chia xẻ hai tài nguyên p1 và p2 và để loại trừ ràng buộc, trong hai quá trình trên sử dụng semaphore s1cho tài nguyên p1 và semaphore s2 cho tài nguyên p2. Việc sử dụng các semaphore nói trên trong thân các thủ tục được trình bày như dưới đây.

Pr1:… Pr2:… 1.P(s1) 5.P(s2) … …. 2.P(s2) 6.P(s1) … …. 3.V(s1) 7.V(s1) … … 4.V(s2) 8.V(s2) …. …

Ban đầu, cả hai semaphore có giá trị 1. Xem xét trường hợp theo thời gian, dãy trạng thái đòi hỏi nhu cầu và giải phóng biến chung là dãy 1,2,5,3,4,6,7. Khi thủ tục Pr2 có nhu cầu p2 (lệnh 5), nó bị kết khối do p2 đang được Pr1 dùng. Chỉ sau khi Pr1 thực hiện giải phóng p2 (lệnh 4) thì Pr2 mới được tách khối. Đến bây giờ dãy thực hiện các câu lệnh trở thành 5,1,6,2 thế thì Pr2 bị kết khối khi địi hỏi p1 (lệnh 6) còn Pr1 bị kết khối khi đòi hỏi p2 (lệnh 2): Pr1 chờ đợi cho đến khi Pr2 đi tới lệnh 8 còn Pr2 chờ đợi cho đến khi Pr1 đi tới lệnh 3. Hiện tượng bế tắc xuất hiện do hai quá trình con này chờ đợi lẫn nhau.

6.2. Các biện pháp phịng tránh bế tắc

Chủ yếu có ba hương tiếp cận để xử lý tắc nghẽn :

- Sử dụng một vài giao thức (protocol) để bảo đảm rằng hệ thống không bao giờ xảy ra tắc nghẽn.

HĐH không có khả năng chống Deadlock Lý do dung phương pháp này:

Do xác suất xảy ra đealock nhỏ

Đây là giải pháp của hầu hết các hệ điều hành hiện nay. - Cho phép xảy ra tắc nghẽn và tìm cách sửa chữa tắc nghẽn.

- Hoàn toàn bỏ qua việc xử lý tắc nghẽn, xem như hệ thống không bao giờ xảy ra tắc nghẽn.

6.3. Phát hiện bế tắc

Một câu hỏi đặt ra có thể tính tốn để khẳng định được hay khơng khẳng định rằng một q trình có thể rơi vào tình trạng bế tắc. Để tính tốn được điều này, hệ điều hành cần đưa ra danh sách các tài nguyên mà các quá trình đang chờ đợi và danh sách các quá trình đang chờ đợi tài nguyên mà khơng được thỏa mãn.

Để đốn nhận việc bế tắc có thể xảy ra hay khơng cần có thơng tin để kiểm sốt nhu cầu tài nguyên của các q trình. Rõ ràng là khơng phải tình trạng cần tài nguyên là sẽ xảy ra bế tắc. Có một số thuật tốn dựa vào các danh sách đã liệt kê ở trên để đoán nhận được bế tắc có thể xảy ra để loại bỏ .

6.4. Xử lý bế tắc

Đình chỉ hoạt động của các tiến trình liên quan

Cách tiếp cận này dựa trên việc thu hồi lại các tài nguyên của những tiến trình bị kết thúc. Có thể sử dụng một trong hai phương pháp sau :

Đình chỉ tất cả các tiến trình trong tình trạng tắc nghẽn

Đình chỉ từng tiến trình liên quan cho đến khi khơng cịn chu trình gây tắc nghẽn : để chọn được tiến trình thích hợp bị đình chỉ, phải dựa vào các yếu tố như độ ưu tiên, thời gian đã xử lý, số lượng tài nguyên đang chiếm giữ , số lượng tài nguyên yêu cầu...

Thu hồi tài nguyên

Có thể hiệu chỉnh tắc nghẽn bằng cách thu hồi một số tài nguyên từ các tiến trình và cấp phát các tài nguyên này cho những tiến trình khác cho đến khi loại bỏ được chu trình tắc nghẽn. Cần giải quyết 3 vấn đề sau:

Chọn lựa một nạn nhân: tiến trình nào sẽ bị thu hồi tài nguyên ? và thu hồi những tài nguyên nào ?

Trở lại trạng thái trước tắc nghẽn: khi thu hồi tài nguyên của một tiến trình, cần phải phục hồi trạng thái của tiến trình trở lại trạng thái gần nhất trước đó mà khơng xảy ra tắc nghẽn.

Tình trạng « đói tài ngun »: làm sao bảo đảm rằng khơng có một tiến trình ln ln bị thu hồi tài nguyên ?

6.5. Kết luận chung về phòng tránh bế tắc

Trạng thái deadlock xảy ra khi hai hay nhiều q trình đang chờ khơng xác định một sự kiện mà có thể được gây ra chỉ bởi một trong những q trình đang chờ. Về ngun tắc, có ba phương pháp giải quyết deadlock:

• Sử dụng một số giao thức để ngăn chặn hay tránh deadlock, đảm bảo rằng hệ thống sẽ khơng bao giờ đi vào trạng thái deadlock.

• Cho phép hệ thống đi vào trạng thái deadlock, phát hiện và sau đó phục hồi.

• Bỏ qua vấn đề deadlock và giả vờ deadlock chưa bao giờ xảy ra trong hệ thống. Giải pháp này là một giải pháp được dùng bởi hầu hết các hệ điều hành bao gồm UNIX.

Trường hợp deadlock có thể xảy ra nếu và chỉ nếu bốn điều kiện cần xảy ra cùng một lúc trong hệ thống: loại trừ hỗ tương, giữ và chờ cấp thêm tài ngun, khơng địi lại tài ngun, và tồn tại chu trình trong đồ thị cấp phát tài nguyên. Để ngăn chặn deadlock, chúng ta đảm bảo rằng ít nhất một điều kiện cần không bao giờ xảy ra.

Một phương pháp để tránh deadlock mà ít nghiêm ngặt hơn giải thuật ngăn chặn deadlock là có thơng tin trước về mỗi q trình sẽ đang dùng tài nguyên như thế nào. Thí dụ, giải thuật Banker cần biết số lượng tối đa của mỗi lớp tài ngun có thể được

u cầu bởi mỗi q trình. Sử dụng thơng tin này chúng ta có thể định nghĩa giải thuật tránh deadlock.

Nếu hệ thống không thực hiện một giao thức để đảm bảo rằng deadlock sẽ không bao giờ xảy ra thì lược đồ phát hiện và phục hồi phải được thực hiện. Giải thuật phát hiện deadlock phải được nạp lên để xác định deadlock có thể xảy ra hay không. Nếu deadlock được phát hiện hệ thống phải phục hồi bằng cách kết

thúc một số quá trình bị deadlock hay địi lại tài ngun từ một số q trình bị deadlock.

Trong một hệ thống mà nó chọn các nạn nhân để phụv hồi về trạng thái trước đó chủ yếu dựa trên cơ sở yếu tố chi phí, việc đói tài ngun có thể xảy ra. Kết quả là q trình được chọn khơng bao giờ hồn thành tác vụ được chỉ định của nó.

CÂU HỎI VÀ BÀI TẬP

1. Nêu khái niệm quá trình (tiến trình). Phân biệt quá trình với chương trình.

2. Vẽ sơ đồ không gian trạng thái. Nêu ý nghĩa các trạng thái của một quá trình.

3. Thế nào là lập lịch dài kỳ và lập lịch ngắn kỳ. 4. Khái niệm ngắt và qui trình xử lý ngắt. 5. Nêu các tiêu chuẩn lập lịch cho CPU.

6. Cho các quá trình với thời gian thực hiện tương ứng như sau: Quá trình (process) tthực hiện

P1 10

P2 2

P3 7

P4 1

P5 5

Tính thời gian chờ đợi trung bình của các quá trình trong các chiến lược FCFS, SJN, RR (với lượng tử thời gian là 2).

7. Nêu khái niệm về bế tắc và các điều kiện xảy ra bế tắc trong hệ thống. HƯỚNG DẪN TRẢ LỜI

1. Tiến trình là một đoạn chương trình hay đoạn dữ liệu chương trình được đưa vào CPU để xử lý. Dựa vào khái niệm chương trình và tiến trình để phân biệt.

2. Vẽ sơ đồ. Nêu lên khi nào thì quá trình ở các trạng thái trong sơ đồ. 3. Nêu ở phần lập lịch dài kỳ và lập lịch ngắn kỳ.

4. Ở phần ngắt và các bước xử lý ngắt trong giáo trình

5. Xem xét số tiến trình vào xử lý trong CPU, thời gian chờ của các tiến trình.

6. Áp dụng và xem ví dụ các chiến lược FCFS, SJN,RR nói ở trên để giải. 7. Ở phần bế tắc và các điều khiện xảy ra bế tắc.

Một phần của tài liệu Giáo trình Nguyên lý hệ điều hành (Nghề: Công nghệ thông tin - Cao đẳng) - Trường CĐ Nghề Kỹ thuật Công nghệ (Trang 72 - 80)

Tải bản đầy đủ (PDF)

(86 trang)