Thực nghiệm kiểm chứng Train-Gate-Controller

Một phần của tài liệu Kiểm chứng các tính chất thời gian thực cho hệ thống đồng thời bằng RT-SPIN (Trang 67)

Bài toán: Ta xem xét ví dụ về điều khiển tự động đóng và mở cổng tại giao với đƣờng ray. Hệ thống bao gồm ba thành phần: tàu, cổng và bộ điều khiển. Bài toán đặt ra là cần tự động hóa việc đóng và mở tƣơng ứng khi tàu vào và ra khỏi phần giao nhau. Bài toán là cơ sở để giải quyết lớp bài toán điều khiển đèn giao thông.

Đặc tả: Mô hình Otomat nhƣ trong hình. Tập sự kiện bao gồm {approach, in, out, idT}. Tàu bắt đầu tại trạng thái s0. Sự kiện idT thể hiện khi tàu chƣa vào cổng. Tàu giao tiếp với bộ điều khiển với hai sự kiện approach và exit. Sự kiện in và out là các sự kiện vào và ra của tàu ra khỏi phần đƣờng ray giao nhau. Tàu gửi tín hiệu approach ít nhất 2 phút trƣớc khi vào phần đƣờng ray giao nhau. Vì vậy độ trẽ nhỏ nhất giữa approach và in là 2 phút. Hơn nữa độ trễ lớn nhất giữa tín hiệu approach và exit là 5 phút. Các yêu cầu ràng buộc thời gian đƣợc diễn tả bằng cách sử dụng một đồng hồ x.

1 #define trainCin sT == cin 2 #define gateUp sG == up 3 #define gateDown sG == down

4 #define gateMoveDown sG == movedown 5 /* state of Train*/

6 mtype = {away, approach, cin, cout}; 7 mtype sT = away;

8 /* state of Gate*/

9 mtype = {up, moveup, down, movedown}; 10 mtype sG = up;

11 /* signal Controller*/

12 mtype = {raise, lower,ok, idle}; 13 mtype sC = idle;

14 /* ENVIRONMENT = TRAIN || GATE || CONTROLLER*/ 15 #define timer int

16 timer x, y, z,u;

17 timer t; /* auxiliary local clock */ 18 int delta = 10;

19 #define set(tmr,val) tmr=val 20 #define expire(tmr) (tmr==0)

21 #define tick(tmr) if :: tmr>=0->tmr=tmr-1; :: else; fi 22 #define on(tmr) (x!=-1)

23 #define delay(tmr,val) set(tmr,val); expire(tmr); 24 #define udelay(tmr) {do :: delay(tmr,1); ::break; od 25 #define bdelay(tmr,val,auxtmr) \

26 set(tmr,val);\ 27 do \

28 :: expire(tmr) -> break \

29 :: else -> if :: break; :: delay(auxtmr,1); fi\

30 od 31 proctype Timers()

32 { do :: timeout -> atomic{ tick(x); tick(y); tick(z); tick(t); tick(u); } od }

33 proctype TRAIN() 34 {

35 do

36 :: (sT == away ) -> atomic{sT = away; udelay(x);} 37 :: (sT == away) -> atomic {sT = approach; set(x,2);}

38 :: (sT == approach && sC == ok && expire(x) ) -> atomic{sT = cin; delay(x,6);}

39 :: (sT == cin) -> atomic {sT = cout; set(x,3);} 40 :: (sT == cout && expire(x) ) -> {sT = away;} 41 od

42 }

Tập sự kiện là {raise, lower, up, down, idG}. Cổng mở ở trạng thái s0 và đóng ở trạng thái s2. Cổng giao tiếp với bộ điều khiển thông qua các tín hiệu lower và raise. Các sự kiện up và down biểu thị mở và đóng cổng. Cổng thực hiện đóng kể từ khi nhận đƣợc tín hiệu lower trong vòng 1 phút. Cổng mở kể từ khi nhận đƣợc tín hiệu raise trong vòng 1 đến 2 phút. Cổng có thể ở trạng thái S0 hay trạng thái S2 thông qua nhãn chuyển trạng thái idG.

