banner-news

Trong bài này

    Deadlock là gì? Deadlock xảy ra khi nào và cách xử lý

    10/05/2023

    Deadlock là gì và cách xử lý ra sao là vấn đề được đông đảo mọi người quan tâm. Tình trạng deadlock xảy ra khiến các tiến trình trong hệ thống không thể thực hiện công việc của mình. Bài viết hôm nay sẽ giải đáp cụ thể các vấn đề liên quan đến deadlock và gợi ý các phương pháp giải quyết khi gặp tình trạng này.

    Deadlock là gì?

    Trước khi tìm hiểu cách xử lý Deadlock, bạn cần hiểu Deadlock là gì. Deadlock là hiện tượng một hoặc nhiều lệnh trong database tranh chấp tài nguyên, trong đó một lệnh giữ tài nguyên lệnh còn lại cần. Khi đó, không lệnh nào có thể kết thúc để giải phóng tài nguyên. Hiện tượng deadlock không được xử lý sẽ dẫn đến tình trạng các lệnh chờ nhau, khiến tiến trình không thể thực hiện tiếp.

    Các sai sót khi thao tác với database dễ để lại hậu quả nghiêm trọng và lock là chiến lược tối ưu có thể ngăn chặn điều này. Tuy nhiên, deadlock lại hoàn toàn khác bởi nó sẽ dẫn đến việc không thực hiện được bất cứ lệnh nào.

    Deadlock là gì?

    Deadlock xảy ra khi nào?

    Deadlock có thể xảy ra trong hầu hết mọi tình huống khi các tiến trình chia sẻ tài nguyên. Deadlock có nguy cơ phát ính trong bất kỳ môi trường điện toán nào, nhưng phổ biến hơn trong các hệ thống phân tán, nơi có nhiều quy trình hoạt động trên các tài nguyên khác nhau.

    Trong trường hợp này, một tiến trình có thể đang chờ tài nguyên đã bị lệnh khác nắm giữ. Deadlock thường được ví như vấn đề con gà và quả trứng. Hãy xem ví dụ dưới đây về hiện tượng deadlock:

    Giả sử có ba tiến trình P1, P2 và P3 và ba tài nguyên R1, R2 và R3.

    Bây giờ, giả sử P1 yêu cầu tài nguyên R2 do P2 nắm giữ. Trong trường hợp này, P1 sẽ không tiếp tục nếu không có R2. Khi đó, P1 đợi vô thời hạn vì P2 không thể giải phóng tài nguyên 2 cho đến khi nhận được R3 mà P3 đang giữ. Điều tương tự cũng đúng với P1 và P3. đây là một ví dụ lý tưởng về tình trạng deadlock trong hệ điều hành.

    Deadlock có thể phát sinh nếu bốn điều kiện sau xảy ra đồng thời:

    Điều kiện đầu tiên là loại trừ lẫn nhau. Trong điều kiện này, tài nguyên giữa các quy trình khác nhau không thể chia sẻ cùng một lúc.

    Ví dụ: nếu hai người muốn in một tờ giấy cùng một lúc thì quá trình này không thể thực hiện được. Người ta phải đợi cho đến khi hệ thống phát hành bản in (tài nguyên). Vì vậy, chúng ta chỉ có thể gán tài nguyên cho một tiến trình tại một thời điểm.

    Điều kiện cần thiết thứ hai dẫn đến deadlock là việc giữ và chờ hoặc giữ tài nguyên. Trong trường hợp này, một tiến trình vừa giữ ít nhất một tài nguyên vừa chờ một tài nguyên khác cùng thời điểm. Khi đó, quá trình không ở trạng thái chạy mà đang ở trạng thái chờ.

    Điều kiện thứ ba là không được ưu tiên. Nếu một tiến trình nắm giữ một tài nguyên thì tài nguyên đó không thể bị lấy đi khỏi tiến trình đó cho đến khi nó giải phóng tài nguyên đó. Tuyên bố này cũng đúng khi quá trình ở trạng thái chờ.

    Điều kiện cuối cùng cho deadlock là chờ đợi vòng tròn. Giả sử tiến trình P1 đang chờ tài nguyên R2. Bây giờ tài nguyên cụ thể R2 đó đã được giữ bởi tiến trình P2. Quá trình P2 đang chờ tài nguyên do quá trình tiếp theo giữ. Điều này sẽ tiếp tục cho đến khi tiến trình cuối cùng đang chờ tài nguyên do tiến trình đầu tiên nắm giữ.

    Điều kiện chờ vòng tròn tạo ra một chuỗi vòng tròn và đặt tất cả các tiến trình vào trạng thái chờ.

    Cách xử lý khi gặp Deadlock là gì

    Tình trạng deadlock là hiện tượng phổ biến và có thể giải quyết theo nhiều cách khác nhau. Bạn có thể tham khảo những cách xử lý dưới đây khi gặp deadlock.

    Tiêu giảm ưu tiên (Resource Preemption)

    Nguyên nhân cốt lõi của hiện tượng deadlock là một lệnh sử dụng tài nguyên của một lênh khác. Biện pháp Resource Preemption thực hiện giải phóng tài nguyên đang được sử dụng bởi một tiến trình để cấp phát cho tiến trình cần. Tuy nhiên, điều này có thể gây mất dữ liệu hoặc làm gián đoạn tiến trình đang thực hiện.

    Quay lui (Process Rollback)

    Bên cạnh tiêu giảm ưu tiên, Process Rollback) hay quay lui cũng là cách xử lý hiệu quả khi gặp phải deadlock. Hệ thống sẽ quay ngược trạng thái của các tiến trình nhằm giải phóng tài nguyên và cho phép tiến trình khác tiếp tục chạy. Giống như Resource Preemption, phương pháp này cũng có thể làm mất đi các thay đổi đã thực hiện và ảnh hưởng tính nhất quán của hệ thống.

    Khởi động lại hệ thống (System Reboot) khi gặp Deadlock

    Khởi động lại hệ thống là cách xử lý đơn giản và hiệu quả khi gặp deadlock. Reboot lại hệ thống sẽ giải phóng tất cả tài nguyên và đưa system trở lại trạng thái ban đầu.

    Phát hiện và giải quyết Deadlock thông qua thuật toán

    Bạn cũng có thể sử dụng các thuật toán để phát hiện và xử lý deadlock. Các thuật toán phổ biến được sử dụng hiện nay là Banker’s Algorithm, Ostrich Algorithm, hay Wait-for Graph Algorithm. Các thuật toán này có thể kiểm tra, giải quyết deadlock dựa trên thông tin về tài nguyên và trạng thái các tiến trình.

    Sử dụng cơ chế timeout và hủy bỏ (Timeout and Abort Mechanism) Deadlock là gì?

    Hệ thống có thể thiết lập thời gian chờ (timeout) cho các yêu cầu tài nguyên để chờ xử lý Deadlock. Trong trường hợp thời gian chờ vượt quá mức quy định, yêu cầu có thể bị hủy bỏ để giải phóng tài nguyên và ngăn chặn tình trạng Deadlock.

    Tùy thuộc vào tình huống cụ thể, người dùng có thể áp dụng một hoặc nhiều phương pháp để giải quyết Deadlock. Mục tiêu là giải phóng tài nguyên và đảm bảo rằng các tiến trình có thể tiếp tục thực thi một cách an toàn và hiệu quả.

    Bài viết đã lý giải deadlock là gì, nguyên nhân cũng như cách giải quyết khi gặp phải hiện tượng này. Nắm rõ các thông tin về deadlock sẽ giúp bạn phát hiện và xử lý tình trạng này một cách nhanh chóng, hiệu quả hơn.

    CMC Cloud - Giải pháp Điện toán đám mây Toàn diện & Linh hoạt nhất. Cho phép tùy biến sử dụng và quản trị 25+ dịch vụ

    Website: https://cmccloud.vn

    Facebook: https://facebook.com/cmccloud.vn

    Hotline: 1900.2010

    Zalo OA: https://zalo.me/cmccloud

    LinkedIn: linkedin.com/company/cmc-cloud


      content-banner
      News Detail - Footer Email MKT

      Đăng ký nhận thông tin

      Bạn muốn cập nhật thông tin mới nhất từ CMC Cloud?! Hãy để lại địa chỉ email của bạn ngay để nhận những bản tin bổ ích

      back to top

      logo

      © 2023, CMC Cloud. All rights reserved.

      Business Registration Certificate

      Giấy ĐKKD: 0102900049. Nơi cấp: Sở Kế hoạch & Đầu tư Thành phố Hà Nội

      Chịu trách nhiệm nội dung: Đặng Tùng Sơn