Rate this post

Nếu chúng ta mô phỏng deadlock với một cái bàn đứng trên bốn chân của nó thì chúng ta cũng có thể mô phỏng bốn chân với bốn điều kiện xảy ra đồng thời, gây ra Deadlock.

Tuy nhiên, nếu chúng ta làm gãy một trong các chân của bàn thì chắc chắn bàn sẽ bị đổ. Điều tương tự cũng xảy ra với deadlock, nếu chúng ta có thể vi phạm một trong bốn điều kiện cần thiết và không để chúng xảy ra cùng nhau thì chúng ta có thể ngăn chặn được deadlock.

Các bài viết liên quan:

Hãy xem làm thế nào chúng ta có thể ngăn chặn từng điều kiện.

Mutual Exclusion

Phần lẫn nhau từ quan điểm tài nguyên là thực tế rằng một tài nguyên không bao giờ có thể được sử dụng đồng thời bởi nhiều quá trình, điều này đủ hợp lý nhưng đó là lý do chính đằng sau sự Deadlock. Nếu một tài nguyên có thể được sử dụng bởi nhiều quá trình cùng một lúc thì quá trình sẽ không bao giờ chờ đợi bất kỳ tài nguyên nào.

Tuy nhiên, nếu chúng ta có thể vi phạm các tài nguyên đang hoạt động theo cách loại trừ lẫn nhau thì Deadlock có thể được ngăn chặn.

Xem thêm Tránh deadlock trong hệ điều hành

Spooling

Đối với một thiết bị như máy in, bộ đệm có thể hoạt động. Có một bộ nhớ được liên kết với máy in để lưu trữ các lệnh từ mỗi quá trình vào đó. Sau đó, Máy in thu thập tất cả các công việc và in từng công việc theo FCFS. Bằng cách sử dụng cơ chế này, quá trình không phải đợi máy in và nó có thể tiếp tục bất cứ điều gì nó đang làm. Sau đó, nó thu thập đầu ra khi nó được sản xuất.

Mặc dù Spooling có thể là một cách tiếp cận hiệu quả để vi phạm loại trừ lẫn nhau nhưng nó có hai loại vấn đề.

  1. Điều này không thể được áp dụng cho mọi tài nguyên.
  2. Sau một thời điểm nào đó, có thể nảy sinh điều kiện chạy đua giữa các quá trình để có được không gian trong ống chỉ.

Chúng tôi không thể buộc một tài nguyên được sử dụng bởi nhiều quá trình cùng một lúc vì nó sẽ không đủ công bằng và một số vấn đề nghiêm trọng có thể phát sinh trong quá trình thực hiện. Do đó, chúng ta không thể vi phạm sự loại trừ lẫn nhau cho một quá trình trên thực tế.

Xem thêm Phát hiện và phục hồi Deadlock trong hệ điều hành

Hold and Wait

Điều kiện giữ và chờ nằm ​​khi một tiến trình giữ một tài nguyên và chờ một số tài nguyên khác hoàn thành nhiệm vụ của nó. Deadlock xảy ra bởi vì có thể có nhiều hơn một tiến trình đang giữ một tài nguyên và chờ đợi tài nguyên khác theo thứ tự tuần hoàn.

Tuy nhiên, chúng ta phải tìm ra cơ chế nào đó mà một tiến trình không giữ bất kỳ tài nguyên nào hoặc không chờ đợi. Điều đó có nghĩa là, một tiến trình phải được gán tất cả các tài nguyên cần thiết trước khi bắt đầu thực thi. Quá trình không được đợi bất kỳ tài nguyên nào sau khi quá trình thực thi đã được bắt đầu.

! (Giữ và chờ) =! Giữ hoặc! Chờ (phủ định của giữ và chờ là bạn không giữ hoặc bạn không đợi)

Điều này có thể được thực hiện trên thực tế nếu một tiến trình khai báo tất cả các tài nguyên ban đầu. Tuy nhiên, điều này nghe có vẻ rất thực tế nhưng không thể thực hiện được trong hệ thống máy tính bởi vì một quá trình không thể xác định các tài nguyên cần thiết ban đầu.

Quy trình là tập hợp các lệnh được thực thi bởi CPU. Mỗi lệnh có thể yêu cầu nhiều tài nguyên tại nhiều thời điểm. Sự cần thiết không thể được khắc phục bởi Hệ điều hành.

Vấn đề với cách tiếp cận là:

  1. Thực tế là không thể.
  2. Khả năng bị bỏ đói sẽ tăng lên do thực tế là một số quá trình có thể giữ tài nguyên trong một thời gian rất dài.

Xem thêm Biểu đồ phân bổ tài nguyên trong hệ điều hành

No Preemption

Deadlock phát sinh do một quá trình không thể dừng lại khi nó bắt đầu. Tuy nhiên, nếu chúng ta lấy tài nguyên ra khỏi tiến trình đang gây ra Deadlock thì chúng ta có thể ngăn chặn được Deadlock.

Đây hoàn toàn không phải là một cách tiếp cận tốt vì nếu chúng ta lấy đi một tài nguyên đang được quy trình sử dụng thì tất cả công việc mà nó đã thực hiện cho đến bây giờ có thể trở nên không nhất quán.

Xem xét một máy in đang được sử dụng bởi bất kỳ quy trình nào. Nếu chúng tôi lấy máy in khỏi quy trình đó và gán nó cho một số quy trình khác thì tất cả dữ liệu đã được in có thể trở nên không nhất quán và không hiệu quả và thực tế là quy trình không thể bắt đầu in lại từ nơi nó đã rời khỏi, điều này gây ra hiệu suất không hiệu quả.

Circular Wait

Để vi phạm thời gian chờ vòng tròn, chúng ta có thể chỉ định một số ưu tiên cho mỗi tài nguyên. Một quy trình không thể yêu cầu một tài nguyên ít ưu tiên hơn. Điều này đảm bảo rằng không một quy trình nào có thể yêu cầu một tài nguyên đang được sử dụng bởi một số quy trình khác và sẽ không có chu trình nào được hình thành.

Trong số tất cả các phương pháp, vi phạm chờ đợi Thông tư là cách tiếp cận duy nhất có thể được thực hiện trên thực tế.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Contact Me on Zalo
Call now