Tải bản đầy đủ (.doc) (31 trang)

BIỂU THỨC SONG SONG VÀ PHÂN TÁN TRONG CÁC NGÔN NGỮ THUẬT TOÁN VÀ CÁC ĐIỂM CẢI TIẾN CHỦ YẾU ĐỂ THUẬT TOÁN LAMPORT HOẠT ĐỘNG NHANH HƠN

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (269.72 KB, 31 trang )

ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
  
TIỂU LUẬN MÔN HỌC
HỆ TIN HỌC PHÂN TÁN
Đề tài:
BIỂU THỨC SONG SONG VÀ PHÂN TÁN TRONG CÁC
NGÔN NGỮ THUẬT TOÁN
VÀ CÁC ĐIỂM CẢI TIẾN CHỦ YẾU ĐỂ THUẬT TOÁN
LAMPORT HOẠT ĐỘNG NHANH HƠN
GVHD: PGS.TS LÊ VĂN SƠN
HVTH: NGUYỄN THÀNH THỦY
LỚP: KHMT-K10 (2008-2011)
Đà Nẵng, tháng 7 năm 2009.
Tiểu luận môn học Hệ phân tán
MỤC LỤC
3.1. Thuật toán giả phân tán: Hàng đợi tập trung 21
3.2. Thuật toán Lamport: Hàng đợi phân tán 22
3.3. Cải tiến thuật toán Lamport (Thuật toán Ricart và Agrawala) 27
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
2
Tiểu luận môn học Hệ phân tán
LỜI NÓI ĐẦU
uộc cách mạng khoa học và công nghệ đang diễn ra một cách sôi động trên
phạm vi toàn thế giới, thúc đẩy loài người nhanh chóng bước sang một kỷ
nguyên mới, đó là kỷ nguyên của nền văn minh dựa trên cơ sở của công nghiệp
tri thức. Mở đầu cho cuộc cách mạng khoa học và công nghệ này là sự ra đời và phát
triển ồ ạt của máy vi tính và các phương tiện xử lý thông tin khác.
C
Cùng với sự phát triển nhanh chóng số lượng máy vi tính cũng như nhu cầu trao
đổi thông tin trong mọi hoạt động xã hội loài người đòi hỏi sự phát triển đồng bộ các


phương pháp truyền thông. Mạng máy tính ra đời làm cho thế giới của chúng ta
dường như nhỏ lại và mọi người trở nên gần nhau hơn.
Trên thực tế, một xu hướng kỹ thuật mới được hình thành - xu hướng phân tán các
thành phần tạo nên hệ tin học theo hướng tiếp cận nơi sử dụng và sản xuất thông tin
trên cơ sở mạng máy tính. Song để khai thác có hiệu quả toàn bộ hệ thống, vấn đề
quan trọng hàng đầu cần phải tính đến là các tài nguyên và chiến lược khai thác, sử
dụng chúng một cách tối ưu nhất. Bản thân người sử dụng thuần tuý không thể tự xây
dựng nên chiến lược đó được, mà nó là chức năng chủ yếu của các hệ thống tin học
phân tán đồng thời cũng chính là đối tượng nghiên cứu của báo cáo này.
Phạm vi và nhiệm vụ nghiên cứu của đề tài là phân tích đặc điểm của biểu thức
song song và phân tán trong các ngôn ngữ thuật toán và các điểm cải tiến chủ yếu để
thuật toán Lamport hoạt động nhanh hơn nhằm phục vụ công tác lưu chuyển, xử lý dữ
liệu qua mạng dựa trên phương pháp lý thuyết.
Về mặt bố cục, ngoài phần mở đầu, tài liệu tham khảo và mục lục, báo cáo được
chia làm 3 chương, trong đó:
Chương 1: trình bày các vấn đề tổng quan về hệ phân tác và các cơ sở lý luận có
liên quan.
Chương 2: trình bày về biểu thức song song và phân tán trong các ngôn ngữ thuật
toán và
Chương 3: trình bày về các điểm cải tiến chủ yếu để thuật toán Lamport hoạt động
nhanh hơn.
Chân thành cám ơn Thầy giáo PGS.TS. Lê Văn Sơn đã định hướng và cung cấp
kiến thức và tài liệu để tôi hoàn thành báo cáo này.
Do thời gian và trình độ hạn chế nên đề tài chắc không tránh khỏi sai sót. Kính
mong sự góp ý của Thầy giáo hướng dẫn và các bạn đồng môn.
Học viên thực hiện
NGUYỄN THÀNH THỦY
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
3
Tiểu luận môn học Hệ phân tán

CHƯƠNG 1. CÁC CƠ SỞ LÝ LUẬN CÓ LIÊN QUAN
1.1 Xử lý song song và xử lý tuần tự
1.1.1 Tổng quan
Lý thuyết về xử lý song song (Parallel Processing) bắt đầu cuối những năm 1940 khi
J.Von Neumann giới thiệu một số mô hình hạn chế của tính toán song song có tên otomat
tế bào mà chủ yếu là một mảng hai chiều các bộ xử lý trạng thái hữu hạn được tương kết
theo dạng hình lưới. Từ đó đến nay, lý thuyết về xử lý song song trở thành lĩnh vực
nghiên cứu quan trọng và ngày càng đem lại những dấu hiệu khả quan trong việc xây
dựng một mô hình lập trình mới có những tính năng vượt trội so với mô hình lập trình
tuần tự truyền thống.
Xử lý song song từ xa xưa cho đến gần đây là lãnh vực cao cấp hầu như chỉ dành cho
các nhà khoa học. Có ít nhất 2 nguyên nhân:
- Xử lý song song đòi hỏi siêu máy tính đắt tiền, chỉ chính phủ hoặc tập đoàn lớn
mới kham nổi.
- Nhà khoa học mới cần tính toán cao cấp, như trong nghiên cứu vật lý hạt và vũ trụ,
sinh học cấu tạo, khí tượng địa cầu, khoa học máy tính.
Gần đây nhờ sự phổ biến của phần cứng rẻ như CPU đa lõi, phần mềm tiện dụng như
Erlang, đại chúng bắt đầu biết đến xử lý song song.
Xử lý song song là quá trình xử lý gồm nhiều tiến trình được kích hoạt đồng thời và
cùng tham gia giải quyết một vấn đề, nói chung là thực hiện trên những hệ thống đa bộ
xử lý. Là phân chia bài toán to thành nhiều bài toán nhỏ, rồi giải cùng lúc, nhờ đó tốc độ
giải bài toán gốc tăng lên.
Ví dụ: Tính tích phân trong khoảng [0, 100], thì có thể phân làm 2 bài toán nhỏ là tính
tích phân trong khoảng [0, 50] và [50, 100], rồi cộng 2 kết quả lại.
1.1.2 Sự khác biệt giữa xử lý song song và xử lý tuần tự
Trong tính toán song song, một số bộ xử lý cùng kết hợp với nhau để giải quyết cùng
một vấn đề cho nên giảm được thời gian xử lý vì mỗi thời điểm có thể có nhiều phép toán
được thực hiện đồng thời.
Trong tính toán tuần tự với một bộ xử lý thì mỗi thời điểm chỉ thực hiện được một
phép toán.

