Trong mơ hình này, mỗi tiến trình đƣợc xem nhƣ là một chuỗi các câu lệnh khóa chốt (lock) và mở khóa (unlock). Mỗi mục đƣợc khóa phải đƣợc mở khóa sau đó. Giữa một bƣớc LOCK A và bƣớc UNLOCKA kế tiếp, một
tiến trình sẽ đƣợc coi là đang giữ một khóa trên A. Giả sử rằng, một tiến trình sẽ khơng đƣợc u cầu khóa một mục nếu hiện tại nó đang giữ khóa của mục đó, hoặc mở một mục mà nó khơng giữ khóa trên mục đó.
Ví dụ, tại một tiến trình Ti nào đấy khơng thể có dịng lệnh nhƣ sau:
LOCK A LOCK A
LOCK B UNLOCK A
Ngồi ra, khi một tiến trình khóa chốt mục A, nó sẽ có quyền đọc và ghi trên A. Nghĩa là mỗi bƣớc LOCK sẽ kéo theo thao tác đọc và mỗi bƣớc UNLOCK sẽ kéo theo thao tác ghi.
Về hình thức, gán một hàm f riêng biệt cho mỗi cặp LOCK A và
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
bởi tiến trình trƣớc khi mở khóa cho A. Một tiến trình có thể có nhiều hàm
nhƣ thế đối với một mục A, ta có thể khóa và mở khóa một mục nhiều lần.
Gọi A0 là giá trị ban đầu của A trƣớc khi các tiến trình bắt đầu thực hiện.
Thí dụ 4.1: Trong Hình 4.1 ta có ba tiến trình và những hàm có liên quan
với mỗi cặp LOCK-UNLOCK, là những hàm xuất hiện trên cùng một dòng với UNLOCK.
f1đi kèm với A trong T1, nhận A và B là đối số, bởi vì đây là những mục
đƣợc T1 đọc. Hàm f3chỉ nhậnBvà C làm đối số vì T2 đang đọc B, C . LOCK A LOCK B UNLOCK A f1(A,B) UNLOCK B f2(A,B) LOCK B LOCK C UNLOCK B f3(B,C) LOCK A UNLOCK C f4(A,B,C) UNLOCK A f5(A,B,C) LOCK A LOCK C UNLOCK A f6(A,C) UNLOCK C f7(A,C) T1 T2 T3 Hình 4.1. Ba tiến trình
4.2. Thuật tốn kiểm tra tính khả tuần tự
Đầu vào: Một lịch biểu S, cho một tập các tiến trình T1,…, Tk
Đầu ra: Khẳng định S có khả tuần tự hay khơng. Nếu có thì đƣa ra một
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Phƣơng Pháp: Tạo ra một đồ thị có hƣớng G (đƣợc gọi là đồ thị tuần tự
hóa), có các nút tƣơng ứng với các tiến trình. Để xác định cung của đồ thị G,
gọi S là
a1, a2,…,an
trong đó mỗi ai là một hành động thuộc dạng
Tj: LOCK Am hoặc Tj: UNLOCK Am
Tj biểu thị cho tiến trình thực hiện hành động trên. Nếu ai là
Tj: UNLOCK Am
Hãy tìm hành động ap kế tiếp có dạng Ts: LOCK Am. Nếu có một hành
động nhƣ thế và s≠j, chúng ta sẽ vẽ một cung từ Tj đến Ts. Cung này có ý
nghĩa là trong một lịch biểu tuần tự tƣơng đƣơng S, Tj phải đi trƣớc Ts.
Nếu G có một chu trình thì S bất khả tuần tự. Nếu G khơng có chu trình
thì tìm một thứ tự tuyến tính cho các tiến trình sao cho Ti đi trƣớc Tj khi có
một cungTi → Tj. Có thể tìm ra một thứ tự nhƣ thế bằng một quá trình gọi là sắp xếp Topo đƣợc định nghĩa nhƣ sau:
Phải có một nút Ti nào đó khơng có cung đến, nếu khơng có thể chứng
minh G có chu trình. Liệt kê Ti rồi loại Ti khỏi G. Lập lại quá trình này trên đồ thì cịn lại cho đến khi khơng cịn nút nào nữa. Thứ tự các nút đƣợc liệt kê trong danh sách là một thứ tự tuần tự của tiến trình.
Hình 4.2. Đồ thị thứ tự trƣớc sau của các tiến trình
T1
T2
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Thí dụ 4.2: Xét lịch biểu của Hình 4.3.Đồ thị G đƣợc trình bày trong
Hình 4.2, có các nút T1, T2 và T3. Để tìm các cung, xét mỗi bƣớc UNLOCK trong Hình 4.3 Bƣớc Thực hiện (1) T1: LOCK A (2) T2: LOCK B (3) T2: LOCK C (4) T2: UNLOCK B (5) T1: LOCK B (6) T1: UNLOCK A (7) T2: LOCK A (8) T2: UNLOCK C (9) T2: UNLOCK A (10) T3: LOCK A (11) T3: LOCK C (12) T1: UNLOCK B (13) T3: UNLOCK C (14) T3: UNLOCK A Hình 4.3. Một lịch biểu bƣớc (4) T2: UNLOCK B
đi theo sau là T1: LOCK B. Trong trƣờng hợp này, thao tác khóa xảy ra
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
tƣơng tự, bƣớc (6) và (7) vẽ một cung từ T1 → T2.
bƣớc (8) T2: UNLOCK C
theo sau là T3: LOCK C tại bƣớc (11), và khơng có bƣớc LOCK C nào nằm ở giữa hai bƣớc này. Vì vậy vẽ một cung từ T2 → T3.
Lịch biểu Hình 4.3 là khơng khả tuần tự vì G có một chu trình.
4.3. Nghi thức khóa chốt hai pha
Nghi thức đƣợc gọi là hai pha (two phase protocol) khi mọi tiến trình phải thực hiện tất cả các khóa chốt (lock) trƣớc tất cả mọi thao tác mở khóa (unlock). Các tiến trình tuân theo nghi thức này đƣợc gọi là các tiến trình hai pha, pha đầu là khóa chốt (lock) và pha thứ hai là mở khóa (unlock).
Nghi thức hai pha có đặc điểm là mọi tập tiến trình tuân theo nghi thức này khơng thể có một lịch biểu bất khả tuần tự mà lại hợp lệ đƣợc. Nghĩa là bộ xếp lịch chỉ cần trao khóa đƣợc yêu cầu nếu khóa đang có sẵn, và buộc tiến trình phải chờ hoặc bãi bỏ tiến trình nếu khóa hiện khơng có sẵn.
4.4. Mơ hình Đọc và Đọc-ghi
Khóa đọc (read-lock): Một tiến trình T chỉ muốn đọc mục A sẽ thực hiện lệnh RLOCK A và ngăn không cho bất kỳ tiến trình khác nào ghi giá trị mới của A trong khi T đã khóa A. Tuy nhiên các tiến trình khác vẫn có thể giữ một khóa đọc trên A cùng lúc với T.
Khóa đọc-ghi (write-lock): Một tiến trình muốn thay đổi giá trị của mục
A,trƣớc tiên lấy khóa đọc-ghi bằng cách thực hiện lệnh WLOCK A. Khi một
tiến trình giữ khóa đọc-ghi trên một mục thì những tiến trình khác khơng thể lấy đƣợc khóa đọc hay khóa đọc-ghi trên mục đó.
Cả hai khóa đọc và đọc-ghi đều đƣợc loại bỏ bằng lệnh UNLOCK. Cũng giống nhƣ ở mơ hình Đọc-Ghi, một tiến trình sẽ khơng đƣợc yêu cầu khóa một mục nếu hiện tại nó đang giữ khóa của mục đó, hoặc mở một mục mà nó
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
khơng giữ khóa trên mục đó. Nhƣng trong một số tình huống, tiến trình có thể xin một khóa đọc-ghi cho một mục mà nó đã giữ khóa đọc.
4.5. Thuật tốn kiểm tra tính khả tuần tự của các lịch biểu với các khóa đọc và đọc-ghi.
Đầu vào: Một lịch biểu S, cho một tập các tiến trình T1,…,Tk.
Đầu ra: Khẳng định S có khả tuần tự hay khơng, nếu đƣợc sẽ đƣa ra một lịch biểu tuần tự tƣơng đƣơng với S.
Phƣơng pháp: Xây dựng một đồ thị tuần tự hóa G. Các nút tƣơng ứng với các tiến trình, các cung xác định bằng các qui tắc sau:
Giả sử trong S, tiến trình Ti nhận khóa đọc hoặc khóa đọc-ghi mục A, Tj là tiến trình kế tiếp nhận khóa đọc-ghi A, và j≠i thì vẽ một cung từ Ti đến Tj.
Giả sử trong S, tiến trình Ti nhận khóa đọc-ghi mục A. Gọi Tm với m≠ilà
một tiến trình nhận khóa đọc A sau khi Ti mở khóa A nhƣng trƣớc tất cả các
tiến trình khác khóa đọc-ghi A. Thì vẽ một cung từ Ti đến Tm.
Nếu G có chu trình thì S bất khả tuần tự. Nếu G khơng có chu trình thì
một sắp xếp Topo của G là thứ tự tuần tự cho các tiến trình này.
Thí dụ 4.3: Trong Hình 4.4, một lịch biểu gồm bốn tiến trình; Hình 4.5
là một đồ thị tuần tự hóa của lịch biểu này.
Lệnh UNLOCK đầu tiên là bƣớc (3), ở đó T3 mở khóa đọc-ghi cho A. Sau bƣớc (3) là các khóa đọc A của T1 và T2 (bƣớc (4), (7)) và một khóa đọc-ghi do T4 tại bƣớc (12). Nhƣ vậy T1, T2 và T4 phải theo T3. Vẽ một cung từ T3 đến các nút này.
T1 và T2 sau bƣớc (7), tuy nhiên T4 khơng thể nhận khóa đọc-ghi cho đến
khi T1 và T2 giải phóng các khóa đọc của chúng.
Tƣơng tự nhƣ vậy, T4 giải phóng khóa đọc trên B ở bƣớc (5) và khóa đọc- ghi kế tiếp trên B là do T3, vì thế vẽ một cung từ T4 đến T3.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Đến đây xuất hiện một chu trình, vì vậy lịch biểu trong Hình 4.4 là bất
khả tuần tự. Tập hợp đầy đủ tất cả các cung đƣợc trình bày trong Hình 4.5.
Bƣớc Thực hiện (1) WLOCK A (2) RLOCK B (3) UNLOCK A (4) RLOCK A (5) UNLOCK B (6) WLOCK B (7) RLOCK A (8) UNLOCK B (9) WLOCK B (10) UNLOCK A (11) UNLOCK A (12) WLOCK A (13) UNLOCK B (14) RLOCK B (15) UNLOCK A (16) UNLOCK B T1 T2 T3 T4 Hình 4.4. Một lịch biểu gồm bốn tiến trình
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Hình 4.5. Đồ thì tuần tự hóa của Hình 4.4.
4.6. Cài đặt thực nghiệm
4.6.1. Kiểm tra tính khả tuần tự trong mơ hình Đọc-Ghi đơn giản
Đầu vào:là một lịch biểuS N = số tiến trình Mỗi dịng có dạng : t x d t:Số hiệu tiến trình: 1,2,..., N x: lock / unlock 00 = 0: unlock 11 = 3: lock (đọc và ghi) d:Đơn vị dữ liệu : 1,2,...
Đầu ra: Lịch biểu này là khả tuần tự hay bất khả tuần tự
T3 T4
T1 T2
BEGIN
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
BEGIN
Input: Lịch biểu
If (Lịch biểu) không hợp lệ Then
Thông báo lịch biểu không hợp lệ
ElseIf (Lịch biểu) khả tuần tự Then
Thông báo lịch biểu là khả tuần tự
Esle Thông báo lịch biểu là bất khả tuần tự END
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
Ảnh minh họa cài đặt trong ngơn ngữ DevC++
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/ 4.6.2.Kiểm tra tính khả tuần tự trong mơ hình Đọc và Đọc-ghi
Đầu vào: là một lịch biểuS N = số tiến trình
Mỗi dịng có dạng : t x d t –Số hiệu tiến trình: 1,2,..., N
x = RLOCK(l) | WLOCK(3) | UNLOCK(0) 01=1: RLOCK – Chỉ đọc
11=3: WLOCK – Đọc và Ghi 00=0: UNLOCK
d –Đơn vị dữ liệu : 1,2,...
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
KếT LUậN
Luận văn đặt ra mục tiêu nghiên cứu về các kỹ thuật đặc tả và kiểm chứng một số bài toán tƣơng tranh đã đạt đƣợc các kết quả chính nhƣ sau:
Về phƣơng diện lý thuyết: đề tài tìm hiểu về các phƣơng pháp đặc tả và kiểm chứng một số bài toán tƣơng tranh. Kết quả nghiên cứu dựa trên cơ sở của kết hợp nhiều lĩnh vực nghiên cứu nhƣ trí tuệ nhân tạo, phƣơng pháp hình thứcvà lĩnh vực mơ phỏng trong cơng nghệ nhƣ kiểm chứng phần mềm.
Về phƣơng diện thực tiễn: luận văn đã thực hiện đặc tả và kiểm chứng tự động một số bài tốn tƣơng tranh ở giai đoạn thiết kế. Trong đó, học viên tập trung kiểm chứng một số bài tốn địi hỏi tính an tồn và bảo mật cao nhƣ trong các hệ thống tƣơng tranh về tài nguyên và điều khiển. Cuối cùng học viên cài đặt chƣơng trình thực nghiệm cho các bài tốn tƣơng tranh nói trên.
Dựa vào mục tiêu, nhiệm vụ của đề tài,một số hƣớng phát triển dự kiến của học viên là:
Tiếp tục nghiên cứu, tìm hiểu và đề xuất các phƣơng pháp đặc tả và kiểm chứng bài toán tƣơng tranh tại các giai đoạn thiết kế và mã nguồn.
Xây dựng chƣơng trình kiểm tra tính khả tuần tự của mơ hình Chỉ đọc- Chỉ ghi.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
TÀI LIệU THAM KHảO
Tiếng việt
[1] Trịnh Thanh Bình, “Kiểm chứng các thành phần Java tương tranh”, Luận án TS, Đại học công nghệ, 2011.
[2] Jeffrey D. Ullman, Nguyên lý các hệ cơ sở dữ liệu và tri thức, Biên dịch: Trần Đức Quang tập 1, tập 2, NXB Thống kê, 1999.
Tiếng Anh
[3] http://www.doc.ic.ac.uk/ltsa/
[4] http://www.event-b.org/install.html
[5] http://www.doc.ic.ac.uk/~jnm/LTSdocumention/FSP-notation.html [6] Andrew Edmunds. Providing Concurrent Implementations for Event B
Developments. PhD thesis, University of Southampton, March 2010.
URL http://eprints.ecs.soton.ac.uk/20826/
[7] A. Ben Younes and L.J. Ben Ayed,From UML Activity Diagrams to
Event B for the Specification and the Verification of Workflow Applications. In COMPSAC ’08 : Proceedings of the 2008 32nd
Annual IEEE International Computer Software and Applications Conference, URL http://dx.doi.org/10.1109/COMPSAC.2008.217. [8] A. Berard, M. Bidoit, A. Finkel, F. Laroussinie, A. Petit, L. Petrucci,
and P. Schnoebelen,Systems and software verification model-checking
techniques and tools. Springer-Verlag New York, Inc., New York,
NY, USA, 1999. ISBN3-540-41523-8.
[9] Elisabeth Ball and Michael Butler,Event-B Patterns for Specifying
Fault-Tolerance in Multi-agent Interaction. Springer Verlag, Berlin,
Heidelberg, 2009.
[10] Jean-Raymond Abrial. Modeling in Event-B : System and Software
Engineering. Cambridge University Press, New York, NY, USA, 2010.
[11] Jean-Raymond Abrial, The B-Book: Assigning Programs to
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
PHụ LụC A
ĐặC Tả EVENT-B CHO BÀI TỐN CUNG CấP TIÊU THụ
Sử dụng cơng cụ RODIN của Event-B học viên đặc tả và chứng minh tự động cho bài tốn cung cấp tiêu thụ nhƣ hình dƣới, Event-B Explorer biểu diễn các máy, ngữ cảnh, sự kiện và các mệnh đề cần chứng minh.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
PHụ LụC B
ĐặC Tả EVENT-B CHO BÀI TOÁN ĐọC GHI
Sử dụng công cụ RODIN của Event-B học viên đặc tả và chứng minh tự động cho bài toán đọc ghi nhƣ hình dƣới, Event-B Explorer biểu diễn các máy, ngữ cảnh, sự kiện và các mệnh đề cần chứng minh.
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
PHụ LụC C
ĐặC Tả FSP CHO BÀI TOÁN ĐọC GHI
Sử dụng công cụ LTSA học viên đặc tả và chứng minh tự động cho bài toán đọc ghi nhƣ hình dƣới, kết quả chứng minh cho thấy hệ thống khơng bị tắc nghẽn (deadlock).
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
PHụ LụC D
ĐặC Tả FSP CHO BÀI TỐN CUNG CấP TIÊU THụ
Sử dụng cơng cụ LTSA học viên đặc tả và chứng minh tự động cho bài tốn cung cấp tiêu thụ nhƣ hình dƣới, kết quả chứng minh cho thấy hệ thống không bị tắc nghẽn (deadlock).
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
PHụ LụC E
MỘT SỐ ĐOẠN CODE TRONG CHƢƠNG TRÌNH KIỂM TRA TÍNH KHẢ TUẦN TỰ TRONG MƠ HÌNH ĐỌC GHI ĐƠN GIẢN
/* Kiểm tra lịch P có khả tuần tự? Kết quả thực hiện tƣơng đƣơng với một trật tự thực hiện riêng rẽ từng tiến trình? */
bool KhaTuanTu(){
memset(bac, 0, sizeof(bac)); memset(c, 0, sizeof(c)); SI i, j, dt;
SI d[MM]; // Item i dang bi tien trinh d[i] chiem Message(6);
// Lap ma tran ke c. Tinh bac cua dinh memset(d, 0, sizeof(d));
for (i = 1; i <= nn; ++i){ switch(ACT(i)) {
case LOCK: // Tien trinh TRANS(i) xin LOCK du lieu ITEM(i)
if (d[ITEM(i)] != 0) {
// cung d[ITEM(i)] -> TRANS(i) c[d[ITEM(i)]][TRANS(i)] = 1; }
d[ITEM(i)] = TRANS(i); break;
} // switch
} // Hien thi cac canh va tinh bac cua dinh cout << "\n * Cac cung cua do thi: ";
for (i = 1; i <= nt; ++i) { for (j = 1; j <= nt; ++j) if (c[i][j] > 0) {
Số hóa bởi Trung tâm Học liệu http://www.lrc-tnu.edu.vn/
cout << "\n " << i << " -> " << j; ++bac[j]; // so cung den dinh j }
} // Sap Topo
cout << "\n * Lich " << fname
<< " tuong duong voi day cac tien trinh sau: \n * "; for (i = 1; i <= nt; ++i){ // Tim dinh troc
dt = DinhTroc(); if (dt < 0) {
Message(7); return false;
} // Xuat dinh troc cout << " " << dt;
// Nho dinh troc va cac cung di ra for (j = 1; j <= nt; ++j) if (c[dt][j] > 0) --bac[j]; } Message(8); return true; } main(){
File("S1.sc"); // Chu y : luon luon kiem tra tinh hop la truoc if (HopLe()){ /* HaiPha(); */ KhaTuanTu(); } cout << "\n T H E E N D."; cin.get(); return 0; }