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 TOÁ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 TOÁ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 toá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; }