Mọi Process đều cần một số tài nguyên để hoàn thành Process thực thi. Tuy nhiên, tài nguyên được cấp theo thứ tự tuần tự.
- Process yêu cầu một số tài nguyên.
- Hệ quản lý cấp tài nguyên nếu nó với sẵn, nếu ko, hãy để Process chờ.
- Process sử dụng nó và phát hành lúc hoàn thành.
Deadlock là gì ?
Deadlock là một tình huống xảy ra trong hệ thống máy tính, lúc hai hoặc nhiều tiến trình (process) cùng nỗ lực giành quyền truy cập vào tài nguyên chung (shared resource) mà mỗi tiến trình cần để hoàn thành công việc của mình, nhưng ko thể hoàn thành nếu thiếu tài nguyên này. Lúc đó, những tiến trình sẽ bị kẹt lại (deadlocked), ko thể tiếp tục thực hiện công việc và chờ đợi tài nguyên được phóng thích.
Ví dụ, nếu tiến trình A đang giữ khóa (lock) trên tài nguyên X và yêu cầu khóa tài nguyên Y, trong lúc tiến trình B đang giữ khóa trên tài nguyên Y và yêu cầu khóa tài nguyên X, thì hai tiến trình này sẽ bị kẹt lại vì ko thể phóng thích tài nguyên hiện tại của mình và ko thể nhận được tài nguyên mới. Đây là một ví dụ về deadlock trong hệ thống máy tính.
Deadlock là một tình huống trong đó mỗi tiến trình máy tính chờ đợi một tài nguyên đang được gán cho một số tiến trình khác. Trong tình huống này, ko với Process nào được thực thi vì tài nguyên mà nó cần, được giữ bởi một số Process khác cũng đang chờ một số tài nguyên khác được phóng thích.
Những bài viết liên quan:
Giả sử rằng với ba Process P1, P2 và P3. Mang ba tài nguyên khác nhau R1, R2 và R3. R1 được gán cho P1, R2 được gán cho P2 và R3 được gán cho P3.
Sau một thời kì, P1 yêu cầu R1 đang được P2 sử dụng. P1 tạm ngừng Process thực thi của nó vì nó ko thể hoàn thành nếu ko với R2. P2 cũng yêu cầu R3 đang được P3 sử dụng. P2 cũng ngừng Process thực thi của nó vì nó ko thể tiếp tục mà ko với R3. P3 cũng yêu cầu R1 đang được P1 sử dụng do đó P3 cũng ngừng thực thi.
Trong kịch bản này, một chu trình đang được hình thành giữa ba Process. Ko với Process nào đang diễn ra và tất cả đều đang chờ đợi. Máy tính ko phản hồi vì tất cả những Process đã bị chặn.
Sự khác biệt giữa Starvation và Deadlock
Deadlock | Starvation |
Deadlock là tình huống ko với Process nào bị chặn và ko với Process nào tiếp tục | Starvation là tình huống trong đó Process với mức độ ưu tiên thấp bị chặn và Process với mức độ ưu tiên cao vẫn tiếp tục. |
Deadlock lại là sự chờ đợi vô hạn | Starvation là một sự chờ đợi trong khoảng thời gian dài nhưng ko phải là vô hạn. |
Mỗi lần Deadlock luôn là một lần Starvation | Mọi Starvation ko cần phải Deadlock |
Resource được yêu cầu bị chặn bởi Process khác | Resource được yêu cầu liên tục được sử dụng bởi những Process ưu tiên cao hơn. |
Deadlock xảy ra lúc Mutual exclusion, hold và wait, No preemption và circular wait | Nó xảy ra do mức độ ưu tiên và quản lý tài nguyên ko được kiểm soát |
Những điều kiện cần thiết cho Deadlocks
- Mutual Exclusion
Một tài nguyên chỉ với thể được san sẻ theo cách Mutual Exclusion. Nó ngụ ý, nếu hai tiến trình ko thể sử dụng cùng một tài nguyên cùng một lúc.
- Hold and Wait
Một tiến trình đợi một số tài nguyên trong lúc giữ một tài nguyên khác cùng một lúc.
- No preemption
Process đã từng được lên lịch sẽ được thực hiện cho tới lúc hoàn thành. Ko với Process nào khác với thể được lên lịch bởi người lập lịch trong thời kì đó.
- Circular Wait
Tất cả những Process phải chờ tài nguyên theo cách tuần hoàn để Process cuối cùng đang đợi tài nguyên đang được Process trước hết nắm giữ.
Những chiến lược để xử lý Deadlock
Deadlock Ignorance
Deadlock ko hiểu biết là cách tiếp cận được sử dụng rộng rãi nhất trong số tất cả những cơ chế. Điều này đang được sử dụng bởi nhiều hệ quản lý chủ yếu cho mục đích sử dụng của người tiêu dùng cuối. Trong cách tiếp cận này, Hệ quản lý giả thiết rằng Deadlock ko bao giờ xảy ra. Nó chỉ đơn thuần là bỏ qua những Deadlock. Cách tiếp cận này phù thống nhất cho một hệ thống người tiêu dùng cuối duy nhất trong đó Người tiêu dùng chỉ sử dụng hệ thống để duyệt web và tất cả những nội dung thông thường khác.
Luôn với sự thăng bằng giữa tính đúng đắn và hiệu suất. Những hệ quản lý như Windows và Linux chủ yếu tập trung vào hiệu suất. Tuy nhiên, hiệu suất của hệ thống sẽ giảm nếu nó sử dụng cơ chế xử lý deadlock mọi lúc.
Trong những loại hệ thống này, người tiêu dùng chỉ cần phát động lại máy tính trong trường hợp Deadlock. Windows và Linux chủ yếu sử dụng cách tiếp cận này.
Deadlock prevention
Deadlock chỉ xảy ra lúc Loại trừ lẫn nhau, giữ và chờ, Ko ưu tiên và chờ vòng tròn đồng thời. Nếu với thể vi phạm một trong bốn điều kiện bất kỳ lúc nào thì ko bao giờ với thể xảy ra Deadlock trong hệ thống.
Ý tưởng đằng sau cách tiếp cận rất đơn thuần là chúng ta phải ko đạt một trong bốn điều kiện nhưng với thể với một lập luận to về việc triển khai vật lý của nó trong hệ thống.
Chúng ta sẽ thảo luận chi tiết về nó sau.
Deadlock avoidance
Trong trường hợp tránh Deadlock, hệ quản lý sẽ rà soát xem hệ thống đang ở trạng thái an toàn hay ở trạng thái ko an toàn ở mỗi bước mà hệ quản lý thực hiện. Quá trình tiếp tục cho tới lúc hệ thống ở trạng thái an toàn. Lúc hệ thống chuyển sang trạng thái ko an toàn, hệ quản lý phải lùi lại một bước.
Nói cách đơn thuần, Hệ quản lý xem xét từng phân bổ để việc phân bổ ko gây ra Deadlock trong hệ thống.
Chúng ta sẽ thảo luận chi tiết về cách tránh Deadlock ở phần sau.
Deadlock detection và recovery
Cách tiếp cận này cho phép những trật tự rơi vào tình trạng Deadlock và sau đó rà soát định kỳ xem với xảy ra Deadlock trong hệ thống hay ko. Nếu nó xảy ra thì nó sẽ ứng dụng một số phương pháp khôi phục hệ thống để thoát khỏi Deadlock.
Chúng ta sẽ thảo luận về việc phát hiện và khôi phục deadlock sau chi tiết hơn vì nó là một vấn đề thảo luận.
Deadlock tác động như thế nào tới hiệu suất của hệ thống?
Deadlock với thể tác động nghiêm trọng tới hiệu suất của hệ thống. Lúc deadlock xảy ra, những tiến trình bị mắc kẹt và ko thể hoàn thành công việc của mình, dẫn tới sự lãng phí tài nguyên và giảm hiệu suất của hệ thống. Những tài nguyên bị mắc kẹt trong deadlock ko thể được sử dụng bởi những tiến trình khác, dẫn tới sự đói tài nguyên và giảm khả năng thực hiện công việc khác.
Ngoài ra, quá trình khắc phục deadlock cũng tác động tới hiệu suất của hệ thống. Việc khắc phục deadlock thường đòi hỏi thời kì và tài nguyên để tìm ra những giải pháp thích hợp để khắc phục vấn đề. Trong lúc quá trình khắc phục deadlock đang diễn ra, những tiến trình khác với thể phải chờ đợi tài nguyên và làm giảm hiệu suất của hệ thống.
Những nghi vấn phổ biến về deadlock trong hệ quản lý
- Deadlock là gì?
- Deadlock là tình trạng mà hai hoặc nhiều tiến trình hoặc luồng đang chờ đợi tài nguyên mà những tiến trình khác đang sử dụng, trong lúc những tiến trình đang giữ những tài nguyên mà những tiến trình khác cần. Kết quả là những tiến trình sẽ bị treo và ko thể tiếp tục thực hiện.
- Deadlock với thể xảy ra lúc nào?
- Deadlock với thể xảy ra lúc những tiến trình hoặc luồng cùng khó khăn sử dụng những tài nguyên hệ thống, và ko với cơ chế quản lý tài nguyên đảm bảo rằng những tài nguyên sẽ được sử dụng đúng cách.
- Những yếu tố gây ra deadlock là gì?
- Những yếu tố gây ra deadlock gồm với: đối tượng tài nguyên bị chiếm giữ, yêu cầu những tài nguyên cùng mức ưu tiên, tiến trình ko phóng thích tài nguyên lúc đã sử dụng xong, và vòng lặp phụ thuộc tài nguyên.
- Những phương pháp phát hiện deadlock là gì?
- Những phương pháp phát hiện deadlock gồm với: phát hiện vòng lặp, phát tình trạng thái an toàn, phát tình trạng thái ko an toàn và phát hiện thông qua giám sát.
- Những phương pháp khắc phục deadlock là gì?
- Những phương pháp khắc phục deadlock gồm với: phóng thích tài nguyên, khóa đột xuất (preemption), khắc phục bằng giải thuật Banker, và khắc phục bằng giải thuật Wait-Die và giải thuật Wound-Wait.
- Deadlock với thể tác động tới hiệu suất hệ thống như thế nào?
- Deadlock với thể làm giảm hiệu suất của hệ thống vì những tiến trình bị treo và ko thể thực hiện, làm cho những tài nguyên bị chiếm giữ và ko thể sử dụng được.
- Làm thế nào để tránh deadlock?
- Để tránh deadlock, với thể sử dụng những kỹ thuật như phóng thích tài nguyên đúng cách, tránh sử dụng những tài nguyên cùng mức ưu tiên, sử dụng những giải thuật quản lý tài nguyên, và sử dụng những giải thuật phân bổ tài nguyên với thể tránh deadlock.
- Những giải thuật phân bổ tài nguyên để tránh deadlock là gì?
- Giải thuật Banker: xác định trạng thái an toàn của hệ thống trước lúc cấp phát tài nguyên cho những tiến trình, tránh những trạng thái ko an toàn và đảm bảo ko với deadlock xảy ra.
- Giải thuật san sẻ tài nguyên: cho phép những tiến trình sử dụng chung những tài nguyên mà ko gây ra deadlock, ví dụ như sử dụng mutex hay semaphore.
- Giải thuật yêu cầu ko trùng khớp: chỉ cho phép những tiến trình yêu cầu tài nguyên mà ko trùng khớp với những yêu cầu của những tiến trình khác, tránh những vòng lặp phụ thuộc tài nguyên.
- Lúc nào cần sử dụng khóa đột xuất (preemption) để khắc phục deadlock?
- Khóa đột xuất được sử dụng lúc ko thể phóng thích tài nguyên, và cần phải lấy tài nguyên của một tiến trình để phục vụ tiến trình khác đang chờ đợi. Tuy nhiên, cần cân nhắc thật kỹ vì khóa đột xuất với thể gây ra tình trạng đói tài nguyên và làm giảm hiệu suất của hệ thống.
- Làm thế nào để phòng ngừa deadlock?
- Để phòng ngừa deadlock, cần phải thiết kế những giải thuật quản lý tài nguyên và phân bổ tài nguyên sao cho tránh được những trường hợp xảy ra deadlock. Những tiến trình phải được phóng thích tài nguyên lúc đã sử dụng xong, và hệ thống cần phải đảm bảo những tiến trình ko thể giữ tài nguyên quá lâu. Ngoài ra, cần thiết lập những quy tắc phân bổ tài nguyên sao cho tránh việc những tiến trình cùng khó khăn sử dụng những tài nguyên cùng mức ưu tiên.