Uploaded by hiệp nguyễn

Nhóm 7 Báo cáo cuối kì Hệ điều hành

advertisement
ĐẠ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
Download