Nhu cầu đồng hóa(synchronisation) Nhu cầu đồng hóa(synchronisation) Bởi: Giảng viên Trần Hạnh Nhi Trong hệ thống cho phép tiến trình liên lạc với nhau, hệ điều hành cần cung cấp kèm theo chế đồng hóa để bảo đảm hoạt động tiến trình đồng hành không tác động sai lệch đến lý sau đây: Yêu cầu độc quyền truy xuất (Mutual exclusion) Các tài nguyên hệ thống phân thành hai loại: tài nguyên chia sẻ cho phép nhiều tiến trình đồng thời truy xuất, tài nguyên chia sẻ chấp nhận ( hay số lượng hạn chế ) tiến trình sử dụng thời điểm Tính chia sẻ tài nguyên thường có nguồn gốc từ hai nguyên nhân sau đây: Đặc tính cấu tạo phần cứng tài nguyên không cho phép chia sẻ Nếu nhiều tiến trình sử dụng tài nguyên đồng thời, có nguy xảy kết không dự đoán hoạt động tiến trình tài nguyên ảnh hưởng lẫn Để giải vấn đề, cần bảo đảm tiến trình độc quyền truy xuất tài nguyên, nghĩa hệ thống phải kiểm soát cho thời điểm, có tiến trình quyền truy xuất tài nguyên chia sẻ Yêu cầu phối hợp (Synchronization) Nhìn chung, mối tương quan tốc độ thực hai tiến trình hệ thống biết trước, điều phụ thuộc vào nhiều yếu tố động tần suất xảy ngắt tiến trình, thời gian tiến trình cấp phát xử lý… Có thể nói tiến trình hoạt động không đồng với Như ng có tình tiến trình cần hợp tác việc hoàn thành tác vụ, cần phải đồng hóa hoạt động tiến trình , ví dụ tiến trình xử lý tiến trình khác kết thúc công việc … 1/7 Nhu cầu đồng hóa(synchronisation) Bài toán đồng hoá Vấn đề tranh đoạt điều khiển (race condition) Giả sử có hai tiến trình P1 P2 thực công việc kế toán, chia sẻ vùng nhớ chung lưu trữ biến taikhoan phản ánh thông tin tài khoản Mỗi tiến trình muốn rút khoản tiền tienrut từ tài khoản: if (taikhoan - tienrut >=0) taikhoan = taikhoan - tienrut; else error(« khong the rut tien ! »); Giả sử tài khoản 800, P1 muốn rút 500 P2 muốn rút 400 Nếu xảy tình sau : Sau kiểm tra điều kiện (taikhoan - tienrut >=0) nhận kết 300, P1 hết thời gian xử lý mà hệ thống cho phép, hệ điều hành cấp phát CPU cho P2 P2 kiểm tra điều kiện trên, nhận kết 400 (do P1 chưa rút tiền) rút 400 Giá trị taikhoan cập nhật lại 400 Khi P1 tái kích hoạt tiếp tục xử lý, không kiểm tra lại điều kiện (taikhoan - tienrut >=0)-vì kiểm tra lượt xử lý trước- mà thực rút tiền Giá trị taikhoan lại cập nhật thành -100 Tình lỗi xảy ! Các tình tương tự - xảy có nhiều hai tiến trình đọc ghi liệu vùng nhớ chung, kết phụ thuộc vào điều phối tiến trình hệ thống- gọi tình tranh đoạt điều khiển (race condition) Miền găng (critical section) Để ngăn chặn tình lỗi nảy sinh tiến trình truy xuất đồng thời tài nguyên chia sẻ, cần phải áp đặt truy xuất độc quyền tài nguyên : tiến trình sử dụng tài nguyên, tiến trình khác không truy xuất đến tài nguyên Đoạn chương trình có khả xảy mâu thuẫn truy xuất tài nguyên chung gọi miền găng (critical section) Trong ví dụ trên, đoạn mã : 2/7 Nhu cầu đồng hóa(synchronisation) if (taikhoan - tienrut >=0) taikhoan = taikhoan - tienrut; tiến trình tạo thành miền găng Có thể giải vấn đề mâu thuẫn truy xuất bảo đảm thời điểm có tiến trình xử lý lệnh miền găng Một phương pháp giải tốt toán miền găng cần thõa mãn điều kiện sau : Không có hai tiến trình miền găng lúc Không có giả thiết đặt cho liên hệ tốc độ tiến trình, số lượng xử lý hệ thống Một tiến trình tạm dừng bên miền găng không ngăn cản tiến trình khác vào miền găng Không có tiến trình phải chờ vô hạn để vào miền găng Tóm tắt Một số tiến trình hệ thống có nhu cầu trao đổi thông tin để phối hợp hoạt động, tiến trình có không gian địa độc lập nên viêc liên lạc thực thông qua chế hệ điều hành cung cấp Một số chế trao đổi thông tin tiến trình : Tín hiệu : thông báo xảy kiện Pipe : truyền liệu không cấu trúc Vùng nhớ chia sẻ : cho phép nhiều tiến trình truy cập đến vùng nhớ Trao đổi thông điệp : truyền liệu có cấu trúc, vận dụng hệ phân tán Socket : chuẩn hoán việc liên lạc hệ thống khác biệt Khi tiến trình trao đổi thông tin, chia sẻ tài nguyên chung, cần phải đồng hoá hoạt động chúng chủ yếu yêu cầu độc quyền truy xuất phối hợp hoạt động 3/7 Nhu cầu đồng hóa(synchronisation) Miền găng đoạn lệnh chương trình có khả phát sinh mâu thuẫn truy xuất Để không xảy mâu thuẫn truy xuất, cần đảm bảo thời điểm có tiến trình vào miền găng Củng cố học Các câu hỏi cần trả lời sau học : Các chế trao đổi thông tin : tình sử dụng, ưu, khuyết ? Các yêu cầu đồng hoá ? Bài tập Phân tích toán sau xác định yêu cầu đồng hoá, miền găng : Bài 1.Bài toán Tạo phân tử H O Đồng hoạt động phòng thí nghiệm sử dụng nhiều tiến trình đồng hành sau để tạo phân tử H2O: MakeH() // Mỗi tiến trình MakeH tạo nguyên tử H{ Make-Hydro();} MakeO() // Mỗi tiến trình MakeO tạo nguyên tử O{ Make-Oxy();} MakeWater() /* Tiến trình MakeWater hoạt động đồng hành với tiến trình MakeH, MakeO, chờ có đủ H O để tạo H2O */{ while (T) Make-Water(); //Tạo phân tử H2O} Bài 2.Bài toán Cây cầu cũ Để tránh sụp đổ, người ta có cho phép tối đa xe lưu thông đồng thời qua cầu cũ Hãy xây dựng thủ tục ArriveBridge(int direction) ExitBridge() kiểm soát giao thông cầu cho : Tại thời điểm, cho phép tối đa xe lưu thông cầu Tại thời điểm, cho phép tối đa xe lưuthông hướng cầu Mỗi xe đến đầu cầu gọi ArriveBridge(direction) để kiểm tra điều kiện lên cầu, qua cầu gọi ExitBridge() để báo hiệu kết thúc Giả sử hoạt động xe mô tả tiến trình Car() sau đây: 4/7 Nhu cầu đồng hóa(synchronisation) Car(int direction) /* direction xác định hướng di chuyển xe.*/{ RuntoBridge(); // Đi phía cầuArriveBridge(direction);PassBridge(); // Qua cầuExit Bridge();RunfromBridge(); // Đã qua cầu } Bài Bài toán Qua sông Để vượt qua sông, nhân viên Microsof Linux hacker sử dụng bến sông phải chia sẻ số thuyền đặc biệt Mỗi thuyền cho phép chở lần người, phải có đủ người khởi hành Để bảo đảm an toàn cho phía, cần tuân thủ luật sau : a Không chấp nhận nhân viên Microsoft Linux hacker thuyền b Ngược lại, không chấp nhận Linux hacker nhân viên Microsoft thuyền c Tất trường hợp kết hợp khác hợp pháp d Thuyền khởihành có đủ hành khách Cần xây dựng thủ tục HackerArrives() EmployeeArrives() gọi tương ứng hacker nhân viên họ đến bờ sông để kiểm tra điều kiện có cho phép họ xuống thuyền không ? Các thủ tục xếp người thích hợp lên thuyền Những người lên thuyền thuyền chưa đầy phải chờ đến người thứ xuống thuyền khởi hành qua sông (Không quan tâm đến số lương thuyền hay việc thuyền qua sông trở lại…Xem có thuyền để xếp theo yêu cầu hợp lệ) Giả sử hoạt động hacker mô tả tiến trình Hacker() sau đây: Hacker(){ RuntoRiver(); // Đi đến bờ sôngHackerArrives (); // Kiểm tra điều kiện xuống thuyềnCrossRiver(); // Khởi hành qua sông } hoạt động nhân viên mô tả tiến trình Employee() sau đây: Employee(){ 5/7 Nhu cầu đồng hóa(synchronisation) RuntoRiver(); // Đi đến bờ sôngEmployeeArrives (); // Kiểm tra điều kiện xuống thuyềnCrossRiver(); // Khởi hành qua sông } Bài Bài toán Điều phối hành khách xe bus Hãy tưởng tượng bạn chịu trách nhiệm kiểm soát hành khách lên xe bus trạm dừng Mỗi xe bus có đủ chỗ cho 10 hành khách Trong chỗ dành cho khách ngồi xe lăn, chỗ lại dành cho khách bình thường Công việc bạn cho khách lên xe theo qui định chỗ, xe đầy khách khởi hành Có thể có nhiều xe nhiều hành khách vào bến lúc, nguyên tắc điều phối xếp khách vào đầy xe, cho xe khởi hành điều phối cho xe khác Giả sử hoạt động điều phối khách bạn cho xe bus mô tả qua tiến trình GetPassengers(); hoạt động hành khách tùy loại mô tả tiến trình WheelPassenger() NonWheelPassenger() sau , sửa chữa đoạn code, sử dụng chế semaphore để thực nguyên tắc đồng hoá cần thiết GetPassenger(){ ArriveTerminal(); // tiếp nhận xe vào bếnOpenDoor(); // mở cửa xe, thủ tục xem cófor (int i=0; i ... đổi thông tin, chia sẻ tài nguyên chung, cần phải đồng hoá hoạt động chúng chủ yếu yêu cầu độc quyền truy xuất phối hợp hoạt động 3/7 Nhu cầu đồng hóa(synchronisation) Miền găng đoạn lệnh chương... khuyết ? Các yêu cầu đồng hoá ? Bài tập Phân tích toán sau xác định yêu cầu đồng hoá, miền găng : Bài 1.Bài toán Tạo phân tử H O Đồng hoạt động phòng thí nghiệm sử dụng nhiều tiến trình đồng hành sau... hướng cầu Mỗi xe đến đầu cầu gọi ArriveBridge(direction) để kiểm tra điều kiện lên cầu, qua cầu gọi ExitBridge() để báo hiệu kết thúc Giả sử hoạt động xe mô tả tiến trình Car() sau đây: 4/7 Nhu cầu