TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.1 Tài nguyên găng
Trong HĐH đa nhiệm, đa chương việc chia sẻ tài nguyên cho các tiến trình, nếu HĐH mà không tổ chức tốt sử dụng tài nguyên dùng chung của các tiến trình hoạt động đồng thời thì sẽ dẫn đến việc không khai thác tài nguyên hệ thống, làm hỏng dữ liệu của các ứng dụng.
Các tiến trình hoạt động đồng thời dùng chung tài nguyên ghi vào không gian nhớ chung. Đó là biểu hiện của sự cạnh tranh tài nguyên dùng chung của các tiến trình.
Để ngăn chặn tình huống lỗi truy xuất đồng thời tài nguyên không chia sẻ cần phải áp đặt truy xuất độc quyền khi một tiến trình đang sử dụng tài nguyên thì những tiến trình khác không được truy xuất đến tài nguyên
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.1 Tài nguyên găng
Những tài nguyên mà HĐH chia sẻ cho nhiều tiến trình hoạt động đồng thời dùng chung dẫn đến sự tranh chấp giữa các tiến trình gọi là tài nguyên găng
Tài nguyên găng là tài nguyên mà trong một khoảng thời gian nhất định thì chỉ phục vụ hợp lý cho một số hữu hạn các tiến trình
Tài nguyên găng có thể tài nguyên phần cứng, phần mềm, tài nguyên phân chia được, không phân chia được
Ví dụ: Trong ứng dụng kế toán hực hiện thao tác rút tiền trong tài khoản người dùng thì phải khởi tạo một tiến trình gọi là rút tiền và tiến trình thực hiện được khi mà số tiền cần rút phải nhỏ hơn số tiền còn lại trong tài khoản và có thể có nhiều người sử dụng đồng thời thực hiện thao tác rút tiền từ tài khoản chung của hệ thống
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.1 Tài nguyên găng
Có 2 tiến trình rút tiền P1 và P2 hoạt động đồng thời cùng chia sẻ không gian nhớ lưu trữ biến Tài khoản cho biết số tiền còn lại trong tài khoản dùng chung. Mỗi tiến trình rút tiền khi muốn rút một khoản tiền từ tài khoản (Tiền rút) thì phải thực hiện kiểm tra tài khoản sau đó mới rút tiền
IF (Tài khoản - Tiền rút >= 0)
Tài khoản:= Tài khoản - Tiền rút Else
Thông báo lỗi không thể rút tiền EndIf;
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.1 Tài nguyên găng
Giả sử tại một thời điểm nào đó có:
• Trong tài khoản còn 800 ngàn đồng (Tài khoản = 800)
• Tiến trình rút tiền P1 cần rút 500 ngàn đồng (Tiền rút = 500).
• Tiến trình rút tiền P2 cần rút 400 ngàn đồng (Tiền rút = 400).
• Tiến trình P1 và P2 đồng thời rút tiền
Điều này không thể xảy ra vì số tiền cần rút là 500+400>800. Nhưng trong môi trường đa nhiệm, đa người sử dụng nếu HĐH không giám sát tốt việc sử dụng chung tài nguyên của các tiến trình hoạt động đồng thời thì có thể xảy ra và tiến trình P1, P2 thực hiện thành công trong quá trình rút tiền mà HĐH cũng như ứng dụng không phát hiện ra. Quá trình rút tiền của P1 và P2 diễn ra như sau:
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.1 Tài nguyên găng
P1 được cấp Processor để thực hiện rút tiền, P1 kiểm tra tài khoản:
Tài khoản - Tiền rút = 800 -500 = 300 > 0, P1 ghi nhận điều này và chuẩn bị rút tiền
Nhưng P1 chưa kịp rút tiền thì HĐH thu hồi Processor và cấp cho P2. P1 trở lại trạng thái ready
P2 nhận processor chuyển sang trạng thái running thực hiện rút tiền thì kiểm tra: Tài khoản - Tiền rút = 800 - 400 = 400 >= 0, P2 ghi nhận điều này và thực hiện rút tiền
Tài khoản = Tài khoản - Tiền rút = 800 - 400 = 400
P2 thực hiện xong rút tiền trả processor lại cho HĐH cấp cho P1 tái kích hoạt để tiếp tục rút tiền
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.1 Tài nguyên găng
P1 hoạt động trở lại thực hiện thao tác rút tiền mà không thực hiện kiểm tra nữa (vì đã kiểm tra rồi)
Tài khoản - Tiền rút = 800 -500 = 300 > 0
Nhưng thực chất thì tài khoản 400-500=-100
Nhưng P1 vẫn thực hiện được thao tác rút tiền và kết thúc
Như vậy cả P1 và P2 đều thực hiện rút tiền thành công mà không có một thông báo lỗi nào. Đây là lỗi nghiêm trọng vì không thể rút tiền nếu như số tài khoản còn nhỏ hơn số tiền cần rút
Qua trên ta thấy nếu cho nhiều hơn hai tiến trình cùng truy xuất vào một vùng nhớ chung kết quả phụ thuộc vào sự điều phối tiến trình của hệ thống, được gọi là các tình huống tranh đoạt điều khiển
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.1 Tài nguyên găng
Nguyên nhân của lỗi này không phải do P1, P2 đồng thời truy xuất tài khoản mà do 2 thao tác kiểm tra và thực hiện rút tiền bị tách rời nhau. HĐH phải làm cho 2 thao tác này đừng tách rời nhau thì không gây ra lỗi này
Qua ví dụ trên ta thấy để ngăn chặng các tình huống như trên thì HĐH phải xác lập cơ chế độc quyền truy xuất trên tài nguyên dùng chung nghĩa là tại một thời điểm chỉ có duy nhất một tiến trình truy xuất. Nếu có nhiều tiến trình hoạt động đồng thời cùng yêu cầu truy xuất tài nguyên dùng chung thì chỉ có một tiến trình được chấp nhận truy xuất, các tiến trình khác phải xếp hàng chờ để được truy xuất sau
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.1 Tài nguyên găng
Nguyên nhân xung đột của các tiến trình hoạt động đồng thời khi sử dụng tài nguyên găng là: hoạt động độc lập với nhau và không có trao đổi thông tin với nhau nhưng thi hành có liên quan với nhau.
Để đảm bảo tại một thời điểm chỉ có một tiến trình xử lý lệnh trong miền găng phải thỏa mãn các điều kiện:
• Không có 2 tiến trình ở trong miền găng cùng một lúc
• Một tiến trình tạm dừng bên ngoài miền găng không được ngăn cản các tiến trình khác vào miền găng
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.2 Đoặn găng
Đoạn code trong các chương trình dùng để truy cập đến các vùng nhớ chia sẻ, các tập tin chia sẻ được gọi là các đoạn găng
Ví dụ đoạn code sau là đoạn găng
{ IF (Tài khoản - Tiền rút >= 0)
Tài khoản:= Tài khoản - Tiền rút }
Để khắc phục các hạn chế lỗi xảy ra thì HĐH phải điều khiển :
• Tại một thời điểm chỉ có 1 tiến trình vào miền găng
• Các tiến trình muốn vào miền găng phải chờ ngoài miền găng
• Tiến trình ra khỏi miền găng phải báo cho HĐH biết để cho các tiến trình khác vào miền găng
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.2 Đoặn găng
HĐH tổ chức cho mọi tiến trình vào đoạn găng một cách hợp lý công việc này gọi là công tác điều độ tiến trình qua đoạn găng
Công tác điều độ qua đoạn găng phải được kết hợp giữa vi xử lý, HĐH và người lập trình :
• Vi xử lý đưa ra các chỉ thị
• HĐH cung cấp các công cụ
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG
2.4.2 Đoặn găng
Program MultualExclution;
Const ; N = ….. /*số lượng tiến trình */ Procedure P(i:integer);
Begin Repeat
EnterCritical(R); {kiểm tra và xác lập quyền vào đoạn găng} <Đoạn găng của P>;
ExitCritical(R); {xác lập khi rời đoạn găng}
<Đoạn không găng của P>; Until .F.
End;
BEGIN *chương trình chính chứa các tiến trình đồng thời*} PerBegin P(1); ….. P(n); ParEnd; END.
TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNGTÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG TÀI NGUYÊN GĂNG VÀ ĐOẠN GĂNG