Tiến trình SUPERMARKET

Một phần của tài liệu Đặc tả và kiểm chứng thiết kế của hệ thống tương tranh (Trang 48 - 51)

LTS của tiến trình SUPERMARKET có các thành phần được xác định như sau:

- Tập các trạng thái Q:

Vì tiến trình SUPERMARKET là sự kết hợp của các tiến trình thành phần bằng toán tử phép toán song song. Nên tập trạng thái của SUPERMARKET là tích Đề Các tập trạng thái của các tiến trình thành phần.

Q = Qeast x Vwest x Rsouth x Tvar Trong đó:

Tvar là tập trạng thái của tiến trình {east,west,south,display}::value:VAR có kiểu của tiến trình VAR. Do đó Tvar = {T0,T1,…T7}

Qeast, Vwest, Rsouth là tập trạng thái của tiến trình east, tiến trình west và tiến trình south có kiểu của TURNSTILE. Do đó Qeast = {Qo, Q1,… Q7} và Vwest = {V0,V1,…V7}; Rsouth = {R0,R1,…R7};

Đặt Ueast,west = (Qeast x Vwest) hay Uk = (Qi,Vj) với i,j=0..7

Theo lý thuyết tập hợp thì không gian trạng thái của U= 8*8=64. (1)

Theo LTS của east và west như hình 4.8 và hình 4.9, cùng với việc gán lại nhãn {east,west,south}.go bằng nhãn go và gán lại nhãn {east,west,south}.end bằng nhãn end (2)

Từ (1) và (2) ta có Ueast,west = 64-2*7 = 64-14 = 50

=> Tập trạng thái của tiến trình tổng hợp SUPERMARKET là: Q = {M(east,west),south x Tvar}

= {(Mi,Tj) với i =0..399, j= 0..4} = {Q0,Q1,…Q1999}

- Trạng thái ban đầu: Q0 = SUPERMARKET - Tập nhãn các hành động:

L ={ go, end, {east, west,south}.arrive, {east, west,south}.value.read[0..4], {east,west,south}.value.write[0..5], display.value.{read[0..4], write[0..4]}}

- Tập quy tắc chuyển trạng thái δ = (Q x L x Q)

Do tiến trình SUPERMARKET có số trạng thái là 2000 nên không vẽ ra LTS ở đây.

4.3.2. Đặc tả thuộc tính cần kiểm chứng

Bài toán Supermarket chúng tôi xét ở cấp độ đọc và ghi lên biến đối tượng chia sẽ mà ở đó có thể xảy ra sự xung đột tài nguyên dùng chung này. Vì vậy ở chúng tôi chỉ xét đến thuộc tính an toàn.

Chương trình tương tranh của bài toán Supermarket được miêu tả như hình 4.11 xét ở mức độ truy cập đọc và viết lên đối tượng chia sẽ với hai hành động read và write của các luồng đồng thời được miêu tả thông qua hành động INCREMENT như miêu tả ở hình 4.5. Do đó có thể dẫn đến sự xung đột tài nguyên khi có nhiều hơn một luồng cùng truy cập đồng thời vào dữ liệu dùng chung. Nên thuộc tính an toàn của hệ thống tương tranh của bài toán Supermarket chính là việc phải đảm bảo rằng tại một thời điểm chỉ có một luồng được phép truy cập và viết lên biến chia sẽ đối tượng.

Thuộc tính an toàn của hệ thống tương tranh Supermarket được miêu tả bằng tiến trình TEST, tiến trình này đếm tổng số sự kiện đến của khách hàng đến ở ba cổng tương ứng với các hành động east.arrive, west.arrive và south.arrive. Khi hành động

end xảy ra, tiến trình TEST sử dụng tiến trình CHECK để kiểm tra xem giá trị lưu giữ trên biến chia sẽ đối tượng có bằng tổng số sự kiện đến hay không? Nếu hai giá trị này không bằng nhau thì có một lỗi xảy ra và hệ thống rơi vào trạng thái

