Tải bản đầy đủ (.docx) (29 trang)

ĐIỀU KHIỂN ĐỒNG THỜI BẰNG CƠ CHẾ THEN CÀI VÀ BÀI TOÁN SỬ DỤNG BỘ QUẢN LÝ KHÓA CƠ BẢN VÀ NHỮNG ĐIỂM CẦN CẢI TIẾ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 (309.27 KB, 29 trang )

Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
ĐẠI HỌC ĐÀ NẴNG
BÁO CÁO MÔN HỌC
HỆ TIN HỌC PHÂN TÁN

ĐIỀU KHIỂN ĐỒNG THỜI BẰNG CƠ CHẾ THEN CÀI
VÀ BÀI TOÁN SỬ DỤNG BỘ QUẢN LÝ KHÓA CƠ BẢN VÀ
NHỮNG ĐIỂM CẦN CẢI TIẾN

 !"#$%&
'()#$*+,&-./
(0#12,.31455614578
Quảng Bình, 11/2012
"#$%& – Khoa học máy tính K24 Quảng Bình 1/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
LỜI MỞ ĐẦU

Mạng máy tính ra đời làm cho thế giới như nhỏ lại, mọi người có thể trao
đổi với nhau một khối lượng lớn thông tin trong điều kiện khoảng cách xa hơn
với thời gian nhanh hơn. Trên thực tế, xu hướng kỹ thuật mới - 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 cho chúng ta cơ hội ngồi trước máy vi tính
có nối mạng (LAN, WAN, Internet, …) thì có được mọi thứ: Chúng ta có thể
trao đổi thông tin, quản lý toàn bộ nhân sự của một đơn vị với nhiều chi nhánh
trên toàn quốc hoặc ở các quốc gia khác nhau; có thể đăng ký vé máy bay, vé
tàu xe, mua hàng tại siêu thị, thanh toán tiền qua hệ thống E-Banking của ngân
hàng qua hệ thống máy tính…
Tuy nhiên, để khai thác có hiệu quả hệ thống, vấn đề quan trọng là chiến
lược khai thác và sử dụng các tài nguyên dùng chung như thế nào ? Chiến lược
khai thác các tài nguyên dùng chung này là chức năng cũng như đối tượng nghiên
cứu của các hệ tin học phân tán. Trong thực tế, hệ tin học phân tán với những


nguyên lý, phương pháp của nó đã và đang được nhiều người quan tâm để ứng
dụng một cách hữu ích trong công việc. Nhiều nội dung lý thuyết nguyên lý của hệ
tin học phân tán còn nhiều vấn đề chưa được giải quyết triệt để và đang là mục
tiêu khám phá của các nhà nghiên cứu về công nghệ thông tin.
Trong phạm vi của tiểu luận, với những kiến thức đã được học, tìm hiểu từ
sách báo và mạng Internet, tôi xin trình bày hai nội dung:
9: Điều khiển đồng thời bằng cơ chế then cài
9:: Bài toán sử dụng bộ quản lý khoá cơ bản và những điểm cần cải tiến.
Là nội dung khó, bản thân chưa có thời gian nghiên cứu sâu vì vậy hiểu
biết còn nhiều hạn chế. Kính mong nhận được sự định hướng của Thầy giáo Lê
Văn Sơn và các bạn cùng lớp để tôi có thể tiếp tục nghiên cứu và đạt được kết
quả tốt hơn trong thời gian tới.
Xin chân thành cảm ơn !
"#$%& – Khoa học máy tính K24 Quảng Bình 2/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
PHẦN I
ĐIỀU KHIỂN ĐỒNG THỜI BẰNG CƠ CHẾ THEN CÀI
I. Tổng quan về cơ chế then cài
Khi có nhiều giao tác đang được thực thi đồng thời trên những tiến trình
khác nhau (trong những bộ xử lý khác nhau), một số cơ chế là cần thiết để giữ
chúng không cho xâm nhập vào các tiến trình khác. Thuật toán điều khiển đồng
thời được sử dụng rộng rãi nhất là then cài. Trong trường hợp đơn giản nhất, khi
một tiến trình cần đọc hay ghi một tập tin giống như một nhiệm vụ của giao tác,
thì trước tiên nó phải khoá (cài then) tập tin đó. Then cài có thể được dùng như
một bộ quản lý khoá tập trung riêng lẽ, hay với một bộ quản lý khoá cục bộ trên
từng máy để quản lý các tập tin cục bộ. Trong cả hai trường hợp, bộ quản lý
khoá bao gồm một danh sách các tập tin bị khoá, và từ chối tất cả mọi cố gắng
cài then tập tin mà tập tin đó đã thật sự bị khoá bởi một tiến trình khác. Khoá
được sinh ra và được giải thoát một cách tự động bởi hệ thống các giao tác,
không phụ thuộc vào hành động của lập trình viên.

Sự sắp xếp cơ bản này là hạn chế quá mức và có thể được cải tiến bằng
cách phân biệt khoá đọc và khoá ghi. Nếu một khoá đọc được cài đặt trên một
tập tin, những khoá đọc khác được chấp nhận. Khoá đọc được cài đặt để làm
chắc chắn rằng tập tin sẽ không thay đổi, nhưng nó không có lý do nào để ngăn
cấm những giao tác khác không được đọc những tập tin này. Ngược lại, khi một
tập tin bị khoá quyền ghi, không có bất kỳ loại khoá nào khác được chấp nhận.
Như vậy, khoá đọc bị chia sẽ, nhưng khoá ghi chỉ là duy nhất.
Để đơn giản, giả sử rằng một đơn vị của then cài là một tập tin hoàn
chỉnh. Trong thực tế, nó có thể là một mục nhỏ, giống như một bản ghi riêng lẻ
hay một trang riêng lẻ, hoặc có thể là một mục lớn, giống như một cơ sở dữ liệu
hoàn chỉnh. Vấn đề về độ quy mô của mục để khoá được gọi là tính chất của
then cài.
+; Bằng cách không cần đánh dấu một tiến trình mà tiến trình đó
muốn dùng phần cuối cùng của tập tin chỉ bởi vì có một vài tiến trình khác đang
sử dụng phần đầu. Nói theo cách khác, một cơ chế cài then tốt đòi hỏi có nhiều
khoá, là nhiều tốn kém và có nhiều khả năng dẫn đến sự bế tắc.
"#$%& – Khoa học máy tính K24 Quảng Bình 3/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
II. Cơ chế then cài
Một giao dịch nào đó đang thực hiện phép then cài trên một đối tượng
muốn dành quyền sử dụng đối tượng này theo một vài kiểu truy cập nhất định.
Cơ chế then cài gán hay không gán quyền truy cập này căn cứ vào qui tắc tiền
định như loại trừ tương hỗ, luật đọc – hiệu chỉnh thông tin…
Nếu quyền được thừa nhận thì đối tượng bị cài then bởi giao dịch. Nếu
không, tiến trình thực hiện giao dịch bị khóa và đối tượng không bị cài then.
Cơ chế then cài cho phép một giao dịch có thể giải phóng đối tượng mà
nó đã cài then.
5<)=%>?
Một trong những giải pháp đơn giản để đạt được trật tự hoá gắn bó thể hiện
ở chổ bắt buộc phải sử dụng trật tự hoá tuần tự. Để làm việc đó, toàn bộ giao