Mục đích của xử lý song song là tận dụng các khả năng của các hệ đa bộ xử lý để thực
hiện những tính toán nhanh hơn trên cơ sở sử dụng nhiều bộ xử lý đồng thời. Cùng với
tốc độ xử lý nhanh hơn, việc xử lý song song cũng sẽ giải quyết được những bài toán lớn
hơn.
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
4
Tiểu luận môn học Hệ phân tán

1.1.3 Tại sao phải xử lý song song ?
Nhiều lĩnh vực mới như đồ họa máy tính, trí tuệ nhận tạo, phân tích số, v.v. đòi hỏi
phải xử lý một khối lượng dữ liệu rất lớn, những vấn đề về xử lý ngôn ngữ tự nhiên, nhận
dạng, xử lý ảnh ba chiều (3-D), dự báo thời tiết v.v. đều đòi hỏi phải xử lý dữ liệu với tốc
độc rất cao, với khối lượng dữ liệu rất lớn. Hầu hết những bài toán này, những máy tính
xử lý tuần tự là không đáp ứng yêu cầu thực tế. Do đó cần phải có những hệ thống máy
tính thật mạnh mới đáp ứng được những yêu cầu của thực tế.
Mặc dù tốc độ xử lý của các Bộ xử lý tăng nhiều trong những năm qua, nhưng do giới
hạn về vật lý nên khả năng tính toán của chúng không thể tăng mãi được. Điều này dẫn
tới là muốn tăng được khả năng tính toán của các hệ thống máy tính thì đích cuối cùng là
phải khai thác được khả năng xử lý song song của chúng. Ngày càng xuất hiện nhiều bài
toán mà những hệ thống đơn một bộ xử lý không đáp ứng được yêu cầu xử lý về thời
gian, do đó đòi hỏi phải sử dụng những hệ thống đa bộ xử lý và đòi hỏi phải xử lý song
song.
1.2 Vấn đề đồng bộ hóa trong hệ phân tán
1.2.1. Thời gian lôgic và trật tự sự kiện từng phần (Lamport)
Trong các hệ tin học tập trung, vấn đề đồng bộ hóa được giải quyết thông qua cơ chế
loại trừ tương hỗ. Cơ chế này cho phép xác lập trật tự hoàn toàn các sự kiện. Tuy nhiên,
trong thực tế một số hệ thống khi đồng bộ hóa chỉ đòi hỏi trật tự từng phần. Chính vì vậy,
trật tự hóa từng phần giữa các sự kiện mà tiến trình của nó cần phải đồng bộ là vấn đề cần
phải quan tâm giải quyết.
Trong hệ phân tán, việc đồng bộ hóa chủ yếu yêu cầu thiết lập một trật tự giữa các sự

kiện. Giữa các trạm khác nhau, trật tự đó có thể thể hiện thông qua việc trao đổi các
thông điệp với nhau.
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
5
Tiểu luận môn học Hệ phân tán
Trở lại năm 1979, Lamport đã đưa ra rằng hai sự kiện từ các trạm khác nhau chỉ có
thể có trật tự nếu chúng được tách rời với nhau bằng cách gửi và nhận thông điệp. Ngược
lại, cho dù một sự kiện xảy ra trước sự kiện khác theo thời gian, không có cách nào cho
sự kiện thứ hai có thể quan sát trật tự này và vì vậy, không có cách nào cho sự chính xác
của nó phụ thuộc vào nó. Giả định ở đây là không có sự quan sát bên ngoài của trật tự sự
kiện. Nếu sự chính xác của hệ thống phụ thuộc vào trật tự được quan sát bởi con người,
ví dụ, thì sự quan sát Lamport không áp dụng. Tuy nhiên, sự chính xác trật tự chỉ phục
thuộc vào sự đồng bộ bên trong của các sự kiện và vì thế định nghĩa của Lamport có thể
áp dụng.
Giả sử rằng ta có thể xác định một trật tự giữa các sự kiện của hệ phân tán nhờ vào
quan hệ “có trước” (→):
Bây giờ ta xem xét về trật tự sự kiện:
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
6


a
b
P
1.
a “có trước” b (a

b)

a

P
2.
a “có trước” b (a

b)

b
Q

P
1
P
2
P
3
Q
1
Q
2
Q
1
P
Q
3.
a
P
a “xảy ra trước” c (a

c) - bắc cầu -


b
Q

c

Tiểu luận môn học Hệ phân tán
Trật tự từng phần của các sự kiện:
P1 → P2 → P3, và
Q1 → Q2 → Q3
Nếu P1 là sự kiện phát thông điệp và Q2 là sự kiện nhận tương ứng thì:
P1 → Q2
Trật tự các sự kiện được định nghĩa như sau:
Nếu A và B là hai sự kiện của cùng một trạm và A xảy ra trước B thì ta có A→B.
Nếu A là phát thông điệp từ một trạm nào đó và B là nhận thông điệp thì ta có A→B.
Nếu A→B và B→C, thì A→C.
Nếu hai sự kiện A và B xảy ra ở hai tiến trình riêng biệt và không trao đổi thông điệp
thì ta không thể nói A→ B hay B→ A. Các tiến trình này được gọi là song song (A||B)
1.2.2. Gắn thời gian lôgic với các sự kiện
Các đồng hồ lôgic: gán một số cho mỗi sự kiện cục bộ nhưng không liên quan đến
thời gian vật lý.
Hệ thống các đồng hồ lôgic phải chính xác :
Hay nói cách khác:
Làm thế nào chúng ta có thể thực thi các đồng hồ thỏa mãn Điều kiện Đồng hồ?
Bằng thuật toán đóng dấu thời gian của Lamport – cung cấp một tập hợp các quy luật
thực thi đơn giản.
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
7
∀ sự kiện a,b : nếu a

b thì C(a) < C(b)

Điều kiện đồng hồ

a
Pi

b
Pj