ERROR. Tiến trình TEST và CHECK được miêu tả như hình 4.12.

Hình 4.13. Tiến trình TEST và tiến trình CHECK.

TEST = TEST[0],

TEST[v:T] =(when(v<N){east.arrive, west.arrive, south.arrive} ->TEST[v+1] | end -> CHECK[v]),

CHECK[v:T] =(display.value.read[u:T] ->

(when (u==v) right -> TEST[v] | when (u!=v) wrong -> ERROR) )+{display.VarAlpha}.

Tiến trình TEST được biểu diễn dưới dạng máy trạng thái hữu hạn LTS có các thành phần được xác định như sau:

- Tập các trạng thái Q:

Xem mỗi TEST[v:T] là một trạng thái, CHECK[v] cũng là một trạng thái. Từ vòng lặp when(v<N) ta thấy rằng ở mỗi trạng thái TEST[v] có hai lựa chọn để chuyển trạng thái. Nếu sử dụng lựa chọn trạng thái theo nhãn {east.arrive,west.arrive,south.arrive} thì chuyến sang trạng thái mới TEST[v+1]. Nếu lựa chọn chuyển trạng thái theo nhãn end thì chuyển tới trạng thái tương ứng với CHECK[v]. Tại trạng thái CHECK[v] lại có 5 phép chuyển trạng thái thông qua nhãn display.value.read[u:T]. Tại đây tiến trình CHECK[v] kiếm tra nếu giá trị u bằng giá trị v thì chuyển sang trạng thái TEST[v+1], nếu u khác v thì chuyển về trạng thái ERROR (ta ký hiệu trạng thái ERROR là -1).

Như vậy tại mỗi trạng thái TEST[v] có 7 lựa chọn trạng thái với các nhãn khác nhau. Do v=0..4, nên số trạng thái của tiến trình TEST là 5*7=35 và chúng ta ký hiệu tập Q = (Q0,…Q34).

- Trạng thái ban đầu: Q0 = TEST[0] - Tập nhãn các hành động:

L={display.value.{read, write}[0..4],

{east,west,south}.arrive, end, right, wrong} - Tập quy tắc chuyển trạng thái δ = (Q x L x Q)

Do tiến trình TEST có số trạng thái là 35 nên ở đây không vẽ ra LTS của tiến trình.

4.3.3. Kiểm chứng

Hệ thống tương tranh Supermarket được thiết kế như hình 4.11 chỉ xét đến thuộc tính an toàn. Do đó chúng ta chỉ kiểm chứng hệ thống có vi phạm thuộc tính này không? Để thực hiện điều này, chúng ta sử dụng toán tử song song kết hợp thuộc tính được miêu tả bằng tiến trình TEST như ở phần 4.1.2 với tiến trình SUPERMARKET ta được tiến trình tổng hợp: ||TESTSUPERMARKET = (SUPERMARKET || TEST). LTS của tiến trình tổng hợp TESTSUPERMARKET có tập nhãn các hành động là:

L={display.value.{read,write}[0..4], east.{arrive,value.{read[0..4], write[0..5]}}, west.{arrive, value.{read[0..4], write[0..5]}},

south.{arrive, value.{read[0..4], write[0..5]}}, {end, go, right, wrong}} Bây giờ chúng ta sử dụng công cụ LTSA với đầu vào là LTS của tiến trình TESTSUPERMARKET để kiểm tra tiến trình TESTSUPERMARKET có vi phạm thuộc tính an toàn không? Nếu vi phạm thì công cụ LTSA sẽ đưa ra một vết tức tập

các phép chuyển trạng thái để dẫn hệ thống về trạng thái ERROR. Sau khi sử dụng LTSA một vết dẫn đến trạng thái ERROR được đưa ra như hình 4.13.

Một phần của tài liệu Đặc tả và kiểm chứng thiết kế của hệ thống tương tranh (Trang 48 - 51)