You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
1.4 KiB
64 lines
1.4 KiB
// Modest MDP model of the bounded exponential backoff procedure (BEB)
|
|
// [BFHH11]
|
|
action tick, tack, tock;
|
|
|
|
const int K = 4; // maximum value for backoff
|
|
const int N = 3; // number of tries before giving up
|
|
const int H = 3; // number of hosts (must correspond to the number of Host() instantiations in the global composition)
|
|
|
|
int(0..2) cr; // count how many hosts attempt to seize the line in a slot (zero, one, many)
|
|
bool line_seized;
|
|
bool gave_up;
|
|
|
|
property LineSeized = Pmax(<> line_seized); // some host managed to seize the line before any other gave up
|
|
property GaveUp = Pmax(<> gave_up); // some host gave up before any other managed to seize the line (does not work with POR)
|
|
|
|
process Clock()
|
|
{
|
|
tick; tack; tau {= cr = 0 =}; tock; Clock()
|
|
}
|
|
|
|
process Host()
|
|
{
|
|
int(0..N) na; // nr_attempts 0..N
|
|
int(0..K) ev = 2; // exp_val 0..K
|
|
int(0..K) wt; // slots_to_wait 0..K
|
|
|
|
do
|
|
{
|
|
if(wt > 0)
|
|
{
|
|
// wait this slot
|
|
tick {= wt-- =}
|
|
}
|
|
else
|
|
{
|
|
tau {= cr = min(2, cr + 1) =}; // attempt to seize the line
|
|
tick;
|
|
if(cr == 1)
|
|
{
|
|
// someone managed to seize the line
|
|
tau {= line_seized = true =}; stop
|
|
}
|
|
else if(na >= N)
|
|
{
|
|
// maximum number of attempts exceeded
|
|
tau {= gave_up = true =}; stop
|
|
}
|
|
else
|
|
{
|
|
// backoff
|
|
tau {= na++, wt = DiscreteUniform(0, max(0, ev - 1)), ev = min(2 * ev, K) =}
|
|
}
|
|
};
|
|
tack; tock
|
|
}
|
|
}
|
|
|
|
par
|
|
{
|
|
:: Clock()
|
|
:: Host()
|
|
:: Host()
|
|
:: Host()
|
|
}
|