c
Ci (a) < Cj (b) và Cj (b) < Cj (c)
P
1
P
2
P
3
Q
1
Q
2
Q
1
P
Q
Thông điệp
Tiểu luận môn học Hệ phân tán
1.2.3. Thuật toán đóng dấu thời gian của Lamport
Đồng hồ lôgic là thuật toán cho phép đóng dấu cho từng sự kiện trong hệ phân tán để
với mỗi cặp sự kiện A và B ta có: nếu A có trước B (A → B) thì đồng hồ lôgic của A nhỏ
hơn đồng hồ lôgic của B.

Các quy luật:
Quy luật 1: Mỗi tiến trình Pi gia tăng Ci thêm một trị số giữa hai sự kiện thành công
Quy luật 2: Mỗi tiến trình Pi đóng dấu thời gian cho các thông điệp m gửi đi, Tm =
Ci (a)
Quy luật 3: Khi nhận được thông điệp m, tiến trình Pj đặt lại giá trị Cj:
Cj = max (Cj, Tm) + 1
Trật tự sự kiện toàn bộ: Giả sử là các đồng hồ thỏa mãn Điều kiện Đồng hồ, ta định
nghĩa quan hệ sau:
với các sự kiện a trên Pi và b trên Pj
Trật tự từng phần với trật tự toàn bộ
Chú ý rằng quan hệ “có trước”chỉ định nghĩa trật tự từng phần của các sự kiện. Điều
này có nghĩa là trong khi một số sự kiện được sắp xếp trật tự bằng quan hệ “có trước”,
vẫn còn một số sự kiện không được sắp xếp theo thứ tự
Thỉnh thoảng chúng ta cần đến trật tự toàn cục của các sự kiện.
Trật tự toàn cục sắp xếp thứ tự cho từng sự kiện để tất cả các trạm đồng ý với trật tự
này.
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
8

P
i
a
C
i
C
i
+1

P
i

a
C
i
C
i
+1
(m, T
m
= C
i
(a) )

P
j
C
j
C
j
= max (C
j
, T
m
) + 1
(m, T
m
)
a
a ⇒ b nếu C
i
(a) < C

j
(b) hoặc C
i
(a) = C
j
(b) với i < j
Tiểu luận môn học Hệ phân tán
Lamport định nghĩa trật tự toàn cục dựa trên quan hệ “có trước”, nó gán cho mỗi trạm
một số duy nhất và sau đó sử dụng số này để lập trật tự cho các sự kiện không được sắp
xếp thứ tự bằng quan hệ “có trước”.
Trật tự nhất quán của các sự kiện phát:
Định dạng thông điệp từ Pi : (m, Tm, i)
Tại tiến trình Pi, một sự kiện phát (m, Tm, j) từ Pj được gọi là có trước sự kiện phát
(n, Tn, k) từ Pk nếu :
Nếu Tm < Tn, hoặc
Nếu Tm = Tn và j < k
Chú ý, đây là trật tự ⇒
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
9
P1 P2 P3 P4
0 0 0 0
(a,1,1)
(b,1,4)
3
2
2
3
2
2
Tiểu luận môn học Hệ phân tán

CHƯƠNG 2. BIỂU THỨC SONG SONG VÀ PHÂN TÁN TRONG CÁC
NGÔN NGỮ THUẬT TOÁN
2.1. Tính toán song song và phân tán
2.1.1. Khái niệm
Tính toán song song và phân tán (Parallel and Distributed Computing) là một dạng
tính toán hiệu năng cao (high performance computing) bằng cách tận dụng sức mạnh tính
toán của một tập các máy tính hoặc bộ xử lý được kết nối thông qua các hệ thống mạng
chuyên dụng (tốc độ rất cao) hoặc mạng thông thường (TCP/IP chẳng hạn).
Hầu hết các ứng dụng của tính toán song song là nhằm giải quyết các bài toán có độ
phức tạp thời gian lớn hoặc những bài toán thời gian thực (real-time applications). Sau
đây là một số ví dụ:
Tính toán trong vật lý và hóa học: mô phỏng các quá trình nhiệt học, mô phỏng
chuyển động các hạt cơ bản trong vật lý, mô phỏng các quá trình hóa học,…
Tính toán trong sinh học: hiện nay có một lĩnh vực đang được giới nghiên cứu
focus, đó là tin sinh (bioinformatics). Bài toán này chủ yếu phân tích thông tin di truyền
ADN. Bài toán phân tích và mô hình hóa bản đồ gen người cũng không thể không sử
dụng các máy tính hiệu năng cao, trong đó có các hệ thống tính toán song song rất mạnh.
Trò chơi: dòng máy tính DeepBlue của IBM, có khả năng tính toán hàng triệu nước
cờ trong một giây và đây là một hệ thống song song sử dụng môi trường lập trình MPI.
Tính toán song song áp dụng trong khám phá tri thức từ cơ sở dữ liệu
(Knowledge Discovery from Databases - KDD & Data Mining)
2.1.2. Các hệ thống song song
Có rất nhiều các hệ thống song song khác nhau được phân loại theo cấu trúc, theo
chức năng hoặc theo sức mạnh tính toán. Sau đây là một số ví dụ về các hệ thống tính
toán song song:
- Cray T3E (massively parallel processors)
- IBM RS/6000 SP2 (distributed memory system)
- Sun Fire 15000 (shared memory system)
- Cray SV1 (massively parallel processors)
- PC-Cluster (một tập các máy PC được kết nối lại với nhau thông qua mạng chuyên

dụng hoặc mạng thông thường).
2.1.3. Môi trường lập trình
Môi trường lập trình song song được chia làm hai mức như sau:
Mức hệ thống: thường là một phần mềm hệ thống chạy ở background nhằm thực hiện
các chức năng trong tính toán song song như quản lý tiến trình (task management), truyền
thông (communication), đồng bộ hóa (synchronization), Mức này còn cung cấp thư
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
10
Tiểu luận môn học Hệ phân tán
viện bao gồm các hàm về truyền thông, đồng bộ hóa,. Hiện nay có khá nhiều phần mềm
hỗ trợ tính toán song song như MPI (Message Passing Interface), PVM (Parallel Virtual
Machine),
Mức ngôn ngữ lập trình song song: Ngôn ngữ C/C++ để lập trình song song kết hợp
với bộ thư viện của MPI hoặc PVM cung cấp, ngoài ra ngôn ngữ FORTRAN (fortran 77
hoặc fortran 90) hoặc HPF (High Performance Fortran) cũng được để lập trình song song.
2.1.4. Các mô hình và thuật toán song song
Về mô hình song song được chia ra các dạng chính sau đây: SIMD (Đơn dòng lệnh,
đa dữ liệu - Single Instruction Multiple Data); MISD (Đa dòng lệnh, đơn dữ liệu -
Multiple Instruction Single Data); MIMD (Đa dòng lệnh, đa dữ liệu - Multiple
Instructions Multiple Data).
Thuật toán song song rất đa dạng, mỗi bài toán có một chiến lược song song riêng. Có
hai chiến lược chính là song song theo chức năng và song song theo dữ liệu.
2.2. Các chiến lược song song hoá phổ biến
Trong rất nhiều chiến lược khác nhau để song song hoá thuật toán tuần tự, có ba
chiến lược thiết kế chương trình song song tương đối phổ biến là: song song hoá kết quả,
song song hoá đại diện và song song hoá chuyên biệt. Mặc dù, trong từng bài toán cụ thể
việc kết hợp các chiến lược thiết kế có thể cho ta kết quả thú vị, song thông thường tuỳ
thuộc tính chất bài toán, chỉ một chiến lược thiết kế thuật toán song song được chọn
nhằm đạt hiệu quả cao nhất.
2.2.1. Song song hoá kết quả

