Automat chung của một giao thức Fischer Automat này có id là một biến toàn

Một phần của tài liệu Hướng dẫn sử dụng UPPAAL 4.0 (Trang 27 - 29)

8 Các demo khác trong Uppaal

5.1Automat chung của một giao thức Fischer Automat này có id là một biến toàn

còn các biến địa phương gồm clock x; và hằng số const k 2;

A[] P1.cs + P2.cs + P3.cs + P4.cs <= 1. Biểu thức này dựa vào việc mỗi giá trị Pi.cs được kiểm tra nhận giá trị true hoặc false, tương ứng là 1 hoặc 0. Nếu tổng của bốn số hạng không lớn hơn 1 tại mọi thời điểm thì chứng tỏ chỉ có nhiều nhất một trong số chúng truy cập vào vùng chung.

Kiểm tra hệ thống có rơi vào trạng thái deadlock hay không: A[] not deadlock.

Tính liveness của hệ thống được kiểm tra bằng biểu thức: P1.req –> P1.wait (tương tự với P2, P3, P4). Biểu thức trên kiểm tra xem mỗi khi một quá trình muốn truy cập vùng chung, nó sẽ phải đến được trạng thái chờ. Tiếp theo, chúng ta kiểm tra xem liệu một quá trình muốn truy cập cuối cùng có được truy cập không bằng biểu thức: P1.req –> P1.cs. Tuy nhiên, tính chất này không được thỏa mãn. Điều này có nghĩa là một quá trình có thể sẽ phải đợi mãi mãi. Nếu chúng ta thay đổi mô hình bằng cách thêm điều kiện x<=2*k vào trạng tháiwaitthìP1.req –> P1.cs vẫn sẽ không thỏa mãn.

Chương 6

Ví dụ 3: The Gossiping Girls

6.1 Nội dung bài toán

Giả sử có n cô gái, mỗi cô có một bí mật riêng muốn chia sẻ với những cô gái khác. Mỗi cô có thể gọi điện thoại cho một cô khác và sau một hồi nói chuyện, hai cô biết được tất cả những bí mật hai người biết. Bài toán đặt ra là tìm số lần gọi điện ít nhất để tất cả n cô gái đều biết hết n bí mật của nhau. Một phát triển của bài toán này là thêm thời gian vào mỗi cuộc hội thoại và tìm thời gian cần thiết để trao đổi tất cả các bí mật, cho rằng các cuộc gọi điện thoại có thể diễn ra cùng lúc.

6.2 Mô hình hóa trên UPPAAL

Chúng ta có những lựa chọn để biểu diễn tập các bí mật cũng như cách lưu trữ chúng. Một cách là dùng một số nguyên kiểu integer và lần lượt set/reset các bit của nó để thể hiện việc biết và chưa biết các bí mật. Mặc dù kích thước của hệ thống bị giới hạn bởi kích thước của kiểu

integer, với n nhỏ ta có thể chấp nhận được. Tuy nhiên, để thu được lời giải của bài toán, từ số nguyên thu được ta cần phải có thêm các phép chuyển đổi vào trong mô hình và điều này là một hạn chế. Cách thứ hai để mô tả là dùng một mảngboolean. Mô phỏng bằng mảngboolean rõ ràng làm mô hình rõ ràng hơn, đó là một ưu thế vì nó giúp việc kiểm chứng dễ dàng hơn. Để biểu lưu trữ các cuộc gọi ta dùng một bảng lưu trữ riêng cho từng cô gái.

Khai báo các biến toàn cục như sau:

const int GIRLS = 4;

typedef int [0,GIRLS-1] girl_t; chan phone [girl_t], reply [girl_t];

Khai báo trên cho phép chúng ta thay đổi kích thước mô hình dễ dàng. Các rút gọn do tính đối xứng sẽ được đề cập sau. Mô hình của mỗi cô gái làGirl và có một biến chỉ số girl_t. Mỗi cô gái

CHƯƠNG 6. VÍ DỤ 3: THE GOSSIPING GIRLS 6.2. MÔ HÌNH HÓA TRÊN UPPAAL

có một ID riêng. Số lượng các cô gái trong mô phỏng được định nghĩa thông qua const GIRLS.

Mô hình hóa Chúng ta khai báo ba hàm để mô phỏng các việc mỗi cô gái làm. Các hàm này gồm: hàm start() được dùng để khởi tạo số lượng bí mật của mỗi cô gái khi bắt đầu mô phỏng, hàm talk() và hàm listen() lần lượt được dùng để gọi gửi và nhận bí mật từ các cô gái khác.

Mô hình sử dụng mảng Booleans Ta khai báo mô hình gồm các hàm và biến như sau:

Girl: girl_t g;

bool secrets[girl_t];

void start() secrets[id] = true; void talk() tmp = secrets;

void listen() for(i:girl_t) secrets[i] |= tmp[i];

Một phần của tài liệu Hướng dẫn sử dụng UPPAAL 4.0 (Trang 27 - 29)