dịch được đặt trong cặp hàm nguyên thuỷ mo_giaodich và dong_giaodich. Đây
là sự đảm bảo cho việc loại trừ tương hỗ giữa các giao dịch.
Nếu ta biết trước các đối tượng được xử lý bởi một giao dịch nào đó, thì ta
có thể cài then công việc truy cập đến các đối tượng. Điều đó chỉ cho phép thực
hiện song song đối với các giao dịch truy cập vào các đối tượng rời rạc.
Nếu ta muốn nâng cao hơn nữa khả năng sử dụng song song, thì cần phải
thực hiện cài then ở mức độ thấp hơn mức giao dịch.
1<@A #BCD
Các quy tắc truy cập đối tượng được chú ý. Đó là tính hợp thức của việc
truy cập. Nội dung của quy tắc này như sau:
Một giao dịch thay đổi giá trị của đối tượng phải loại trừ tất cả các đối
tượng khác muốn truy cập, ngược lại thì việc truy cập được tiến hành theo kiểu
tương tranh.
Để đảm bảo điều đó luôn luôn được thực hiện, người ta cho phép tiến hành
cài then một đối tượng trước khi việc sử dụng nó có hiệu lực.
"#$%& – Khoa học máy tính K24 Quảng Bình 4/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Một giao dịch có thể thực hiện ba hàm nguyên thuỷ trên đối tượng e:
STT Tên hàm Thuyết minh
1 v_doc(e) Sử dụng khi muốn có được quyền đọc e theo
kiểu chia sẽ.
2 v_viet(e) Sử dụng khi muốn có được quyền đọc và viết
vào e theo kiểu loại trừ.
3 giai_phong(e) Giải phóng đối tượng e. Giả sử trước đó đã được
cài then bởi cùng giao dịch này.
Một giao dịch gọi là phát triển nếu:
+ Một phép toán chỉ được thực hiện trên một đối tượng sau khi đối tượng
đó đã được cài then bởi giao dịch theo kiểu tương thích với phép toán.
+ Không có giao dịch nào cài then được trên đối tượng mà trước đó đã bị
cài then cũng bởi chính giao dịch đó, ngoại trừ theo kiểu loại trừ trong trường

