Đề tài tiểu luận của tôi: Trình bày các thuật toán cho phép phát hiện bế tắc; và Theo phương pháp Le Lann, người ta phối hợp một bộ tuần tự cho một tài nguyên găng, ví dụ Sa, Sb, Sc,...N
Trang 1Trong những năm gần đây, các thành tựu mới nhất của hệ thống tin học về phầncứng, phần mềm và các hệ quản trị cơ sở dữ liệu ổn định, tin cậy đã góp phần đáng kểcho sự phát triển của xã hội nói chung và ngành Công nghệ Thông tin nói riêng Mộttrong những thành tựu nổi bật đó, phải nói đến các phần mềm cơ sở nhằm vào, trực tiếp
và trước hết, tăng khả năng điều hành, khai thác hiệu quả tất cả các tài nguyên của hệ
Sự phát triển của CNTT-TT và đặc biệt là Internet, “thế giới là phẳng” Do đó, tất
cả mọi vấn đề, dù khoảng cách có xa đến đâu đi chăng nữa nhưng nếu chúng ta ngồitrước máy vi tính có nối mạng thì hầu như mọi thứ đang hiện hữu tại máy tính của chúng
ta Chúng ta có thể quản lý nhân sự của một công ty đa quốc gia, chúng ta có thể ngồi ởnhà để đăng ký đặt chỗ vé máy bay, mua một món hàng tại siêu thị… Để có được sự tiệnnghi này đối với người sử dụng thì nó đặt ra nhiều vấn đề rất lớn và rất phức tạp cho cácnhà nghiên cứu và phát triển các hệ thống này Các câu hỏi lớn đặt ra một cách cụ thểnhư: “làm thế nào để đảm bảo rằng không có ít nhất 2 người cùng đăng ký 01 vé máy baytrong hệ thống đăng ký vé? Làm thế nào để biết được có còn một mặt hàng nào đó trong
Hệ phân tán (Distributed System) là hệ thống xử lý thông tin bao gồm nhiều bộ xử
lý hoặc bộ vi xử lý nằm tại các vị trí khác nhau và được liên kết với nhau thông qua phương tiện viễn thông dưới sự điều khiển thống nhất của một hệ điều hành.
Vấn đề quan trọng là để đảm bảo các chức năng, yêu cầu đề ra, hệ phân tán cầnphải có các cơ chế kỹ thuật đủ mạnh nhằm đồng bộ hoá hoạt động của các xử lý (tiếntrình) và sự trao đổi thông tin với nhau sao cho hệ thống tránh được các trường hợp cóthể dẫn đến bế tắc và/hoặc không gắn bó dữ liệu
Đề tài tiểu luận của tôi: Trình bày các thuật toán cho phép phát hiện bế tắc; và Theo phương pháp Le Lann, người ta phối hợp một bộ tuần tự cho một tài nguyên găng,
ví dụ Sa, Sb, Sc, Người ta nhóm các bộ tuần tự trên một jeton duy nhất; Hãy chứng
Trang 2của tiểu luận này, với những kiến thức đã được học cũng như tự nghiên cứu thêm tài liệu
từ các giáo trình, bài giảng và mạng Internet, tôi xin trình bày các nội dung sau:
Chương I: Trình bày các khái quát về bế tắc
Chương II: Thuật toán cho phép phát hiện bế tắc
Phần bài tập - Trình bày giải pháp kết hợp các bộ tuần tự cho mỗi tài nguyên găng
trên một jeton tuần hoàn để ngăn chặn bế tắc.
Mặc dầu đã hết sức cố gắng, nhưng do điều kiện thời gian và khả năng còn nhiềuhạn chế, hơn nữa tiểu luận môn học này là một lĩnh vực tri thức rộng lớn, đa dạng và rấtphức tạp nên chắc chắn không thể không tránh khỏi những sai sót và khiếm khuyết Rấtmong nhận được sự góp ý, phê bình, đánh giá của Thầy giáo và của các bạn trong lớp đểtôi rút kinh nghiệm và hoàn thiện tốt hơn trong thời gian tới
Tôi xin gửi lời cảm ơn chân thành đến Thầy giáo Lê Văn Sơn đã cung cấp, địnhhướng và hướng dẫn chúng tôi trong suốt thời gian qua để tôi hoàn thành tiểu luận này
Đà Nẵng, ngày 12 tháng 04 năm 2012.
Trang 3CHƯƠNG I
TRÌNH BÀY CÁC KHÁI QUÁT VỀ BẾ TẮC
1.1 Các tài nguyên
Bế tắc có thể xảy ra khi các tiến trình truy xuất độc quyền đến các thiết bị, file, v.v
Để thảo luận bế tắc, chúng ta sẽ tham chiếu đến các đối tượng như tài nguyên Một tàinguyên có thể là một thiết bị phần cứng hay một phần của thông tin Một máy tính có thể
có nhiều tài nguyên khác nhau có thể được yêu cầu
Tài nguyên có thể phân thành hai loại: có thể thu hồi (preemptable) và không thể thuhồi (nonpreemptable)
Tài nguyên có thể thu hồi: là tài nguyên có thể được lấy ra từ tiến trình sở hữu nó.
Bộ nhớ là một ví dụ của tài nguyên có thể thu hồi
Tài nguyên không thể thu hồi được: là tài nguyên mà không thể lấy ra từ tiến
trình hiện đang sở hữu nó bất kể gây ra lỗi tính toán File, các thiết bị Vào /Ra là các tàinguyên không thể thu hồi được
Nhìn chung, các bế tắc thường xảy ra đối với các tài nguyên không thể thu hồi được.Trình tự của các sự kiện yêu cầu sử dụng tài nguyên là:
- Yêu cầu một tài nguyên
- Sử dụng tài nguyên
- Giải phóng tài nguyên
Nếu tài nguyên không có giá trị khi được yêu cầu thì tiến trình yêu cầu bị chặn đểchờ Trong một số hệ điều hành, tiến trình tự động bị chặn khi tài nguyên yêu cầu bị lỗi
và đánh thức dậy khi tài nguyên có giá trị
1.2 Định nghĩa bế tắc
Một tập các tiến trình bị bế tắc nếu mỗi tiến trình trong tập tiến trình chờ một sự kiện mà chỉ có tiến trình khác trong tập các tiến trình đó tạo ra.
Tất cả các tiến trình đều đang chờ, không một tiến trình nào trong chúng có thể tạo
ra bất kỳ một sự kiện nào để có thể đánh thức tiến trình khác trong tập tiến trình, vì vậytất cả các tiến trình tiếp tục chờ mãi mãi
Trong hầu hết các trường hợp, sự kiện mà tiến trình đang chờ giải phóng vài tàinguyên hiện tại mà tiến trình khác trong tập tiến trình bị chặn đang chiếm giữ Hay nóicách khác, mỗi thành viên của tập các tiến trình bế tắc đang chờ tài nguyên là sở hữu củamột tiến trình bị chặn khác Không một tiến trình nào có thể chạy thực hiện, không một
Trang 4tiến trình nào có thể giải phóng tài nguyên và cũng không một tiến trình nào có thể thứcdậy
1.3 Điều kiện xảy ra bế tắc
Cofman, Elphick và Shosani vào năm 1971 đã đưa ra 4 điều kiện cần có thể làm xuấthiện bế tắc:
1.3.1 Có sử dụng tài nguyên không thể chia sẻ (Mutual exclusion)
Mỗi thời điểm, một tài nguyên không thể chia sẻ được hệ thống cấp phát chỉ mộttiến trình, khi tiến trình sử dụng xong tài nguyên này hệ thống mới thu hồi và cấp phát tàinguyên cho hệ thống khác
1.3.2 Sự chiếm giữ và yêu cầu thêm tài nguyên (Wait for)
Tiến trình được phép giữ và yêu cầu thêm một hoặc nhiều tài nguyên và chờ cungcấp tài nguyên đang bị tiến trình khác chiếm giữ
1.3.3 Không thu hồi được tài nguyên từ tiến trình đang giữ chúng (No preemption)
Tài nguyên chỉ tự nguyện giải phóng khi sử dụng xong Không một tiến trình nàohay hệ điều hành có thể thu hồi tài nguyên từ tiến trình đang chiếm giữ chúng
1.3.4 Tồn tại một chu kỳ chờ trong đồ thị cấp phát tài nguyên (Circular wait)
Có ít nhất hai tiến trình chờ đợi lẫn nhau: tiến trình này chờ cấp phát tài nguyênđang bị tiến trình kia chiếm giữ và ngược lại
Tất cả 4 điều kiện này cần phải ngăn chặn để bế tắc không xảy ra Khi có đủ 4 điềukiện này thì bế tắc xảy ra Nếu thiếu 1 trong 4 điều kiện này thì không có bế tắc
Khi một yêu cầu được thực hiện, một cạnh yêu cầu được thêm vào
Khi một yêu cầu đươc hình thành cạnh yêu cầu được chuyển sang cạnh chỉ định
Trang 5Khi một tiến trình giải phóng tài nguyên, cạnh chỉ định bị xóa đi
Nếu đồ thị không chứa chu kỳ thì bế tắc không xảy ra
Nếu đồ thị chứa một chu kỳ thì bế tắc xảy ra
Hình 1.1 Đồ thị cấp phát tài nguyên
1.5 Các phương pháp xử lý́ bế tắc
Chủ yếu có 3 phương pháp tiếp cận để xử lý bế tắc:
- Sử dụng một giao thức(protocol) để hệ thống không bao giờ xảy ra bế tắc
- Cho phép xảy ra bế tắc và tìm cách sửa chữa bế tắc
- Hoàn toàn bỏ̉ qua bế tắc, xem như hệ thống không bao giờ xảy ra bế tắc
1.6 Ngăn chặn bế tắc
Để bế tắc không xảy ra cần đảm bảo tối thiểu một trong 4 điều kiện cần không xảy ranhư sau:
1.6.1 Tài nguyên không thể chia sẻ: gần như không thể tránh được điêu kiện này vì bản
chất tài nguyên gần như cố định Tuy nhiên đối với một tài nguyên về kết xuất, người ta
có thể dùng các cơ chế spooling để biến đổi thành tài nguyên có thể chia sẻ
R2
R1
R4
Trang 61.6.2 Sự chiếm giữ và yêu cầu thêm tài nguyên: phải đảm bảo rằng mỗi khi tiến trình
yêu cầu thêm một tài nguyên thì nó không chiếm giữ các tài nguyên khác Có thể áp đặtmột trong hai cơ chế truy xuất sau:
- Tiến trình phải yêu cầu tất cả các tài nguyên cần thiết trước khi bắt đầu xử lý:phương pháp này có khó khăn là tiến trình khó có thể ước lượng chính xác tài nguyên cần
sử dụng vì có thể nhu cầu phụ thuộc vào quá trình xử lý Ngoài ra nếu tiến trình chiếmgiữ sẵn các tài nguyên chưa cần sử dụng ngay thì việc sử dụng tài nguyên sẽ kém hiệuquả
- Khi tiến trình yêu cầu một tài nguyên mới và bị từ chối nó phải giải phóng các tàinguyên đang chiếm giữ, sau đó lại được cấp phát trở lại cùng lần với tài nguyên mới:phương pháp này làm phát sinh các khó khăn trong việc bảo vệ tình toàn vẹn dữ liệu của
hệ thống
1.6.3 Thu hồi tài nguyên: cho phép hệ thống được thu hồi tài nguyên từ các tiến trình bị
khóa và cấp phát trở lại cho tiến trình khi nó thoát khỏi tình trạng bị khóa Tuy nhiên vớimột số loại tài nguyên, việc thu hồi sẽ rất khó khăn vì vi phạm tính toàn vẹn dữ liệu
1.6.4 Tồn tại một chu kỳ: tránh tạo chu kỳ trong đồ thị cấp phát bằng cách cấp phát tài
nguyên theo thứ tự phân cấp như sau:
Gọi R = { R1, R2, , Rn } là tập các loại tài nguyên
Các loại tài nguyên được phân thứ tự từ 1 – N, thứ tự có thể là thứ tự logic mà tàinguyên thường yêu cầu Ký hiệu F(Ri)
Các tiến trình khi yêu cầu tài nguyên phải tuân thủ quy định: khi tiến trình đang bịchiếm giữ tài nguyên Ri thì có thể yêu cầu các tài nguyên Rj nếu F(Rj) > F(Ri)
Trang 7CHƯƠNG II THUẬT TOÁN CHO PHÉP PHÁT HIỆN BẾ TẮC
Khi các tài nguyên được sử dụng bởi giao dịch được xác định theo kiểu động trongquá trình thi hành giao dịch, các phương pháp dự phòng bế tắc dựa trên nền tảng cácthông điệp không còn phù hợp nữa Lúc này, ta phải sử dụng các phương pháp phát hiện
và chữa trị
Phương pháp được mô tả bởi Menasce sẽ được trình bày Phương pháp này đặt ravấn đề sử dụng một đồ thị các tranh chấp mà việc kiểm tra các tranh chấp đó cho phépphát hiện bế tắc
Tương tự như thuật toán phát hiện bế tắc, mỗi một trạm quản lý các đối tượng riêngcủa mình và việc phát hiện chỉ dựa vào thông tin cục bộ Các trạm khởi sự các giao dịch
bị treo được đề phòng phát sinh bế tắc (mà bế tắc này có thể phát hiện tại một trạm nàođó) cần phải đề ra các biện pháp chữa trị cho mình
Giả sử rằng T k là một giao dịch bị chặn tập hợp tất cả các giao dịch mà có thể đạt
được bằng cách chạy khắp các cung xuất phát từ T k, theo chiều ngược lại với hướng của
chúng, và gọi là tập hợp các chặn của T k , ký hiệu là E(T k ) Các giao dịch thuộc vào E(T k )
là các giao dịch có nguồn gốc từ sự chặn của T k
Tại một thời điểm cho trước, đồ thị các xung đột hữu hiệu sinh ra các quan hệ chặn
tồn tại giữa các giao dịch của hệ Ta ký hiệu B(T k ) là tập hợp các giao dịch bị chặn do T k,
có nghĩa là các giao dịch có thể đạt được bằng cách chạy khắp các xuất phát từ T k
Ví dụ 1 : Cho đồ thị các xung đột hữu hiệu như sau:
T j > T k Tồn tại ít nhất một tài nguyên bị cài then bởi T j và
yêu cầu bởi T k nhưng không được đáp ứng
Trang 8Ta ký hiệu S(T k ) là trạm nguồn của giao dịch T k để cho mỗi giao dịch T k, trạm S(Tk)
duy trì các tập hợp B(T k ) và E(T k ) Việc cập nhật E(T k ) cần phải được biểu hiện trên tất cả các trạm nguồn của các giao dịch thuộc B(T k ) Thực tế, giao dịch chặn T k là phần tử của
toàn bộ tập hợp chặn của các giao dịch thuộc B(T k ).
Giả sử rằng T k đã yêu cầu một tài nguyên e của trạm S i nào đó Trên trạm này, tathực hiện các phép toán sau đây:
Khi nhận một thông điệp (j,k) trên một trạm S nào đó, ta thực hiện các tác động sau
đây:
STT Phép toán
đang có tài nguyên
2
Nếu e đã được cung cấp cho giao dịch T j thì thông điệp “Tj chặn Tk”
được truyền cho trạm S(T j ) và S(T k ) Sau này (j,k) chỉ một thông điệp
như vậy
Trang 91 Trên trạm S(T j ) nguồn của giao dịch chặn Tk, ta thêm T k vào tập hợp B(T j ) và kiểm
tra rằng ta không làm phát sinh bế tắc, có nghĩa là:
B(Tj) E(Tj) =
Ta gửi tiếp tục thông điệp (l,k) về phía các trạm nguồn của các giao dịch T l chặn T j
nhằm cho phép các trạm S(T l ) cập nhật các tập hợp BB(T l ) của các giao dịch bị chặn bởi
T l Song song với tác động trên, các thông điệp (l,k) được gửi về trạm nguồn của các giao
dịch T k để cập nhật tập hợp E(T k ) của các giao dịch chặn T k
2 Trên trạm S(T k ) nguồn của giao dịch bị chặn T k , ta thêm T j cho tập hợp E(T k ) và
kiểm tra không có bế tắc, có nghĩa là:
B(TJ) E(Tk) =
Ta gửi tiếp tục thông điệp (j,m) về phía các trạm nguồn của các giao dịch T m bị chặn
bởi T k nhằm cho phép các trạm S(T m ) cập nhật các tập hợp E(T m ) của các giao dịch chặn
v_loai_tru_th(e3)
v_loai_tru_th(e3)
Trang 10T 1 trên S2 đề nghị cung cấp e2 có trên T2;
S2 gửi (2,1) cho S1 và S2, từ đó ta có:
E(T1) = {T2} B(T1) = B(T2) = {T1} E(T2) =
T 2 trên S3 đề nghị cung cấp e3 có trên T3;
S3 gửi (3,2) cho S2 và S3, từ đó ta có : B(T3) = {T2} B(T3) =
E(T2) = {T3} B(T2) = {T1}
S2 gửi (3,1) cho S1 và từ đó sinh ra:
E(T1) = {T2, T3} B(T1) =
T 3 trên S3 đề nghị cung cấp e1 có trên T1;
S1 sinh ra T3 trong B(T1) và ta ghi nhận là:
E(T1) B(T1) = {T3} Như vậy, bế tắc được phát hiện trên S1
Trang 11PHẦN BÀI TẬP
Theo phương pháp Le Lann, người ta phối hợp một bộ tuần tự cho một tài nguyên
găng, ví dụ Sa, Sb, Sc, Người ta nhóm các bộ tuần tự trên một jeton duy nhất.
Bạn hãy chứng minh rằng để triển khai một chiến lược cung cấp không có rủi ro về
bế tắc, người ta chỉ cần rút một số cho một tài nguyên cần thiết khi jeton chạy qua
Một tiến trình muốn nhận giá trị từ bộ tuần tự S thì nó phải gọi thủ tục (hoặc hàm) có
tên Phieu(S) Mỗi giá trị chỉ phục vụ cho một và chỉ một sự kiện mà thôi.
Giả sử rằng tất cả các sự kiện được đánh số bởi bộ tuần tự duy nhất S Khi một tiến
trình cung cấp cho sự kiện i một số thông qua Phieu(s), ta có thể khẳng định như sau:
- Các sự kiện t bao hàm các giá trị nhỏ hơn t đã được diễn ra
- Số thứ tự liền kề sau t phải là t+1
Một bộ tuần tự mang 2 đặc tính sau :
- Nếu a và b là 2 sự kiện được thực hiện trên cùng hàm Phieu(S), thì ta có
a→b hay b→a
- Nếu a thực hiện phép t=Phieu(S) thì giá trị gán cho t là số lượng các phép Phieu(S) đã được thực hiện trước a.
Đặc tính thứ nhất thể hiện việc loại trừ tương hỗ trên các phép toán Phieu(S), còn đặc
tính thứ hai thể hiện tính liên tục trong khi đánh số có nghĩa là không để lại khoảng trốngkhi đánh số
Việc triển khai bộ tuần tự trong hệ thống một bộ xử lý hay nhiều bộ xử lý với bộ nhớchung được tiến hành bằng cách triển khai cơ chế sơ đẳng loại trừ tương hỗ là đủ Trongcác hệ thống phân tán, việc vận dụng nó không hề đơn giản bởi vì có sự hiện diện của cáckênh viễn thông sử dụng theo kiểu loại trừ tương hỗ và đặc biệt tồn tại vòng tròn duynhất hay một kênh lan truyền duy nhất
Việc vận dụng tương đối tổng quát bộ tuần tự S trong hệ phân tán là sự chuyển động
giữa các trạm của một đối tượng duy nhất gọi là ấn phong chứa giá trị hiện hành của bộ
Trang 123.2 Jeton tuần hoàn
Để triển khai một ấn phong có hiệu quả, đầu tiên ta phải xác định hành trình của nó
trong mạng máy tính như thế nào Phương pháp đơn giản nhất là lắp đặt các trạm nằmtrên một vòng theo một chiều xác định Mỗi trạm chỉ được liên hệ với 2 trạm gần nhất
Ta hãy xem xét một mạng được hoàn toàn nối với nhau có nghĩa là một tập hợp gồm
N trạm, trong đó một trạm có thể liên lạc với các trạm khác một cách dễ dàng Một sốduy nhất bao gồm từ 0 đến N-1 được phân phối một lần cho toàn bộ trên từng trạm Trạm
i đều có trạm hàng xóm phải hay còn gọi trạm kế tiếp sau mà số trạm của nó là suc[i] và hàng xóm bên trái hay còn gọi là trạm liền kề trước mà số của nó là pred[i] Sự mô tả này
cho ta hình dung một vòng tròn ảo Khi hoạt động bình thường, N trạm được thể hiện đầy
Trong thuật toán Le Lann, ấn phong được cụ thể hoá bằng một thông điệp đặc biệt vàgọi là Jeton tuần hoàn trên vòng tròn Như thế việc sự cố trên mạng có thể dẫn đến mấtjeton Các biến trạng thái được duy trì trên mỗi trạm cho phép tái sinh jeton trong trườnhợp bị mất
Thuật toán triển khai ý tưởng này là:
Jeton mang giá trị là v Mỗi một trạm j có một biến trạng thái S[j] Trước khi phát lại
Jeton vào mạng, các tác động như sau được thực hiện:
S[j]:=v cho j ≠ 0v:=v+1 mod K; S[j]:=v cho j=0
- Mỗi một lần chuyển jeton trên trạm j, một đồng hồ bảo vệ được trang bị Nếu nó được phát động trước khi jeton đến thì j tham chiếu đến biến trạng thái S[i] của trạm liền kề trước i=pred(j) trên vòng tròn.
Nếu một trong hai điều kiện sau được kiểm tra:
j>i và S[j] ≠ S[i]
hay j<i và S[j] = S[i]