Việc phân loại các chiến lược thiết kế thuật toán song song phụ thuộc vào tính chất
bài toán. Song song hoá kết quả là cơ chế tính toán song song tập trung trên toàn bộ dữ
liệu của bài toán. Mỗi bộ xử lý sẽ cho một phần kết quả của bài toán và các bộ xử lý hoạt
động song song sao cho các phần việc được thực hiện độc lập tối đa có thể.
Sau khi các phần việc hoàn thành, công đoạn cuối cùng là kết hợp các thành phần để
được kết quả hoàn chỉnh. Các lớp bài toán chia - để - trị, bảng đen (trong hệ chuyên gia)
và lơi - lặp (iterative relaxtion) thường sử dụng chiến lược song song hoá kết quả để thiết
kế chương trình song song.
Mỗi bài toán trong lớp các bài toán chia-để -trị, thường được chia thành các bài toán
thành phần. Mỗi bài toán thành phần được giải quyết độc lập và kết quả cuối cùng là sự
kết hợp các kết quả của bài toán thành phần.
Trong hệ thống bảng đen cấu trúc dữ liệu thể hiện mô hình tính toán. Mỗi bộ xử lý
độc lập có trách nhiệm quản lý, kiểm tra trạng thái hiện thời và cập nhật nó nếu cần.
Trong lơi - lặp người ta chia không gian dữ liệu thành các vùng có quan hệ láng
giềng, mỗi vùng này được một hay nhiều bộ vi xử lý đảm nhiệm. Mỗi bộ vi xử lý này
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
11
Tiểu luận môn học Hệ phân tán
đảm trách công việc theo từng vùng song song và khi cần có sự truyền thông điệp với các
láng giềng.
Việc thiết kế chương trình theo chiến lược song song hoá kết quả thông qua năm giai
đoạn:
- Giai đoạn đầu cần phải mô hình kết qủa dưới dạng cấu trúc dữ liệu gồm nhiều thành
phần, đồng thời xác định được sự phụ thuộc giữa chúng.
- Giai đoạn hai, phân mỗi bộ xử lý đảm nhiệm công việc cho một hay nhiều thành phần
và việc phân chia này phải bảo đảm vấn đề hiệu suất của các bộ xử lý.
- Giai đoạn ba, xác định nguồn tài nguyên cần thiết để thực hiện việc tính toán các
thành phần.
- Bước tiếp theo xác định cách lấy các giá trị kết quả của các thành phần khi thực hiện
xử lý song song.

- Cuối cùng, là giai đoạn kết hợp các kết quả thành phần để được kết quả bài toán và
kết thúc các xử lý.
Ví dụ 1: Giả sử cần thực hiện tính n! trên hai máy tính, trong đó mỗi máy nhân n/2 số
với nhau và n lưu ở máy tính thứ nhất.
Kết quả của máy tính thứ hai khi được tính xong sẽ được chuyển về máy tính thứ nhất
để nó nhân hai kết quả bộ phận với nhau.
Bài toán này được phát biểu như sau:
B1. Máy tính thứ nhất gửi n cho máy tính thứ hai
B2. Cả hai máy tính thực hiện nhân n/2 số một cách đồng thời
P1= 1*2*3…*(ndiv2).
P2= n*(n-1)*(n-2)*…*(ndiv2+1)
B3. Máy tính thứ hai chuyển kết quả tính được về máy tính thứ nhất
B4. Máy tính thứ nhất nhân hai kết quả để có kết quả cuối cùng.
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
12
Tiểu luận môn học Hệ phân tán
2.2.2. Song song hoá đại diện
Thiết kế chương trình theo cơ chế song song hoá đại diện xác định cụ thể công việc
phải thực hiện để song song hoá. Như vậy, để giải quyết một bài toán có nhiều công
đoạn, mỗi công đoạn của bài toán được giải quyết song song cho đến khi hoàn thành
công đoạn đó và các công đoạn tiếp theo cũng được thực hiện tương tự cho đến khi bài
toán được giải quyết. Các mô hình của chiến lược này là Client/Server, tính toán - tổng
hợp - truyền thông.
Trong mô hình Client/Server, bài toán cần giải được chia thành các vấn đề phụ thuộc
lẫn nhau. Các bộ xử lý đóng vai trò tớ trong mô hình có nhiệm vụ xử lý các vấn đề này và
giữa chúng được điều phối bởi bộ xử lý đóng vai trò chủ. Khác với phương pháp chia để
trị, các vấn đề ở đây không nhất thiết cùng được tiến hành giải quyết, mà có thể được giải
quyết song song một cách tuần tự.
Trong mô hình tính toán - tổng hợp - truyền thông thiết kế bao gồm ba giai đoạn. Giai
đoạn tính toán thực hiện các tính toán cơ bản có tính chất cục bộ, giai đoạn tổng hợp kết

