Understanding Communicating Finite State Machines and Token Ring Protocols
200 likes | 277 Views
This lecture covers FSM models, communicating FSMs, asynchronous coupling, protocols, error states, and mutual exclusion using token ring protocols. Programming language style notation is also explained.
Understanding Communicating Finite State Machines and Token Ring Protocols
E N D
Presentation Transcript
CIS 725 Lecture 2
Finite State Machine Model • FSM = (A, S, T, s0) A = set of actions S = set of states s0 = initial states T = transition relation S * A S
Communicating FSM • send actions: -m or !m q ! m = send message m to q • receive actions: +m or ? m q ? m = receive message from q • internal actions
Protocol • A collection of CFSMs
Asynchronous coupling • Channels ch1 = channel from M to N ch2 = channel from N to M • Global state: (q1, q2, x, y) q1 = state of M q2 = state of N x = messages in transit to M y = messages in transit to N
Protocol actions • Each protocol action results in a change in the global state
Error states • Deadlock states: - state from which no transition is enabled • Unspecified reception: - a state in which a message exists in a channel but no transition is enabled in the state to receive it.
studying studying !meeting waiting Meeting appointment • - Initial state: studying • Send a message for meeting • May decide to cancel anytime ?OK meeting
Two-process mutual exclusion: Token ring protocol • Single token circulates among two nodes • Node with the token can enter the critical section
Request-based Token ring protocol - To get the token, send a request to the other node
no_token no_token !req !req ?token ?token !token req_sent req_sent enter enter enter exit exit exit ?req token & req_recd token token ?req in_cs in_cs& req_recd in_cs Request-based Token ring protocol
Programming language style notation • Guarded actions • en(a) a en(a): guard of the action boolean condition or boolean condition + receive statement
Normal form • init; do en(a1) a1 [] en(a2) a2 : : od
Token-based system • P1: hold = false; in_cs = false do ? token hold = true [] hold /\ not in_cs ! Token; hold =false [] hold in_cs = true [] in_cs in_cs = false od