hợp trước đó đã sử dụng kiểu chia sẽ.
+ Sau khi chấm dứt một giao dịch, không có đối tượng nào bị cài then.
Các then cài được sử dụng để hạn chế một lớp các trật tự hoá có khả năng
được thực hiện.
Một trật tự hoá được gọi là hợp thức nếu:
+ Đối tượng được một giao dịch cài then theo kiểu chia sẽ không bị bất cứ
then cài nào theo kiểu loại trừ của các giao dịch khác.
+ Một đối tượng bị cài then theo kiểu loại trừ thì không bị bất kỳ then cài
mới nào nữa.
Do vậy, mọi cố gắng cài then không phù hợp với các điều kiện tương hỗ
nêu trên đều phải chờ (bị làm chậm lại) cho đến khi mở then.
EF Một giao dịch được gọi là tốt, nếu nó sử dụng các then cài phù
hợp với đặc điểm của chúng. Một trật tự hoá được gọi là hợp thức, nếu các then
cài hoạt động phù hợp với các đặc điểm này.
"#$%& – Khoa học máy tính K24 Quảng Bình 5/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
7<#)G1'#
Xem xét một giao dịch hình thành hợp thức bằng cách kiểm tra hai điều kiện:
+ Toàn bộ đối tượng bị cài then vẫn ở trong tình trạng cài then cho đến
cuối giao dịch.
+ Không có then cài nào có thể diễn ra tiếp theo một then cài khác trong
cùng một giao dịch.
Điều kiện này thể hiện ở chổ là dãy các phép toán trên các then cài được
phân tích thành hai pha nối tiếp nhau. Một pha mà trong đó các đối tượng bị cài
then, còn pha kia chúng được mở then.
Toàn bộ trật tự hoá hợp thức của một tập hợp các giao dịch hình thành tốt
hai pha là gắn bó, có nghĩa là cùng hiệu ứng với trật tự hoá tuần tự.
Ngược lại, nếu các giao dịch của một tập hợp không phải là hình thành tốt
và ở hai pha thì có thể xây dựng các trật tự hoá hợp thức của M là không gắn bó.
Để hiểu rõ hơn, ta xem xét các ví dụ sau:

+;5Hãy truy cập vào tập hợp các đối tượng.
Giả sử rằng ta muốn đọc các giá trị của một tập hợp các đối tượng và quy
ước rằng các giá trị này kiểm tra các ràng buộc toàn vẹn. Lúc này, ta cần phải
cài then theo kiểu chia sẽ cho mỗi một đối tượng trước khi đọc, mở then diễn ra
ở cuối của giao dịch này. Một phép như vậy gọi là đọc gắn bó của tập hợp các
đối tượng.
Như thế, giao dịch được thể hiện như sau:
là giao dịch đọc gắn bó của tập hợp {a,b,c}.
"#$%& – Khoa học máy tính K24 Quảng Bình 6/29
v_doc(a)
v_doc(b)
doc(a)
doc(b)
v_doc(c)
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Ví dụ 2: Quản lý các tài khoản trong một ngân hàng.
Mỗi một người mở tài khoản tại ngân hàng sẽ được lưu trữ trong một bản
ghi của cơ sở dữ liệu. Các trường của bản ghi này bao gồm họ và tên, địa chỉ,
điện thoại và một khoá duy nhất (mã số) cho người đó. Mã số đóng vai trò con
trỏ đến cơ sở dữ liệu khác chứa các lần thu tiền vào và rút tiền ra từ tài khoản.
Cuối cùng, chúng ta phải có cơ sở dữ liệu chứa số dư. Số dư là số tiền có trong
tài khoản ở thời điểm xem xét của từng người gửi tiền. Trạng thái của số dư
trong tài khoản được khống chế ở mức xác định, ví dụ như số dư không được ≤
N cho trước. Điều đó cũng đồng nghĩa với việc đảm bảo trong tài khoản của
người sủ dụng không bao giờ có giá trị bằng 0 hay giá trị âm.
Bây giờ chúng ta hãy nghiên cứu vấn đề quản lý truy cập thông tin tài
khoản cho phép đảm bảo được tính gắn bó.
Sau đây là hai kiểu mô tả khác nhau của giao dịch T và một kiểu mô tả có
thể của giao dịch U:
Giao dịch T

1
Giao dịch T
2
Giao dịch U
v_viet(A)
A:= A - P
1
giai_phong(A)
v_viet(B)
B:= B + P
1
giai_phong(B)
v_viet(A)
A:= A – P
2
v_viet(B)
giai_phong(A)
B:= B + P
2
giai_phong(B)
v_viet(A)
A:= (1+t)*A
v_viet(B)
B:= (1+t)*B
giai_phong(B)
giai_phong(A)
Ta kiểm tra rằng tất cả các giao dịch đều là hình thành tốt và T
2
và U đều ở
hai pha và T

1
không có hai pha.
"#$%& – Khoa học máy tính K24 Quảng Bình 7/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Sau đây là hai trật tự hoá hợp thức S
1
và S
2
xuất phát từ việc thực hiện song
song của T
1
và U và T
2
và U
2
.
S
1
(T
1
,U) S
2
(T
2
,U)
T
11
: v_viet(A)
T
12

: A:= A – P
1
T
13
: giai_phong(A)
U
1
: v_viet(A)
U
2
: A:= (1+t)*A
U
3
: v_viet(B)
U
4
: B:= (1+t)*B
U
5
: giai_phong(B)
T
14
: v_viet(B)
T
15
: B:= B + P
1
U
6
: giai_phong(A)

T
16
: giai_phong(B)
T
21
: v_viet(A)
T
22
: A:= A – P
2
T
23
: v_viet(B)
T
24
: giai_phong(A)
U
1
: v_viet(A)
U
2
: A:= (1+t)*A
T
25
: B:= B + P
2
T
26
: giai_phong(B)
U