hợp các dữ liệu cục bộ thành dữ liệu toàn cục, giai đoạn truyền thông trả lại các thông tin
toàn cục cho các bộ xử lý.
Việc thiết kế chương trình theo chiến lược song song hoá đại diện được thực hiện
thông qua ba giai đoạn:
- Giai đoạn đầu xác định các công việc cần phải thực hiện bởi các bộ xử lý.
- Trong giai đoạn tiếp theo cần phải xác định bộ xử lý đóng vai trò điều khiển các công
việc.
- Cuối cùng cần phải nhận biết được kết quả công việc.
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
13
B1: Gửi giá trị n
B2: Tính P1=1*2*3*…*(n div 2) B2: Tính P2=n*(n-1)*…* ((n div 2) +1)
B3: Gửi giá trị P2
B4: return (P1*P2)
PC2
PC1
Tiểu luận môn học Hệ phân tán
2.2.3. Song song hoá chuyên biệt
Trong chiến lược song song hoá chuyên biệt, bài toán cần giải quyết bao gồm nhiều
công việc, mỗi công việc có đặc thù riêng được giao cho một bộ xử lý chuyên dụng.
Ngoài ra hệ thống cần một bộ xử lý giữ vai trò agent, điều phối quá trình thực hiện công
việc. Trong mỗi công việc đặc thù, các phần việc nhỏ hơn được thực hiện song song. Sau
khi các phần việc này hoàn thành, cần tiến hành “phối hợp” các kết quả để hoàn thành
công việc.
Một số mô hình thường gặp trong chiến lược thiết kế này là: ống dẫn và bộ lọc,
Client/Server.
Trong mô hình ống dẫn và bộ lọc dòng dữ liệu kết quả ra của quá trình xử lý A là dữ
liệu vào của quá trình xử lý B.
Trong mô hình Client/Server các yêu cầu từ các bộ xử lý đóng vai trò khách được gửi
đến các bộ xử lý đóng vai trò phục vụ để xử lý.

Ví dụ: Ta xét bài toán tìm phần tử a trên mảng A kích thước n.
Trong xử lý tuần tự: ta dùng một bộ xử lý duyệt từ phần tử đầu đến phần tử cuối của
mảng.
Trong xử lý song song, giả sử ta có một mô hình song song m bộ xử lý, ta chia việc
cho mỗi bộ xử lý đồng thực hiện tìm kiếm, một bộ xử lý tìm kiếm trên (n div m) phần tử.
Trong quá trình thực hiện, bộ xử lý nào tìm thấy phần tử a hoặc đã duyệt qua hết rồi
nhưng không tìm thấy thì phải gửi thông điệp để hệ thống xử lý nhận biết, điều khiển quá
trình xử lý.
Chúng ta dễ nhận thấy là độ phức tạp của xử lý song song có thể sẽ lớn hơn xử lý tuần
tự rất nhiều, bởi vì cần có sự trao đổi thông tin và sự đồng bộ các tiến trình trong quá
trình thực hiện xử lý bài toán, vấn đề chúng ta cần quan tâm ở đây chính là thời gian thực
hiện chương trình.
Một trong những mục đích chính của xử lý song song là nghiên cứu, xây dựng những
thuật toán thích hợp để cài đặt trên các máy tính song song, nghĩa là phát triển các thuật
toán song song nhằm giải quyết các bài toán đặt ra trong thực tế.
Vấn đề đặt ra là là đánh giá một thuật toán song song như thế nào được gọi là thích
hợp? Trong thuật toán tuần tự thì chúng ta đánh giá dựa vào thời gian thực hiện thuật
toán, không gian bộ nhớ và khả năng lập trình, Đánh giá thuật toán song song thì phức
tạp hơn nhiều, ngoài những tiêu chuẩn trên còn phải bổ sung thêm các thông số về số bộ
xử lý, khả năng của các bộ nhớ cục bộ, sơ đồ truyền thông, và các giao thức đồng bộ hoá
tiến trình …
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
14
Tiểu luận môn học Hệ phân tán
2.3. Biểu thức song song trong các ngôn ngữ thuật toán
Nguyên cứu một số khía cạnh cơ bản của việc lập trình bằng các ngôn ngữ thuật toán
cho phép biểu diễn cấu trúc kiểm tra và các cơ chế định danh.
Các ngôn ngữ có thể chia làm hai loại chính:
- Một số ngôn ngữ cho phép lập trình ứng dụng với tư cách là kích hoạt song song và
hoàn toàn không quan tâm đến vấn đề là sẽ triển khai chương trình trên hệ tập trung

hay là hệ phân tán. Các ngôn ngữ này triển khai cấu trúc kiểm tra có tính chất thủ tục.
Mặc dù có một số hạn chế, song chúng cũng triển khai trên các hệ phân tán.
- Một số ngôn ngữ khác cho phép triển khai tường minh công việc phân tán. Chúng cho
phép tạo các mối quan hệ cần thiết từ một trạm đến các trạm khác trong hệ phân tán.
Hai loại ngôn ngữ để thể hiện cho biểu thức song song trong các ngôn ngữ lập trình là
ngôn ngữ CSP [Hoare] và ADA [Ichbiah], các phương tiện định nghĩa các tiến trình và
thực hiện trao đổi thông tin giữa chúng với nhau. Hai ngôn ngữ này cho phép phân đoạn
dữ liệu của một ứng dụng thành các tập hợp độc lập nhau. Việc quản lý các tập hợp này
được tiến hành nhờ một tiến trình đặc biệt.
Cả hai ngôn ngữ này đều có các đặc tính chung như sau:
- Sự liên thông giữa hai tiến trình không cần đặt lại cho sự tồn tại của các biến toàn cục.
- Các cơ chế sơ đẳng của việc đồng bộ ví dụ như "cuộc gặp gỡ" của hệ CSP, "vào" của
ADA thường là gần giống nhau.
- Các cấu trúc mô phỏng tạo thuận lợi cho các tiến trình thể hiện việc chờ tương đối
đồng nhất và có điều kiện phù hợp với một trong các khả năng có thể. Các nguyên lý
khác nhau cho ta khả năng lựa chọn cấu trúc thể hiện quan hệ giữa các tiến trình cũng
như công cụ song song cho phép truy cập đến dữ liệu.
- Trong CSP, các quan hệ và các đồng bộ giữa các tiến trình được thể hiện tường minh
bằng các trao đổi thông điệp. Ngược lại, trong ngôn ngữ ADA, một tiến trình T1 nào
đó có thể truy cập vào dữ liệu cục bộ của tiến trình T2 khác bàng cách sử dụng hàm
nguyên thuỷ mà hiệu ứng của nó là việc gọi thực hiện thủ tục. Các đồng bộ thực tế
(tuỳ vào tình hình) được trình bày bởi T2 nhờ cấu trúc chính xác.
- Trong CSP, số lượng và lai lịch của các tiến trình được định nghĩa theo kiểu tĩnh. Một
dữ liệu nào đó chỉ để được truy cập bởi tiến trình có nhiệm vụ quản lý rõ ràng, trong
khi đó ADA cho phép nhiều tiến trình truy cập đến dữ liệu (việc kiểm soát dữ liệu
được giao cho một tiến trình đặc biệt).
Cần phải nhấn mạnh là ngôn ngữ ADA là một ngôn ngữ được xây dựng theo hướng
tổng quát. Nó biểu hiện một số đặc tính như biến toàn cục, các quy trình về trực quang
đối tượng,…
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)

