Tính cấp thiết về mặt nguyên lý và kỹ thuật của vấn đề đồng bộ hóa các tiến trình này thể hiện ở hai nguyên lý cơ bản sau : + Nhìn chung, các tiến trình kể cả các tiến trình xuất phát từ
Trang 1PHẦN I: CƠ SỞ LÝ THUYẾT
CHƯƠNG 1: GIỚI THIỆU VỀ HỆ PHÂN TÁN
1.1 Hệ Phân tán
Hệ tin học phân tán hay nói ngắn gọn là 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 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 hệ điều hành
Hê ̣ thống tính toán phân tán đã ta ̣o được bước ngoă ̣c vĩ đa ̣i so với các hê ̣
tâ ̣p trung, và hê ̣ khách chủ (Client/Server) Viê ̣c tính toán phân tán về cơ bản cũng giống như viê ̣c tính toán của hê ̣ khách chủ trên pha ̣m vi rô ̣ng lớn Dữ liê ̣u đươ ̣c chứa trên nhiều máy chủ ở ta ̣i nhiều vi ̣ trí đi ̣a lý khác nhau kết nối nhau thông qua ma ̣ng diê ̣n rô ̣ng WAN hình thành các nơi làm viê ̣c, các phòng ban, các chi nhánh của mô ̣t cơ quan
Tính toán phân tán hình thành từ tính toán tâ ̣p trung và chient/server Các
ma ̣ng đươ ̣c xây dựng dựa trên kỹ thuâ ̣t Web (ví du ̣ như: Internet; intranet…) là các ma ̣ng phân tán Hê ̣ thống cơ sở dữ liê ̣u back-end có thể được nối kết với các server Web để lấy đươ ̣c các thông tin đô ̣ng Kỹ thuâ ̣t Web nầy đã mở ra hướng mới cho hê ̣ phân tán Các trình duyê ̣t Web giúp cho khách hàng trên toàn cầu kết nối với hê ̣ thống Web chủ, mà không bi ̣ khống chế bởi bất kỳ hê ̣ điều hành nào đang cha ̣y trong máy của khách hàng này
1.2 Các điểm ma ̣nh trong hê ̣ tin học phân tán
- Cơ chế tính toán phân tán hỗ trợ truy câ ̣p các dữ liê ̣u được lưu ở nhiều nơi
- Nhờ cơ chế nhân bản nên người dùng chỉ cần truy câ ̣p cu ̣c bô ̣ cũng lấy đươ ̣c các thông tin từ các trung tâm chính ở rất xa
- Hê ̣ thống này khắc phu ̣c đươ ̣c các hiểm ho ̣a đi ̣a phương Vì nếu chúng ta không truy câ ̣p dữ liê ̣u được ta ̣i vi ̣ trí này, chúng ta có thể thử ở nơi khác
- Dữ liê ̣u phân tán đòi hỏi phải được nhân bản và đồng bô ̣ hóa cao thông qua các mối liên kết ma ̣ng, điều này làm cho viê ̣c quản tri ̣ và giám sát phức
Trang 2ta ̣p hơn Mô ̣t số nhà quản tri ̣ cho rằng, ở hê ̣ thống như thế này sẽ gây khó khăn trong vấn đề bảo mâ ̣t và điều khiển
- Hê ̣ phân tán được xây dựng trên giao thức TCP/IP và các kỹ thuâ ̣t Web cùng với các ứng du ̣ng trung gian (middleware) thúc đẩy viê ̣c tính toán phân tán Quả thâ ̣t đây là mô ̣t đổi thay mang tính cách ma ̣ng Nhiê ̣m vu ̣ trước mắt là làm thế nào để chuyển tiếp sang hê ̣ này mô ̣t cách khoa ho ̣c
1.3 Các Mô hình ứng du ̣ng Phân tán
Có mô ̣t số mô hình trong xây dựng ứng du ̣ng phân tán, và cung cấp cách giao tiếp giữa các client, các server và các thành phần chương trình gồm:
- RPC (remote procedure call) Giao thức truyền thông theo phiên giữa các máy được kết nối giữa các ma ̣ng RPC thường được sử du ̣ng trong các thao tác cần thời gian thực, hướng kết nối
- Messaging services Di ̣ch vu ̣ thông điê ̣p còn go ̣i là di ̣ch vu ̣ MOM (message-oriented middleware) - cung cấp mô ̣t phương thức trao đổi thông tin giữa các ứng du ̣ng và các thành phần dùng hàng đợi và cách chuyển thông điê ̣p theo từng bước (store - and - forward) Cách nầy không phù hợp với truyền thông trong thời gian thực
- ORB (object-request broker) Mô ̣t tác nhân kiểm soát truyền thông, cho phép các đối tượng được phép truyền thông lên ma ̣ng Ví du ̣ mô ̣t đối tượng đang cha ̣y trên client nào đó nếu muốn gửi mô ̣t thông điê ̣p cho mô ̣t đối tượng khác đang cha ̣y trên server, ta có thể gửi thông điê ̣p từ giao diê ̣n ORB của client đến cho giao diê ̣n ORB của server
Trang 3CHƯƠNG 2 MỘT SỐ PHƯƠNG PHÁP ĐỒNG BỘ HÓA
Ngày nay, công nghệ thông tin nhìn chung phát triển rất mạnh mẽ Từ các quốc gia có nền kinh tế kém phát triển đến các cường quốc kinh tế cũng đều có nhu cầu rất lớn về xử lý thông tin Nhu cầu thu thập thông tin có thể xuất phát từ nhiều nguồn khác nhau và ở cách xa nhau Vấn đề đặt ra là làm thế nào chúng ta
có thể xử lý thông tin ở cách xa nhau một cách nhanh nhất và hiệu quả nhất giữa các hệ thống tin học, mà không xảy ra tranh chấp trong việc thu thập và xử lý thông tin giữa các hệ thống tin học ở khắp nơi trên thế giới
Để giải quyết vấn đề này thì việc thiết kế các chiến lược đồng bộ hóa các tiến trình trong các hệ thống tin học là rất cần thiết và được quan tâm chú ý rất nhiều Tính cấp thiết về mặt nguyên lý và kỹ thuật của vấn đề đồng bộ hóa các tiến trình này thể hiện ở hai nguyên lý cơ bản sau :
+ Nhìn chung, các tiến trình kể cả các tiến trình xuất phát từ các ứng dụng độc lập muốn truy cập vào các tài nguyên với số lượng vốn rất hạn chế hay truy cập vào thông tin dùng chung cùng một lúc Trường hợp này gọi là truy cập tương tranh Vì vậy, tương tranh là nguyên nhân chính của các xung đột giữa các tiến trình muốn truy cập vào tài nguyên dùng chung
+ Các tiến trình của cùng một hệ ứng dụng hoạt động theo kiểu hợp lực để giải quyết các bài toán đặt ra và cho kết quả nhanh chóng nhất Điều này cho phép tăng hiệu năng sử dụng thiết bị và hiệu quả hoạt động của chương trình Vì vậy hợp lực là nguyên nhân chính của sự tác động tương hỗ được lập trình giữa các tiến trình nhằm cho phép chúng tham gia vào các hành động chung
Sự tương tranh và hợp lực giữa các tiến trình đòi hỏi phải có trao đổi thông tin qua lại với nhau Trong hệ tin học phân tán, các thông tin cần trao đổi thông qua các kênh thuộc hệ thống viễn thông
Có nhiều phương pháp đồng bộ hóa tiến trình Dưới đây sẽ giới thiệu một
số các phương pháp đồng bộ hóa các tiến trình để thực hiện việc truy xuất các miền găng
Trang 42.1 Đồng bộ hóa bằng phương pháp kiểm tra luân phiên
Đây là một giải pháp đề nghị cho hai tiến trình Hai tiến trình này sử dụng
chung biến turn (phản ánh phiên tiến trình nào được vào miền găng), được khởi động với giá trị 0 Nếu turn = 0, tiến trình A được vào miền găng Nếu turn = 1, tiến trình A đi vào một vòng lặp chờ đến khi turn nhận giá trị 0 Khi tiến trình A rời khỏi miền găng, nó đặt giá trị turn về 1 để cho phép tiến trình B đi vào miền
găng
(a) Cấu trúc tiến trình A
while (TRUE) {
while (turn != 0); // wait
critical-section ();
turn = 1;
Noncritical-section ();
}
(b) Cấu trúc tiến trình B
while (TRUE) {
while (turn != 1); // wait
critical-section ();
turn = 0;
Noncritical-section ();
} Giải pháp này dựa trên việc thực hiện sự kiểm tra nghiêm nghặt đến lượt tiến trình nào được vào miền găng Do đó nó có thể ngăn chặn được tình trạng hai tiến trình cùng vào miền găng, nhưng lại có thể vi phạm điều kiện thứ ba: một tiến trình có thể bị ngăn chặn vào miền găng bởi một tiến trình khác không
ở trong miền găng Giả sử tiến trình B ra khỏi miền găng rất nhanh chóng Cả hai tiến trình đều ở ngoài miền găng, và turn = 0 Tiến trình A vào miền găng và
ra khỏi nhanh chóng, đặt lại giá trị của turn là 1, rồi lại xử lý đoạn lệnh ngoài
Trang 5miền găng lần nữa Sau đó, tiến trình A lại kết thúc nhanh chóng đoạn lệnh ngoài miền găng của nó và muốn vào miền găng một lần nữa Tuy nhiên lúc này
B vẫn còn mãi xử lý đoạn lệnh ngoài miền găng của mình, và turn lại mang giá trị 1 Như vậy, giải pháp này không có giá trị khi có sự khác biệt lớn về tốc độ thực hiện của hai tiến trình
2.2 Đồng bộ hóa bằng giải pháp phần cứng thông qua chỉ thị TSL
(Test-and-Set-Lock)
Đây là một giải pháp đòi hỏi sự trợ giúp của cơ chế phần cứng Nhiều máy tính cung cấp một chỉ thị đặc biệt cho phép kiểm tra và cập nhật nội dung một
vùng nhớ trong một thao tác không thể phân chia, gọi là chỉ thị Test-and-Set Lock (TSL) và được định nghĩa như sau:
Test-and-Setlock(boolean target)
{
Test-and-Setlock = target;
target = TRUE;
} Nếu có hai chỉ thị TSL xử lý đồng thời (trên hai bộ xử lý khác nhau), chúng
sẽ được xử lý tuần tự Có thể cài đặt giải pháp truy xuất độc quyền với TSL bằng cách sử dụng thêm một biến lock, được khởi gán là FALSE Tiến trình phải kiểm tra giá trị của biến lock trước khi vào miền găng, nếu lock = FALSE, tiến trình có thể vào miền găng
while (TRUE) {
while (Test-and-Setlock(lock));
critical-section ();
lock = FALSE;
Noncritical-section ();
}
Trang 6Cũng giống như các giải pháp phần cứng khác, chỉ thị TSL giảm nhẹ công việc lập trình để giải quyết vấn đề, nhưng lại không dễ dàng để cài đặt chỉ thị TSL sao cho được xử lý một cách không thể phân chia, nhất là trên máy với cấu hình nhiều bộ xử lý
Tất cả các giải pháp trên đây đều phải thực hiện một vòng lặp để kiểm tra liệu nó có được phép vào miền găng, nếu điều kiện chưa cho phép, tiến trình phải chờ tiếp tục trong vòng lặp kiểm tra này Các giải pháp buộc tiến trình phải liên tục kiểm tra điều kiện để phát hiện thời điểm thích hợp được vào miền găng
như thế được gọi các giải pháp « busy waiting » Lưu ý rằng việc kiểm tra như
thế tiêu thụ rất nhiều thời gian sử dụng CPU, do vậy tiến trình đang chờ vẫn chiếm dụng CPU
2.3 Đồng bộ hóa bằng phương pháp trao đổi thông điệp
Phương pháp này dựa trên cơ sở trao đổi thông điệp với hai primitive Gui
và Nhan để thực hiện sự đồng bộ hóa:
+ Gui(destination, message): gởi một thông điệp đến một tiến trình hay
gởi vào hộp thư
+ Nhan(source,message): nhận một thông điệp từ một tiến trình hay từ
bất kỳ một tiến trình nào, tiến trình gọi sẽ chờ nếu không có thông điệp nào để nhận
Có nhiều cách thức để thực hiện việc truy xuất độc quyền bằng cơ chế trao đổi thông điệp Đây là một mô hình đơn giản: một tiến trình kiểm soát việc sử dụng tài nguyên và nhiều tiến trình khác yêu cầu tài nguyên này Tiến trình có yêu cầu tài nguyên sẽ gởi một thông điệp đến tiến trình kiểm soát và sau đó chuyển sang trạng thái blocked cho đến khi nhận được một thông điệp chấp nhận cho truy xuất từ tiến trình kiểm soát tài nguyên Khi sử dụng xong tài nguyên, tiến trình gởi một thông điệp khác đến tiến trình kiểm soát để báo kết thúc truy xuất Về phần tiến trình kiểm soát, khi nhận được thông điệp yêu cầu tài nguyên, nó sẽ chờ đến khi tài nguyên sẵn sàng để cấp phát thì gởi một thông điệp đến tiến trình đang bị khóa trên tài nguyên đó để đánh thức tiến trình này
Trang 7while (TRUE) { Gui(process controler, request message);
Nhan(process controler, accept message);
critical-section ();
Gui(process controler, end message);
Noncritical-section ();
} Trong những hệ thống phân tán mà mỗi bộ xử lý sỡ hữu một bộ nhớ riêng biệt và liên lạc thông qua mạng, cơ chế trao đổi thông điệp tỏ ra hữu hiệu và được dùng nhiều để giải quyết bài toán đồng bộ hóa
Trang 8CHƯƠNG 3: ĐỒNG BỘ HÓA BẰNG PHƯƠNG PHÁP TRẬT TỰ
Trong mô hình đồng bộ hoá bằng phương pháp trật tự Có 2 phương pháp
mà ta đặc biệt chú ý quan tâm và nghiên cứu kỹ chúng là:
+ Đồng bộ hóa bằng phương pháp trật tự từng phần + Đồng bộ hóa bằng phương pháp trật tự tổng quát chặt chẽ
3.1 Đồng bộ hóa bằng phương pháp trật tự từng phần
Trong các hệ thống 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 Trong thực tiễn, có một số hệ thống vấn đề về đồ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à các tiến trình của nó cần phải đồng bộ là vấn đề cần quan tâm giải quyết
Trong các hệ thống phân tán, việc đồng bộ hóa chỉ đặt ra duy nhất vấn đề 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ự đó chỉ thể hiện được thông qua việc trao đổi các thông điệp với nhau
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 ký hiệu là và gọi là “có trước” Quan hệ này tối thiểu
phải thỏa mãn được các ràng buộc thể hiện qua hai cách:
+ Nếu A và B là hai sự kiện của cùng một trạm và nếu A được thực hiện trước B thì theo trật tự cục bộ của trạm ta có: A B
+ Nếu A là phát thông điệp bởi một trạm nào đó và nếu B là thu của thông điệp này thì ta có A B
Trang 9Trật tự từng phần của các sự kiện
A1A2A3A4A5
B1B2B3B4B5
Trao đổi thông điệp
A2B2 và B3A4
Xét mô hình quen thuộc trong phần nguyên lý hệ điều hành là người sản xuất - người tiêu thụ, trong đó khả năng tiêu thụ là nguyên nhân chính hạn chế
số lượng hàng hóa sản xuất ra để nó không vượt quá số lượng tiêu thụ một giá trị lớn hơn N Người sản xuất P và người tiêu thụ C là hai người nằm trên hai trạm cách xa nhau
Giả sử rằng NP là số lượng sản xuất ra và NC là số lượng tiêu thụ tại thời điểm khởi sự C chỉ tiêu thụ được một sản phẩm, nếu sản xuất sản phẩm đó đã diễn ra, có nghĩa là, nếu: NP – NC > 0
Tương tự, P chỉ sản xuất một thông tin, nếu: NP – NC < N
Hai quan hệ này thể hiện các điều kiện của việc đồng bộ hóa và có thể mô
tả trong hình sau:
Hình 2: Quan hệ có trước trong mô hình người sản
xuất-người têu thụ
t
A1 A2 A3 A4 A5
B1 B2 B3 B4 B5
Ví dụ: Mô tả trật tự từng phần
P i+N
P i+N+1
P
1
C 1
C i+1
P i : Sản xuất thứ i
C
i : Tiêu thụ thứ i
Hình 2: Quan hệ có trước trong mô hình
người sản xuất- người tiêu thụ
Trang 10Trong hệ thống tin học phân tán, người ta có thể vận dụng hợp lực này theo kiểu như sau:
+ Trên trạm P một biến NP thể hiện số lượng chính xác sản xuất đã có + Trên trạm C một biến NC thể hiện số lượng chính xác tiêu thụ đã thực hiện
+ Trên trạm P một biến NC’ ảnh của NC mà P gia tăng mỗi một lần nó nhận được thông điệp từ C báo cho nó biết là tiêu thụ mới đã diễn ra
+ Trên trạm C một biến NP’ ảnh của NP mà C gia tăng mỗi một lần nó nhận thông điệp từ P báo cho nó biết một sản xuất mới đã diễn ra
Ta sẽ chứng minh rằng một sự đồng bộ hóa chính xác được đảm bảo bằng việc xác nhận trên mỗi trạm các điều kiện sau đây:
1/ Trên trạm sản xuất:
NP’ – NC > 0 2/ Trên trạm tiêu thụ:
NP – NC’ < N
Ta có thể viết:
NP = NP’ + np, với np > 0 trong đó, np số lượng thông tin đã sản xuất bởi P mà C không biết,
NC = NC’ + nc, với nc > 0 trong đó, nc số lượng thông tin đã tiêu thụ bởi C mà P không biết
Ta có thể khái quát hóa phương pháp này cho điều kiện đồng bộ hóa bằng công thức:
∑CiXi > K (theo i) trong đó, Ci và K là các hằng số Ta hoàn toàn có khả năng và điều kiện mạnh hơn bằng cách thay thế tất cả các Xi mà hệ số của nó là đại lượng dương bằng các ảnh của nó X’i , nếu và chỉ nếu các Xi là các biến không lùi
Vì nguyên nhân xa cách giữa người sản xuất và người tiêu thụ mà trật tự tổng quát này không cần thiết và chỉ cần sử dụng để đồng bộ hóa các bản sao các biến trạng thái gần đúng là đủ
Trang 11Trong hệ thống người sản xuất - người tiêu thụ, nếu N = 1, thì có sự liên kết chặt chẽ giữa hai tiến trình cho phép xác định một trật tự chặt chẽ giữa các
sự kiện
Cơ chế đồng bộ ở đây là dùng các công tơ sự kiện phù hợp với từng vấn
đề đặt ra Mỗi một công tơ, biến nguyên không lùi, được kết hợp với một nhóm đặc biệt các sự kiện
Trên một công tơ sự kiện nào đó có phối hợp với nhóm E nào đó, được xác định bởi ba hàm nguyên thủy:
+ Tang_len(E) : Tăng nội dung công tơ lên 1 đơn vị, cũng có nghĩa
là một sự kiện nhóm E đến
+ Truy_van(E) : Cung cấp giá trị hiện hành của công tơ phối hợp với
E + Cho(E,n) : Treo tiến trình gọi chừng nào giá trị công tơ còn nhỏ
hơn n
Mỗi công tơ được khởi động ngay khi thành lập nó Việc triển khai các công tơ sự kiện có thể được thực hiện bằng cách giao cho bộ xử lý duy nhất đảm trách việc điều khiển toàn bộ công việc này
3.2 Đồng bộ hóa bằng phương pháp trật tự tổng quát chặt chẽ
Phương pháp này được áp dụng trong một số trường hợp cần phải sắp xếp toàn bộ theo kiểu chặt chẽ các sự kiện của hệ Nguyên lý của phương pháp này được khái quát như sau:
Một tiến trình nào đó gửi thông điệp để yêu cầu sử dụng tài nguyên, một tiến trình sử dụng xong tài nguyên nào đó truyền một thông tin giải phóng khi
nó ngừng chiếm dụng
Trong các hệ phân tán, chương trình cung cấp nằm trên một trạm và các tiến trình đề nghị lại ở trên các trạm khác, các yêu cầu và khuyến nghị giải phóng được truyền cho các chương trình cung cấp thông qua hình thức thông điệp, chuyển theo các kênh của hệ thống viễn thông Chính vì vậy nhu cầu sắp xếp các yêu cầu này theo một trật tự nhất định nào đó luôn luôn được đặt ra