Chương 3 XỬ LÝ CÁC TIẾN TRÌNH ĐỒNG THỜI
3.2 Xử lý tranh chấp hệ thống
3.2.1 Vấn đề tranh chấp hệ thống
Nếu cĩ nhiều q trình tồn tại trong hệ thống thì xảy ra việc tranh chấp dữ
liệu.
Thí dụ 1: Cĩ 2 tiến trình P1 và P2 cùng hoạt P1 P2
động song song: 1. a:= 10 1. read(a) Parbegin 2. b:=20 2. a:=a+1 P1; 3. a:=a+b 3. print(a)
P2; Parend
Nếu P1 và P2 chạy đồng thời thì kết quả khơng xác định trước. Thí dụ 2: Cĩ 2 tiến trình P và Q cùng hoạt động song song Proccess P a:=100 Proccess Q
a:= a+1 a:= a +2 EndProcces EndProccess
1. LOAD A,R1 4. LOAD A,R1 2. INC R1,1 5. INC R1,1 3. STO R1,A 6. STO R1,A
Các tiến trình này cĩ các lệnh hợp ngữ tương ứng như trên. Ta thực hiện các lệnh theo thứ tự như sau : 1 , 4 ,5 ,6 ,2 , 3 ta cĩ kết quả là a= 101 và khơng bao giờ bằng 103. Để hạn chế việc sử dụng dữ liệu và cập nhật các dữ liệu khơng thống nhất ta giải quyết những vấn đề tranh chấp dữ liệu. Trong các tình huống trên việc đọc và ghi dữ liệu của 2 tiến trình đồng thời kết quả phụ thuộc vào sự lập lịch CPU và được gọi là tình huống tranh đoạt điều khiển ( race condition)
3.2.2 Miền găng (Gantt):
Để ngăn chặn các tình huống lỗi cĩ thể xảy ra khi nảy sinh các tiến trình truy xuất đồng thời một tài nguyên khơng thể chia sẻ, cần phải truy xuất độïc quyền trên tài nguyên đĩ. Nếu cĩ nhiều tiến trình truy xuất và cĩ thể dẫn đến tranh chấp gọi
là vùng tranh chấp (criticial section) hay miền găng. Nguyên tắc chung để tránh tranh chấp:
- Một tiến trình đang thao tác trên tài nguyên thì tiến trình khác phải đợi cho đến khi tiến tình đang thao tác hồn tất cơng việc.
- Loại trừ tương hỗ ( mutual exclusion ) : khơng cĩ hai tiến trình trong vùng găng
criticial section
3.2.3 Giao thức giải quyết tranh chấp
• Giải quyết tranh chấp
Khi một tiến trình vào thao tác trên vùng tranh chấp thì các tiến trình khác muốn vào vùng tranh chấp thì phải đợi. Khi tiến trình trong vùng tranh chấp ra khỏi vùng tranh chấp thì một trong số các tiến trình đang đợi được vào vùng tranh chấp , cịn các tiến trình khác phải tiếp tục đợi .
• Mỗi tiến trình tham gia vào vùng tranh chấp thực hiện các cơng việc như sau : begin … enter_mutual_exclusion criticial_section ; exit_mutual_exclussion … end;
• Nguyên tắc hoạt động khi vào vùng găng
_ Khi một tiến trình gọi enter_mutual_exclusion và khơng cĩ tiến trình nào trong vùng tranh chấp thì tiến trình thứ nhất được vào vùng tranh chấp để thao tác. _ Nếu cĩ một tiến trình ở trong vùng tranh chấp tiến trình thực thi
enter_mutual_exclusion phải đợi cho đến khi tiến trình ở trong vùng tranh chấp
thực thi exit_mutual_exclusion xong thì nĩ mới vào được trong vùng tranh chấp. _ Nếu cĩ nhiều tiến trình cùng thực hiện enter_mutual_exclusion thì chỉ cĩ một quá trình được chọn vào vùng tranh chấp.
3.2.4 Nguyên tắc giải quyết tranh chấp:
• Các lệnh phần mềm khơng thể phân chia nhỏ được .
• Các tiến trình đồng thời cĩ thể khơng đồng bộ nhau .
• Q trình ngồi vùng tranh chấp khơng cĩ quyền cấm các tiến trình khác xin vào vùng tranh chấp .
• Tiến trình khơng bị trì hỗn vơ hạn định khi vào vùng tranh chấp .