15
[<Tiến trình 1>]||[<Tiến trình 2>]||…||[<Tiến trình n>]
Tiểu luận môn học Hệ phân tán
2.3.1. Ngôn ngữ CSP (Communicating Sequential Processes)
Ngôn ngữ CSP cho phép lập trình ứng dụng dưới dạng một số lượng tiến trình cố
định. Các tiến trình này có thể phối hợp với nhau nhờ phép toán liên lạc kiểu "kiểu gặp
gỡ".
Một chương trình bao gồm tập hợp các tiến trình có thể thể hiện dưới dạng sau đây:

Trong đó, <Tiến trình > dựa vào liên hợp một tên với mã chương trình nguồn của tiến
trình:
¢ đây, các biến toàn cục bị cấm áp dụng.
Các tiến trình cần có hai hàm nguyên thuỷ để trao đổi. Đó là gửi (phép ra) và nhận
(phép vào) một thông điệp. Mỗi tiến trình cần phải định danh tường minh người đối thoại
(đối tác) của mình và các thông điệp phải đúng kiểu. Các vào ra kinh điển được đảm bảo
bằng các tiến trình đựoc định nghĩa trước khi phối hợp các ngoại vi mắc nối.
Để gửi thông điệp cho tiến trình Q, tiến trình P cần phải sử dụng lệnh ra có dạng như
sau:
Việc tiếp nhận thông điệp tại Q được tiến hành thông qua lệnh có dạng sau:
Ta phải có các thông điệp cấu trúc hoá ví dụ như việc chuyển hai giá trị nguyên có thể
thể hiện như sau:
Việc kiểm tra chặt chẽ trên lai lịch của người đối thoại và trên kiểu của các thông điệp
trao đổi được tiến hành khi thử hiệu chỉnh và dịch chương trình. Ngược lại chính việc
kiểm tra đó có thể lại là việc bắt buộc đối với người lập trình.
2.3.2. Ngôn ngữ ADA
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
16
Name::<text>
Q!<Biểu thức>
P?<Biến>

Q!(4,5) trong P
P!(i,j) trong Q
Tiểu luận môn học Hệ phân tán
Ngôn ngữ ADA là ngôn ngữ mô phỏng (giả ADA) có nghĩa là đặc điểm giống với
ADA, còn phần cú pháp là phần giả định. Thông qua ngôn ngữ này người ta có thể phân
rã chương trình thành một tập hợp các tiến trình song song mà mỗi tiến trình này ta gọi là
hoạt động chia sẻ các biến tổng quát. Số lượng các tiến trình có thể phát triển động và các
trao đổi tiến hành nhờ vào việc gọi thực hiện thủ tục hay điểm vào.
Hoạt động
Theo ADA, một hoạt động được định nghĩa tĩnh, nhưng việc thực hiện lại động nhờ
vào lệnh khởi sự từ đầu. Khi ta mô tả một hoạt động trong ngôn ngữ ADA, ta cần xác
định các điểm sau đây:
- Các dữ liệu cục bộ.
- Các thủ tục cho phép truy cập vào dữ liệu cục bộ.
- Một chương trình tuần tự hay thân của hoạt động được thực hiện cùng lệnh
khởi sự ban đầu.
Các dữ liệu cục bộ của một hoạt động không được truy cập bởi các hoạt động khác,
nhưng chúng lại có thể gọi một vài thủ tục có thể thực hiện nhiệm vụ của chương trình
gọi như phản ảnh trong hình vẽ sau.
Điểm vào
Trong quá trình thực hiện, hai hoạt động có thể trao đổi thông tin với nhau hay vào
theo kiểu cạnh tranh để truy cập dữ liệu. Trong ví dụ trên, khi T1 thực hiện P, nó có thể
vào và xung đột với T2 để truy cập dữ liệu D. Thực tế T2 hành động như là kiem_tra để
kiểm tra các truy cập vào D. Tất cả các hành động trên D có thể thực hiện song song
được xác định như là thủ tục. Ngược lại các hành động theo kiểu loại trừ tương hỗ được
thực hiện trực tiếp bởi T2; chúng được xác định hư là một điểm vào.
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
17
Khai báo T
1

Khai báo T
2
Khai báo T
1
Khai báo T
2
Thân của hoạt
động T
1
Quá trình trao đổi từ xa
được bắt đầu bằng tiến
trình T
1
Các đường chấm chỉ quá
trình thực hiện lệnh từ xa.
Dữ liệu D
Thủ tục P
Hình 5.Thực hiện chương trình từ xa trong ADA
Tiểu luận môn học Hệ phân tán
Trong hoạt động, khai báo vào cũng giống như phần đầu của khai báo thủ tục. Như
thế, trong T2, ta có phần khai báo như sau:
Có nghĩa là E (thực thể) là một vào với hai tham số kiểu nguyên; tham số thứ hai có
thể thay đổi.
Ta có thể tìm thấy hoạt động khác ví dụ như T1 một lời gọi có dạng T2.E(4,Z). Quan
sát từ bên ngoài, ta có nhận xét rằng để cho T1, việc gọi này chính là gọi thủ tục; khi T2,
chuyển sang lệnh tiếp theo, việc xử lý tương ứng với E, bằng cách sử dụng Z, đã được
thực hiện. Giá trị Z là tham số ra có thể đã thay đổi. Thực tế, việc xử lý này được thực
hiện bởi T2 bằng một lệng đặc biệt chap_nhan(accept). Lệnh này được thực hiện như sau:
Chừng nào một lệnh gọi vào đã không được thực hiện, lệnh chap_nhan sẽ là một lệnh
treo. Ngược lại phải gọi vào treo hoạt động thực hiện nó cho đến khi hoạt động mà ở đó