43 proctype GATE() 44 {

45 do

46 :: (sG == up && sC == lower) -> sG = movedown

47 :: (sG == movedown) -> atomic{bdelay(y,1,t); sG = down; set(u,delta);}

48 :: (sG == down && sC == raise) -> sG = moveup; 49 :: (sG == moveup ) -> atomic{delay(y,1);

bdelay(y,1,t); sG = up; assert(u>0) } 50 od

51 }

Cuối cùng hình sau mô hình hóa thành phần điều khiển. Tập sự kiện {approach, exit, raise, lower, idC}. Điều khiển ở trạng thái chờ S0. Khi nhận đƣợc tín hiệu approach từ tàu thì bộ điều khiển sẽ gửi tín hiệu lower đến cổng trong vòng 1 phút. Khi điều khiển nhận đƣợc tín hiệu exit của tau khi ra khỏi phần đƣờng ray giao nhau thì sẽ gửi tín hiệu raise đến cổng trong vòng 1 phút.

53 { 54 do

55 :: (sT == approach && sG == up) -> atomic{ delay(z,1); sC = lower; }

56 :: (sT == approach && sG == down && sC != ok) ->sC = ok; 57 ::(sT == cout && sG == down && (sC != raise)) ->

atomic{sC = raise; delay(z,1);}

58 :: (sT == away && sG == up & sC != idle) -> atomic{bdelay(z,1,t); sC = idle; }

59 od 60 }

Toàn bộ hệ thống biểu thị bởi:

[TRAIN || GATE || CONTROLLER] 61 init

62 {

63 atomic{

64 set(x,-1); set(y,-1); set(z,-1); 65 run Timers(); 66 run TRAIN(); 67 run GATE(); 68 run CONTROLLER(); 69 } 70 }

Kiểm chứng: Ta cũng kiểm chứng tính chất TrainIn -> GateDown và cho kết quả đúng. Sử dụng biểu thức ltl: ltl P1 {[](trainCin -> gateDown)}. Ngƣợc lại tính chất ltl P2 {[](trainCin -> gateUp)} sẽ báo lỗi.

Warning: Search not completed

spin -a TrainGateControllerTime.pml

ltl P1: [] ((! ((sT==cin))) || ((sG==down))) the model contains 3 never claims: P3, P2, P1 only one claim is used in a verification run

choose which one with ./pan -N name (defaults to -N P1) gcc-4 -DMEMLIM=1024 -O2 -DXUSAFE -DSAFETY -w -o pan pan.c ./pan -m10000 -E -A -c1 -N P1

Pid: 524

warning: never claim + accept labels requires -a flag to fully verify (Spin Version 6.2.3 -- 24 October 2012)

+ Partial Order Reduction Full statespace search for:

never claim + (P1)

assertion violations - (disabled by -A flag) cycle checks - (disabled by -DSAFETY) invalid end states - (disabled by -E flag) State-vector 64 byte, depth reached 406, errors: 0 346 states, stored

105 states, matched

451 transitions (= stored+matched) 541 atomic steps

hash conflicts: 0 (resolved) Stats on memory usage (in Megabytes):

0.025 equivalent memory usage for states (stored*(State-vector + overhead))

0.277 actual memory usage for states 64.000 memory used for hash table (-w24) 0.343 memory used for DFS stack (-m10000) 64.539 total actual memory usage

Để kiểm tra tính chất sống động thời gian thực “sau khi cổng đóng thì trƣớc 10 đơn vị thời gian cửa sẽ mở” ta dùng biến u và thiết lập u = 10 (delta) ngay khi cổng đóng. Đồng hồ delta sẽ đếm ngƣợc nên tại thời điểm cổng mở đảm bảo u > 0

(assert(u>0)).

spin -a TrainGateControllerTime.pml

ltl P1: [] ((! ((sT==cin))) || ((sG==down))) ltl P2: [] ((! ((sT==cin))) || ((sG==up))) ltl P3: <> ((! ((sG==up))) || ((sG==movedown))) the model contains 3 never claims: P3, P2, P1 only one claim is used in a verification run