3
: v_viet(B)
U
4
: B:= (1+t)*B
U
5
: giai_phong(B)
U
6
: giai_phong(A)
Như vậy, ta kiểm tra rằng S
1
dẫn đến trạng thái không gắn bó, U thực hiện
trên các giá trị không gắn bó của B và rằng S
2
là tương đương với trật tự hoá
tuần tự S
2
(T
2
,U).
"#$%& – Khoa học máy tính K24 Quảng Bình 8/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
PHẦN II
SỬ DỤNG BỘ QUẢN LÝ KHÓA CƠ BẢN
VÀ NHỮNG ĐIỂM CẦN CẢI TIẾN
I. Tổng quan
Như đã nói ở phần trên, điều khiển đồng thời giải quyết các tính chất biệt
lập và nhất quán của giao dịch. Cơ chế điều khiển đồng thời phân tán của một hệ

quản trị cơ sở dữ liệu phân tán bảo đảm rằng tính nhất quán của cơ sở dữ liệu sẽ
được duy trì trong môi trường phân tán nhiều người dùng. Nếu các giao dịch đã
nhất quán nội tại (nghĩa là không vi phạm bất kỳ ràng buộc nhất quán nào), thế
thì để có thể đạt được mục tiêu này, cách đơn giản nhất là thực hiện lần lượt
từng giao dịch một. Rõ ràng một chọn lựa như thế chỉ đáng chú ý về mặt lý
thuyết và không được cài đặt trong bất kỳ một hệ thống thực sự nào bởi vì nó
làm giảm thiểu lưu lượng hệ thống. Mức độ đồng thời có lẽ là một tham số quan
trọng nhất trong các hệ phân tán. Do vậy, cơ chế điều khiển đồng thời cố gắng
tìm ra một phương án thích hợp, vừa duy trì được tính nhất quán của cơ sở dữ
liệu, vừa duy trì được mức độ đồng thời cao.
Các bộ phận quản lý thực hiện một giao dịch của Hệ quản trị CSDL
Hình 1: Các bộ phận quản lý thực hiện giao dịch
"#$%& – Khoa học máy tính K24 Quảng Bình 9/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Trong đó:
Transactions: Các giao dịch;
Transaction manager: Bộ quản lý giao dịch
Scheduler: Bộ lập lịch
Data Manager: Bộ quản lý dữ liệu
BEGIN_TRANSACTION, END_TRANSACTION: bắt đầu và kết
thúc giao dịch
Timestamp: Dấu thời gian
LOCK/Release: Khóa/Giải phóng
Các bộ phận quản lý thực hiện các giao dịch phân tán của hệ quản trị
CSDL phân tán.
Hình 2: Các bộ phận quản lý thực hiện giao dịch phân tán
Trước hết, chúng ta xem lại định nghĩa tính khả tuần tự một cách hình
thức: Một lịch biểu S được gọi là khả tuần tự nếu và chỉ nếu nó tương đương
tương tranh với một lịch biểu tuần tự. Tính khả tuần tự được định nghĩa như thế
cũng được gọi là khả tuần tự theo tương tranh bởi vì nó được định nghĩa theo sự