vào đã kết thức việc thực hiện một lệnh chap_ nhan tương ứng với vào đó đã được khai
báo có nghĩa là thực hiện các lệnh giữa do và end phối hợp cùng với chap_nhan.
Để cùng một vào, ta có thể tìm thấy nhiều lệnh chap_nhan; điều đó cho phép kết hợp
nhiều xử lý khác nhau.
Cuối cùng, việc xử lý có thể bị bỏ sót do thiếu do…end chẳng hạn. Điều đó tương ứng
với việc chỉ thực hiện "cuộc gặp gỡ".
Chờ bội
ADA là ngôn ngữ chờ không hạn định một lời gọi trong nhiều lời gọi cho phép.
Ví dụ: Phát biểu sau:
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
18
Thực thể E(X: nguyên ; Y: out nguyên)
Chấp nhận E(X: in nguyên ; Y: out nguyên) do Y:=X+1
Chấm dứt
Lựa chọn
Chấp nhận X(…) thực hiện T
1
kết thúc
TL
1
hoặc
chừng nào C
1
⇒accept Y(…) thực hiện
kết thúc
TL
2
Kết thúc
Tiểu luận môn học Hệ phân tán
Chỉ ra rằng:

- Nếu C1 nhận giá trị false, thì chờ một lời gọi từ X.
- Nếu C1 nhận giá trị true, thì chờ một lời gọi từ X hay từ Y.
Trong trường hợp sau cùng, nếu không có lời gọi nào từ X hay từ Y đã được tiến hành
thì hoạt động thực hiện lệnh lua chon bị treo; nó phải chấp nhận lời gọi đầu tiên trong số
hai "chờ" nêu trên. Mỗi khi việc chọn lựa là có thể thì nó là bấp bênh.
Việc xử lý từng nhánh được phân định thành hai phần bàng từ khoá ket thuc Ti và
TLi; trong quá trình Ti, hoạt động gọi đang trong trạng thái chờ và trong TLi, nó có thể
thực hiện công việc của mình theo kiểu song song.
Cần lưu ý rằng các xử lý Ti và TLi là các dãy phát biểu nào đó và có thể chứa các lựa
chọn và các chấp nhận.

2.4. Một số thư viện và công cụ hỗ trợ lập trình song song khác

OpenMP (Open Multi-Processing):
Là công cụ cho phép lập trình song song hỗ trợ C/C++ và Fortran77/90. OpenMP hoạt
động trên hệ thống kiến trúc share memory (ví dụ: các máy tính đa lõi (multi-core)).
- Ưu điểm: Sử dụng rất đơn giản. Chương trình parallel không phải thay dổi
nhiều so với chương trình serial. Chương trình vẫn có thể chạy serial bình
thường nếu compiler không hỗ trợ OpenMP. Có thể cho code chạy rất nhanh
trên các CPU đa lõi mà hiện nay rất phổ biến trên thị trường.
- Nhược điểm: Compiler cần hỗ trợ OpenMP, ví dụ như Intel Comiler. Cần hệ
thống có kiến trúc share memory

MPI (Message Passing Interface):
Là thư viện lập trình song song của C/C++ và Fortran77/90 cho phép các máy tính
giao tiếp với nhau thông qua việc gửi và nhận các message tường minh. MPI thường sử
dụng cho hệ thống có kiến trúc distributed memory, ví dụ: hệ cluster nhiều máy tính, tuy
nhiên nó cũng hoạt động bình thường trên hệ thống kiến trúc share memory
- Ưu điểm: Hỗ trợ hầu như tất cả compiler C và Fortran. Chạy được trên mọi
kiến trúc máy tính từ đa lõi đến cluster

- Nhược điểm: Lập trình khó hơn so với OpenMP vì người lập trình phải thao
tác trực tiếp với các gói data trao đổi giữa các thread. Chương trình không thể
chạy serial bình thường nếu không có thư viện MPI. Có thể lãng phí nhiều bộ
nhớ nếu chạy trên hệ thống kiến trúc share memory
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
19
Tiểu luận môn học Hệ phân tán
Hiện nay, nhiều ngôn ngữ lập trình song song đang được sử dụng như: Fortran 90,
CUBE C, Occam, C-Linda, PVM với C/C++,CDC 6600, là công cụ quan trọng cho
phép chúng ta cài đặt thuật toán song song trên những mô hình máy tính hổ trợ việc xử lý
song song.
Xử lý song song là một vấn đề phức tạp, khó khăn trước mắt chính là sự thay đổi về
tư duy thuật toán (lâu nay chúng ta đã quen với cách nhìn vấn đề một cách tuần tự ), xây
dựng mô hình máy tính song song, kỹ thuật cài đặt chương trình nhưng những gì mà
lập trình song song đem lại thì thật là to lớn, không thể phủ nhận.
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
20
Tiểu luận môn học Hệ phân tán
CHƯƠNG 3. CÁC ĐIỂM CẢI TIẾN CHỦ YẾU ĐỂ THUẬT TOÁN
LAMPORT HOẠT ĐỘNG NHANH HƠN
3.1. Thuật toán giả phân tán: Hàng đợi tập trung
− Có một trạm là trạm điều khiển đảm nhiệm việc cung cấp tài nguyên.
− Các trạm khi yêu cầu miền găng sẽ gửi các thông điệp đến trạm điều khiển.
− Trạm điều khiển duy trì một hàng đợi chứa các yêu cầu và cấp cho mỗi trạm quyền
truy cập vào miền găng theo lần lượt.
− S
d
(trễ đồng bộ) = 2T
− Thông lượng: 1/(2T + E)
− Tiến trình trạm điều khiển với Hàng đợi Yêu cầu (Request Queue):

HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
21
1
2 3
C
REQ
ACK
1
Tiến trình 1 yêu cầu truy cập vào miền
găng CS. Điều phối viên đưa yêu cầu
vào hàng đợi và cấp quyền truy cập vì
lúc đầu hàng đợi trống.
1 2 3
C
REQ
1
Không hồi âm
2
Tiến trình 2 yêu cầu truy cập vào CS.
Điều phối viên xếp yêu cầu vào hàng
đợi và từ chối không cho truy cập vì
hàng đợi không trống.
Tiến trình 1 rời khỏi CS. Điều phối viên
loại bỏ 1 khỏi hàng đợi và cấp quyền
truy cập cho tiến trình đầu tiên trong
hàng đợi – đó là tiến trình 2
1
2 3
C
REL

