ĐẠI HỌC BÁCH KHOA HÀ NỘI TRƯỜNG ĐIỆN - ĐIỆN TỬ BÁO CÁO MÔN HỌC HỆ ĐIỀU HÀNH Đề tài: XỬ LÝ VẤN ĐỀ DEADLOCK Giảng viên hướng dẫn: TS. Nguyễn Thanh Bình Nhóm sinh viên thực hiện: Nhóm 7 Nguyễn Văn Hiệp 20192838 Trần Đình Huỳnh 20192921 Nguyễn Thắng Đạt 20192748 Trần Ngọc Hạ 20192818 Hà Nội, 2-2023 LỜI NÓI ĐẦU Trong môi trường đa chương trình, nhiều tiến trình có thể cạnh tranh với nhau để được sử dụng một số tài nguyên. Một tiến trình yêu cầu tài nguyên, nếu tài nguyên không sẵn dùng tại thời điểm đó, tiến trình đi vào trạng thái chờ đợi. Quá trình chờ có thể không bao giờ chuyển trạng thái vì tài nguyên chúng yêu cầu bị giữ bởi những tiến trình đang chờ đợi khác. Trường hợp này được gọi là deadlock (khoá chết). Chúng ta sẽ mô tả các phương pháp mà hệ điều hành có thể dùng để ngăn chặn hay giải quyết deadlock. Vấn đề deadlock có thể trở thành vấn đề phổ biến bởi xu hướng ngày càng tăng số lượng lớn quá trình, chương trình đa luồng, nhiều tài nguyên trong hệ thống. Chính vì thế, nhóm chúng em xin nghiên cứu đề tài “xử lý vấn đề Deadlock ” Với đề tài này, chúng ta có thể hiểu nguyên nhân gây ra tình trạng deadlock và cách xử lý tình trạng deadlock hiệu quả.Mặc dù, chúng em đã cố gắng hoàn thành đồ án nghiên cứu của mình nhưng chắc chắn sẽ không tránh khỏi được những hạn chế và thiết sót. Em mong nhận được sự thông cảm và ý kiến đóng góp của các thầy cô để em có thể rút kinh nghiệm và hoàn thiện đề tài tốt hơn. Em xin chân thành cảm ơn . ii MỤC LỤC DANH MỤC HÌNH VẼ ............................................................................................................ v DANH MỤC BẢNG BIỂU...................................................................................................... vi CHƯƠNG 1. MỞ ĐẦU ............................................................................................................ 1 1.1 Động lực nghiên cứu ...................................................................................................... 1 1.2 Bố cục báo cáo ................................................................................................................ 1 1.3 Kết luận chương ............................................................................................................. 1 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT ........................................................................................ 2 2.1 Deadlock ......................................................................................................................... 2 2.1.1 Deadlock là gì? ........................................................................................................ 2 2.1.2 Mô hình hệ thống ..................................................................................................... 3 2.1.3 Điều kiện xảy ra deadlock ........................................................................................ 3 2.1.4 Đồ thị cấp phát tài nguyên ....................................................................................... 4 2.1.5 Các phương pháp giải quyết deadlock ..................................................................... 6 2.1.6 Ngăn deadlock ......................................................................................................... 6 2.1.7 Tránh deadlock ......................................................................................................... 7 2.1.8 Hiệu chỉnh tắc nghẽn................................................................................................ 7 2.2 Giới thiệu về mutex lock ................................................................................................ 7 2.2.1 Mutex lock là gì ....................................................................................................... 7 2.2.2 Vấn đề của deadlock với mutex ............................................................................... 8 CHƯƠNG 3. BÀI TOÁN DINNING PHILOSOPHER ........................................................ 9 3.1 Bài toán DINNING PHILOSOPHER .......................................................................... 9 3.2 Mô phỏng và xây dựng thuật toán cho bài toán........................................................ 10 3.3 Giả lập trường hợp ,chạy thử và kết quả .................................................................. 11 3.3.1 Tiến hành chạy thử và đo đạc................................................................................. 11 3.3.2 Thay đổi số lượng tiến trình ................................................................................... 12 iii 3.3.3 Thay đổi lượng công việc ...................................................................................... 14 CHƯƠNG 4. GIẢI PHÁP ..................................................................................................... 16 4.1 Đưa tiến trình vào trạng thái đợi ............................................................................... 16 4.2 Phân bổ lại cách cấp phát tài nguyên ........................................................................ 19 CHƯƠNG 5. NHẬN XÉT VÀ KẾT LUẬN ......................................................................... 21 TÀI LIỆU THAM KHẢO ..................................................................................................... 22 BẢNG PHÂN CHIA CÔNG VIỆC....................................................................................... 23 PHỤ LỤC ................................................................................................................................ 24 iv DANH MỤC HÌNH VẼ Hình 2.1 Minh họa 2 tiến trình xảy ra tình trạng deadlock ............................................2 Hình 2.2 Ví dụ về đồ thị cấp phát tài nguyên .................................................................5 Hình 2.3 RAG và deadlock ............................................................................................5 Hình 2.5 Hai task không thể tiến hành ...........................................................................8 Hình 2.6 Bài toán bữa tối của các triết gia .....................................................................9 Hình 3. 1 Sơ đồ thuật toán mô phỏng cho bài toán .......................................................10 Hình 3. 2 Kết quả sau 25 lần đo .................................................................................... 11 Hình 3. 3 Biểu đồ thế hiện tỉ lệ xảy ra Deadlock của chương trình ..............................12 Hình 3. 4 Kết quả sau khi đo .........................................................................................12 Hình 3. 5 Quan hệ giữa số tiến trình và thời gian thực thi chương trình khi tăng số tiến trình ................................................................................................................................13 Hình 3. 6 Quan hệ giữa số tiến trình và số lần Deadlock khi tăng số tiến trình ............13 Hình 3. 7 Kết quả sau khi đo .........................................................................................14 Hình 3. 8 Quan hệ giữa số lượng thức ăn và thời gian thực thi chương trình khi tăng số lượng công việc .............................................................................................................14 Hình 3. 9 Quan hệ giữa số lượng thức ăn và số lần Deadlock khi tăng số lượng công việc.................................................................................................................................15 Hình 4. 1 Sơ đồ thuật toán mô phỏng trường hợp đưa tiến trình vào trạng thái ngủ 16 Hình 4. 2 Kết quả sau khi đo .........................................................................................17 Hình 4. 3 Quan hệ giữa thời gian ngủ của tiến trình và thời gian thực thi ....................17 Hình 4. 4 Quan hệ giữa thời gian ngủ của tiến trình và số lần Deadlock......................18 Hình 4. 5 Sờ đồ thuật toán trường hợp phân bổ cách cấp phát tài nguyên....................19 Hình 4. 6 Kết quả sau khi đo .........................................................................................20 v DANH MỤC BẢNG BIỂU Bảng 5.1 Bảng so sánh các phương pháp phòng tránh Deadlock ................................ 21 Bảng 0.1 bảng phân công công việc............................................................................. 23 vi CHƯƠNG 1. MỞ ĐẦU Chương mở đầu sẽ nêu ra động lực nghiên cứu, đối tượng và phạm vi nghiên cứu song song với đó là trình bày bố cục đồ ấn và tóm tắt nội dung tương ứng của các phần. 1.1 Động lực nghiên cứu Xu hướng hiện nay là một máy tính có thể xử lý được số lượng lớn quá trình, chương trình đa luồng, nhiều tài nguyên trong hệ thống và đặc biệt các tập tin có đời sống dài. Cùng một lúc phải xử lý nhiều quá trình, khiến máy tính có thể xảy ra hiện tượng deadlock. Tình trạng deadlock xảy ra sẽ khiến quá trình làm việc của người sử dụng bị dừng lại. Vì vậy, nhóm chúng em đã quyết định tìm hiểu cách để xử lý vấn đề deadlock 1.2 Bố cục báo cáo Báo cáo môn học: Xử lý vấn đề deadlock được chia thành 4 chương. Chương 1: Chương mở đầu Phần này nêu ra động lực của báo cáo, giới hạn phạm vi nghiên cứu mà báo cáo tập trung giải quyết. Phần này cũng giới thiệu tóm tắt cấu trúc của báo cáo và nội dung tương ứng của các phần sẽ lần lượt được trình bày ở các chương tiếp theo. ❖ Chương 2: Cơ sở lý thuyết Phần này nêu ra cơ sở lý thuyết cơ bản được sử dụng trong báo cáo . ❖ Chương 3: Bài toán DINNING PHILOSOPHER ❖ Chương 4: Giải pháp và kết luận Đây là chương cuối cùng của báo cáo. Phần này trình bày những phương pháp , kèm kết quả mà báo cáo nghiên cứu đã đạt được từ đó đưa ra nhận xét, đánh giá. 1.3 Kết luận chương Phần mở đầu đã chỉ rõ được động lực nghiên cứu, phạm vi và đối tượng nghiên cứu của báo cáo, phân chia cấu trúc báo cáo và chỉ rõ nội dung tóm tắt của từng phần. vii CHƯƠNG 2. CƠ SỞ LÝ THUYẾT Phần này nêu tổng quan lý thuyết được sử dụng, giới thiệu sơ lược về định nghĩa deadlock, mô hình hệ thống, phân bổ tài nguyên, nguyên nhân và cách xử lý tình trạng deadlock. 2.1 Deadlock 2.1.1 Deadlock là gì? Một tập hợp các tiến trình gọi là ở tình trạng tắc nghẽn nếu mỗi tiến trình trong tập hợp đều chờ đợi tài nguyên mà tiến trình khác trong tập hợp đang chiếm giữ. Ví dụ, tại một thời điểm tiến trình 1 đang giữ tài nguyên R1, yêu cầu R2 và tiến trình 2 đang giữ tài nguyên R2, yêu cầu R1. Như vậy yêu cầu tài nguyên không thể đáp ững cho cả hai tiến trình. Khi đó, không có tiến trình nào có thể tiếp tục xử lý, cùng như giải phóng tài nguyên cho các tiến trình khác sử dụng, tất cả các tiến trình trong tập hợp đều bị khóa vĩnh viễn. Assigned to Resource 1 Waiting to Process 1 Process 2 Resource 2 Waiting to Assigned to Hình 2.1 Minh họa 2 tiến trình xảy ra tình trạng deadlock 2 2.1.2 Mô hình hệ thống ❖ Hệ thống gồm các loại tài nguyên, kí hiệu R1, R2, R3, …., Rm • Tài nguyên: CPU cycle, không gian, không gian bộ nhớ, thiết bị I/O, file Mỗi một loại tài nguyên Ri có Wi thực thể (instance). ❖ Process sử dụng tài nguyên theo thứ tự • Yêu cầu (request): process phải chờ nếu yêu cầu không được đáp ứng ngay. • Sử dụng (use): process sử dụng tài nguyên. • Hoàn trả (release): process hoàn trả tài nguyên. ❖ Các tác vụ yêu cầu và hoàn trả được gọi qua system call. Ví dụ: • Request/ release device • Open/ close file • Allocate/ free memory (cấp phát/ giải phóng bộ nhớ). 2.1.3 Điều kiện xảy ra deadlock Trường hợp deadlock có thể phát sinh nếu bốn điều kiện sau xảy ra cùng một lúc trong hệ thống: 1.Loại trừ tương hỗ (mutual exclusion): một tài nguyên có thể cấp phát cho nhiều lắm là 1 quá trình (tức là không chia sẻ tài nguyên được). Nếu một quá trình khác yêu của tài nguyên đó, quá trình yêu cầu phải tạm dừng cho đến khi tài nguyên được giải phóng. 2. Giữ và chờ (hold and wait): một quá trình phải đang giữ ít nhất một tài nguyên và đang chờ để nhận tài nguyên thêm mà hiện đang được giữ bởi quá trình khác. 3. Không đòi lại tài nguyên từ quá trình đang giữ chúng (no preemption): Không lấy lại tài nguyên đã cấp phát cho quá trình, ngoại trừ khi quá trình tự nó hoàn trả tài nguyên. 4. Tồn tại chu trình trong đồ thị cấp phát tài nguyên (circular wait): một tập hợp các quá trình {P0, P1,…,Pn} đang chờ sao cho: P0 đang chờ một tài nguyên được giữ bởi P1, P1 đang chờ tài nguyên đang giữ bởi P2,…, 3 Pn-1 đang chờ tài nguyên đang được giữ bởi quá trình P0. 2.1.4 Đồ thị cấp phát tài nguyên ❖ Resource allocation graph (RAG): là đồ thị có hướng, với tập đỉnh V và tập cạnh E. • Tập đình V gồm 2 loại: P = {P1, P2, P3,…, Pn} (tất cả các process trong hệ thống) R = {R1, R2, R3,…, Rn} (tất cả các loại tài nguyên trong hệ thống) • Tập E gồm 2 loại: Request edge: cạnh có hướng từ Pi đến Rj Assignment edge: cạnh có hướng từ Rj đến Pi ❖ Kí hiệu • Process: • Loại tài nguyên với 4 thực thể: • Pi yêu cầu một thực thể của Rj: • Pi đang giữ một thực thể của Rj: 4 ❖ Ví dụ về RAG Hình 2.2 Ví dụ về đồ thị cấp phát tài nguyên ❖ RAG và deadlock • Ví dụ một RAG chứa chu trình nhưng không xảy ra deadlock: trường hợp P4 trả lại thực thể của R2. Hình 2.3 RAG và deadlock • RAG không chứa chu trình ➔ không có deadlock • RAG chứa một (hay nhiều) chu trình Nếu mỗi loại tài nguyên chỉ có một thực thể ➔ deadlock Nếu mỗi loại tài nguyên có nhiều thực thể ➔ có thể xảy ra deadlock 5 2.1.5 Các phương pháp giải quyết deadlock Có ba cách để xử lý Deadlock: 1. Phòng ngừa hoặc tránh bế tắc: Ý tưởng là không để hệ thống rơi vào trạng thái bế tắc. o Ngăn deadlock: không cho phép (ít nhất) một trong 4 điều kiện cần cho deadlock (Ngăn chặn được thực hiện bằng cách phủ nhận một trong những điều kiện cần thiết đã đề cập ở trên đối với bế tắc). o Tránh deadlock: Bằng cách sử dụng chiến lược “Tránh né”, chúng ta phải đưa ra một giả định. Chúng tôi cần đảm bảo rằng tất cả thông tin về tài nguyên mà quy trình sẽ cần đều được chúng tôi biết trước khi thực hiện quy trình. Để hệ thống có thể cấp phát tài nguyên một cách phù hợp 2. Phát hiện và khôi phục deadlock: Để xảy ra deadlock, sau đó thực hiện quyền ưu tiên để xử lý nó khi nó xảy ra. 3. Bỏ qua hoàn toàn vấn đề: Deadlock không được phát hiện, dẫn đến việc giảm hiệu suất của hệ thống. Cuối cùng hệ thống phải ngưng hoạt động và phải được khởi động lại. Đây là cách tiếp cận mà cả Windows và UNIX đều áp dụng 2.1.6 Ngăn deadlock 1. Ngăn mutual exclusion (loại trừ tương hỗ) Đối với tài nguyên không chia sẻ: không làm được Đối với sharable resource ( tài nguyên chia sẻ ví dụ như: read only file và tác vụ cho phép lên file chỉ là đọc): không cần thiết. 2. Ngăn giữ và chờ: Cách 1: mỗi process yêu cầu toàn bộ tài nguyên cần thiết 1 lần. Nếu đủ tài nguyên thì hệ thống sẽ cấp phát, nếu chưa đủ tài nguyên thì process sẽ bị blocked. Cách 2: khi yêu cầu tài nguyên, process đang giữ bất cứ tài nguyên nào thì phải trả lại trước khi yêu cầu. Hai cách đều dẫn đến hiệu suất sử dụng tài nguyên thấp. 3. Ngăn no preemption: cho phép lấy lại tài nguyên đã cấp phát cho quá trình (chỉ thích hợp với các loại tài nguyên dễ lưu và phục hồi như cpu, register, vùng nhớ; không thích hợp với các loại tài nguyên DVD, drive). 6 4. Ngăn circular wait: ta sẽ gán thứ tự cho các loại tài nguyên của hệ thống. Mỗi process yêu cầu thực thể của tài nguyên theo thứ tự tăng dần của loại tài nguyên. 2.1.7 Tránh deadlock Với ngăn deadlock, tài nguyên sẽ không được sử dụng hiệu quả Tránh deadlock: mỗi quá trình phải khai báo số lượng tài nguyên tối đa nó cần. Giải thuật tránh deadlock sẽ điều khiển trạng thái cấp phát tài nguyên sao cho hệ thống không rơi vào deadlock. Trạng thái cấp phát tài nguyên được định nghĩa bởi: số tài nguyên còn lại, số tài nguyên đã được cấp phát, và yêu cầu tối đa của mỗi process. 2.1.8 Hiệu chỉnh tắc nghẽn Khi đã phát hiện tắc nghẽn, có hai lực chọn chính để xử lý: • Hủy tiến trình trong tình trạng tắc nghẽn: Hủy tất cả các tiến trình trong tình trạng tắc nghẽn hay hủy từng tiến trình liên quan (dựa vào độ ư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 còn cần thêm..) cho đến khi không còn chu trình gây tắc nghẽn. • Thu hồi tài nguyên: Thu hồi tài nguyên đã cấp phát và cấp phát lại cho các tiến trình khác cho đến khi không xảy ra tình trạng tắc nghẽn. 2.2 Giới thiệu về mutex lock 2.2.1 Mutex lock là gì Mutex là một khóa, được đặt trước khi sử dụng một tài nguyên được chia sẻ và được giải phóng sau khi sử dụng tài nguyên đó. Khi khóa được đặt, không luồng nào khác có thể truy cập vào vùng mã bị khóa. Vì vậy, ngay cả khi luồng 2 được lập lịch trong khi luồng 1 chưa được thực hiện truy cập tài nguyên được chia sẻ và mã bị khóa bởi luồng 1 bằng mutex thì luồng 2 thậm chí không thể truy cập vùng mã đó. Vì vậy, điều này đảm bảo truy cập đồng bộ các tài nguyên được chia sẻ trong mã. 7 2.2.2 Vấn đề của deadlock với mutex Trong một hệ điều hành thường có nhiều hơn một tác vụ (Task). Mutex giúp hai task sẽ không cho phép hai Task truy cập vào tài nguyên hệ thống trong cùng một thời điểm. Deadlock xảy ra khi khi hai Task không thể tiến hành do cả hai đang chờ đợi resource và bị giữ bỏ task còn lại. Ví dụ: Hình 2.4 Hai task không thể tiến hành Có 2 Task A, Task B, 2 mutex: mutex1 và mutex2. • Task A được thực hiện và lấy thành công mutex1. • Task A bị chiếm trước bởi Task B. • Task B thành công lấy mutex2 trước khi cố gắng lấy mutex1- cái đang bị giữ bởi Task A nên không có sẵn lúc này. Do đó Task B rơi vào trạng thái Block và chờ mutex1 được giải phóng. • Task A tiếp tục thực hiện, có gắng lấy mutex2- cái đang được giữ bởi TaskB nên cũng không có sẵn lúc này. Do đó Task A cũng rơi vào trạng thái Block đợi mutex2 được giải phóng. • Kết quả là Task A đợi mutex2 bị giữ bởi TaskB và ngược lại Task B đợi mutex1 bị giữ bởi Task A. Deadlock xảy ra. 8 CHƯƠNG 3. BÀI TOÁN DINNING PHILOSOPHER 3.1 Bài toán DINNING PHILOSOPHER Bài toán: Bài toán bữa tối các triết gia đặt ra giả thiết rằng có K nhà triết học ngồi xung quanh một chiếc bàn tròn với một chiếc đũa giữa mỗi cặp triết gia. Có một chiếc đũa giữa mỗi nhà triết học. Một triết gia có thể ăn nếu anh ta cầm được hai chiếc đũa liền kề với mình. Một chiếc đũa có thể được nhặt bởi bất kỳ ai trong số những người đi heo bên cạnh của nó nhưng không được cả hai. Bài toán đặt ra là làm thế nào để không có nhà triết học nào bị đói. Hình 3.1 Bài toán bữa tối của các triết gia Giải pháp: Trong trường hợp này, ta giả sử có 5 nhà triết học đang ngồi trong một bàn tròn. Các triết gia được đánh số từ 0 đến 4 tương tự như thế thì các chiếc đũa cũng được đánh số từ 0 đến 4. Tình huống giả lập được đưa ra như sau: Các nhà triết học sẽ có các trạng thái đó là THINKING, PUTUP, EAT, PUTDOWN Có hai tình huống giả lập được đưa ra đó là: + Tình huống 1: 9 Các triết gia lần lượt thực hiện các hoạt động: Kiểm tra đũa, lấy đũa lên, bắt đầu ăn cuối cùng là đặt đũa xuống và lại lặp lại vòng đó. Khi thời gian kiểm tra đũa và thời gian ăn thỏa mãn thì sẽ không xảy ra deadlock +Tình huống 2: Giả sử Triết gia 0 đang cầm chiếc đũa thứ 0 và đợi chiếc đũa thứ 1. Triết gia 1 đang cầm chiếc đũa thứ 1 và đợi chiếc đũa thứ 2. Triết gia 2 đang cầm chiếc đũa thứ 2 và đợi chiếc đũa thứ 3. Triết gia 3 đang cầm chiếc đũa thứ 3 và đợi chiếc đũa thứ 4. Triết gia 4 đang cầm chiếc đũa thứ 4 và đợi chiếc đũa thứ 0. Trong trường hợp này, mỗi triết gia chỉ cầm 1 chiếc đũa trong cùng một thời điểm, do đó không có triết gia nào có thể thực hiện hoạt động do không thể thỏa mãn yêu cầu có hai chiếc đũa. Do đó, trường hợp này Deaadlock xảy ra. 3.2 Mô phỏng và xây dựng thuật toán cho bài toán Ta sẽ tiến hành tạo 5 tiến trình đại diện cho 5 người , và tạo các hàm ứng với từng giai đoạn của chương trình , Hình 3. 1 Sơ đồ thuật toán mô phỏng cho bài toán 10 3.3 Giả lập trường hợp ,chạy thử và kết quả 3.3.1 Tiến hành chạy thử và đo đạc Tiến hành chạy chương trình với 5 người , 50 thức ăn , đo 25 lần ta được kết quả : Hình 3. 2 Kết quả sau 25 lần đo 11 36% Số lần DeadLock Số lần không xảy ra Deadlock 64% Hình 3. 3 Biểu đồ thế hiện tỉ lệ xảy ra Deadlock của chương trình Kết luận : Thời gian thực thi trung bình là 6.33028941. Tỉ lệ xảy ra Deadlock ở chương trình trên là 9/25 = 36% , khá lớn và thời điểm xảy ra Deadlock là hoàn toàn ngẫu nhiên , có thể đầu, giữa, hoặc cuối chương trình . 3.3.2 Thay đổi số lượng tiến trình - Tiến hành tăng số lượng người lên 5, 7, 9,11, 13 và giữ nguyên số lượng thức ăn là 50 sau đó tiến hành đo 25 lần ( complie chương trình 25 lần ) các thông số ta được kết quả như sau : Hình 3. 4 Kết quả sau khi đo 12 THỜI GIAN THỰC THI TRUNG BÌNH 7 6.330294 5.6724 6 THỜI GIAN (S) 5.0452 5 4.1589 4 3.2085 3 2 1 0 5 7 9 11 13 SỐ TIẾN TRÌNH Hình 3. 5 Quan hệ giữa số tiến trình và thời gian thực thi chương trình khi tăng số tiến trình Số lần Deadlook 10 9 Số lần Deadlook 8 7 6 5 4 3 2 1 0 5 7 9 11 13 Số Tiến Trình Hình 3. 6 Quan hệ giữa số tiến trình và số lần Deadlock khi tăng số tiến trình Kết luận : Khi tăng số lượng tiến trình lên thì thời gian thực hiện chương trình sẽ giảm xuống và số lần xảy ra Deadlock sẽ giảm xuống , khi số lượng tiến trình tăng đến 13 thì không còn xảy ra hiện tượng Deadlock . 13 3.3.3 Thay đổi lượng công việc - Tiến hành thay đổi số lượng thức ăn 5, 10, 25, 40, 50, 60, 80 và giữ nguyên số người sau đó tiến hành đo 25 lần ( complie chương trình 25 lần ), ta được kết quả như sau : Hình 3. 7 Kết quả sau khi đo 18 16 14 Thời gian (s) 12 10 8 6 4 2 0 0 10 20 30 40 50 60 70 80 90 Số lượng thức ăn Hình 3. 8 Quan hệ giữa số lượng thức ăn và thời gian thực thi chương trình khi tăng số lượng công việc 14 18 16 Số lần DeadLock 14 12 10 8 6 4 2 0 5 10 25 40 50 60 80 Số lượng thức ăn Hình 3. 9 Quan hệ giữa số lượng thức ăn và số lần Deadlock khi tăng số lượng công việc Kết luận : Khi tăng số lượng thức ăn lên thì thời gian thực hiện chương trình sẽ tăng và số lần xảy ra Deadlock cũng tăng theo , khi số lượng tiến trình tăng đến một mức nào đó thì Deadlock sẽ luôn xảy ra . Từ 2 trường hợp trên ta rút ra kết luận là việc thay đổi số lượng thức ăn ( công việc) và thay đổi số lượng tiến trình sẽ làm thay đổi xác xuất xảy ra hiện tượng DeadLock , song việc sử dụng 2 phương pháp trên để ngăn hiện tượng Deadlock trong thực tế là không khả thi , do số lượng tiến trình và số lượng công việc trong nhiều trường hợp là không thể thay đổi được . Từ kết quả của hai phương pháp trên ta có thể phát triển để đưa ra các giải pháp phòng tránh Deadlock khả thi và hiệu quả hơn . 15 CHƯƠNG 4. GIẢI PHÁP 4.1 Đưa tiến trình vào trạng thái đợi Khi chương trình thực thi ta sẽ đưa 1 người vào trạng thái ngủ.Trong thời gian đó những người khác sẽ thực hiện công việc của họ. Sau khi người được đưa vào trạng thái ngủ tỉnh dạy họ sẽ tiếp tục thực hiện công việc của mình .Sơ đồ thuật toán chương trình như hình dưới : Hình 4. 1 Sơ đồ thuật toán mô phỏng trường hợp đưa tiến trình vào trạng thái ngủ - Tiến hành thay đổi thời gian ngủ của một người từ 1s đến 8s và giữ nguyên các thông số khác ,với mỗi thời gian ngủ đo 25 lần , thu được kết quả : 16 Hình 4. 2 Kết quả sau khi đo 9 8 Thời gian thực thi tb 7 6 5 4 3 2 1 0 0 1 2 3 4 5 6 7 8 9 Thời gian ngủ của tiến trình Hình 4. 3 Quan hệ giữa thời gian ngủ của tiến trình và thời gian thực thi 17 3.5 3 Số lần Deadlock 2.5 2 1.5 1 0.5 0 1 2 3 4 5 6 7 8 Thời gian ngủ của tiến trình Hình 4. 4 Quan hệ giữa thời gian ngủ của tiến trình và số lần Deadlock Kết luận : Bản chất của việc đưa một tiến trình vào trạng thái ngủ thì lúc đó chương trình hoạt động không khác gì trường hợp xóa đi một tiến trình (giảm số lượng tiến trình). Khi thời gian ngủ ngắn thì vẫn có thể xảy ra Deadlock , song nếu tăng thời gian ngủ lên cao thì sẽ khiến cho thời gian thực thi chương trình tăng cao theo . Ngoài ra nếu thời gian ngủ của một tiến trình quá lâu sẽ có trường hợp khi tiến trình tỉnh dạy thì công việc đã kết thúc từ trước đó nên không tham gia vào công việc . Trường hợp tối ưu nhất là không xảy ra Deadlock và thời gian thực thi ngắn nhất , trong bài toán trên trường hợp này xảy ra khi thời gian ngủ của tiến trình là ~4s .Nếu qua ngưỡng này thì tiến trình ngủ khi tỉnh dạy sẽ không thể thực hiện công việc nữa. Từ đó ta thấy phương pháp trên có thể xử lý được hiện tượng DeadLock xong vẫn có nhược điểm là việc tìm ra thời gian ngủ tốt nhất để tối ưu chương trình cần phải thực hiện bằng cách lấy mẫu với số lượng lớn , đo và tính toán nhiều lần . 18 4.2 Phân bổ lại cách cấp phát tài nguyên Khi trong bàn ăn xảy ra hiện tượng treo ( Deadlock ), một người sẽ bỏ đũa của mình xuống , từ đó người bên cạnh có thể lấy đũa đó để tiếp tục thực hiện công việc , cứ như vậy chương trình tiếp tục được thực thi. Hình 4. 5 Sơ đồ thuật toán trường hợp phân bổ cách cấp phát tài nguyên Giữ nguyên các thông số : số lượng công việc 25 , số người 5 tiến hành đo 25 lần thu được kết quả : 19 Hình 4. 6 Kết quả sau khi đo Kết luận : Phương pháp trên đã ngăn được hiện tượng Deadlock xảy ra , thời gian thực thi chương trình so với phương pháp “đưa tiến trình vào trạng thái đợi “ sẽ cao hơn ( nếu thời gian ngủ là tối ưu nhất ) . Cả hai phương pháp đều có ưu nhược điểm riêng , song đã khắc phục được hiện tượng Deadlock, ngoài hai phương pháp trên còn nhiều phương pháp khác để khắc phục hiện tượng này , tùy vào mục đích của chương trình mà các thức tránh Deadlock sẽ khác nhau và cách lựa chọn cũng khác nhau . 20 CHƯƠNG 5. NHẬN XÉT VÀ KẾT LUẬN Phương pháp Ban đầu Thay đổi số lượng tiến trình Thay đổi lượng công việc Đưa tiến trình vào hàng đợi Phân bổ lại các cấp phát tài nguyên Tỉ lệ xảy ra DeadLock 36% Từ 0 đến 36%, phụ thuộc vào số lượng tiến trình Từ 0 đến 64% Tỉ lệ thấp với thời gian ngủ ít , tỉ lệ bằng không khi thời gian đủ lâu 0% Thời gian thực thi Tính khả thi khi sử dụng 6.33s Từ 3.20s đến 6.33s Thay đổi theo số lượng tiến trình Thấp phụ thuộc vào số lượng công việc Từ 0.1s đến Từ 5.08s đến 17.09s , thay 8s, phụ đổi theo số thuộc vào lượng công thời gian ngủ việc của tiến trình Thấp Trung bình 6.636s Cao Bảng 5.1 Bảng so sánh các phương pháp phòng tránh Deadlock Kết luận : Hai phương pháp thay đổi số lượng công việc và thay đổi số lượng tiến trình có tính khả thi rất thấp do trong thực nghiệm ta không thể thay đổi 2 thông số này . Bài toán phòng tránh Deadlock có rất nhiều các giải quyết song mỗi phương pháp đều có ưu nhược điểm riêng , tùy theo mục đích, yêu cầu của chương trình , ta chọn được phương pháp tối uu nhất . 21 TÀI LIỆU THAM KHẢO [1] "randomnerdtutorials,"[Online].Available: https://randomnerdtutorials.com/projects-esp32/. [2] "geeksforgeeks.org," [Online]. Available: https://www.geeksforgeeks.org/mutexlock-for-linux-thread-synchronization/. [3] "docs.oracle.com," [Online]. 01/820-0619/geosb/index.html. Available: https://docs.oracle.com/cd/E19205- [4] N. X. Hải, OPERATING SYSTEM, 2008. 22 BẢNG PHÂN CHIA CÔNG VIỆC STT CÔNG VIỆC NGƯỜI THỰC HIỆN 1 Trao đổi, lên ý tưởng, chọn đề tài Cả nhóm 2 Mô tả các công việc cần làm, phân công nhiệm Hạ, Hiệp vụ 3 Tìm hiểu về cơ sở lý thuyết và mô phỏng các Hiệp, Đạt tình huống trong bài toán dining philosophers 4 Tìm hiểu về code 5 Trao đổi nhóm, thuyết trình, hướng dẫn lại Từng người trong nhóm những điều mình đã tìm hiểu được cho cả nhóm. 6 Làm báo cáo Hiệp 7 Làm slide, thuyết trình Đạt Hạ, Huỳnh Bảng 0.1 bảng phân công công việc 23 PHỤ LỤC Link GitHub: https://github.com/ha0scar/BTL_HeDieuHanh 24