tương đương tương tranh. Từ đó, chúng ta có thể chỉ ra rằng chức năng cơ bản
của bộ phận điều khiển đồng thời là tạo ra một lịch biểu khả tuần tự để thực hiện
các giao dịch đang chờ.
"#$%& – Khoa học máy tính K24 Quảng Bình 10/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Lịch biểu của một giao dịch là một chuỗi các lệnh được thực hiện trong hệ
thống theo thứ tự thời gian. Một lịch biểu đối với một tập các giao dịch phải bao
gồm tất cả các lệnh của tất cả các giao dịch này, và phải bảo toàn thứ tự mà các
lệnh xuất hiện trong mỗi giao dịch cá thể theo thứ tự đó. Lịch biểu tạo mối liên
hệ ràng buộc giữa các giao dịch với nhau.
Ví dụ về lịch biểu khả tuần tự: Có 3 giao dịch T1, T2, T3 (tương ứng với
(a), (b), (c)
BEGIN_TRANSACTION
x = 0;
x = x + 1;
END_TRANSACTION
(a)
BEGIN_TRANSACTION
x = 0;
x = x + 2;
END_TRANSACTION
(b)
BEGIN_TRANSACTION
x = 0;
x = x + 3;
END_TRANSACTION
(c)
Lịch biểu cho các giao dịch trên:
Schedule 1 x = 0; x = x + 1; x = 0; x = x + 2; x = 0; x = x + 3 Hợp lệ
Schedule 2 x = 0; x = 0; x = x + 1; x = x + 2; x = 0; x = x + 3; Hợp lệ

Schedule 3 x = 0; x = 0; x = x + 1; x = 0; x = x + 2; x = x + 3; Bất hợp lệ
II. Sử dụng bộ quản lý khóa cơ bản
Việc điều khiển đồng thời bằng khoá chốt là một cơ chế thường dùng để
giải quyết những vấn đề liên quan đến việc đồng bộ hoá dữ liệu truy cập dùng
chung, đảm bảo dữ liệu dùng chung cho các thao tác tương tranh chỉ được truy
xuất một lần một giao dịch, mỗi phần tử dữ liệu đều có một khoá chốt kết hợp
với chúng. Điều này được thực hiện bằng cách liên kết một khoá chốt với mỗi
đơn vị khoá. Khoá này được giao dịch đặt ra trước khi nó truy xuất và được điều
chỉnh lại vào lúc nó hết sử dụng. Hiển nhiên là một đơn vị khoá không thể truy
xuất được nếu đã bị khoá bởi một giao dịch khác. Vì vậy, yêu cầu khoá của một
giao dịch chỉ được trao nếu khoá đi kèm hiện không bị một giao dịch khác giữ.
Bộ xếp lịch đảm bảo rằng chỉ duy nhất giao tác có thể giữ khoá chốt trong
một thời điểm, và chỉ có một giao tác có thể truy xuất dữ liệu đó tại cùng một
thời điểm.
"#$%& – Khoa học máy tính K24 Quảng Bình 11/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Khoá chốt được bộ xếp lịch (Schedule manager) dùng để đảm bảo tính
khả tuần tự.
Trước khi một giao tác có thể truy cập dữ liệu dùng chung, bộ xếp lịch sẽ
khảo sát trạng thái khoá chốt của những dữ liệu này.
Nếu không có giao tác nào khác đang giữ chúng thì bộ xếp lịch sẽ phát
lệnh thông báo khoá dữ liệu này lại và sau đó các giao tác thực hiện các lệnh của
mình trên dữ liệu đó.
Nếu dữ liệu đang bị khoá bởi giao tác T2, thì giao tác này phải chờ cho
đến khi nào T2 giải phóng khoá đó.
Bởi vì chúng ta quan tâm đến việc đồng bộ hóa các thao tác tương tranh
của các giao dịch tương tranh nên có hai loại khóa chốt được kèm với mỗi đơn
vị khóa: Khóa đọc (Read Lock RL), và Khóa Ghi (Write Lock -WL).
+ RLi(x): khoá đọc trên phần tử dữ liệu x của giao tác Ti
+ WLj(x): khoá ghi trên phần tử dữ liệu x của giao tác Tj

Hai khoá pli(x) và qlj(y) đụng độ nếu x=y, i≠j,
Hai khoá đụng độ nhau nếu chúng khoá trên cùng một phần tử dữ liệu,
chúng được phát sinh từ hai giao tác khác nhau và một trong hai thao tác là ghi.
Một giao dịch T
i
đang muốn đọc một mục dữ liệu được chứa trong đơn vị
khóa x sẽ nhận được một khóa đọc trên x (ký hiệu là rl
i
(x) và cũng tương tự như
vậy với thao tác ghi.
Tính tương thích của các thực thể khóa được mô tả trong bảng sau:
RL
i
(x) WL
i
(x)
RL
i
(x) Tương thích Không tương thích
WL
i
(x) Không tương thích Không tương thích
"HI&*JI&-AFKL;M)
"#$%& – Khoa học máy tính K24 Quảng Bình 12/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Qui tắc 1:
Khi nhận được một thao tác pi[x] từ bộ quản lý giao tác (Transaction
Manager, TM), bộ xếp lịch kiểm tra nếu pli[x] đụng độ với một vài qlj[x] được
đặt trước đó.
+ Nếu đúng, nó sẽ trì hoãn pi[x] và buộc Ti chờ cho đến khi nó có thể đặt

được khoá cần thiết.
+ Nếu không đụng độ, bộ xếp lịch (scheduler) sẽ đặt pli[x] và gởi pi[x]
đến bộ quản lý dữ liệu (Data Manager, DM).
Quy tắc này nhằm hạn chế hai giao tác truy xuất đồng thời một phần tử dữ
liệu trong tình trạng đụng độ.
Qui tắc 2:
Mỗi khi bộ xếp lịch đặt khoá cho Ti, pli[x], nó không thể giải phóng khoá
đó cho đến khi DM trả lời đã xử lý thao tác tương ứng của khoá, pi[x].
Qui tắc 3:
Mỗi khi bộ xếp lịch đã giải phóng một khoá cho một giao tác, nó không
thể lấy tiếp bất kỳ khoá nào cho giao tác ðó.
Quy tắc (3) ðýợc gọi là quy tắc hai giai ðoạn, là nguồn gốc của khoá chốt
hai giai ðoạn.
Trong các hệ thống dùng khoá, bộ xếp lịch (scheduler) chính là bộ quản lý
khoá (lock manager, LM). Bộ quản lý giao dịch sẽ chuyển cho bộ quản lý khoá
các thao tác cơ sở dữ liệu (đọc hoặc ghi) và các thông tin kèm theo (như mục dữ
liệu cần truy xuất, định danh của giao dịch đưa ra yêu cầu). Sau đó, bộ quản lý
khoá sẽ kiểm tra đơn vị khoá có chứa mục dữ liệu đó đã bị khoá hay chưa. Nếu
đã khoá, và nếu thể thức khoá đó không tương thích với thể thức của giao dịch
đang yêu cầu, thao tác sẽ bị hoãn lại. Ngược lại, khoá sẽ được đặt với thể thức
mong muốn và thao tác này được chuyển cho bộ xử lý dữ liệu để truy xuất cơ sở
dữ liệu thực sự. Sau đó, bộ quản lý giao dịch được thông tin về các kết quả thực
hiện. Việc kết thúc giao dịch sẽ giải phóng các khoá của nó và làm khởi hoạt
một giao dịch khác đang đợi truy xuất mục dữ liệu này.
Thuật toán khoá chốt cơ bản
{Các định nghĩa chuẩn bị cho các thuật toán được trình bày trong tiểu
luận}
Declare-type
Operation: một trong số Begin-Transaction, Read, Write, Abort, hoặc
Commit

DataItem : một mục dữ liệu trong cơ sở dữ liệu phân tán
"#$%& – Khoa học máy tính K24 Quảng Bình 13/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
TransactionId: một giá trị duy nhất được gán cho mỗi giao dịch
DataVal: một giá trị có kiểu dữ liệu cơ bản (nghĩa là số nguyên, số thực,
…)
SiteId: một đinh danh duy nhất cho vị trí
Dbop: một bộ ba gồm {một phép toán trên cơ sở dữ liệu của ứng
dụng} opn: Operation
data: DataItem
tid: TransactionId
Dpmsg: một bộ ba gồm {một thông báo từ bộ xử lý dữ liệu}
opn: Operation
tid: TransactionId
result: DataVal
Scmsg: một bộ ba gồm {một thông báo từ bộ xếp lịch}
opn: Operation
tid: TransactionId
result: DataVal
Transation ← một bộ hai gồm
tid: TransactionId
body: thân giao dịch
Message ← một chuỗi ký tự cần được truyền đi
OpSet: một tập các Dbop
SiteSet: một tập các SiteIde
WAIT(msg: Message)
begin
{đợi cho đến khi có một thông báo đến}
end
"#$%& – Khoa học máy tính K24 Quảng Bình 14/29

Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
{Thuật toán 1. Bộ quản lý khoá cơ bản (Basic LM)}
Declare-var
msg : Message
dop : Dbop
Op : Operaeion
x : Dataltem
T : TransactionId
pm : Dpmsg
res : Dataval
SOP : Opset
Begin
repeat
WAIT(msg)
case of $K
Dbop:
begin
Op ← dop.opn
x ← dop.da ta
T ← dop.tid
case of N'
Begin-transaction:
begin
gởi dop đến bộ xử lý dữ liệu
end
"#$%& – Khoa học máy tính K24 Quảng Bình 15/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Read or Write {yêu cầu khoá}
begin
tìm đơn vị khoá lu sao cho x lu

if lu chưa bị khoá or thể thức khoá lu tương thích
với Op then
begin
đặt khoá trên lu ở thể thức thích hợp
gởi dop đến bộ xử lý dữ liệu
end
else đưa dop vào một hàng đợi của lu
end-if
end
Abort or Commit:
begin
gởi dop đến bộ xử lý dữ liệu
end
end-case
Dpmsg: {trả lời của bộ xử lý dữ liệu}
Begin {yêu cầu mở khoá}
Op ← pm.opn
x ← pm.result
T ← pm.tid
tìm đơn vị khoá lu sao cho x

lu, giải phóng khoá trên lu do T giữ
if không còn khoá nào trên lu and
có những thao tác đang đợi khoá lu trong hàng đợi then
begin
"#$%& – Khoa học máy tính K24 Quảng Bình 16/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
SOP ← thao tác đầu tiên trong hàng đợi
SOP ← SOP


{O là một thao tác trên hàng đợi có thể
khoá lu ở thể thức khoá tương thích với các thao tác hiên hành
trong N }
đặt các khoá trên lu cho các thao tác trong SOP
for tất cả các phép toán trong SOP do
gởi mỗi thao tác đến bộ xử lý dữ liệu
end-for
end-if
end
end-case
until forever
End. {Basic LM}
III. Những điểm cần cải tiến của bộ quản lý Khóa cơ bản
Thuật toán khóa được cho trong Thuật toán 1 được trình bày ở trên không
đồng bộ hoá chính xác các thực thi giao dịch. Điều này là do khi tạo ra các lịch
biểu khả tuần tự, các thao tác khóa và giải phóng khóa cũng cần phải được điều
phối. Vì vậy chúng ta minh họa nó bằng ví dụ như sau:
Ví dụ: Xét hai giao dịch sau đây:
"#$%& – Khoa học máy tính K24 Quảng Bình 17/29
T
1
: Read(x)
x ← x + 1
Write(x)
Read(y)
y ← y – 1
Write(y)
T
2
: Read(x)

x ← x * 2
Write(x)
Read(y)
y ← y * 2
Write(y)
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Dưới đây là một lịch biểu hợp lệ được bộ quản lý khóa tạo ra khi sử dụng
Thuật toán 1:
S = {wl
1
(x) R
1
(x), W
1
(x), lr
1
(x), wl
2
(x), R
2
(x), W
2
(x), lr
2
(x), wl
2
(y),
R
2
(y), W

2
(y), lr
2
(y), C2, wl
1
(y), R
1
(y), W
1
(y), lr
1
(y), Cl}
Ở đây LR
i
(z) biểu thị thao tác giải phóng khoá trên z đang được T
i
giữ.
Chú ý rằng S không khả tuần tự. Bởi vì, nếu trước lúc thực hiện các giao
dịch này, giá trị của x và y lần lượt là 50 và 20. Nếu S khả tuần tự, thì giá trị sau
khi thực hiện tương ứng là 102 và 38 nếu T
1
thực hiện trước T
2
, hoặc là 101 và
39 nếu T
2
thực hiện trước T
1
. Tuy nhiên kết quả thực hiện S cho ra giá trị của x
và y lần lượt là 102 và 39. Điều đó chứng tỏ S không khả tuần tự.

Vấn đề lịch biểu S trong ví dụ này là thuật toán khóa chốt đã giải phóng
các khoá được một giao dịch giữ (chẳng hạn T
1
) ngay khi lệnh đi kèm (đọc hoặc
ghi) được thực hiện; và đơn vị khoá (chẳng hạn x) không cần truy xuất nữa. Tuy
nhiên, bản thân giao dịch đó đang khóa những mục khác (chẳng hạn y) sau khi
nó giải phóng khoá trên x. Mặc dù điều này dường như có lợi vì làm tăng khả
năng hoạt động đồng thời, nó cho phép các giao dịch đan xen với nhau, làm mất
đi tính biệt lập và tính nguyên tử tổng thể. Đây chính là lập luận của phương
pháp khoá chốt hai pha (Two-Phase Locking, 2PL).
Khóa chốt hai pha - 2PL là một trong những kỹ thuật hiệu quả trong việc
khắc phục một số đụng độ cũng như thời gian chết trong quá trình thực hiện các
lệnh của các giao tác.
Nhiệm vụ của bộ xếp lịch 2 giai đoạn (Two phase locking, 2PL) là quản
lý khoá chốt và điều khiển giao tác khi nào lấy và khi nào giải phóng khoá.
2PL nhằm đồng bộ hoá việc đọc và ghi. Trước khi đọc mục dữ liệu x,
phải khóa x (khóa do đọc). Trước khi ghi lên x, giao tác phải khóa mục x ( khóa
do ghi).
"#$%& – Khoa học máy tính K24 Quảng Bình 18/29
Giai đoạn tăng trưởng
Giai đoạn thu hồi
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Quá trình cấp phát và thu hồi khóa được thể hiện ở biểu đồ khoá 2PL sau:
Hình 3: Biểu đồ Khóa 2PL
Hình trên cho thấy bộ quản lý khóa giải phóng khóa ngay sau khi hoàn
tất việc truy xuất. Điều này cho phép các giao dịch đang đợi khoá tiếp tục
tiến hành và nhận khoá, do vậy, làm tăng hoạt động đồng thời.
Gọi Oper(T,x) là lệnh truy xuất mục dữ liệu x trong giao tác T.
Dựa vào kỹ thuật khóa chốt hai giai đoạn, ta có thể chia giao tác thành
hai giai đoạn, dựa trên 3 nguyên tắc trên:

+ Giai đoạn tăng trưởng (growing phase), trong giai đoạn này nó
nhận các khoá và truy xuất các mục dữ liệu.
Khi bộ lập lịch nhận được lệnh Oper(T,x), nó kiểm tra lệnh này có tranh
chấp với những lệnh truy xuất trên x khác, đã được bộ lập lịch cấp khóa.

Nếu nó tranh chấp, lệnh Oper(T,x) bị bị trì hoãn.

Nếu không tranh chấp, bộ lập lịch sẽ cấp 1 khóa cho x và gửi lệnh này
đến bộ quản lý dữ liệu.
Bộ lập lịch sẽ không giải phóng khóa cho đến khi bộ quản lý dữ liệu
đã thực hiện xong lệnh Oper(T,x).
"#$%& – Khoa học máy tính K24 Quảng Bình 19/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
+ Giai đoạn thu hồi (shrinking phase) là giai đoạn giải phóng những
khoá của nó.
Khi bộ lập lịch bắt đầu giải phóng bất kỳ khóa nào của giao tác T thì nó
sẽ không cấp bất kỳ khóa nào cho T, cho dù các mục dữ diệu của T đòi hỏi
khóa.
Nếu T cứ đòi hỏi khóa khi tiến trình giải phóng khóa xảy ra thì
chương trình phát sinh lỗi và giao tác sẽ gọi lệnh Abort.
+ Điểm khoá (lock point) là thời điểm giao dịch đã nhận được tất cả
các khoá nhưng chưa bắt đầu giải phóng khóa nào. Vì thế điểm khóa xác định
cuối giai đoạn tăng trưởng và đầu giai đoạn thu hồi của một giao tác.
Tuy nhiên việc cài đặt Khóa 2PL gặp nhiều khó khăn vì bộ quản lý khoá
phải biết rằng giao dịch đã nhận đủ tất cả mọi khoá và sẽ không còn cần khoá
một mục nào nữa. Bộ quản lý khoá cũng phải biết rằng giao dịch không còn cần
truy xuất mục dữ liệu đó nữa, vì thế khoá có thể được giải phóng. Cuối cùng,
nếu giao dịch bị huỷ bỏ sau khi giải phóng một khoá, nó có thể làm huỷ bỏ luôn
cả các giao dịch đã truy xuất các mục đã mở khoá. Hiện tượng này được gọi là
huỷ bỏ dây chuyền (cascading abort). Vì những khó khăn đó, phần lớn các bộ

xếp lịch 2PL đều cài đặt một dạng khắc khe hơn có tên là khoá chốt hai pha
nghiêm ngặt (strict two-phase locking), trong đó nó giải phóng toàn bộ các khoá
vào lúc giao dịch kết thúc (uỷ thác hoặc bị huỷ bỏ).
Biểu đồ khóa loại này được trình bày như sau:
Hình 4: Biểu đồ khoá hai pha nghiêm ngặt
"#$%& – Khoa học máy tính K24 Quảng Bình 20/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Kỹ thuật này cũng gồm 2 giai đoạn:
+ Giai đoạn tăng trưởng: giống với giai đoạn đầu của kỹ thuật khóa 2 pha.
+ Giai đoạn thu hồi khóa:

Tất cả các khóa được giải phóng cùng một lúc sau khi giao tác T kết
thúc hoặc bị hủy bỏ.

Không có thao tác đọc/ghi nào được thực hiện một khi khóa được
giải phóng bởi giao tác.

Nếu giao tác bị hủy bỏ thì việc phục hồi lại những thay đổi dữ liệu
được thực hiện trước khi khóa được giải phóng.
Bộ quản lý khoá 2PL nghiêm ngặt chỉ sửa lại một ít trong Thuật toán 1.
Thực sự chỉ cần sửa đổi phần xử lý các hồi đáp từ bộ xử lý dữ liệu nhằm đảm
bảo rằng các khoá chỉ được giải phóng nếu thao tác là uỷ thác hoặc huỷ bỏ. Toàn
bộ thuật toán 2PL nghiêm ngặt được trình bày trong Thuật toán 2, thuật toán
quản lý giao dịch để xếp lịch theo 2PL được trình bày trong Thuật toán 3.
Thuật toán 2. Thuật toán quản lý khoá bằng phương pháp khoá chốt hai
pha nghiêm ngặt (S2PL-LM).
declare-var
msg : Message
dop : Dbop
Op : Operaeion

x : Dataltem
T : TransactionId
pm : Dpmsg
res : Dataval
SOP : Opset
begin
repeat
WAIT(msg)
"#$%& – Khoa học máy tính K24 Quảng Bình 21/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
case of $K
Dbop:
begin
Op ← dop.opn
x ← dop.da ta
T ← dop.tid
case of N'
Begin-transaction:
begin
gởi dop đến bộ xử lý dữ liệu
end
Read or Write {cần khoá chốt}
begin
tìm đơn vị khoá lu sao cho x

lu
if lu chưa bị khoá or thể thức khoá lu tương thích
với Op then
begin
đặt khoá trên lu ở thể thức thích hợp

gởi dop đến bộ xử lý dữ liệu
end
else đặt dop vào một hàng đợi cho lu
end-if
end
Abort or Commit:
begin
gởi dop đến bộ xử lý dữ liệu
"#$%& – Khoa học máy tính K24 Quảng Bình 22/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
end
end-case
Dpmsg:
Begin
Op ← pm.opn
res ← pm.result
T ← pm.tid
If Op = Abort or Op = Commit then
begin
for mỗi đơn vị khoá lu bị khoá bởi T do
begin
giải phóng khoá trên lu do T giữ
if không còn khoá nào trên lu and
có các thao tác đang đợi khoá lu trong hàng đợi then
begin
SOP ← thao tác đầu tiên trong hàng đợi
SOP ← SOP

{ là một thao tác trên hàng đợi có thể
khoá lu ở một thể thức khoá tương thích với các thao tác hiên hành

trong N }
đặt các khoá trên lu cho các thao tác trong SOP
for tất cả các thao tác trong SOP do
gởi mỗi thao tác đến bộ xử lý dữ liệu
end-for
end-if
end-for
end-if
"#$%& – Khoa học máy tính K24 Quảng Bình 23/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
end
end-case
until forever
end. {S2PL- LM}
Thuật toán 3. Bộ quản lý giao dịch 2PL (2PL-TM)
declare-var
msg : Message
dop : Dbop
Op : Operaeion
x : Dataltem
T : TransactionId
O : Dbop
res : Dataval
SOP : Opset
begin
repeat
WAIT(msg)
case of $K
Dbop:
begin

gởi O đến LM
end
Scmsg:
begin
"#$%& – Khoa học máy tính K24 Quảng Bình 24/29
Hệ Phân tán – Điều khiển đồng thời bằng cơ chế then cài
Op ← sm.opn
res ← sm.result
T ← sm.tid
Case of Op
Read:
begin
trả res về cho ứng dụng của người sử dụng (nghĩa là giao dịch)
end
Write:
begin
thông tin cho ứng dụng về việc hoàn tất hành động ghi
trả res về cho ứng dụng
end
Commit:
begin
huỷ vùng làm việc của T
thông tin cho ứng dụng biết về việc hoàn tất thành công giao dịch T
end
Abort:
begin
thông tin cho ứng dụng biết về việc hoàn tất huỷ bỏ giao dịch T
end
end-case
end

end-case
until forever
end. {2PL-LM}
"#$%& – Khoa học máy tính K24 Quảng Bình 25/29

×