ACK
2
Tiểu luận môn học Hệ phân tán
− Ưu điểm: chính xác, công bằng, không đói, đơn giản
− Nhược điểm: điểm sự cố đơn, hoạt động theo cách cổ chai
3.2. Thuật toán Lamport: Hàng đợi phân tán
Khái quát:
+ Thuật toán là sự suy rộng của Hàng đợi tập trung cho việc cài đặt phân tán.
+ Thuật toán này được Lamport (1978) đưa ra, nó sử dụng cơ chế đóng dấu thời gian
cho việc đồng bộ các đồng hồ lôgic.
Các giả định:
+ Chúng ra giả định mô hình mạng kết nối hoàn toàn trong đó các tiến trình liên lạc
thông qua các kênh FIFO tin cậy. Tức là, các thông điệp không thể sắp xếp lại theo
trật tự khác.
+ Các giả định được thực thi một cách dễ dàng ở tầng giao vận.
Các kiểu thông điệp:
+ (REQ, C
i
, i) : Một yêu cầu cho việc truy cập vào miền găng CS của tiến trình Pi.
Yêu cầu này được phát đi cho tất các các tiến trình khác.
+ (REP, C
i
, i) : Hồi âm từ tiến trình Pi cho tiến trình Pj khi Pi nhận được yêu cầu từ
Pj.
+ (REL, C
i
, i) : Thông điệp giải phóng từ Pi thông báo cho biết nó đã rời khỏi CS.
Thông điệp này được gửi cho tất cả các tiến trình khác.
Các biến tiến trình:
+ C

i
: Đồng hồ cục bộ của Pi, khởi tạo từ 0.
+ q
i
: Hàng đợi [0 … n-1] chứa các thông điệp.
Thuật toán:
+ Khi một tiến trình tại trạm S
i
muốn thi hành đoạn găng, nó sẽ gửi thông điệp REQ
có đánh dấu thời gian cho tất cả các trạm trong hệ thống kể cả trạm S
i
.
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
22
Tiểu luận môn học Hệ phân tán
+ Mỗi trạm duy trì một hàng đợi chứa các thông điệp yêu cầu được sắp xếp theo trật
tự các dấu thời gian; các đồng hồ logic và quan hệ trật tự toàn cục được sử dụng để
gắn các dấu thời gian.
+ Khi một trạm nhận được yêu cầu, nó sẽ đưa thông điệp đó vào hàng đợi yêu cầu
của nó theo thứ tự dấu thời gian và gửi một thông điệp trả lời REP. Nếu cần, quan
hệ trật tự toàn cụcđược sử dụng để phá vỡ các sự ràng buộc.
+ Ý tưởng chung là một tiến trình không thể thi hành đoạn găng của nó cho đến khi
nó nhận được trả lời từ tất cả các trạm khác. Các thông điệp trả lời sẽ “flush out”
các yêu cầu bất kỳ từ các tiến trình khác, để chúng ta biết hàng đợi được cập nhật.
+ Đặc biệt hơn nữa, một trạm thi hành miền găng của nó khi:
1) Nhận được thông điệp trả lời từ tất cả các trạm còn lại và
2) Yêu cầu REQ của nó là ở trên đỉnh của hàng đợi cục bộ của nó.
+ Khi một trạm hoàn thành miền găng của nó, nó sẽ gửi khuyến nghị giải phóng
REL đến tất cả các trạm. Yêu cầu của nó được loại khỏi tất cả các hàng đợi tại thời
điểm này. Nếu các trạm khác đang chờ để thi hành miền găng của chúng, một

trong các trạm đó bây giờ có thể bắt đầu thực hiện miền găng của mình.
+ Hoạt động: 3(N-1) thông điệp cần thiết cho mỗi miền găng được thi hành. (N-1)
thông điệp REQ, (N-1) thông điệp REP và (N-1) thông điệp REL.
+ Độ trễ đồng bộ: T (trong đó T thời gian trung bình truyền thông điệp). Khi nhận
được thông điệp giải phóng, tiến trình tiếp theo có thể bắt đầu thi hành.
+ Loại trừ tương hỗ là đạt được: Các dấu thời gian là duy nhất, vì vậy tất cả các hàng
đợi sẽ giữ các yêu cầu trong cùng một thứ tự. Chỉ một tiến trình duy nhất sẽ nằm ở
đỉnh của các hàng đợi.
Thuật toán yêu cầu của P
i
:
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
23
ci ← ci + 1 ;
broadcast (REQ, ci, i) ;
qi [i] ← (REQ, ci, i) ;
wait

∀ j = i timestamp(qi[i]) < timestamp(qi[j]) ;
< CSi >
ci ← ci + 1 ;
broadcast (REL, ci, i) ;
qi [i] ← (REL, ci, i) ;
Tiểu luận môn học Hệ phân tán

trong đó
– timestamp( (m, c, i ) ) = (c, i)
– (c, i) < (d, j) nếu c < d hoặc ( c = d và i < j )
Thuật toán nhận thông điệp của P
i

:
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
24
on receipt
of (REQ, k, j) begin
ci ← max(ci , k) + 1 ;
qi [j] ← (REQ, k, j) ;
send(REP, ci, i) to j ;
end ;
of (REL, k, j) begin
ci ← max(ci , k) + 1 ;
qi [j] ← (REL, k, j) ;
end ;
of (REP, k, j) begin
ci ← max(ci , k) + 1 ;
if type of (qi [j]) = REQ then
qi [j] ← (REP, k, j) ;
end ;
Tiểu luận môn học Hệ phân tán
− Ví dụ 1:
− Ví dụ 2:
HVTH. Nguyễn Thành Thủy, Lớp KHMT-K10 (2008-2011)
25
C
2
= 1
q2 = [(REL, 0, 1),
(REQ, 1, 2)]
C
1

= 3
q1 = [(REQ, 3, 1),
(REQ, 1, 2)]
C
1
= 5
q1 = [(REQ, 3(1), 1),
(REQ, 1, 2)]
C
2
= 3
q2 = [(REP, 2, 1),
(REQ, 1, 2)]
C
1
= 2
q1 = [(REL, 0, 1),
(REQ, 1, 2)]
C
2
= 4
q2 = [(REQ, 3(1), 1),
(REQ, 1, 2)]
(REQ, 1, 2)
(REP, 2, 1)
(REQ, 3, 1)
(REP, 4, 2)
(REQ, 1, 1)
C
2

= 3
q2 = [(REQ, 1, 1),
(REQ, 1, 2)]
C
1
= 2
q1 = [(REQ, 1, 1),
(REQ, 1, 2)]
(REQ, 1, 2)
(REP, 2, 1)
(REQ, 1, 1)
C
2
= 1
q2 = [(REL, 0, 1),
(REQ, 1, 2)]
C
1
= 1
q1 = [(REQ, 1, 1),
(REL, 0, 2)]
C
2
= 2
q2 = [(REQ, 1, 1),
(REQ, 1, 2)]
(REP, 2, 2)
C
1
= 3

q2 = [(REQ, 1, 1),
(REQ, 1, 2)]

×