Bế tắc là gì hệ điều hành

Bế tắc (Deadlock)

Tham khảo tài liệu 'bế tắc (deadlock)', công nghệ thông tin, hệ điều hành phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả       Download Xem online

Tóm tắt nội dung tài liệu

  1. Nguyên lý hệ điều hành                                        Bế tắc (Deadlock) Nguyễn Hải Châu Khoa Công nghệ thông tin Trường Đại học Công nghệ 1                                                           2 Định nghĩa                                         Hai con dê qua cầu: Bế tắc Bế tắc là tình huống xuất hiện khi hai hay nhiều hành động phải chờ một hoặc nhiều hành động khác để kết thúc, nhưng không bao giờ thực hiện được Máy tính: Bế tắc là tình huống xuất hiện khi hai tiến trình phải chờ đợi nhau giải phóng tài nguyên hoặc nhiều tiến trình chờ sử dụng các tài nguyên theo một vòng tròn (circular chain) 3                                                           4 Bế tắc giao thông tại ngã tư                       Bế tắc trong máy tính Tiến trình A:               Tiến trình B {                           { Khóa file F1;               Khóa file F2; ...                         ... Mở file F2;                 Mở file F1; Đóng F1 (mở khóa F1);       Đóng F1 (mở khóa F1); }                           } 5                                                           6 1
  2. Qui trình sử dụng tài nguyên                              Điều kiện cần để có bế tắc Một tiến trình thường sử dụng tài nguyên                  Bế tắc xuất hiện nếu 4 điều kiện sau xuất theo các bước tuần tự sau:                                hiện đồng thời (điều kiện cần): Xin phép sử dụng (request)                                C1: Loại trừ lẫn nhau (mutual exclusion) Sử dụng tài nguyên (use)                                  C2: Giữ và chờ (hold and wait) Giải phóng tài nguyên sau khi sử dụng (release)           C3: Không có đặc quyền (preemption) C4: Chờ vòng (circular wait) 7                                                     8 C1: Loại trừ lẫn nhau                                     C2: Giữ và chờ Một tài nguyên bị chiếm bởi một tiến trình, và            Một tiến trình giữ ít nhất một tài nguyên và không tiến trình nào khác có thể sử dụng tài              chờ một số tài nguyên khác rỗi để sử dụng. nguyên này                                                Các tài nguyên này đang bị một tiến trình khác chiếm giữ 9                                                     10 C3: Không có đặc quyền                                    C3: Chờ vòng Tài nguyên bị chiếm giữ chỉ có thể rỗi khi tiến           Một tập tiến trình {P0, P1, ..., Pn} có xuất hiện trình tự nguyện giải phóng tài nguyên sau               điều kiện chờ vòng nếu P0 chờ một tài khi đã sử dụng xong.                                      nguyên do P1 chiếm giữ, P1 chờ một tài nguyên khác do P2 chiếm giữ, ..., Pn-1 chờ tài nguyên do Pn chiếm giữ và Pn chờ tài nguyên do P0 chiếm giữ 11                                                    12 2
  3. Đồ thị cấp phát tài nguyên                              Đồ thị cấp phát tài nguyên Thuật ngữ: Resource allocation graph                    Cung có hướng từ tiến trình Pi đến tài nguyên Rj, ký hiệu là PiRj có ý nghĩa: Tiến Để mô tả một cách chính xác bế tắc, chúng trình Pi yêu cầu một thể hiện của Ri. Ta gọi ta sử dụng đồ thị có hướng gọi là đồ thị cấp PiRj là cung yêu cầu (request edge) phát tài nguyên G=(V, E) với V là tập đỉnh, E là tập cung                                             Cung có hướng từ tài nguyên Rj đến tiến trình Pi ký hiệu là RjPi có ý nghĩa: Một thể E được chia thành hai tập con P={P0, P1, ..., hiện của tài nguyên Rj đã được cấp phát cho Pn} là tập các tiến trình trong hệ thống và R= tiến trình Pi. Ta gọi RjPi là cung cấp phát {R0, R1, ..., Rm} là tập các loại tài nguyên (asignment edge) trong hệ thống thỏa mãn PR=E và PR= 13                                                  14 Đồ thị cấp phát tài nguyên                              Đồ thị cấp phát tài nguyên Nếu không có chu trình trong đồ thị cấp phát Ký hiệu hình vẽ: tài nguyên: Không có bế tắc. Nếu có chu Pi là hình tròn trình: Có thể xảy ra bế tắc. Rj là các hình chữ nhật với mỗi chấm bên trong là Nếu trong một chu trình trong đồ thị cấp phát số lượng các thể hiện của tài nguyên tài nguyên, mỗi loại tài nguyên chỉ có đúng Minh họa đồ thị cấp phát tài nguyên: một thể hiện: Bế tắc đã xảy ra (Điều kiện cần và đủ) R2 R1 Nếu trong một chu trình trong đồ thị cấp phát P2         P3 P1 tài nguyên một số tài nguyên có nhiều hơn một thể hiện: Có thể xảy ra bế tắc (Điều kiện cần nhưng không đủ) R3                        R4 15                                                  16 Ví dụ chu trình không dẫn đến Ví dụ chu trình dẫn đến bế tắc                          bế tắc Chu trình: P1R1P3R2P1 Giả sử P3 yêu cầu một thể hiện của R3 Khi đó có 2 chu trình xuất hiện:                        Bế tắc không xảy ra vì P4 có thể giải phóng một thể hiện tài nguyên R2 và P3 sẽ được P1R1P2R2P3R3P1, và cấp phát một thể hiện của R2 P2R2P3R3P2 P2 Khi đó các tiến trình P1, P2, P3 bị bế tắc R1 R2 R1 P1                P3 P2   P3 P1                                                        R2 P4 17                                                  18 R3                     R4 3
  4. Các phương pháp xử lý bế tắc Các phương pháp Một cách tổng quát, có 3 phương pháp: xử lý bế tắc                             Sử dụng một giao thức để hệ thống không bao giờ rơi vào trạng thái bế tắc: Deadlock prevention (ngăn chặn bế tắc) hoặc Deadlock avoidance (tránh bế tắc) Có thể cho phép hệ thống bị bế tắc, phát hiện bế tắc và khắc phục nó Bỏ qua bế tắc, xem như bế tắc không bao giờ xuất hiện trong hệ thống (Giải pháp này dùng trong nhiều hệ thống, ví dụ Unix, Windows!!) 19                                                          20 Giới thiệu Ngăn chặn bế tắc Ngăn chặn bế tắc (deadlock prevention) là (Deadlock prevention)                              phương pháp xử lý bế tắc, không cho nó xảy ra bằng cách làm cho ít nhất một điều kiện cần của bế tắc là C1, C2, C3 hoặc C4 không được thỏa mãn (không xảy ra) Ngăn chặn bế tắc theo phương pháp này có tính chất tĩnh (statically) 21                                                          22 Ngăn chặn loại trừ lẫn nhau                     Ngăn chặn giữ và chờ C1 (Loại trừ lẫn nhau): là điều kiện bắt buộc     C2 (Giữ và chờ): Có thể làm cho C2 không cho các tài nguyên không sử dụng chung            xảy ra bằng cách đảm bảo: được  Khó làm cho C1 không xảy ra vì các          Một tiến trình luôn yêu cầu cấ phát tài nguyên chỉ hệ thống luôn có các tài nguyên không thể sử       khi nó không chiếm giữ bất kỳ một tài nguyên nào, hoặc dụng chung được Một tiến trình chỉ thực hiện khi nó được cấp phát toàn bộ các tài nguyên cần thiết 23                                                          24 4
  5. Ngăn chặn không có đặc quyền: mã lệnh Ngăn chặn không có đặc quyền Để ngăn chặn không cho điều kiện này xảy                    Tiến trình P yêu cầu cấp phát tài nguyên R1, ..., Rn-1 ra, có thể sử dụng giao thức sau:                           if (R1, ..., Rn-1 rỗi) Nếu tiến trình P (đang chiếm tài nguyên R1, ...,          then cấp phát tài nguyên cho P Rn-1) yêu cầu cấp phát tài nguyên Rn nhưng else if ({Ri...Rj} được cấp phát cho Q và Q đang không được cấp phát ngay (có nghĩa là P phải trong trạng thái chờ một số tài nguyên S khác) chờ) thì tất cả các tài nguyên R1, ..., Rn-1 phải then thu hồi {Ri...Rj} và cấp phát cho P được thu hồi else đưa P vào trạng thái chờ tài nguyên R1, ..., Rn-1 Nói cách khác, R1, ..., Rn-1 phải được giải phóng một cách áp đặt, tức là các tài nguyên này phải được đưa vào danh sách các tài nguyên mà P đang chờ cấp phát.                                   25                                                        26 Ngăn chặn chờ vòng                                         Ngăn chặn chờ vòng Giao thức ngăn chặn chờ vòng: Một giải pháp ngăn chặn chờ vòng là đánh số thứ tự các tài nguyên và bắt buộc các tiến                   Khi tiến trình P không chiếm giữ tài nguyên nào, nó có thể yêu cầu cấp phát nhiều thể hiện của trình yêu cầu cấp phát tài nguyên theo số thứ một tài nguyên Ri bất kỳ tự tăng dần Sau đó P chỉ có thể yêu cầu các thể hiện của tài Giả sử có các tài nguyên {R1, ..., Rn}. Ta gán                  nguyên Rj nếu và chỉ nếu f(Rj) > f(Ri). Một cách khác, nếu P muốn yêu cầu cấp phát tài nguyên cho mỗi tài nguyên một số nguyên dương Rj, nó đã giải phóng tất cả các tài nguyên Ri thỏa duy nhất qua một ánh xạ 1-1                                     mãn f(Ri)f(Rj) f : R  N, với N là tập các số tự nhiên                         Nếu P cần được cấp phát nhiều loại tài nguyên, P phải lần lượt yêu cầu các thể hiện của từng tài Ví dụ: f(ổ cứng) = 1, f(băng từ) = 5, f(máy in) = 11 nguyên đó 27                                                        28 Chứng minh giải pháp ngăn                                    Ưu nhược điểm của ngăn chặn chặn chờ vòng                                                giải pháp bế tắc Sử dụng chứng minh phản chứng                                 Ưu điểm: ngăn chặn bế tắc (deadlock prevention) là phương pháp tránh được bế Giả sử giải pháp ngăn chặn gây ra chờ vòng tắc bằng cách làm cho điều kiện cần không {P0, P1, ..., Pn} trong đó Pi chờ tài nguyên Ri được thỏa mãn bị chiếm giữ bởi P(i+1) mod n Nhược điểm: Vì Pi+1 đang chiếm giữ Ri và yêu cầu Ri+1, do đó f(Ri)
  6. Giới thiệu Tránh bế tắc Tránh bế tắc là phương pháp sử dụng thêm (Deadlock avoidance)                                      các thông tin về phương thức yêu cầu cấp phát tài nguyên để ra quyết định cấp phát tài nguyên sao cho bế tắc không xảy ra. Có nhiều thuật toán theo hướng này Thuật toán đơn giản nhất và hiệu quả nhất là: Mỗi tiến trình P đăng ký số thể hiện của mỗi loại tài nguyên mà P sẽ sử dụng. Khi đó hệ thống sẽ có đủ thông tin để xây dựng thuật toán cấp phát không gây ra bế tắc 31                                                    32 Giới thiệu                                               Trạng thái an toàn (safe-state) Các thuật toán như vậy kiểm tra trạng thái               Một trạng thái (cấp phát tài nguyên) được gọi cấp phát tài nguyên một cách động để đảm               là an toàn nếu hệ thống có thể cấp phát tài bảo điều kiện chờ vòng không xảy ra                      nguyên cho các tiến trình theo một thứ tự nào Trạng thái cấp phát tài nguyên được xác định             đó mà vẫn tránh được bế tắc, hay bởi số lượng tài nguyên rỗi, số lượng tài Hệ thống ở trong trạng thái an toàn nếu và chỉ nguyên đã cấp phát và số lượng lớn nhất các nếu tồn tại một thứ tự an toàn (safe-sequence) yêu cầu cấp phát tài nguyên của các tiến trình Hai thuật toán sẽ nghiên cứu: Thuật toán đồ thị cấp phát tài nguyên và thuật toán banker 33                                                    34 Các trạng thái an toàn, không Thứ tự an toàn                                           an toàn và bế tắc Thứ tự các tiến trình  gọi là một             Trạng thái an toàn              Không an toàn không là trạng thái bế thứ tự an toàn (safe-sequence) cho trạng thái tắc cấp-phát hiện-tại nếu với mỗi Pi, yêu cầu cấp                                        Bế tắc Trạng thái bế tắc là phát tài nguyên của Pi vẫn có thể được thỏa trạng thái không an mãn căn cứ vào trạng thái của:                           toàn Tất cả các tài nguyên rỗi hiện có, và Trạng thái không an                  An toàn Tất cả các tài nguyên đang bị chiếm giữ bởi tất cả     toàn có thể là trạng thái các Pj j
  7. Ví dụ trạng thái an toàn, bế tắc                       Ví dụ trạng thái an toàn, bế tắc Yêu cầu nhiều nhất Yêu cầu hiện tại Xét một hệ thống có 12 tài nguyên là 12 băng từ và 3 tiến trình P0, P1, P2 với các yêu cầu        P0          10                    5 cấp phát:                                            P1           4                    2 P0 yêu cầu nhiều nhất 10 băng từ                   P2           9                    2 P1 yêu cầu nhiều nhất 4 băng từ                      Tại thời điểm t0, hệ thống ở trạng thái an toàn P2 yêu cầu nhiều nhất 9 băng từ                      Thứ tự  thỏa mãn điều kiện an toàn Giả sử tại một thời điểm t0, P0 đang chiếm 5           Giả sử ở thời điểm t1, P2 có yêu cầu và được băng từ, P1 và P2 mỗi tiến trình chiếm 2 băng          cấp phát 1 băng từ: Hệ thống không ở trạng thái an toàn nữa... -> quyết đinh cấp tài nguyên cho từ. Như vậy có 3 băng từ rỗi P2 là sai. 37                                                        38 Thuật toán đồ thị cấp phát tài                         Thuật toán đồ thị cấp phát tài nguyên                                                 nguyên Giả sử các tài nguyên chỉ có 1 thể hiện                 Chú ý rằng các tài nguyên phải được thông báo trước khi tiến trình thực hiện Sử dụng đồ thị cấp phát tài nguyên như ở slide 16 và thêm một loại cung nữa là cung              Các cung báo trước sẽ phải có trên đồ thị báo trước (claim)                                       cấp phát tài nguyên Cung báo trước PiRj chỉ ra rằng Pi có thể              Tuy nhiên có thể giảm nhẹ điều kiện: cung thông báo PiRj được thêm vào đồ thị nếu yêu cầu cấp phát tài nguyên Rj, được biểu diễn trên đồ thị bằng các đường nét đứt                 tất cả các cung gắn với Pi đều là cung thông báo Khi tiến trình Pi yêu cầu cấp phát tài nguyên Rj, đường nét đứt trở thành đường nét liền 39                                                        40 Thuật toán đồ thị cấp phát tài nguyên                                                 Ví dụ R1 Giả sử Pj yêu cầu cấp phát Rj. Yêu cầu này              Giả sử P1 yêu cầu cấp chỉ có thể được chấp nhận nếu ta chuyển                 phát R2 cung báo trước PiRj thành cung cấp phát                Mặc dù R2 rỗi nhưng RjPi và không tạo ra một chu trình                                                                            P2 chúng ta không thể cấp             P1 phát R2, vì nếu cấp phát Chúng ta kiểm tra bằng cách sử dụng thuật                                             R1 ta sẽ có chu trình trong toán phát hiện chu trình trong đồ thị: Nếu có đồ thị và gây ra chờ vòng n tiến trình trong hệ thống, thuật toán phát                                                         R2 Hệ thống ở trạng thái hiện chu trình có độ phức tạp tính toán O(n2) không an toàn                           P2 P1 Nếu không có chu trình: Cấp phát->trạng thái an toàn, ngược lại: Trạng thái không an toàn 41                                                        42 R2 7
  8. Thuật toán banker                                        Ký hiệu dùng trong banker Thuật toán đồ thị phân phối tài nguyên không                Tài nguyên rỗi: Vector m thành phần áp dụng được cho các hệ thống có những tài                  Available, Available[j]=k nghĩa là có k thể nguyên có nhiều thể hiện                                    hiện của Rj rỗi Thuật toán banker được dùng cho các hệ có                   Max: Ma trận nxm xác định yêu cầu tài tài nguyên nhiều thể hiện, nó kém hiệu quả                  nguyên max của mỗi tiến trình. Max[i][j]=k có hơn thuật toán đồ thị phân phối tài nguyên                  nghĩa là tiến trình Pi yêu cầu nhiều nhất k thể hiện của tài nguyên Rj. Thuật toán banker có thể dùng trong ngân hàng: Không bao giờ cấp phát tài nguyên (tiền) gây nên tình huống sau này không đáp ứng được nhu cầu của tất cả các khách hàng        43                                                            44 Ký hiệu dùng trong banker                                Ký hiệu dùng trong banker Cấp phát: Ma trận nxm xác định số thể hiện                  Số lượng và giá trị các biến trên biến đổi theo của các loại tài nguyên đã cấp phát cho mỗi                 trạng thái của hệ thống tiến trình. Allocation[i][j]=k có nghĩa là tiến             Qui ước: Nếu hai vector X, Y thỏa mãn trình Pi được cấp phát k thể hiện của Rj.                   X[i]Y[i] i thì ta ký hiệu XY. Cần thiết: Ma trận nxm chỉ ra số lượng thể                  Giả sử Work và Finish là các vector m và n hiện của các tài nguyên mỗi tiến trình cần                  thành phần. cấp phát tiếp. Need[i][j]=k có nghĩa là tiến                Request[i] là vector yêu cầu tài nguyên của trình Pi còn có thể cần thêm k thể hiện nữa                 tiến trình Pi. Request[i][j]=k có nghĩa là tiến của tài nguyên Rj.                                          trình Pi yêu cầu k thể hiện của tài nguyên Rj 45                                                            46 Thuật toán trạng thái an toàn                            Thuật toán yêu cầu tài nguyên Khởi tạo Work=Available và Finish[i]=false                  Nếu Request[i]Need[i], chuyển đến bước 2 1.                                                           1. i=1..n                                                     Ngược lại thông báo lỗi (không có tài nguyên rỗi) Tìm i sao cho Finish[i]==false và Need[i]Work              Nếu Request[i]Available, chuyển đến bước 3. 2.                                                           2. Ngược lại Pi phải chờ vì không có tài nguyên Nếu không tìm được i, chuyển đến bước 4 Nếu việc thay đổi trạng thái giả định sau đây: Work=Work+Allocation[i], Finish[i]=true                3. 3. Available=Availalble-Request[i] Chuyển đến bước 2                                              Allocation=Allocation+Request[i] Nếu Finish[i]==true i thì hệ thống ở trạng thái 4.                                                                   Need[i]=Need[i]-Request[i] an toàn                                                     đưa hệ thống vào trạng thái an toàn thì cấp phát tài Độ phức tạp tính toán của thuật toán trạng thái             nguyên cho Pi, ngược lại Pi phải chờ Request[i] và an toàn: O(m.n2)                                            trạng thái của hệ thống được khôi phục như cũ 47                                                            48 8
  9. Ví dụ banker                                               Ví dụ banker Xét một hệ thống các tiến trình và tài nguyên              Hệ thống hiện đang ở trạng thái an toàn như sau:                                                   Thứ tự  thỏa mãn tiêu chuẩn Allocation Max        Available Need                    an toàn ABC        ABC        ABC         ABC                   Giả sử P1 có yêu cầu: Request[1]=(1,0,2) P0 0 1 0       7 53       3 32        74 3 Để quyết định xem có cấp phát tài nguyên P1 2 0 0       3 22                   12 2                  theo yêu cầu này không, trước hết ta kiểm tra P2 3 0 2       9 02                   60 0                  Request[1]Available: (1,0,2)
  10. Tài nguyên có nhiều thể hiện Available: Vector m thành phần chỉ ra số lượng thể hiện của mỗi loại tài nguyên Allocation: Ma trận nxm xác định số thể hiện của mỗi loại tài nguyên đang được cấp phát cho các tiến trình Request: Ma trận nxm xác định yêu cầu hiện tại của mỗi tiến trình. Nếu Request[i][j]=k thì tiến trình Pi yêu cầu cấp phát k thể hiện của tài nguyên Rj. 55                                                          56 Tài nguyên có nhiều thể hiện                                 Sử dụng thuật toán phát hiện Giả sử Work và Finish là các vector m và n thành             Tần suất sử dụng phụ thuộc: 1. phần. Khởi tạo Work=Available. Với mỗi i=0..n-1 gán Tần suất xảy ra bế tắc Finish[i]=false nếu Allocation[i]0, ngược lại gán Bao nhiêu tiến trình bị ảnh hưởng bởi bế tắc? Finish[i]=true Tìm i sao cho Finish[i]==false và Request[i]Work. Nếu       Sử dụng thuật toán phát hiện: 2. không tìm thấy i, chuyển đến bước 4 Định kỳ: Có thể có nhiều chu trình trong đồ thị, Work=Work+Allocation, Finish[i]=true; chuyển đến 3. không biết được tiến trình/request nào gây ra bế bước 2 tắc Nếu Finish[i]==false với 0in-1 thì hệ thống đang bị 4. Khi có yêu cầu cấp phát tài nguyên: Tốn tài bế tắc (và tiến trình Pi đang bế tắc). nguyên CPU Độ phức tạp tính toán của thuật toán: O(m.n2) 57                                                          58 Khôi phục khi có bế tắc                                      Khôi phục khi có bế tắc Kết thúc tiến trình:                                       Giải phóng tài nguyên một cách bắt buộc (preemption): Kết thúc toàn bộ các tiến trình bị bế tắc (1) Kết thúc từng tiến trình và dừng quá trình này              Chọn tài nguyên nào và tiến trình nào để thực khi bế tắc chấm dứt (2)                                     hiện? Tiến trình bị kết thúc ở (2) căn cứ vào:                     Khôi phục trạng thái của tiến trình đã chọn ở (1) Độ ưu tiên                                                  như thế nào? Thời gian đã thực hiện và thời gian còn lại                 Làm thế nào để tránh tình trạng một tiến trình Số lượng và các loại tài nguyên đã sử dụng                  luôn bị bắt buộc giải phóng tài nguyên? Các tài nguyên cần cấp phát thêm Số lượng các tiến trình phải kết thúc Tiến trình là tương tác hay xử lý theo lô (batch)   59                                                          60 10
  11. Tóm tắt                                                 Bài tập Khái niệm bế tắc                                        Thực hiện lại ví dụ phát hiện bế tắc ở trang 264 trong giáo trình Các điều kiện cần để có bế tắc Làm bài tập số 7.1 trong giáo trình (trang Đồ thị phân phối tài nguyên 268) Các phương pháp xử lý bế tắc: Ngăn chặn Làm bài tập số 7.11 trong giáo trình (trang và tránh bế tắc (thuật toán đồ thị cấp phát tài 270) nguyên và thuật toán banker) Khôi phục khi bế tắc đã xảy ra: Kết thúc tiến trình và preemption 61                                                   62 11

Chủ đề