choose which one with ./pan -N name (defaults to -N P1)

gcc-4 -DMEMLIM=1024 -O2 -DXUSAFE -DSAFETY -DNOCLAIM -w -o pan pan.c ./pan -m10000 -E -c1

Pid: 2220

(Spin Version 6.2.3 -- 24 October 2012) + Partial Order Reduction

Full statespace search for:

never claim - (not selected) assertion violations +

cycle checks - (disabled by -DSAFETY) invalid end states - (disabled by -E flag) State-vector 56 byte, depth reached 271, errors: 0 346 states, stored

105 states, matched

451 transitions (= stored+matched) 541 atomic steps

hash conflicts: 0 (resolved) Stats on memory usage (in Megabytes):

0.022 equivalent memory usage for states (stored*(State-vector + overhead))

0.277 actual memory usage for states 64.000 memory used for hash table (-w24) 0.343 memory used for DFS stack (-m10000) 64.539 total actual memory usage

5.4 Kết luận

Trong chƣơng này ta thực nghiệm với 3 ví dụ. Với ví dụ thứ nhất cho thây DtSpin ƣu việt hơn về không gian trạng thái của hệ thống. Ở thực nghiệm thứ hai với

hệ thống Sapi đƣợc cài đặt tích hợp với DtSpin. Mô hình cho phép kiểm chứng trong tất cả các trạng thái của hệ thống biến x ở tiến trình E có gia trị là 1. Trong logic thời gian tuyến tính Spin đƣợc biểu thị [](z==1). Vì vậy để kiểm chứng tính chất này ta khai báo một biến toàn cục chẳng hạn biến z và khởi tạo là 1. Spin sẽ kiểm tra tính chất này một cách hợp lý. Thực nghiệm thứ 3 nhằm mô hình hóa hệ thống train-gate- controller ở chƣởng 3 lý thuyết otomat thời gian. Thực nghiệm này ta cũng kiểm tra tính đúng đắn tính chất an toàn trainin -> gatedown. Quan trọng hơn, thực nghiệm cũng kiểm chứng tính chất sống động theo thời gian “sau khi cổng đóng thì trƣớc 10 đơn vị thời gian cổng sẽ mở”.

KẾT LUẬN

Kiểm chứng phần mềm là một trong những công việc quan trọng giúp phát hiện và sửa lỗi nhằm mục đích nâng cao chất lƣợng phần mềm. Spin là một công cụ mạnh mẽ kiểm chứng mô hình. Cơ chế truyền thống của Spin cho thời gian chỉ thực hiện với khía cạnh thứ tự thực hiện của các sự kiện trong hệ thống. Tuy nhiên, hệ thống thời gian thực thƣờng đòi hỏi khía cạnh định lƣợng thời gian, có xem xét đến khoảng thời gian thực tế giữa các sự kiện của hệ thống. Do đó thúc đẩy cần mở rộng Promela cho thời gian thực. Vì vậy trong luận văn tôi cũng đã tìm hiểu nền tảng otomat thời gian là cơ sở để mô hình hóa hệ thống và kiểm chứng các tính chất với hệ thống thời gian thực. Thực tế dựa trên lý thuyết otomat đã có hai thực nghiệm tích hợp thời gian thực với Spin thành công. Ngữ nghĩa đặc tả của RtSpin dựa trên hệ thống chuyển trạng thái theo thời gian với lý thuyết của chƣơng 3 mô hình otomat thời gian với đồng hồ thời gian thực. Vấn đề kiểm chứng đƣợc suy dẫn đến việc kiểm trả các đƣờng đi đúng có thể (ngôn ngữ của hệ thống) là rỗng. Tuy nhiên khi thêm các đồng hồ thƣờng sẽ tăng kích thƣớc không gian trạng thái. Với RtSpin không tƣơng thích với thuật toán partial- order deduction nên không gian trạng thái thƣờng tăng lên nhanh chóng. Hơn nữa giá trị đồng hồ là giá trị thực nên rất cồng kềnh. Ngoài ra RtSpin không đƣợc cập nhật với Spin kể từ bản 2.0. Dtspin với ý tƣởng chính sử dụng tiến trình theo dõi ngầm để thực hiện thời gian trôi. Với ý tƣởng đó ta sử dụng câu lệnh có sẵn trong Spin “timeout” cho tiến trình này. Điểm quan trọng của DtSpin là tƣơng thích với thuật toán partial order reduction. Hơn nữa ta có thể tích hợp với Spin phiên bản mới bằng cách mở rộng ngôn ngữ với các lệnh thời gian thông qua các định nghĩa macro. Với thực nghiệm thứ nhất ta củng chỉ ra hạn chế của công cụ RtSpin với không gian trạng thái thực sự bùng nổ khi tích hợp thời gian thực. Ta cũng thực nghiệm tính chất sống động thời gian thực với mô hình hệ thống thời gian thực Train-Gate-Controller.

