Giải phỏp:
Áp dụng cơ chế truy xuất độc quyền
o Trờn tài nguyờn đú (Accnout):
Khi 1 tiến trỡnh đang sử dụng tài nguyờn thỡ cỏc tiến trỡnh khỏc khụng được sử dụng.
a. Đoạn găng
Khỏi niệm:
o Là đoạn mó lệnh cú khả năng xảy ra mõu thuẫn khi sử dụng tài nguyờn chung.
Hệ điều hành
o Cần cài đặt cỏc giải phỏp đồng bộ
Để giải quyết vấn đề độc quyền truy xuất
Quyết định: Tiến trỡnh nào sẽ được vào miền găng (thực hiện cỏc lệnh)
Khi một tiến trỡnh đang ở miền găng thỡ cỏc tiến trỡnh khỏc khụng thể vào miền găng.
Giải phỏp <BUSY WAITING>
a. Giải phỏp phần mềm
Sử dụng cỏc biến cờ hiệu (semaphore)
Sử dụng việc kiểm tra luõn phiờn
Giải phỏp của peterson
b. Giải phỏp phần cứng
Cấm ngắt
Test & set
Sử dụng cỏc biến cờ hiệu
a. í tưởng:
Cỏc tiến trỡnh chia sẻ một biến chung
o Biến này được khởi động là 0.
Một tiến trỡnh muốn vào găng:
o Trước tiờn phải kiểm tra giỏ trị của biến lock.
Nếu lock=0, tiến trỡnh đặt lại cho giỏ trị lock=1 và đi vào miền găng
Nếu lock=1, tiến trỡnh phải đợi cho đến khi lock=0.
Như vậy:
o lock=0 khụng cú tiến trỡnh nào đang ở trong miền găng
o lock=1 hiện cú một tiến trỡnh đang ở trong miền găng.
Sử dụng việc kiểm tra luõn phiờn
Giải phỏp
o Đề nghị cho hai tiến trỡnh:
Hai tiến trỡnh sử dụng chung biến turn
Khởi động turn == 0.
Nếu turn = 0
Tiến trỡnh P1 được đưa vào đoạn găng
Khi tiến trỡnh P1 rời khỏi đoạn găng, nú đặt giỏ trị turn=1 để cho phộp tiến trỡnh P2 đi vào đoạn găng.
Nếu turn = 1
Tiến trỡnh P2 được vào đoạn găng
Khi tiến trỡnh P2 vào đoạn găng, nú đặt lại giỏ trị turn=0 để cho phộp tiến trỡnh P1 vào lại đoạn găng.
Nếu một trong hai tiến trỡnh P1, P2 trong đoạn găng:
Tiến trỡnh cũn lại đi vào vũng lặp chờ biến turn thay đổi.
b. Nhận xột
Ngăn được trường hợp 2 tiến trỡnh đồng thời trong đoạn găng
Xảy ra tỡnh huống:
o Một tiến trỡnh bị ngăn vào đoạn găng bởi một tiến trỡnh bờn ngoài đoạn găng khi:
turn=0
P1 vào đoạn găng xong, đặt lại turn=1 rồi ra
Và muốn nhanh chúng trở lại miền găng
Turn=1: tiến trỡnh P2 được quyền vào đoạn găng:
Hiện P2 đang thực thi ngoài đoạn găng
=> Chưa thể đặt lại turn=0 ngay được
=> P1 chưa thể vào găng
Giải phỏp Peterson
a. Do Peterson đề nghị
b. í tưởng: kết hợp 2 giải phỏp trờn
c. Nhận xột
Ngăn chặn được tỡnh trạng truy xuất:
o Pi chỉ cú thể vào miền găng khi
in[j]=false
hoặc turn=i
o Nếu cả 2 tiến trỡnh đều muốn vào miền găng:
Thỡ in[i]=in[j]=true
Nhưng: giỏ trị của turn chỉ cú thể
Hoặc là turn=0: Tiến trỡnh P0 được vào miền găng
Hoặc là turn=1: Tiến trỡnh P1 được vào miền găng
Do vậy chỉ cú một tiến trỡnh được vào miền găng.
Cấm ngắt
a. Nhận xột:
Khụng được ưa chuộng:
o Vỡ thiếu thận trọng khi cho phộp tiến trỡnh người dựng được phộp thực hiện lệnh cấm ngắt.
Hệ thống cú nhiều CPU:
o Lệnh cấm ngắt
Cỏc tiến trỡnh hoạt động trờn cỏc CPU khỏc vẫn cú thể truy xuất đến miền găng
Kết luận về giải phỏp Busy waiting
a. Hoạt động chung:
Tất cả cỏc giải phỏp trờn:
o Đều phải thực hiện một vũng lặp để kiểm tra xem cú được vào đoạn găng khụng.
o Nếu điều kiện chưa cho phộp, tiến trỡnh phải tiếp tục chờ trong vũng lặp.
o Cỏc giải phỏp buộc tiến trỡnh:
Phải liờn tục kiểm tra điều kiện để phỏt hiện thời điểm thớch hợp để vào găng.
Cỏc giải phỏp Busy Waiting : Chờ vỡ bận.
b. Hạn chế:
Việc kiểm tra như thế tiờu thụ nhiều thời gian sử dụng CPU, do vậy tiến trỡnh đang chờ vẫn chiếm dụng CPU.
Xu hướng giải quyết vấn đề đồng bộ húa:
o Nờn trỏnh cỏc giải phỏp Busy Waiting.
4.Cỏc giải phỏp <SLEEP AND WAKEUP>
a. Khắc phục nhược điểm
Cho một tiến trỡnh chưa đủ điều kiện vào găng, chuyển sang trạng thỏi waiting
Tạm khúa tiến trỡnh, khụng cho sử dụng CPU ngay vỡ tiến trỡnh chỉ sử dụng CPU khi ở trạng thỏi running.
b. Giải phỏp
í tưởng:
o SLEEP: Khi tiến trỡnh chưa đủ điều kiện vào găng => gọi SLEEP để khúa. Đến khi cú một tiến trỡnh khỏc => gọi WAKEUP để giải phúng cho nú.
o WAKEUP: Khi một tiến trỡnh ra khỏi miền găng => gọi WAKEUP để đỏnh thức một tiến trỡnh đang chờ => tạo cơ hội cho tiến trỡnh này vào miền găng.
Chƣơng 6 : Bế Tắc ( Dealock)