5 .4Một số bài toỏn đồng bộ
5.7 Trao đổi thụng điệp (cơ chế IPC)
Những cơ chế đồng bộ trờn đũi hỏi cỏc tiến trỡnh cú biển dựng chung. Trong phần này, trỡnh bày cơ chế truyền thụng liờn tiến trỡnh cho phộp cỏc tiến trỡnh trao đổi dữ liệu và đồng bộ hoạt động thụng qua việc chuyển thụng điệp. Thụng điệp (message) là một khối thụng tin theo khuụn dạng nào đú (đó được thống nhất trước) được trao đổi giữa hai tiến trỡnh. Cơ chế bảo vệ bộ nhớ trong cỏc HĐH hiện đại khụng cho cỏc tiến trỡnh xõm nhập dự vụ tỡnh hay cố ý vào khụng gian nhớ của tiến trinh khỏc. Để thực hiện trao đụi thụng tin, HĐH đúng vai trũ trung chuyển thụng điệp. IPC là cơ chế cho phộp tiến trỡnh sao chộp nội dung thụng tin muốn gửi vào thụng điệp và sau đú HĐH sao chộp nội dung thụng điệp vào khụng gian địa chỉ tiến trỡnh nhận (Hỡnh 6.21).
Hỡnh 38 Cơ chế truyền thồn liờn tiến trỡnh
5.6.1 Hộp thƣ
Hỡnh 5.17 minh họa việc thụng tin được sao chộp trực tiếp sang khụng gian địa chỉ của tiến trỡnh nhận, mà phớa nhận cú thể khụng biết sự kiện này xảy ra. Cú thể trỏnh điều này bằng cỏch khụng chuyển thụng tin trừ khi phớa nhận đưa ra yờu cầu nhận tường minh. HĐH cú thể giữ tạm thụng điệp ở hộp thư trước khi sao chộp thụng tin sang khụng gian địa chỉ của tiến trỡnh nhận. Hộp thư cú thể để ở khụng gian HĐH (Hỡnh 6.22b) hoặc khụng gian địa chỉ tiến trỡnh nhận (Hỡnh 6.22a). Nếu đặt ở khụng gian người nhận, thủ tục nhận cú thể cài đặt bằng thư viện người dựng và trỡnh biờn dịch và bộ tài phải cấp phỏt bộ nhớ làm hộp thư. Tiến trỡnh
người dựng khi chạy cú thể vụ tỡnh phỏ hỏng hộp thư. Nếu hộp thư đặt trong khụng gian HĐH, phớa nhận sẽ chi nhận được thụng điệp khi tường minh gọi thủ tục nhận. Hộp thư sẽ khụng bị tiến trỡnh người dựng thay đổi (do đặt trong khụng gian HĐH), nhưng điều này lại khiến HĐH phải tốn bộ nhớ làm hộp thư.
Hỡnh 39 Hộp thư
- Chuẩn thụng điệp: Để hai bờn cú thể hiểu nhau, thụng điệp phải tuõn theo một quy lắc nào đấy. Thụng thường, thụng điệp cú tiờu đề chứa cỏc thụng tin liờn quan đến thụng điệp (chẳng hạn định danh tiến trỡnh gửi, nhận, kớch thước thụng điệp,...). - Thao tỏc gửi và nhận: Dung lượng của hộp thư là số lượng thụng điệp tối đa hộp thư cú thể chứa. Thuộc tớnh này cú thể nhận 3 giỏ trị:
• Dung lƣợng 0: Hộp thư khụng thể cỏ thụng điệp đợi nhận. Tiến trỡnh gửi phải đợi đến khi tiến trỡnh phớa bờn kia nhận được thụng điệp. Hai tiến trỡnh phải đồng bộ húa khi truyền thụng điệp.
• Dung lƣợng hữu hạn: Hộp thư kớch thước n cú thể chứa tối đa n thụng điệp. Nếu hộp thư chưa đầy, thụng điệp mới gửi được đặt trong hộp thư (cú thể chớnh thụng điệp hoặc địa chi thụng điệp được đặt vào hộp thư). Sau đú tiến trỡnh gửi cú thể tiếp tục thực hiện cụng việc của mỡnh. Khi hộp thư đầy, tiến trỡnh gửi phải đợi cho đến khi hộp thư cú chỗ trống.
• Dung lƣợng vụ hạn: Mọi thụng điệp cú thể được đặt trong hộp thư. Tiến trỡnh gửi
khụng bao giờ phải ngừng.
Trường hợp dung lượng 0 được gọi là chuyển thụng điệp khụng cú bộ đệm; cũn hai trường hợp kia là bộ đệm tự động. Trong trường hợp dung lượng khỏc 0 , sau khi gửi thành cụng thụng điệp, tiến trỡnh khụng xỏc định dược khi nào thụng điệp đến đớch. Nếu thụng tin này quan trọng trong quỏ trỡnh tớnh toỏn, tiến trỡnh gửi phải hỏi tiến trỡnh nhận một cỏch tường minh để biết khi nào thụng điệp đến đớch. Vớ dụ, tiến trỡnh p gửi thụng điệp đến Q và cú thể tiếp tục thực thi chỉ khi thụng điệp đến đớch. Tiến trỡnh p thực hiện hai lệnh sau: Send(Q, mess) và Receive(Q, mess), cũn tiến trỡnh Q thực thi hai lệnh; Receive(P, mess) và Send(P, ack). Kiểu giao tiếp này được gọi là giao tiếp đồng bộ. Cú một trường hợp đặc biệt khụng nằm hồn tồn trong ba giải phỏp nờu trờn: • Sau khi gửi thụng điệp, tiến trỡnh vẫn tiếp tục thực thi. Tuy nhiờn, tiến trỡnh nhận chưa nhận thụng điệp mà tiến trỡnh gửi lại tiếp tục gửi tiếp thụng điệp khỏc, thỡ thụng điệp đầu tiờn bị mất. Ưu điểm của phương phỏp này là thụng điệp lớn khụng bị lặp nhiều lần. Nhược điểm là làm phức tạp cụng việc lập trỡnh. Cỏc tiến trỡnh cần đồng bộ húa một cỏch tường minh để đảm bảo thụng điệp đến đớch và cả bờn gửi lẫn bờn nhận khụng đồng thời thao tỏc trờn bộ đệm.
• Tiến trỡnh sau khi gửi thụng điệp sẽ đợi cho đến khi phớa bờn kia trả lời. Phương phỏp này được sử dụng trong HĐH Thoth. Thụng điệp cú kớch thước cố định (8 từ). Tiến trỡnh p sau khi gửi thụng điệp sẽ bị phong tỏa cho đến khi phớa nhận nhận được thụng điệp và gửi thụng điệp trả lời reply(P, mess). Thụng điệp trả lời sẽ nằm đố lờn vựng đệm của thụng điệp gốc. Điểm khỏc biệt duy nhất giữa thụng điệp gửi và trà lời là thụng điệp gửi làm tiến trỡnh gửi bị phong tỏa, cũn thụng điệp trả lời làm cả hai tiến trỡnh tiếp tục hoạt động.
Phương thức giao tiếp đồng bộ này cú thể dễ dàng mở rộng thành hệ thống gọi thủ tục từ xa (Remote Procedure Call - RPC) với đầy đủ chức năng. Mọi hệ thống RPC đều dựa trờn một ý tưởng là, trong một hệ thống cú một CPU, lời gọi thủ tục hay chương trỡnh con giống như việc chuyển thụng điệp, tiến trinh gửi sẽ bị treo cho đến khi tiến trỡnh nhận gửi thụng điệp phản hồi biờn nhận. Sau này cú thể thấy RPC cú thể mở rộng cho phộp cỏc tiến trỡnh trờn cỏc mỏy tớnh khỏc nhau cú thể phối họp làm việc với nhau.
CHƢƠNG 6. TREO MÁY DEADLOCK
Một vấn đề gõy nhiều khú khăn đối với cỏc tiến trỡnh đồng thời là tỡnh trạng
bế tắc (deadlock). Bế tắc là tỡnh trạng một nhúm tiến trỡnh cú cạnh tranh về tài
nguyờn hay cú hợp tỏc phải dừng (phong tỏa) vụ hạn. Lý do dừng vụ hạn của nhúm tiến trỡnh là do tiến trỡnh phải chờ đợi một sự kiện chỉ cú thể sinh ra bởi tiến trỡnh khỏc cũng đang trong trạng thỏi chờ đợi của nhúm.
Để minh họa cho tỡnh huống xảy ra bế tắc, ta xột vớ dụ sau. Hai tiến trỡnh P và Q thực hiện đồng thời. Mỗi tiến trỡnh cần sử dụng đồng thời hai tài nguyờn X và Y trong một khoảng thời gian nhất định. Tài nguyờn X và Y chỉ cú khả năng phục vụ một tiến trỡnh tại một thời điểm. Để sử dụng tài nguyờn, mỗi tiến trỡnh cần thực hiện thao tỏc yờu cầu tài nguyờn Request, sau khi thực hiện xong, tiến trỡnh giải phúng tài nguyờn bằng thao tỏc Release.
6.1 Điều kiện xảy ra bế tắc
Tỡnh trạng bế tắc xẩy ra khi bốn điều kiện sau đồng thời thỏa món:
1) Loại trừ tƣơng hỗ. Điều kiện này nghĩa là cú một tài nguyờn nguy hiểm,
tức là tài nguyờn mà tại mỗi thời điểm chỉ duy nhất một tiến trỡnh được sử dụng. Tiến trỡnh khỏc yờu cầu tài nguyờn này sẽ phải dừng lại chờ đến khi tài nguyờn được giải phúng.
2) Giữ và chờ. Tiến trỡnh giữ tài nguyờn trong khi chờ đợi, chẳng hạn chờ
đợi để được cấp thờm tài nguyờn khỏc.
3) Khụng cú phõn phối lại (no preemption). Tài nguyờn do tiến trỡnh giữ
khụng thể phõn phối lại cho tiến trỡnh khỏc trừ khi tiến trỡnh đang giữ tự nguyện giải phúng tài nguyờn.
4) Chờ đợi vũng trũn. Tồn tại nhúm tiến trỡnh P1, P2, …, Pn sao cho P1 chờ
đợi tài nguyờn do P2 đang giữ, P2 chờ tài nguyờn do P3 đang giữ, …, Pn chờ tài nguyờn do P1 đang giữ.
Bốn điều kiện trờn là cần và đủ để xẩy ra bế tắc. Cần lưu ý rằng điều kiện 2 là hệ quả của điều kiện 4 và điều kiện 3, nhưng vẫn được tỏch riờng để thuận lợi cho việc tỡm hiểu cơ chế xử lý bế tắc trỡnh bày trong cỏc phần sau.
Dựa trờn đặc điểm và điều kiện xảy ra bế tắc, cú thể giải quyết vấn đề bế tắc theo những cỏch sau:
- Ngăn ngừa (deadlock prevention): đảm bảo để một trong bốn điều kiện xẩy ra bế tắc khụng bao giờ thỏa món. Giải phỏp này cú thể thực hiện bằng cỏch sử dụng một số quy tắc để hạn chế cỏch yờu cầu tài nguyờn của tiến trỡnh.
- Phũng trỏnh (deadlock avoidance): cho phộp một số điều kiện bế tắc được thỏa món nhưng đảm bảo để khụng đạt tới điểm bế tắc.
- Phỏt hiện và giải quyết (deadlock detection): cho phộp bế tắc xẩy ra, phỏt
hiện bế tắc và khụi phục hệ thống về tỡnh trạng khụng bế tắc.
Trờn thực tế, hệ điều hành hiện nay khụng sử dụng giải phỏp nào trong số này, tức là khụng làm gỡ với bế tắc. Nhiệm vụ xử lý bế tắc do cỏc tiến trỡnh tự đảm nhiệm.
6.2 Ngăn ngừa bế tắc
Ngăn ngừa bế tắc (deadlock prevention) là đảm bảo để ớt nhất một trong bốn điều kiện trỡnh bày trong phần trước khụng xẩy ra, tức là loại trừ trước khả năng xảy ra bế tắc. Bốn điều kiện xẩy ra bế tắc cú thể ngăn ngừa như sau:
1) Loại trừ tƣơng hỗ
Cú thể trỏnh loại trừ tương hỗ đối với những tài nguyờn cho phộp nhiều tiến trỡnh sử dụng một lỳc vớ dụ cỏc file trong chế độ đọc. Tuy nhiờn, trờn thực tế luụn luụn tồn tại tài nguyờn khụng cú khả năng chia sẻ đồng thời như vậy và cần đảm bảo loại trừ tương hỗ khi sử dụng chỳng. Do vậy khụng thể ngăn ngừa điều kiện về loại trừ tương hỗ.
2) Giữ và chờ
Cú hai cỏch ngăn ngừa điều kiện này. Cỏch thứ nhất là yờu cầu tiến trỡnh phải nhận đủ toàn bộ tài nguyờn cần thiết trước khi thực hiện tiếp, nếu khụng nhận đủ, tiến trỡnh bị phong tỏa để chờ cho đến khi cú thể nhận đủ tài nguyờn. Cỏch này thường khụng hiệu quả do tiến trỡnh phải chờ đợi rất lõu để lấy đủ tài nguyờn trong khi cú thể thực hiện với một số tài nguyờn được cấp. Ngoài ra tiến trỡnh sẽ giữ toàn bộ tài nguyờn đến khi thực hiện xong, kể cả tài nguyờn chưa cần đến, gõy lóng phớ tài nguyờn.
Cỏch thứ hai là tiến trỡnh chỉ được yờu cầu tài nguyờn nếu tiến trỡnh khụng giữ tài nguyờn nào khỏc. Trước khi tiến trỡnh yờu cầu thờm tài nguyờn, tiến trỡnh phải giải phúng tài nguyờn đó được cấp và yờu cầu lại (nếu cần) cựng với tài nguyờn mới.
3) Khụng cú phõn phối lại
Điều kiện này cú thể ngăn ngừa như sau. Khi một tiến trỡnh yờu cầu tài nguyờn nhưng khụng được do đó bị cấp phỏt, hệ điều hành sẽ thu hồi lại toàn bộ tài nguyờn tiến trỡnh đang giữ. Tiến trỡnh chỉ cú thể thực hiện tiếp sau khi lấy được tài nguyờn cũ cựng với tài nguyờn mới yờu cầu.
Một cỏch thực hiện khỏc là khi tiến trỡnh yờu cầu tài nguyờn, nếu tài nguyờn cũn trống, ta cấp phỏt ngay. Nếu tài nguyờn do tiến trỡnh khỏc giữ và tiến trỡnh này đang chờ cấp thờm tài nguyờn thỡ thu hồi lại để cấp cho tiến trỡnh yờu cầu. Nếu hai điều kiện trờn đều khụng thỏa thỡ tiến trỡnh yờu cầu tài nguyờn phải chờ.
4) Chờ đợi vũng trũn
Một trong những cỏch ngăn ngừa chờ đợi vũng trũn là xỏc định một thứ tự cho cỏc dạng tài nguyờn trong hệ thống và chỉ cho phộp tiến trỡnh yờu cầu tài nguyờn sao cho tài nguyờn mà tiến trỡnh yờu cầu sau cú thứ tự lớn hơn tài nguyờn mà tiến trỡnh đú yờu cầu trước.
Nguyờn tắc trờn được minh họa như sau. Giả sử trong hệ thống cú n dạng tài nguyờn ký hiệu R1, R2, …, Rn. Cỏc dạng tài nguyờn cú thể là mỏy in, ổ đĩa, .v.v. Tiếp theo, khụng mất tớnh tổng quỏt, ta giả sử những dạng tài nguyờn này được sắp xếp theo thứ tự tăng dần của chỉ số, tức là R1 đứng trước R2, R2 đứng trước R3, v.v. Với cỏch sắp xếp như vậy ta cú thể trỏnh bế tắc bằng cỏch chỉ cho phộp tiến trỡnh yờu cầu tài nguyờn theo thứ tự tăng của chỉ số. Nếu tiến
trỡnh đó yờu cầu một số tài nguyờn dạng Ri thỡ sau đú tiến trỡnh chỉ được phộp yờu cầu tài nguyờn dạng Rj nếu j > i. Nếu tiến trỡnh cần nhiều tài nguyờn cựng dạng thỡ tiến trỡnh phải yờu cầu tất cả tài nguyờn dạng đú cựng một lỳc.
Cú thể dễ dàng kiểm tra, việc ỏp dụng quy tắc trờn cho phộp ngăn ngừa chờ đợi vũng trũn. Giả sử xẩy ra chờ đợi vũng trũn do tiến trỡnh P đó cú Ri và yờu cầu Rj trong khi tiến trỡnh Q đó cú Rj và yờu cầu Ri. Ta sẽ thấy ngay điều này khụng thể xẩy ra do một trong hai tiến trinh vi phạm quy tắc núi trờn (hoặc i > j hoặc j > i).
6.3 Phũng trỏnh bế tắc
Giải phỏp ngăn ngừa bế tắc trỡnh bày ở trờn tập trung vào việc sử dụng quy tắc hay ràng buộc khi cấp phỏt tài nguyờn để ngăn ngừa điều kiện xẩy ra bế tắc. Việc sử dụng ràng buộc như vậy cú nhược điểm là làm cho việc sử dụng tài nguyờn kộm hiệu quả, giảm hiệu năng của tiến trỡnh. Để giải quyết phần nào nhược điểm này cú thể sử dụng nhúm giải phỏp thứ hai là phũng
trỏnh bế tắc (deadlock avoidance).
Phũng trỏnh bế tắc giống ngăn ngừa bế tắc ở chỗ đều nhằm đảm bảo bế tắc khụng thể xảy ra (thực chất cả hai đều là ngăn ngừa). Tuy nhiờn, phũng trỏnh bế tắc cho phộp
ba điều kiện đầu xẩy ra và chỉ đảm bảo sao cho trạng thỏi bế tắc khụng bao giờ đạt tới. Mỗi yờu cầu cấp tài nguyờn của tiến trỡnh sẽ được xem xột và quyết định tựy theo tỡnh hỡnh cụ thể, thay vỡ tuõn theo một quy tắc chung như trong trường hợp ngăn ngừa.
Để làm được như vậy, hệ điều hành yờu cầu tiến trỡnh cung cấp thụng tin về việc sử dụng tài nguyờn của mỡnh và sử dụng thụng tin này khi cấp phỏt. Dạng thụng tin đơn giản và hiệu quả nhất là số lượng tối đa tài nguyờn tiến trỡnh cần sử dụng.
Dựa trờn thụng tin về số lượng tài nguyờn cần cấp tối đa do tiến trỡnh thụng bỏo, hệ thống cú thể phũng trỏnh bế tắc bằng cỏch sử dụng thuật toỏn người cho vay như sau.
Thuật toỏn ngƣời cho vay (banker’s algorithm)
Thuật toỏn người cho vay được đặt tờn dựa trờn sự tương tự giữa việc quyết định cho vay tiền của ngõn hàng với việc cấp phỏt tài nguyờn trong mỏy tớnh. Người cho vay giỏi là người cho vay được nhiều. Tuy nhiờn, khi cho vay vượt quỏ số tiến thực cú sẽ gặp rủi ro do mỗi người vay khụng thể vay đủ số tiến cần thiết để phục vụ kinh doanh, do vậy khụng thể thu hồi vốn và khụng thể trả nợ dẫn tới cả ngõn hàng và người vay rơi vào bế tắc tương tự tiến trỡnh cạnh tranh về tài nguyờn. Thuật toỏn người cho vay được mụ tả như sau.
Khi tiến trỡnh muốn khởi tạo, tiến trỡnh thụng bỏo dạng tài nguyờn và số lượng tài nguyờn tối đa cho mỗi dạng sẽ yờu cầu. Nếu số lượng yờu cầu khụng vượt quỏ khả năng hệ thống, tiến trỡnh sẽ được khởi tạo. Để trỡnh bày thuật toỏn người cho vay, ta định nghĩa một số khỏi niệm sau:
Trạng thỏi được xỏc định bởi tỡnh trạng sử dụng tài nguyờn hiện thời trong hệ thống.
Trạng thỏi được cho bởi cỏc thụng tin sau:
- Số lượng tối đa tài nguyờn mà tiến trỡnh yờu cầu. Thụng tin này được cho dưới dạng ma trận M[n][m], trong đú n là số lượng tiến trỡnh, m là số lượng tài nguyờn, M[i][j] (0<=i<=n, 0<=j<=m) là số lượng tài nguyờn tối đa dạng j mà tiến trỡnh i yờu cầu.
- Số lượng tài nguyờn cũn lại cho dưới dạng vectơ A[m], trong đú A[j] là số lượng tài nguyờn dạng j cũn lại và cú thể cấp phỏt.
- Lượng tài nguyờn đó cấp cho mỗi tiến trỡnh dưới dạng ma trận D[n][m], trong đú D[i][j] là lượng tài nguyờn dạng j đó cấp cho tiến trỡnh i.
- Lượng tài nguyờn cũn cần cấp dưới dạng ma trận C[n][m] trong đú C[i][j]=M[i][j]-
D[i][j] là lượng tài nguyờn dạng j mà tiến trỡnh i cũn cần cấp.
Trạng thỏi an toàn là trạng thỏi mà từ đú cú ớt nhất một phương ỏn cấp phỏt sao cho bế tắc
khụng xẩy ra. Trạng thỏi khụng an toàn là trạng thỏi khỏc với trạng thỏi an toàn.
Với cỏc khỏi niệm trạng thỏi định nghĩa ở trờn, cỏch phũng trỏnh bế tắc được thực hiện như sau. Khi tiến trỡnh cú yờu cầu cấp tài nguyờn, hệ thống giả sử tài nguyờn được cấp, cập nhật lại trạng thỏi và xỏc định xem trạng thỏi đú cú an toàn khụng. Nếu an toàn, tài nguyờn sẽ được cấp thật. Ngược lại, tiến trỡnh bị phong tỏa và chờ tới khi cú thể cấp phỏt an toàn.
Để minh họa, ta xột vớ dụ sau. Hệ thống cú 3 dạng tài nguyờn X, Y, Z với số lượng ban đầu X=10, Y=5, Z=7. Bốn tiến trỡnh P1, P2, P3, P4 cú yờu cầu tài nguyờn tối đa cho trong bảng M