Bên cạnh đó để nâng cấp DtSpin, hƣớng chính của công việc tiếp theo là mở rộng Promela và Spin với mô hình dense time. Ý tƣởng chính dựa trên otomat thời gian (chƣơng 3). Xem xét mỗi tiến trình Promela nhƣ một otomat thời gian, vì vậy hệ thống là tổ hợp song song các otomat thời gian, khai báo kiểu đồng hồ và có hàm thiết lập về 0. Cùng với sự tƣơng thích DtSpin với thuật toán partial order reduction là kết quả tuyệt vời nếu kết hợp đƣợc Otomat miền.

TÀI LIỆU THAM KHẢO

Tiếng Anh

1. R. Alur, D.L. Dill, A Theory of Timed Automata, Theoretical Computer Science, 126, pp.183-235, 1994.

2. R. Alur. Techniques for Automatic Verification of Real-Time Systems. PhD thesis, Stanford University, 1991.

3. R. Alur, C. Courcoubetis, and D. Dill. Model-checking for real-time systems. In Proceedings of the 5th Symposium on Logic in Computer Science, pages 414-425, Philadelphia, June 1990.

4. R. Alur, C. Courcoubetis, D. Dill, N. Halbwachs, and H. Wong-Toi. An implementation of three algorithms for timing verification based on automata emptiness. In RTSS 1992, proceedings, 1992.

5. D. Bosnacki, Implementing Discrete Time in Promela and Spin, International Con- ference on Logic in Computer Science, LIRA '97, University of Novi Sad, Yu- goslavia, 1997. (Copy also available from the author) (4 DTSpin)

6. D. Bosnacki, Integrating Real Time into Spin: A Prototype Implementation

7. D. Bosnacki, Partial Order Reduction for Region Automata (abstract), Proceed- ings of the 11th Nordic Workshop on Programming Theory NWPT'99, Uppsala, Sweden, October 1999

8. E. M. Clarke, Orna Grumberg and Doron A. Peled. Model Checking. MIT Press, 1999, ISBN 0-262-03270-8.

9. Gerard Holzmann. The Spin Model Checker. Primer and Reference Manual. Addison Wesley, 2003

10.Dang Van Hung, Model-Checking and the Spin Modelchecker, The United Nations University, International Institute for Software Technology.

11.Theo C. Ruys, Advanced SPIN Tutorial http://www.cs.utwente.nl/~ruys 12.Theo C. Ruys, SPIN Beginners’ Tutorial http://www.cs.utwente.nl/~ruys

13.S. Tripakis, C. Courcoubetis, Extending Promela and Spin for Real Time,TACAS '96, LCNS 1055, Springer Verlag, 1996.

14.F. Vaandrager, Two Simple Communication Protocols, in Baeten, J.C.M., ed., Ap- plications of Process Algebra, pp.23-44,Cambridge University Press, 1990.

15.http://spinroot.com

16.http://www.win.tue.nl/~dragan/

Một phần của tài liệu Kiểm chứng các tính chất thời gian thực cho hệ thống đồng thời bằng RT-SPIN (Trang 67)