Thảo luận Bài 8
+75
NguyenThiNgocPhuoc(122A)
PhamThiThao (I22B)
phungvanduong24(I12A)
NguyenHoangMinh_I22B
NguyenCaoDuong(I22B)
LeQuangLong (I22B)
LêAnhNgữ(I22A)
LeSonCa(I22B)
PhamPhuKhanh52(I22B)
HuynhDucQuang(I22B)
LETHIANHDAO48(I22B)
TruongMinhTriet(I22B)
NguyenThiNgocHuyen (I22B)
DuongTrungQuan
NguyenHoangKimVu (I11C)
NguyenTanDat(I22B)
NguyenThiPhongLan(I22A)
NguyenManhHuy(I22B)
TrieuDucMinh(I22A)
nguyenhoanglam_I22B
nguyenvankhoa59(122B)
lehongphong(I22B)
TranBinhCongLuanI12A
Ng0HaiQuan(i22B)
TranAnhTam(I22B)
TranQuocLoc(I22A)
VanNhatDongGiang(I22A)
xuantri27 (I11C)
NguyenTrongTinh(I22A)
ToThiMy(I22A)
NguyenNgocMinh(I22B)
phuquoccuong(I22A)
NguyenThanhTung(I22B)
TruongTranThanhTu(I22B)
NguyenThiThom(I22A)
NguyenThanhSoai(I22A)
DamQuangBinh (I22A)
tranvanminh82(I22A)
NguyenXuanThi(I22A)
PhamQuocCuong (I22A)
LeThanhQuang (I22B)
dangthihoangly(I12A)
NguyenXuanLinh(HLT3)
NguyenMinhTam(I22B)
TranVuSang (I22B)
LuGiaLam(I22A)
LeVanVan (I22B)
NguyenVanLanh (I22A)
HongGiaPhu (I22A)
BuiHuuDang(I22B)
Dao Duy Thanh(I22B)
NguyenThiMai(I22A)
ThaiMyTu (I22B)
MaiXuanSon (I22B)
NguyenTrungTin(I22A)
NguyenNhatHuy64(I22B)
vivanbieu(I22B)
VoMinhThang(I22B)
AnhDao(I22B)
NguyenQuocHuy (I22B)
NguyenVietDuc39 (I22B)
NguyenVanQuoc (I22B)
BuiThucTuan(I22B)
NguyenVanTu(I22A)
VoMinhDien(I22B)
QuangMinhTuan(I22B)
TranDangKhoa(I22A)
NguyenHoangThien(I22B)
lekhanhhoa(I22B)
Huynh Xuan Dat(I22A)
vokimthong
NguyenTienDat (I22A)
NguyenThanhQuoc(I22A)
TruongNhuNgoc (I22A)
Admin
79 posters
Trang 1 trong tổng số 9 trang
Trang 1 trong tổng số 9 trang • 1, 2, 3, 4, 5, 6, 7, 8, 9
Định nghĩa Deadlock và ví dụ minh họa
Tình huống kẹt của của một nhóm tiến trình do mỗi tiến trình trong nhóm đều chờ một sự kiện (event) có thể chỉ được gây ra bởi một tiến trình khác.
VD: Trong công ty có 1 cái máy photo và có người đang sử dụng nó trong khi đó thì có 2 người khác đến để photo tài liệu --> dẫn đến tranh chấp.
Admin
Không phải lúc nào Tranh chấp cũng dẫn đến Kẹt khoá (Deadlock) !
VD: Trong công ty có 1 cái máy photo và có người đang sử dụng nó trong khi đó thì có 2 người khác đến để photo tài liệu --> dẫn đến tranh chấp.
Admin
Không phải lúc nào Tranh chấp cũng dẫn đến Kẹt khoá (Deadlock) !
TruongNhuNgoc (I22A)- Tổng số bài gửi : 21
Join date : 10/03/2013
Re: Thảo luận Bài 8
TruongNhuNgoc (I22A) đã viết:Tình huống kẹt của của một nhóm tiến trình do mỗi tiến trình trong nhóm đều chờ một sự kiện (event) có thể chỉ được gây ra bởi một tiến trình khác.
VD: Trong công ty có 1 cái máy photo và có người đang sử dụng nó trong khi đó thì có 2 người khác đến để photo tài liệu --> dẫn đến tranh chấp.
Admin
Không phải lúc nào Tranh chấp cũng dẫn đến Kẹt khoá (Deadlock) !
Dạ thưa thầy có phải vì việc chờ photo chỉ mất một khoảng thời gian ngắn không phải chờ mãi mãi nên không gọi là Deadlock.
Admin
Đúng rồi ! Deadlock là chờ mãi mãi mà không được !
TruongNhuNgoc (I22A)- Tổng số bài gửi : 21
Join date : 10/03/2013
Ví dụ về deadlock
Trong một nhà xe có một xe máy, một chìa khóa, một mũ bảo hiểm.Nếu một người muốn đi xe thì cần phải có đủ 3 tài nguyên trên(xe, chìa khóa, mũ bảo hiểm).Có 3 người(3 tiến trình) đều có nhu cầu đi xe.Người thứ nhất giành chìa khóa, người thứ hai giành xe máy, người thứ ba giành mũ bảo hiểm.Như vậy tất cả các tài nguyên đều đã bị chiếm dụng mà không một tiến trình nào hoàn tất công việc vì người thứ nhất chờ tài nguyên xe và mủ bảo hiểm, người thứ hai chờ tài nguyên chìa khóa và mũ bảo hiểm, người thứ ba chờ tài nguyên chìa khóa và xe.kết quả là các tiến trình rơi vào trạng thái deadlock.
NguyenThanhQuoc(I22A)- Tổng số bài gửi : 18
Join date : 09/03/2013
Age : 32
Đến từ : lớp TH10a3, Dh mở tp.hcm
Re: Thảo luận Bài 8
Đúng rồi đó bạn. Trạng thái deadlock là trạng thái mà các tiến trình chờ tài nguyên mãi mãi, chờ vô tận mà không được đáp ứng.Trong trường hợp có một cái máy photo với 3 người sử dụng thì mỗi người chỉ tạm thời chiếm dụng tài nguyên trong một thời gian nhất định,sau khi hoàn thành công việc sẽ trả lại tài nguyên cho người khác(tiến trình khác) sử dụng nên các tiến trình không hề rơi vào trạng thái chờ mãi mãi nên không thể dẫn đến deadlockTruongNhuNgoc (I22A) đã viết:TruongNhuNgoc (I22A) đã viết:Tình huống kẹt của của một nhóm tiến trình do mỗi tiến trình trong nhóm đều chờ một sự kiện (event) có thể chỉ được gây ra bởi một tiến trình khác.
VD: Trong công ty có 1 cái máy photo và có người đang sử dụng nó trong khi đó thì có 2 người khác đến để photo tài liệu --> dẫn đến tranh chấp.
Admin
Không phải lúc nào Tranh chấp cũng dẫn đến Kẹt khoá (Deadlock) !
Dạ thưa thầy có phải vì việc chờ photo chỉ mất một khoảng thời gian ngắn không phải chờ mãi mãi nên không gọi là Deallock.
NguyenThanhQuoc(I22A)- Tổng số bài gửi : 18
Join date : 09/03/2013
Age : 32
Đến từ : lớp TH10a3, Dh mở tp.hcm
Định nghĩa Deadlock (Kẹt khoá)
Deadlock (Kẹt khoá) là tình huống bị kẹt của một nhóm tiến trình do mỗi tiến trình trong nhóm đều chờ một sự kiện (event) có thể chỉ được gây ra bởi một tiến trình khác.
Ví dụ: 2 xe chạy ngược chiều cùng qua một cây cầu hẹp chỉ có một làn xe, nên khi 2 xe vào đến giữa cầu thì không thể tiếp tục tiến tới nữa, xảy ra kẹt xe (deadlock) vì không xe nào chịu nhường
Ví dụ: 2 xe chạy ngược chiều cùng qua một cây cầu hẹp chỉ có một làn xe, nên khi 2 xe vào đến giữa cầu thì không thể tiếp tục tiến tới nữa, xảy ra kẹt xe (deadlock) vì không xe nào chịu nhường
NguyenTienDat (I22A)- Tổng số bài gửi : 19
Join date : 10/03/2013
Age : 33
Re: Thảo luận Bài 8
NguyenThanhQuoc(I22A) đã viết:Trong một nhà xe có một xe máy, một chìa khóa, một mũ bảo hiểm.Nếu một người muốn đi xe thì cần phải có đủ 3 tài nguyên trên(xe, chìa khóa, mũ bảo hiểm).Có 3 người(3 tiến trình) đều có nhu cầu đi xe.Người thứ nhất giành chìa khóa, người thứ hai giành xe máy, người thứ ba giành mũ bảo hiểm.Như vậy tất cả các tài nguyên đều đã bị chiếm dụng mà không một tiến trình nào hoàn tất công việc vì người thứ nhất chờ tài nguyên xe và mủ bảo hiểm, người thứ hai chờ tài nguyên chìa khóa và mũ bảo hiểm, người thứ ba chờ tài nguyên chìa khóa và xe.kết quả là các tiến trình rơi vào trạng thái deadlock.
Vi dụ đúng nhưng k thực tế lắm.....
vokimthong- Tổng số bài gửi : 12
Join date : 15/03/2013
Đến từ : I22A
Re: Thảo luận Bài 8
Để ngăn chặn Deadlock ta phải làm sao?
vd1 :2 con dê đi qua cầu, dê trắng và dê đen đều mún mình qua cầu chẳng ai chịu nhường ai cả, và cả 2 đều mắc kẹt mãi trên cầu....(có thể tranh chấp dẫn đến xảy ra đến cả 2 con đều rơi xuống cầu) tham khảo khóa trước
vd2:Giả sử tổng đài 1080 có tất cả 50 điện thoại viên. Cùng 1 lúc có 50 khách gọi đến nhờ phục vụ . Lúc này người thứ 51 gọi vào 1080 phải chờ . Xãy ra hiện tượng deadlock
tham khảo khóa trước
nhưng vd2 minh chưa thực sự hiểu bản chất lắm máy bạn giải thích giúp
vd1 :2 con dê đi qua cầu, dê trắng và dê đen đều mún mình qua cầu chẳng ai chịu nhường ai cả, và cả 2 đều mắc kẹt mãi trên cầu....(có thể tranh chấp dẫn đến xảy ra đến cả 2 con đều rơi xuống cầu) tham khảo khóa trước
vd2:Giả sử tổng đài 1080 có tất cả 50 điện thoại viên. Cùng 1 lúc có 50 khách gọi đến nhờ phục vụ . Lúc này người thứ 51 gọi vào 1080 phải chờ . Xãy ra hiện tượng deadlock
tham khảo khóa trước
nhưng vd2 minh chưa thực sự hiểu bản chất lắm máy bạn giải thích giúp
Huynh Xuan Dat(I22A)- Tổng số bài gửi : 25
Join date : 13/03/2013
Age : 34
Mình xin trình bày Tắc nghẽn (Deadlock) và ví dụ minh họa.
Tất cả hiện tượng tắc nghẽn đều bắt nguồn từ sự xung đột về tài nguyên của hai hoặc nhiều tiến trình đang hoạt động đồng thời trên hệ thống. Tài nguyên ở đây có thể là một ổ đĩa, một record trong cơ sở dữ liệu, hay một không gian địa chỉ trên bộ nhớ chính. Sau đây là một số ví dụ để minh hoạ cho điều trên.
Ví dụ 1: Giả sử có hai tiến trình P1 và P2 hoạt động đồng thời trong hệ thống. Tiến trình P1 đang giữ tài nguyên R1 và xin được cấp R2 để tiếp tục hoạt động, trong khi đó tiến trình P2 đang giữ tài nguyên R2 và xin được cấp R1 để tiếp tục hoạt động. Trong trường hợp này cả P1 và P2 sẽ không tiếp tục hoạt động được. Như vậy P1 và P2 rơi vào trạng thái tắc nghẽn. Ví dụ này có thể được minh hoạ bởi sơ đồ ở hình 2.
Tắc nghẽn thường xảy ra do xung đột về tài nguyên thuộc loại không phân chia được, một số ít trường hợp xảy ra với tài nguyên phân chia được. Ví dụ sau đây là trường hợp tắc nghẽn do xung đột về tài nguyên bộ nhớ, là tài nguyên thuộc loại phân chia được.
tài nguyên
R2
tài nguyên
R1
Process
P2
Process
P1
Yêu cầu
Yêu cầu
Giữ
Giữ
Ví dụ 1: Giả sử có hai tiến trình P1 và P2 hoạt động đồng thời trong hệ thống. Tiến trình P1 đang giữ tài nguyên R1 và xin được cấp R2 để tiếp tục hoạt động, trong khi đó tiến trình P2 đang giữ tài nguyên R2 và xin được cấp R1 để tiếp tục hoạt động. Trong trường hợp này cả P1 và P2 sẽ không tiếp tục hoạt động được. Như vậy P1 và P2 rơi vào trạng thái tắc nghẽn. Ví dụ này có thể được minh hoạ bởi sơ đồ ở hình 2.
Tắc nghẽn thường xảy ra do xung đột về tài nguyên thuộc loại không phân chia được, một số ít trường hợp xảy ra với tài nguyên phân chia được. Ví dụ sau đây là trường hợp tắc nghẽn do xung đột về tài nguyên bộ nhớ, là tài nguyên thuộc loại phân chia được.
tài nguyên
R2
tài nguyên
R1
Process
P2
Process
P1
Yêu cầu
Yêu cầu
Giữ
Giữ
lekhanhhoa(I22B)- Tổng số bài gửi : 31
Join date : 24/03/2013
Định nghĩa Deadlock
Định nghĩa: Tình huống bị kẹt của một nhóm tiến trình do mỗi tiến trình trong nhóm đều chờ một sự kiện (event) có thể chỉ được gây ra bởi một tiến trình khác.
Ví dụ:
- 5 thầy giáo đều cần máy chiếu để dạy ngay trong khi ở phòng thiết bị hiện tại chỉ có 1 máy chiếu => dẫn đến tranh chấp
- 2 xe đi ngược chiều cùng qua 1 cây cầu hẹp, mà cầu thì chỉ có 1 làn xe nên khi 2 xe vào đến giữa cầu thì không thể tiếp tục tiến tới nữa, xãy ra kẹt xe (deadlock) vì không xe nào chịu nhường xe nào.
Ví dụ:
- 5 thầy giáo đều cần máy chiếu để dạy ngay trong khi ở phòng thiết bị hiện tại chỉ có 1 máy chiếu => dẫn đến tranh chấp
- 2 xe đi ngược chiều cùng qua 1 cây cầu hẹp, mà cầu thì chỉ có 1 làn xe nên khi 2 xe vào đến giữa cầu thì không thể tiếp tục tiến tới nữa, xãy ra kẹt xe (deadlock) vì không xe nào chịu nhường xe nào.
NguyenHoangThien(I22B)- Tổng số bài gửi : 38
Join date : 15/03/2013
Khái niệm deadlock
Tất cả hiện tượng tắc nghẽn đều bắt nguồn từ sự xung đột về tài nguyên của hai hoặc nhiều tiến trình đang hoạt động đồng thời trên hệ thống. Tài nguyên ở đây có thể là một ổ đĩa, một record trong cơ sở dữ liệu, hay một không gian địa chỉ trên bộ nhớ chính. Sau đây là một số ví dụ để minh hoạ cho điều trên.
Ví dụ 1: Giả sử có hai tiến trình P1 và P2 hoạt động đồng thời trong hệ thống. Tiến trình P1 đang giữ tài nguyên R1 và xin được cấp R2 để tiếp tục hoạt động, trong khi đó tiến trình P2 đang giữ tài nguyên R2 và xin được cấp R1 để tiếp tục hoạt động. Trong trường hợp này cả P1 và P2 sẽ không tiếp tục hoạt động được. Như vậy P1 và P2 rơi vào trạng thái tắc nghẽn.
Tắc nghẽn thường xảy ra do xung đột về tài nguyên thuộc loại không phân chia được, một số ít trường hợp xảy ra với tài nguyên phân chia được. Ví dụ sau đây là trường hợp tắc nghẽn do xung đột về tài nguyên bộ nhớ, là tài nguyên thuộc loại phân chia được.
Ví dụ 2: Trong các ứng dụng cơ sở dữ liệu, một chương trình có thể khoá một vài record mà nó sử dụng, để dành quyền điều khiển về cho nó. Nếu tiến trình P1 khoá record R1, tiến trình P2 khoá record R2, và rồi sau đó mỗi tiến trình lại cố gắng khoá record của một tiến trình khác. Tắc nghẽn sẽ xảy ra.
Như vậy tắc nghẽn là hiện tượng: Trong hệ thống xuất hiện một tập các tiến trình, mà mỗi tiến trình trong tập này đều chờ được cấp tài nguyên, mà tài nguyên đó đang được một tiến trình trong tập này chiếm giữ. Và sự đợi này có thể kéo dài vô hạn nếu không có sự tác động từ bên ngoài.
Trong trường hợp của ví dụ 1 ở trên: hai tiến trình P1 và P2 sẽ rơi vào trạng thái tắc nghẽn, nếu không có sự can thiệp của hệ điều hành. Để phá bỏ tắc nghẽn này hệ điều hành có thể cho tạm dừng tiến trình P1 để thu hồi lại tài nguyên R1, lấy R1 cấp cho tiến trình P2 để P2 hoạt động và kết thúc, sau đó thu hồi cả R1 và R2 từ tiến trình P2 để cấp cho P1 và tái kích hoạt P1 để P1 hoạt động trở lại. Như vậy sau một khoảng thời gian cả P1 và P2 đều ra khỏi tình trạng tắc nghẽn.
Khi hệ thống xảy ra tắc nghẽn nếu hệ điều hành không kịp thời phá bỏ tắc nghẽn thì hệ thống có thể rơi vào tình trạng treo toàn bộ hệ thống. Như trong trường hợp tắc nghẽn ở ví dụ 1, nếu sau đó có tiến trình P3, đang giữ tài nguyên R3, cần R2 để tiếp tục thì P3 cũng sẽ rơi vào tập tiến trình bị tắc nghẽn, rồi sau đó nếu có tiến trình P4 cần tài nguyên R1 và R3 để tiếp tục thì P4 cũng rơi vào tập các tiến trình bị tắc nghẽn như P3, … cứ thế dần dần có thể dẫn đến một thời điểm tất cả các tiến trình trong hệ thống đều rơi vào tập tiến trình tắc nghẽn. Và như vậy hệ thống sẽ bị treo hoàn toàn.
Admin
Như ví dụ trên, các bản ghi thuộc loại Phân chia được (Đúng hơn: Chia sẻ được, nghĩa là dùng chung được bởi nhiều tiến trình một lúc) thì sao phải "Khoá" chúng để Độc quyền sử dụng ?
Ví dụ 1: Giả sử có hai tiến trình P1 và P2 hoạt động đồng thời trong hệ thống. Tiến trình P1 đang giữ tài nguyên R1 và xin được cấp R2 để tiếp tục hoạt động, trong khi đó tiến trình P2 đang giữ tài nguyên R2 và xin được cấp R1 để tiếp tục hoạt động. Trong trường hợp này cả P1 và P2 sẽ không tiếp tục hoạt động được. Như vậy P1 và P2 rơi vào trạng thái tắc nghẽn.
Tắc nghẽn thường xảy ra do xung đột về tài nguyên thuộc loại không phân chia được, một số ít trường hợp xảy ra với tài nguyên phân chia được. Ví dụ sau đây là trường hợp tắc nghẽn do xung đột về tài nguyên bộ nhớ, là tài nguyên thuộc loại phân chia được.
Ví dụ 2: Trong các ứng dụng cơ sở dữ liệu, một chương trình có thể khoá một vài record mà nó sử dụng, để dành quyền điều khiển về cho nó. Nếu tiến trình P1 khoá record R1, tiến trình P2 khoá record R2, và rồi sau đó mỗi tiến trình lại cố gắng khoá record của một tiến trình khác. Tắc nghẽn sẽ xảy ra.
Như vậy tắc nghẽn là hiện tượng: Trong hệ thống xuất hiện một tập các tiến trình, mà mỗi tiến trình trong tập này đều chờ được cấp tài nguyên, mà tài nguyên đó đang được một tiến trình trong tập này chiếm giữ. Và sự đợi này có thể kéo dài vô hạn nếu không có sự tác động từ bên ngoài.
Trong trường hợp của ví dụ 1 ở trên: hai tiến trình P1 và P2 sẽ rơi vào trạng thái tắc nghẽn, nếu không có sự can thiệp của hệ điều hành. Để phá bỏ tắc nghẽn này hệ điều hành có thể cho tạm dừng tiến trình P1 để thu hồi lại tài nguyên R1, lấy R1 cấp cho tiến trình P2 để P2 hoạt động và kết thúc, sau đó thu hồi cả R1 và R2 từ tiến trình P2 để cấp cho P1 và tái kích hoạt P1 để P1 hoạt động trở lại. Như vậy sau một khoảng thời gian cả P1 và P2 đều ra khỏi tình trạng tắc nghẽn.
Khi hệ thống xảy ra tắc nghẽn nếu hệ điều hành không kịp thời phá bỏ tắc nghẽn thì hệ thống có thể rơi vào tình trạng treo toàn bộ hệ thống. Như trong trường hợp tắc nghẽn ở ví dụ 1, nếu sau đó có tiến trình P3, đang giữ tài nguyên R3, cần R2 để tiếp tục thì P3 cũng sẽ rơi vào tập tiến trình bị tắc nghẽn, rồi sau đó nếu có tiến trình P4 cần tài nguyên R1 và R3 để tiếp tục thì P4 cũng rơi vào tập các tiến trình bị tắc nghẽn như P3, … cứ thế dần dần có thể dẫn đến một thời điểm tất cả các tiến trình trong hệ thống đều rơi vào tập tiến trình tắc nghẽn. Và như vậy hệ thống sẽ bị treo hoàn toàn.
Admin
Như ví dụ trên, các bản ghi thuộc loại Phân chia được (Đúng hơn: Chia sẻ được, nghĩa là dùng chung được bởi nhiều tiến trình một lúc) thì sao phải "Khoá" chúng để Độc quyền sử dụng ?
NguyenHoangThien(I22B)- Tổng số bài gửi : 38
Join date : 15/03/2013
Các phương pháp xử lý Deadlock
Các phương pháp xử lý Deadlock
+ Ngăn ngừa hoặc tránh xa, đảm bảo rằng hệ thống sẽ không bao giờ đi vào trạng thái deadlock.
+ Cho phép hệ thống đi vào trạng thái deadlock rồi khôi phục lại.
+ Bỏ qua dead lock , coi như ko có dead trong hệ thống
Ngăn chặn deadlock : là đảm bảo ít nhất một trong bốn điều kiện không thể xuất hiện
a.Ngăn cản lẫn nhau – đảm bảo là hệ thống không có các file không thể chia sẻ.
Một tiến trình không bao giờ phải chờ tài nguyên có thể chia sẻ
Ví dụ: read-only files(vì file read only thì nhiều tiến trình truy xuất nó cũng không ảnh hưởng gì-nội dung file không thay đổi)
Một số tài nguyên là không thể chia sẻ
Ví dụ: chế độ toàn màn hình
b.Giữ và đợi cấp thêm tài nguyên – phải đảm bảo rằng mỗi khi một tiến trình yêu cầu một tài nguyên, nó không giữ bất kỳ tài nguyên nào khác.
Đòi hỏi tiến trình yêu cầu và được phân phối tất cả các tài nguyên của nó trước khi nó bắt đầu thực hiện, hoặc chỉ cho phép tiến trình yêu cầu các tài nguyên khi không có tài nguyên nào cả.
c.Không có ưu tiên: không đòi lại tài nguyên từ tiến trình đang giữ chúng_
Nếu một tiến trình đang giữ một số tài nguyên và yêu cầu tài nguyên khác mà không thể được phân phối ngay cho nó thì tất cả các tài nguyên nó đang giữ được giải phóng.
Các tài nguyên ưu tiên được thêm vào danh sách tài nguyên dành cho tiến trình đang chờ đợi.
Tiến trình sẽ được khởi động lại chỉ khi nó có thể lấy lại các tài nguyên cũ của nó cũng như các tài nguyên mới mà nó đang yêu cầu.
d.Chờ đợi vòng tròn – áp dụng một thứ tự tuyệt đối cho tất cả các loại tài nguyên: mỗi loại được gắn một số nguyên
Mỗi tiến trình yêu cầu các tài nguyên theo thứ tự tăng dần: chỉ có thể nhận được tài nguyên có trọng số cao hơn của bất kỳ tài nguyên nào nó đang giữ
Muốn có tài nguyên j, tiến trình phải giải phóng tất cả các tài nguyên có trọng số i > j (nếu có)
Tài liệu này mình kiếm được trên mạng, các bạn đọc rồi cho ý kiến nha
+ Ngăn ngừa hoặc tránh xa, đảm bảo rằng hệ thống sẽ không bao giờ đi vào trạng thái deadlock.
+ Cho phép hệ thống đi vào trạng thái deadlock rồi khôi phục lại.
+ Bỏ qua dead lock , coi như ko có dead trong hệ thống
Ngăn chặn deadlock : là đảm bảo ít nhất một trong bốn điều kiện không thể xuất hiện
a.Ngăn cản lẫn nhau – đảm bảo là hệ thống không có các file không thể chia sẻ.
Một tiến trình không bao giờ phải chờ tài nguyên có thể chia sẻ
Ví dụ: read-only files(vì file read only thì nhiều tiến trình truy xuất nó cũng không ảnh hưởng gì-nội dung file không thay đổi)
Một số tài nguyên là không thể chia sẻ
Ví dụ: chế độ toàn màn hình
b.Giữ và đợi cấp thêm tài nguyên – phải đảm bảo rằng mỗi khi một tiến trình yêu cầu một tài nguyên, nó không giữ bất kỳ tài nguyên nào khác.
Đòi hỏi tiến trình yêu cầu và được phân phối tất cả các tài nguyên của nó trước khi nó bắt đầu thực hiện, hoặc chỉ cho phép tiến trình yêu cầu các tài nguyên khi không có tài nguyên nào cả.
c.Không có ưu tiên: không đòi lại tài nguyên từ tiến trình đang giữ chúng_
Nếu một tiến trình đang giữ một số tài nguyên và yêu cầu tài nguyên khác mà không thể được phân phối ngay cho nó thì tất cả các tài nguyên nó đang giữ được giải phóng.
Các tài nguyên ưu tiên được thêm vào danh sách tài nguyên dành cho tiến trình đang chờ đợi.
Tiến trình sẽ được khởi động lại chỉ khi nó có thể lấy lại các tài nguyên cũ của nó cũng như các tài nguyên mới mà nó đang yêu cầu.
d.Chờ đợi vòng tròn – áp dụng một thứ tự tuyệt đối cho tất cả các loại tài nguyên: mỗi loại được gắn một số nguyên
Mỗi tiến trình yêu cầu các tài nguyên theo thứ tự tăng dần: chỉ có thể nhận được tài nguyên có trọng số cao hơn của bất kỳ tài nguyên nào nó đang giữ
Muốn có tài nguyên j, tiến trình phải giải phóng tất cả các tài nguyên có trọng số i > j (nếu có)
Tài liệu này mình kiếm được trên mạng, các bạn đọc rồi cho ý kiến nha
NguyenHoangThien(I22B)- Tổng số bài gửi : 38
Join date : 15/03/2013
Tránh deadlock
Tránh deadlock
Một số thông tin ưu tiên trong hệ thống :
-Mô hình hữu dụng nhất và đơn giản nhất yêu cầu mỗi tiến trình công bố số lượng tài nguyên lớn nhất của mỗi loại mà nó có thể cần đến.
-Giải thuật tránh deadlock luôn kiểm tra trạng thái phân phối tài nguyên để đảm bảo rằng sẽ không bao giờ có tình trạng chờ đợi vòng tròn.
-Trạng thái phân phối tài nguyên được xác định bởi số tài nguyên khả dụng (Available) và đã được phân phối (Allocation) cũng như số tài nguyên tối đa (max)tiến trình yêu cầu.
Giải thuật đồ thị cấp phát tài nguyên (đc dùng với tài nguyên đơn cá thể)
- Ngoài các cạnh yêu cầu và gán, chúng ta giới thiệu một loại cạnh mới được gọi là
cạnh thỉnh cầu (claim edge). Một cạnh thỉnh cầu Pi → Rj hiển thị quá trình Pi có thể yêu cầu tài nguyên Rj vào một thời điểm trong tương lai. Cạnh này tương tự cạnh yêu cầu về
phương hướng nhưng được hiện diện bởi dấu đứt khoảng. Khi quá trình Pi yêu cầu tài nguyên Rj, cạnh thỉnh cầu Pi → Rj chuyển tới cạnh yêu cầu. Tương tự, khi một tài nguyên Rj được giải phóng bởi Pi, cạnh gán Rj → Pi được chuyển trở lại thành cạnh
thỉnh cầu Pi → Rj. Chúng ta chú ý rằng các tài nguyên phải được yêu cầu trước trong hệ thống. Nghĩa là, trước khi Pi bắt đầu thực thi, tất cả các cạnh thỉnh cầu của nó phải xuất hiện trong đồ thị cấp phát tài nguyên. Chúng ta có thể giảm nhẹ điều kiện này bằng cách cho phép một cạnh Pi → Rj để được thêm tới đồ thị chỉ nếu tất cả các cạnh gắn liền với quá trình Pi là các cạnh thỉnh cầu. Giả sử rằng Pi yêu cầu tài nguyên Rj. Yêu cầu có thể được gán chỉ nếu chuyển cạnh yêu cầu Pi → Rj tới cạnh gán Rj→Pi không dẫn đến việc hình thành chu trình trong đồ thị cấp phát tài nguyên. Chú ý rằng chúng ta kiểm tra tính an toàn bằng cách dùng giải
thuật phát hiện chu trình. Một giải thuật để phát hiện một chu trình trong đồ thị này yêu cầu một thứ tự của n2 thao tác, ở đây n là số quá trình trong hệ thống.Nếu không có chu trình tồn tại, thì việc cấp phát tài nguyên sẽ để lại hệ thống trong trạng thái an toàn. Nếu chu trình được tìm thấy thì việc cấp phát sẽ đặt hệ thống trong trạng thái không an toàn. Do đó, quá trình Pi sẽ phải chờ yêu cầu của nó được thoả.
Một số thông tin ưu tiên trong hệ thống :
-Mô hình hữu dụng nhất và đơn giản nhất yêu cầu mỗi tiến trình công bố số lượng tài nguyên lớn nhất của mỗi loại mà nó có thể cần đến.
-Giải thuật tránh deadlock luôn kiểm tra trạng thái phân phối tài nguyên để đảm bảo rằng sẽ không bao giờ có tình trạng chờ đợi vòng tròn.
-Trạng thái phân phối tài nguyên được xác định bởi số tài nguyên khả dụng (Available) và đã được phân phối (Allocation) cũng như số tài nguyên tối đa (max)tiến trình yêu cầu.
Giải thuật đồ thị cấp phát tài nguyên (đc dùng với tài nguyên đơn cá thể)
- Ngoài các cạnh yêu cầu và gán, chúng ta giới thiệu một loại cạnh mới được gọi là
cạnh thỉnh cầu (claim edge). Một cạnh thỉnh cầu Pi → Rj hiển thị quá trình Pi có thể yêu cầu tài nguyên Rj vào một thời điểm trong tương lai. Cạnh này tương tự cạnh yêu cầu về
phương hướng nhưng được hiện diện bởi dấu đứt khoảng. Khi quá trình Pi yêu cầu tài nguyên Rj, cạnh thỉnh cầu Pi → Rj chuyển tới cạnh yêu cầu. Tương tự, khi một tài nguyên Rj được giải phóng bởi Pi, cạnh gán Rj → Pi được chuyển trở lại thành cạnh
thỉnh cầu Pi → Rj. Chúng ta chú ý rằng các tài nguyên phải được yêu cầu trước trong hệ thống. Nghĩa là, trước khi Pi bắt đầu thực thi, tất cả các cạnh thỉnh cầu của nó phải xuất hiện trong đồ thị cấp phát tài nguyên. Chúng ta có thể giảm nhẹ điều kiện này bằng cách cho phép một cạnh Pi → Rj để được thêm tới đồ thị chỉ nếu tất cả các cạnh gắn liền với quá trình Pi là các cạnh thỉnh cầu. Giả sử rằng Pi yêu cầu tài nguyên Rj. Yêu cầu có thể được gán chỉ nếu chuyển cạnh yêu cầu Pi → Rj tới cạnh gán Rj→Pi không dẫn đến việc hình thành chu trình trong đồ thị cấp phát tài nguyên. Chú ý rằng chúng ta kiểm tra tính an toàn bằng cách dùng giải
thuật phát hiện chu trình. Một giải thuật để phát hiện một chu trình trong đồ thị này yêu cầu một thứ tự của n2 thao tác, ở đây n là số quá trình trong hệ thống.Nếu không có chu trình tồn tại, thì việc cấp phát tài nguyên sẽ để lại hệ thống trong trạng thái an toàn. Nếu chu trình được tìm thấy thì việc cấp phát sẽ đặt hệ thống trong trạng thái không an toàn. Do đó, quá trình Pi sẽ phải chờ yêu cầu của nó được thoả.
NguyenHoangThien(I22B)- Tổng số bài gửi : 38
Join date : 15/03/2013
Deadlock
-Vấn đề deadlock : dead lock là hiện tượng một tiến trình chiếm hữu tài nguyên lâu dài làm cho các tiến trình có nhu cầu sử dụng tài nguyên này luôn ở trạng thái waiting mãi mãi .
- Mô hình hệ thống : trong một hệ thống , các tiến trình từ khi được gọi đến khi kết thúc sẽ qua các giai đoạn sau :
+Yêu cầu tài nguyên (request): nếu yêu cầu không được giải quyết ngay (vd khi tài nguyên đang được tiến trình khác sử dụng) thì tiến trình yêu cầu phải đợi cho đến khi nhận được tài nguyên.
+Sử dụng tài nguyên (use)
+Giải phóng tài nguyên (release)
- Mô tả Deadlock: Dead lock xảy ra với 4 điều kiện sau xảy ra đồng thời :
+ Ngăn chặn(loại trừ) lẫn nhau : vì chỉ có 1 tiến trình đc ở trong găng
+ Giữ và đợi (Hold and wait)
+ Không có ưu tiên(độc quyền)(No preemption): tiến trình thực hiện mãi mà ko dừng để giải phóng tài nguyên cho tiến trình khác
+ Chờ đợi vòng tròn(Circular Wait)
Trong mô hình RAG (Resource Allocation Graph )
_Nếu đồ thị không chu trình ko xảy ra deadlock.
_______Nếu đồ thị có chu trình
__________Nếu mỗi loại tài nguyên chỉ một cá thể thì chắc chắn xảy ra deadlock.
__________Nếu mỗi loại tài nguyên có một vài cá thể thì deadlock có thể xảy ra hoặc không.
- Mô hình hệ thống : trong một hệ thống , các tiến trình từ khi được gọi đến khi kết thúc sẽ qua các giai đoạn sau :
+Yêu cầu tài nguyên (request): nếu yêu cầu không được giải quyết ngay (vd khi tài nguyên đang được tiến trình khác sử dụng) thì tiến trình yêu cầu phải đợi cho đến khi nhận được tài nguyên.
+Sử dụng tài nguyên (use)
+Giải phóng tài nguyên (release)
- Mô tả Deadlock: Dead lock xảy ra với 4 điều kiện sau xảy ra đồng thời :
+ Ngăn chặn(loại trừ) lẫn nhau : vì chỉ có 1 tiến trình đc ở trong găng
+ Giữ và đợi (Hold and wait)
+ Không có ưu tiên(độc quyền)(No preemption): tiến trình thực hiện mãi mà ko dừng để giải phóng tài nguyên cho tiến trình khác
+ Chờ đợi vòng tròn(Circular Wait)
Trong mô hình RAG (Resource Allocation Graph )
_Nếu đồ thị không chu trình ko xảy ra deadlock.
_______Nếu đồ thị có chu trình
__________Nếu mỗi loại tài nguyên chỉ một cá thể thì chắc chắn xảy ra deadlock.
__________Nếu mỗi loại tài nguyên có một vài cá thể thì deadlock có thể xảy ra hoặc không.
NguyenHoangThien(I22B)- Tổng số bài gửi : 38
Join date : 15/03/2013
Khái niệm Deadlock (hiện tượng đóng băng, kẹt khóa) và các ví dụ mình họa
Deadlock (hay kẹt khóa) là hiện tượng bị rơi vào tình huống kẹt của một nhóm các tiến trình khi yêu cầu sử dụng tài nguyên. Các nhóm này đã yêu cầu một các đồng thời trong một cùng một thời điểm và đều chờ thời gian đáp ứng, với độ ưu tiên như nhau.
VD: Các xe trên xa lộ khi di chuyển cùng tốc độ với nhau và đang chuẩn bị vào đường hầm (Thủ Thiêm).
Tại thời điểm các xe tải phải yêu cầu chạy một trên một làn đường xa tải thì nếu các xe không có sự đồng bộ (giảm tốc độ) thì các xe sẽ dẫn đến quá trình tranh chấp tài nguyên (cụ thể ở đây là chỉ có làn đường xe tải).
VD: Các xe trên xa lộ khi di chuyển cùng tốc độ với nhau và đang chuẩn bị vào đường hầm (Thủ Thiêm).
Tại thời điểm các xe tải phải yêu cầu chạy một trên một làn đường xa tải thì nếu các xe không có sự đồng bộ (giảm tốc độ) thì các xe sẽ dẫn đến quá trình tranh chấp tài nguyên (cụ thể ở đây là chỉ có làn đường xe tải).
TranDangKhoa(I22A)- Tổng số bài gửi : 32
Join date : 10/03/2013
Age : 33
Đến từ : Lớp I22A
Re: Thảo luận Bài 8
Deadlock là trạng thái xảy ra khi một nhóm tiến trình ngưng hoạt động trong thời gian dài do do một hay nhiều tiến trình trong nhóm chờ mãi mãi một sự kiện (event) phát sinh bởi một tiến trình khác hoặc trong nhóm đó.
Ví dụ: A vào thư viện mượn sách để đọc, nhưng B đã mượn trước nên A phải ngồi chờ khi B đọc xong đã.
Ví dụ: A vào thư viện mượn sách để đọc, nhưng B đã mượn trước nên A phải ngồi chờ khi B đọc xong đã.
QuangMinhTuan(I22B)- Tổng số bài gửi : 17
Join date : 08/03/2013
Re:Thảo Luận Bài 8
Deadlock
Tất cả hiện tượng tắc nghẽn đều bắt nguồn từ sự xung đột về tài nguyên của hai hoặc nhiều tiến trình đang hoạt động đồng thời trên hệ thống. Tài nguyên ở đây có thể là một ổ đĩa, một record trong cơ sở dữ liệu, hay một không gian địa chỉ trên bộ nhớ chính. Sau đây là một số ví dụ để minh hoạ cho điều trên.
Ví dụ 1: Giả sử có hai tiến trình P1 và P2 hoạt động đồng thời trong hệ thống. Tiến trình P1 đang giữ tài nguyên R1 và xin được cấp R2 để tiếp tục hoạt động, trong khi đó tiến trình P2 đang giữ tài nguyên R2 và xin được cấp R1 để tiếp tục hoạt động. Trong trường hợp này cả P1 và P2 sẽ không tiếp tục hoạt động được. Như vậy P1 và P2 rơi vào trạng thái tắc nghẽn. Ví dụ này có thể được minh hoạ bởi sơ đồ ở hình 2.
Tắc nghẽn thường xảy ra do xung đột về tài nguyên thuộc loại không phân chia được, một số ít trường hợp xảy ra với tài nguyên phân chia được. Ví dụ sau đây là trường hợp tắc nghẽn do xung đột về tài nguyên bộ nhớ, là tài nguyên thuộc loại phân chia được.
Ví dụ 2: Trong các ứng dụng cơ sở dữ liệu, một chương trình có thể khoá một vài record mà nó sử dụng, để dành quyền điều khiển về cho nó. Nếu tiến trình P1 khoá record R1, tiến trình P2 khoá record R2, và rồi sau đó mỗi tiến trình lại cố gắng khoá record của một tiến trình khác. Tắc nghẽn sẽ xảy ra.
Như vậy tắc nghẽn là hiện tượng: Trong hệ thống xuất hiện một tập các tiến trình, mà mỗi tiến trình trong tập này đều chờ được cấp tài nguyên, mà tài nguyên đó đang được một tiến trình trong tập này chiếm giữ. Và sự đợi này có thể kéo dài vô hạn nếu không có sự tác động từ bên ngoài.
Trong trường hợp của ví dụ 1 ở trên: hai tiến trình P1 và P2 sẽ rơi vào trạng thái tắc nghẽn, nếu không có sự can thiệp của hệ điều hành. Để phá bỏ tắc nghẽn này hệ điều hành có thể cho tạm dừng tiến trình P1 để thu hồi lại tài nguyên R1, lấy R1 cấp cho tiến trình P2 để P2 hoạt động và kết thúc, sau đó thu hồi cả R1 và R2 từ tiến trình P2 để cấp cho P1 và tái kích hoạt P1 để P1 hoạt động trở lại. Như vậy sau một khoảng thời gian cả P1 và P2 đều ra khỏi tình trạng tắc nghẽn.
Khi hệ thống xảy ra tắc nghẽn nếu hệ điều hành không kịp thời phá bỏ tắc nghẽn thì hệ thống có thể rơi vào tình trạng treo toàn bộ hệ thống. Như trong trường hợp tắc nghẽn ở ví dụ 1, nếu sau đó có tiến trình P3, đang giữ tài nguyên R3, cần R2 để tiếp tục thì P3 cũng sẽ rơi vào tập tiến trình bị tắc nghẽn, rồi sau đó nếu có tiến trình P4 cần tài nguyên R1 và R3 để tiếp tục thì P4 cũng rơi vào tập các tiến trình bị tắc nghẽn như P3, … cứ thế dần dần có thể dẫn đến một thời điểm tất cả các tiến trình trong hệ thống đều rơi vào tập tiến trình tắc nghẽn. Và như vậy hệ thống sẽ bị treo hoàn toàn.
Tất cả hiện tượng tắc nghẽn đều bắt nguồn từ sự xung đột về tài nguyên của hai hoặc nhiều tiến trình đang hoạt động đồng thời trên hệ thống. Tài nguyên ở đây có thể là một ổ đĩa, một record trong cơ sở dữ liệu, hay một không gian địa chỉ trên bộ nhớ chính. Sau đây là một số ví dụ để minh hoạ cho điều trên.
Ví dụ 1: Giả sử có hai tiến trình P1 và P2 hoạt động đồng thời trong hệ thống. Tiến trình P1 đang giữ tài nguyên R1 và xin được cấp R2 để tiếp tục hoạt động, trong khi đó tiến trình P2 đang giữ tài nguyên R2 và xin được cấp R1 để tiếp tục hoạt động. Trong trường hợp này cả P1 và P2 sẽ không tiếp tục hoạt động được. Như vậy P1 và P2 rơi vào trạng thái tắc nghẽn. Ví dụ này có thể được minh hoạ bởi sơ đồ ở hình 2.
Tắc nghẽn thường xảy ra do xung đột về tài nguyên thuộc loại không phân chia được, một số ít trường hợp xảy ra với tài nguyên phân chia được. Ví dụ sau đây là trường hợp tắc nghẽn do xung đột về tài nguyên bộ nhớ, là tài nguyên thuộc loại phân chia được.
Ví dụ 2: Trong các ứng dụng cơ sở dữ liệu, một chương trình có thể khoá một vài record mà nó sử dụng, để dành quyền điều khiển về cho nó. Nếu tiến trình P1 khoá record R1, tiến trình P2 khoá record R2, và rồi sau đó mỗi tiến trình lại cố gắng khoá record của một tiến trình khác. Tắc nghẽn sẽ xảy ra.
Như vậy tắc nghẽn là hiện tượng: Trong hệ thống xuất hiện một tập các tiến trình, mà mỗi tiến trình trong tập này đều chờ được cấp tài nguyên, mà tài nguyên đó đang được một tiến trình trong tập này chiếm giữ. Và sự đợi này có thể kéo dài vô hạn nếu không có sự tác động từ bên ngoài.
Trong trường hợp của ví dụ 1 ở trên: hai tiến trình P1 và P2 sẽ rơi vào trạng thái tắc nghẽn, nếu không có sự can thiệp của hệ điều hành. Để phá bỏ tắc nghẽn này hệ điều hành có thể cho tạm dừng tiến trình P1 để thu hồi lại tài nguyên R1, lấy R1 cấp cho tiến trình P2 để P2 hoạt động và kết thúc, sau đó thu hồi cả R1 và R2 từ tiến trình P2 để cấp cho P1 và tái kích hoạt P1 để P1 hoạt động trở lại. Như vậy sau một khoảng thời gian cả P1 và P2 đều ra khỏi tình trạng tắc nghẽn.
Khi hệ thống xảy ra tắc nghẽn nếu hệ điều hành không kịp thời phá bỏ tắc nghẽn thì hệ thống có thể rơi vào tình trạng treo toàn bộ hệ thống. Như trong trường hợp tắc nghẽn ở ví dụ 1, nếu sau đó có tiến trình P3, đang giữ tài nguyên R3, cần R2 để tiếp tục thì P3 cũng sẽ rơi vào tập tiến trình bị tắc nghẽn, rồi sau đó nếu có tiến trình P4 cần tài nguyên R1 và R3 để tiếp tục thì P4 cũng rơi vào tập các tiến trình bị tắc nghẽn như P3, … cứ thế dần dần có thể dẫn đến một thời điểm tất cả các tiến trình trong hệ thống đều rơi vào tập tiến trình tắc nghẽn. Và như vậy hệ thống sẽ bị treo hoàn toàn.
VoMinhDien(I22B)- Tổng số bài gửi : 34
Join date : 11/03/2013
Làm sao tránh được hiện tượng Deadlock?
Để các tài nguyên sử dụng hợp lý và ít ảnh hưởng bởi hệ thống khi xảy ra tình huống kẹt khi các tiến trình yêu cầu, có thể giải quyết bằng một số biện pháp:
- Sử dụng chức năng đồng bộ hóa các tiến trình (đã được học ở bài 7) để đảm bảo tính nhất quán, tính đúng của các tài nguyên trước khi xảy ra tranh chấp.
- Giải quyết thứ tự sử dụng tài nguyên hệ thống, nếu có thể, nên gán số độ ưu tiên lên tiến trình khi yêu cầu tài nguyên. Giá trị ưu tiên có thể cho phép tiến trình thực thi theo thứ tự.
- Các tài nguyên gián tiếp khi yêu cầu CPU cấp phát, nếu cảm thấy hợp lý mới được cấp để sử dụng.
vậy, tại sao phải thông qua hệ điều hành để quản lý các tài nguyên dùng chung? Hoặc nên để các tiến trình hoạt động tự do (khi cần dùng thì tự túc yêu cầu và tự sử dụng) hay là để hệ thống quản lý một cách tập trung và yêu cầu tài nguyên khi cần thiết mới hiệu quả?
- Sử dụng chức năng đồng bộ hóa các tiến trình (đã được học ở bài 7) để đảm bảo tính nhất quán, tính đúng của các tài nguyên trước khi xảy ra tranh chấp.
- Giải quyết thứ tự sử dụng tài nguyên hệ thống, nếu có thể, nên gán số độ ưu tiên lên tiến trình khi yêu cầu tài nguyên. Giá trị ưu tiên có thể cho phép tiến trình thực thi theo thứ tự.
- Các tài nguyên gián tiếp khi yêu cầu CPU cấp phát, nếu cảm thấy hợp lý mới được cấp để sử dụng.
vậy, tại sao phải thông qua hệ điều hành để quản lý các tài nguyên dùng chung? Hoặc nên để các tiến trình hoạt động tự do (khi cần dùng thì tự túc yêu cầu và tự sử dụng) hay là để hệ thống quản lý một cách tập trung và yêu cầu tài nguyên khi cần thiết mới hiệu quả?
TranDangKhoa(I22A)- Tổng số bài gửi : 32
Join date : 10/03/2013
Age : 33
Đến từ : Lớp I22A
Khái niệm trạng thái an toàn và giải pháp tranh deadlock
• Thế nào là trạng thái an toàn của hệ thống?
Một trạng thái được gọi là an toàn “safe” nếu tồn tại ít nhất một cách mà trong một khoảng thời gian hữu hạn nào đó, hệ thống có thể cấp phát tài nguyên thỏa mãn cho tất cả process thực thi hoàn tất .
Khi đó hệ thống tồn tại một Chuỗi an toàn {P1, P2, … , Pn } bao gồm tất cả các tiến trình sao cho với mỗi Pi, các tài nguyên mà nó yêu cầu có thể được đáp ứng bởi số lượng hiện có cộng thêm của tất cả các Pj mà j < i.
Nếu các TN yêu cầu không có đủ, Pi phải chờ cho đến khi tất cả các Pj trả lại các TN mà chúng chiếm giữ.
Khi Pi nhận được đủ TN cần thiết, nó sử dụng và trả lại HĐH để Pi+1 có thể vận hành, cứ như thế cho đến Pn
Khi một process yêu cầu một tài nguyên đang sẵn có, hệ thống sẽ kiểm tra: nếu việc cấp phát này không dẫn đến tình trạng unsafe thì sẽ cấp phát ngay.
• Trình bày 4 cách ngăn chặn Deadlock.
Để ngăn chặn Deadlock ta phải làm sao cho ít nhất 1 trong 4 điều kiện dẫn đến Deadlock không xảy ra. Cụ thể:
- Với Mutual Exclusion: Đảm bảo TN(tai nguyên) nào cũng dùng chung được cùng một lúc bởi nhiều tiến trình.
- Với Hold and Wait:
1- Khi TT yêu cầu TN, nó không được giữ 1 TN nào khác.
2- TT phải yêu cầu và được cấp tất cả các TN mà nó cần ngay đầu công việc.
- Với No Preemption:
1- Khi TT giữ TN mà xin thêm nhưng không được, các TN mà nó giữ phải bị tiếm quyền sử dụng và trả lại HĐH.
2- Khi TT xin thêm TN, nếu TN này đang được giữ bởi TT khác đang ở trạng thái chờ, TN của TT khác này bị tiếm quyền sử dụng để cấp cho TT đang xin.
- Với Circular Wait: Cấp TN theo một thứ tự nào đấy.
Một trạng thái được gọi là an toàn “safe” nếu tồn tại ít nhất một cách mà trong một khoảng thời gian hữu hạn nào đó, hệ thống có thể cấp phát tài nguyên thỏa mãn cho tất cả process thực thi hoàn tất .
Khi đó hệ thống tồn tại một Chuỗi an toàn {P1, P2, … , Pn } bao gồm tất cả các tiến trình sao cho với mỗi Pi, các tài nguyên mà nó yêu cầu có thể được đáp ứng bởi số lượng hiện có cộng thêm của tất cả các Pj mà j < i.
Nếu các TN yêu cầu không có đủ, Pi phải chờ cho đến khi tất cả các Pj trả lại các TN mà chúng chiếm giữ.
Khi Pi nhận được đủ TN cần thiết, nó sử dụng và trả lại HĐH để Pi+1 có thể vận hành, cứ như thế cho đến Pn
Khi một process yêu cầu một tài nguyên đang sẵn có, hệ thống sẽ kiểm tra: nếu việc cấp phát này không dẫn đến tình trạng unsafe thì sẽ cấp phát ngay.
• Trình bày 4 cách ngăn chặn Deadlock.
Để ngăn chặn Deadlock ta phải làm sao cho ít nhất 1 trong 4 điều kiện dẫn đến Deadlock không xảy ra. Cụ thể:
- Với Mutual Exclusion: Đảm bảo TN(tai nguyên) nào cũng dùng chung được cùng một lúc bởi nhiều tiến trình.
- Với Hold and Wait:
1- Khi TT yêu cầu TN, nó không được giữ 1 TN nào khác.
2- TT phải yêu cầu và được cấp tất cả các TN mà nó cần ngay đầu công việc.
- Với No Preemption:
1- Khi TT giữ TN mà xin thêm nhưng không được, các TN mà nó giữ phải bị tiếm quyền sử dụng và trả lại HĐH.
2- Khi TT xin thêm TN, nếu TN này đang được giữ bởi TT khác đang ở trạng thái chờ, TN của TT khác này bị tiếm quyền sử dụng để cấp cho TT đang xin.
- Với Circular Wait: Cấp TN theo một thứ tự nào đấy.
NguyenVanTu(I22A)- Tổng số bài gửi : 23
Join date : 12/03/2013
Re: Thảo luận Bài 8
ví dụ ko thực tế chổ nào vậy bạn?Bạn có thể vui lòng giải thích rõ hơn và cho thêm một ví dụ thực tế theo ý bạn được ko?mình xin bổ sung cho ví dụ của mình là giả sử trong trường hợp này 3 người đều có công việc rất quan trọng cần phải làm tại một thời điểm và nhất quyết ko ai chịu nhường ai.vokimthong đã viết:NguyenThanhQuoc(I22A) đã viết:Trong một nhà xe có một xe máy, một chìa khóa, một mũ bảo hiểm.Nếu một người muốn đi xe thì cần phải có đủ 3 tài nguyên trên(xe, chìa khóa, mũ bảo hiểm).Có 3 người(3 tiến trình) đều có nhu cầu đi xe.Người thứ nhất giành chìa khóa, người thứ hai giành xe máy, người thứ ba giành mũ bảo hiểm.Như vậy tất cả các tài nguyên đều đã bị chiếm dụng mà không một tiến trình nào hoàn tất công việc vì người thứ nhất chờ tài nguyên xe và mủ bảo hiểm, người thứ hai chờ tài nguyên chìa khóa và mũ bảo hiểm, người thứ ba chờ tài nguyên chìa khóa và xe.kết quả là các tiến trình rơi vào trạng thái deadlock.
Vi dụ đúng nhưng k thực tế lắm.....
NguyenThanhQuoc(I22A)- Tổng số bài gửi : 18
Join date : 09/03/2013
Age : 32
Đến từ : lớp TH10a3, Dh mở tp.hcm
Re: Thảo luận Bài 8
QuangMinhTuan(I22B) đã viết:Deadlock là trạng thái xảy ra khi một nhóm tiến trình ngưng hoạt động trong thời gian dài do do một hay nhiều tiến trình trong nhóm chờ mãi mãi một sự kiện (event) phát sinh bởi một tiến trình khác hoặc trong nhóm đó.
Ví dụ: A vào thư viện mượn sách để đọc, nhưng B đã mượn trước nên A phải ngồi chờ khi B đọc xong đã.
đây không phải là deadlock vì nếu là deadlock thì các tiến trình phải chờ mãi mãi. mình nghĩ thế các bác cho ý kiến nhé.
VD: 2 anh em trong một nhà cùng đi chơi cùng lúc mà trong nhà chỉ có một cái xe duy nhất, người nào cũng muốn tranh dành chiếc xe để di, không ai chiu nhường ai. dẩn tới anh em đều phải ở nhà!
BuiThucTuan(I22B)- Tổng số bài gửi : 14
Join date : 09/03/2013
Age : 34
Câu 1:Trình bày định nghĩa Deadlocks? Cho ví dụ minh họa?
- Deadlocks là tình huống kẹt của một nhóm tiến trình do mỗi tiến trình trong nhóm đều chờ một sự kiện có thể chỉ được gây ra bởi một tiến trình khác.
- VD1: 2 con dê đi qua cầu, dê trắng và dê đen đều mún mình qua cầu chẳng ai chịu nhường ai cả, và cả 2 đều mắc kẹt mãi trên cầu....(có thể tranh chấp dẫn đến xảy ra đến cả 2 con đều rơi xuống cầu)
- VD2: 2 xe đi cùng chiều qua một cây cầu hẹp, mà cầu chỉ có một làn xe, nên khi 2 xe vào đến giữa cầu thì không thể tiếp tục tiến tới nữa, xãy ra kẹt xe (deadlock) vì không xe nào chịu nhường.
- VD1: 2 con dê đi qua cầu, dê trắng và dê đen đều mún mình qua cầu chẳng ai chịu nhường ai cả, và cả 2 đều mắc kẹt mãi trên cầu....(có thể tranh chấp dẫn đến xảy ra đến cả 2 con đều rơi xuống cầu)
- VD2: 2 xe đi cùng chiều qua một cây cầu hẹp, mà cầu chỉ có một làn xe, nên khi 2 xe vào đến giữa cầu thì không thể tiếp tục tiến tới nữa, xãy ra kẹt xe (deadlock) vì không xe nào chịu nhường.
NguyenVanQuoc (I22B)- Tổng số bài gửi : 25
Join date : 12/03/2013
4 điều kiện cần để dẫn đến Deadlocks !!!!
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): ít nhất một tài nguyên phải được giữ trong chế độ
không chia sẻ; nghĩa là: chỉ một quá trình tại cùng một thời điểm có thể sử
dụng tài nguyên. Nếu một quá trình khác yêu cầu 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ờ cấp thêm tài nguyên (Hold and wait): 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 có ưu tiên (No preemption): Các tài nguyên
không thể bị đòi lại; nghĩa là, tài nguyên có thể được giải phóng chỉ tự ý
bởi quá trình đang giữ nó, sau khi quá trình đó hoàn thành tác vụ.
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ờ mà trong đó 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,…,Pn-1 đang chờ
tài nguyên đang được giữ bởi quá trình P0.
lúc trong hệ thống:
1) Loại trừ tương hỗ(Mutual exclusion): ít nhất một tài nguyên phải được giữ trong chế độ
không chia sẻ; nghĩa là: chỉ một quá trình tại cùng một thời điểm có thể sử
dụng tài nguyên. Nếu một quá trình khác yêu cầu 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ờ cấp thêm tài nguyên (Hold and wait): 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 có ưu tiên (No preemption): Các tài nguyên
không thể bị đòi lại; nghĩa là, tài nguyên có thể được giải phóng chỉ tự ý
bởi quá trình đang giữ nó, sau khi quá trình đó hoàn thành tác vụ.
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ờ mà trong đó 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,…,Pn-1 đang chờ
tài nguyên đang được giữ bởi quá trình P0.
NguyenVietDuc39 (I22B)- Tổng số bài gửi : 6
Join date : 25/03/2013
Các phương pháp xử lý Deadlock !!!!
Phần lớn, chúng ta có thể giải quyết vấn đề deadlock theo một trong ba cách:
• Chúng ta có thể sử dụng một giao thức để ngăn chặn hay tránh deadlocks, đảm
bảo rằng hệ thống sẽ không bao giờ đi vào trạng thái deadlock
• Chúng ta có thể cho phép hệ thống đi vào trạng thái deadlock, phát hiện nó và
phục hồi.
• Chúng ta có thể bỏ qua hoàn toàn vấn đề này và giả vờ deadlock không bao
giờ xảy ra trong hệ thống. Giải pháp này được dùng trong nhiều hệ điều hành,
kể cả UNIX.
• Chúng ta sẽ tìm hiểu vắn tắt mỗi phương pháp. Sau đó, chúng ta sẽ trình bày
các giải thuật một cách chi tiết trong các phần sau đây.
Để đảm bảo deadlock không bao giờ xảy ra, hệ thống có thể dùng kế hoạch
ngăn chặn hay tránh deadlock. Ngăn chặn deadlock là một tập hợp các phương pháp
để đảm bảo rằng ít nhất một điều kiện cần (trong phần VI.4.1) không thể xảy ra. Các
phương pháp này ngăn chặn deadlocks bằng cách ràng buộc yêu cầu về tài nguyên
được thực hiện như thế nào. Chúng ta thảo luận phương pháp này trong phần sau.
Ngược lại, tránh deadlock yêu cầu hệ điều hành cung cấp những thông tin bổ
sung tập trung vào loại tài nguyên nào một quá trình sẽ yêu cầu và sử dụng trong thời
gian sống của nó. Với những kiến thức bổ sung này, chúng ta có thể quyết định đối
với mỗi yêu cầu quá trình nên chờ hay không. Để quyết định yêu cầu hiện tại có thể
được thoả mãn hay phải bị trì hoãn, hệ thống phải xem xét tài nguyên hiện có, tài
nguyên hiện cấp phát cho mỗi quá trình, và các yêu cầu và giải phóng tương lai của
mỗi quá trình.
Nếu một hệ thống không dùng giải thuật ngăn chặn hay tránh deadlock thì
trường hợp deadlock có thể xảy ra. Trong môi trường này, hệ thống có thể cung cấp
một giải thuật để xem xét trạng thái của hệ thống để xác định deadlock có xảy ra hay
không và giải thuật phục hồi từ deadlock.
Nếu hệ thống không đảm bảo rằng deadlock sẽ không bao giờ xảy ra và cũng
không cung cấp một cơ chế để phát hiện và phục hồi deadlock thì có thể dẫn đến
trường hợp hệ thống ở trong trạng thái deadlock. Trong trường hợp này, deadlock
không được phát hiện sẽ làm giảm năng lực hệ thống vì tài nguyên đang được giữ bởi
những quá trình mà chúng không thể thực thi, đi vào trạng thái deadlock. Cuối cùng,
hệ thống sẽ dừng các chức năng và cần được khởi động lại bằng thủ công.
Mặc dù phương pháp này dường như không là tiếp cận khả thi đối với vấn đề
deadlock nhưng nó được dùng trong một số hệ điều hành. Trong nhiều hệ thống,
deadlock xảy ra không thường xuyên; do đó phương pháp này là rẻ hơn chi phí cho
phương pháp ngăn chặn deadlock, tránh deadlock, hay phát hiện và phục hồi deadlock
mà chúng phải được sử dụng liên tục. Trong một số trường hợp, hệ thống ở trong
trạng thái cô đặc nhưng không ở trạng thái deadlock. Như thí dụ, xem xét một quá
trình thời thực chạy tại độ ưu tiên cao nhất (hay bất cứ quá trình đang chạy trên bộ định thời biểu không trưng dụng) và không bao giờ trả về điều khiển đối với hệ điều
hành. Do đó, hệ thống phải có phương pháp phục hồi bằng thủ công cho các điều
kiện không deadlock và có thể đơn giản sử dụng các kỹ thuật đó cho việc phục hồi
deadlock.
• Chúng ta có thể sử dụng một giao thức để ngăn chặn hay tránh deadlocks, đảm
bảo rằng hệ thống sẽ không bao giờ đi vào trạng thái deadlock
• Chúng ta có thể cho phép hệ thống đi vào trạng thái deadlock, phát hiện nó và
phục hồi.
• Chúng ta có thể bỏ qua hoàn toàn vấn đề này và giả vờ deadlock không bao
giờ xảy ra trong hệ thống. Giải pháp này được dùng trong nhiều hệ điều hành,
kể cả UNIX.
• Chúng ta sẽ tìm hiểu vắn tắt mỗi phương pháp. Sau đó, chúng ta sẽ trình bày
các giải thuật một cách chi tiết trong các phần sau đây.
Để đảm bảo deadlock không bao giờ xảy ra, hệ thống có thể dùng kế hoạch
ngăn chặn hay tránh deadlock. Ngăn chặn deadlock là một tập hợp các phương pháp
để đảm bảo rằng ít nhất một điều kiện cần (trong phần VI.4.1) không thể xảy ra. Các
phương pháp này ngăn chặn deadlocks bằng cách ràng buộc yêu cầu về tài nguyên
được thực hiện như thế nào. Chúng ta thảo luận phương pháp này trong phần sau.
Ngược lại, tránh deadlock yêu cầu hệ điều hành cung cấp những thông tin bổ
sung tập trung vào loại tài nguyên nào một quá trình sẽ yêu cầu và sử dụng trong thời
gian sống của nó. Với những kiến thức bổ sung này, chúng ta có thể quyết định đối
với mỗi yêu cầu quá trình nên chờ hay không. Để quyết định yêu cầu hiện tại có thể
được thoả mãn hay phải bị trì hoãn, hệ thống phải xem xét tài nguyên hiện có, tài
nguyên hiện cấp phát cho mỗi quá trình, và các yêu cầu và giải phóng tương lai của
mỗi quá trình.
Nếu một hệ thống không dùng giải thuật ngăn chặn hay tránh deadlock thì
trường hợp deadlock có thể xảy ra. Trong môi trường này, hệ thống có thể cung cấp
một giải thuật để xem xét trạng thái của hệ thống để xác định deadlock có xảy ra hay
không và giải thuật phục hồi từ deadlock.
Nếu hệ thống không đảm bảo rằng deadlock sẽ không bao giờ xảy ra và cũng
không cung cấp một cơ chế để phát hiện và phục hồi deadlock thì có thể dẫn đến
trường hợp hệ thống ở trong trạng thái deadlock. Trong trường hợp này, deadlock
không được phát hiện sẽ làm giảm năng lực hệ thống vì tài nguyên đang được giữ bởi
những quá trình mà chúng không thể thực thi, đi vào trạng thái deadlock. Cuối cùng,
hệ thống sẽ dừng các chức năng và cần được khởi động lại bằng thủ công.
Mặc dù phương pháp này dường như không là tiếp cận khả thi đối với vấn đề
deadlock nhưng nó được dùng trong một số hệ điều hành. Trong nhiều hệ thống,
deadlock xảy ra không thường xuyên; do đó phương pháp này là rẻ hơn chi phí cho
phương pháp ngăn chặn deadlock, tránh deadlock, hay phát hiện và phục hồi deadlock
mà chúng phải được sử dụng liên tục. Trong một số trường hợp, hệ thống ở trong
trạng thái cô đặc nhưng không ở trạng thái deadlock. Như thí dụ, xem xét một quá
trình thời thực chạy tại độ ưu tiên cao nhất (hay bất cứ quá trình đang chạy trên bộ định thời biểu không trưng dụng) và không bao giờ trả về điều khiển đối với hệ điều
hành. Do đó, hệ thống phải có phương pháp phục hồi bằng thủ công cho các điều
kiện không deadlock và có thể đơn giản sử dụng các kỹ thuật đó cho việc phục hồi
deadlock.
NguyenVietDuc39 (I22B)- Tổng số bài gửi : 6
Join date : 25/03/2013
Re: Thảo luận Bài 8
Các bạn cho thêm vài ví dụ khác của Thầy để tham khảo được không! Thanks các bạn
NguyenQuocHuy (I22B)- Tổng số bài gửi : 49
Join date : 10/03/2013
Trang 1 trong tổng số 9 trang • 1, 2, 3, 4, 5, 6, 7, 8, 9
Similar topics
» THẢO LUẬN MÔN HỌC
» Thảo luận Bài 8
» Thảo luận Bài 3
» Thảo luận về đề thi HK1
» [Đề thi giữa kỳ] I22B ( 8-4-2013 )
» Thảo luận Bài 8
» Thảo luận Bài 3
» Thảo luận về đề thi HK1
» [Đề thi giữa kỳ] I22B ( 8-4-2013 )
Trang 1 trong tổng số 9 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết