280 lines
13 KiB
TeX
280 lines
13 KiB
TeX
|
\documentclass{article}
|
|||
|
%\usepackage{times}
|
|||
|
|
|||
|
|
|||
|
%\usepackage{amsthm}
|
|||
|
\usepackage{algorithm} % for pseudo-codes
|
|||
|
%\usepackage{enumerate}
|
|||
|
\usepackage{algpseudocode}
|
|||
|
%\usepackage{DotArrow}
|
|||
|
%\usepackage{subfig}
|
|||
|
%\usepackage{amsmath, environ}
|
|||
|
%\usepackage{amssymb}
|
|||
|
%\usepackage{amsthm}
|
|||
|
%%\usepackage{bm}
|
|||
|
%%\usepackage{mathtools}
|
|||
|
\usepackage{graphicx}
|
|||
|
%\usepackage{wrapfig}
|
|||
|
%\usepackage{minibox}
|
|||
|
%\usepackage{multirow}
|
|||
|
%\usepackage{pifont} % \ding{}
|
|||
|
%\usepackage[percent]{overpic}
|
|||
|
%\usepackage{scrextend} % labeling environment
|
|||
|
%
|
|||
|
%\newtheorem{theorem}{Theorem}
|
|||
|
%\newtheorem{definition}{Definition}
|
|||
|
%\newtheorem{example}{Example}
|
|||
|
%
|
|||
|
%\renewcommand{\textfraction}{0.05}
|
|||
|
%\renewcommand{\floatpagefraction}{0.75}
|
|||
|
|
|||
|
\newcommand{\centerimage}[5][-7pt]{ % [vskip] | graphics-opt | imgname | label | caption
|
|||
|
\begin{figure}[!htb]%
|
|||
|
\centering%
|
|||
|
\vspace{#1}%
|
|||
|
\includegraphics[#2]{#3}%
|
|||
|
\caption{#5}\label{#4}\vspace{2mm}%
|
|||
|
%\vspace{-3pt}\caption{#5}\label{#4}\vspace{-2pt}%
|
|||
|
\end{figure}}
|
|||
|
\date{}
|
|||
|
%\includegraphics[trim=1cm 2cm 3cm 4cm, clip=true]{example.pdf}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
\begin{document}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
\title{Relazione Esercizio Timed Automata}
|
|||
|
|
|||
|
|
|||
|
\author{Francesco Galla`, francesco.galla@edu.unito.it}
|
|||
|
|
|||
|
\maketitle
|
|||
|
|
|||
|
|
|||
|
%=========================================================================
|
|||
|
%%%%%%% INTRODUCTION %%%%%%%
|
|||
|
%=========================================================================
|
|||
|
|
|||
|
\section{Modello A} \label{sec:modA}
|
|||
|
MODELLO A. Si assume che il canale sia perfetto, e quindi n\`e il messaggio, n\`e l’ack
|
|||
|
possono essere persi. Il tempo di trasmissione sul link \`e variabile all’interno di un
|
|||
|
intervallo limitato, con poca variabilit\`a (quindi upper e lower bound del tempo di
|
|||
|
trasmissione sul link sono molto vicini, diciamo non sopra un decimo del tempo di
|
|||
|
trasmissione).
|
|||
|
%=========================================================================================================
|
|||
|
\subsection{Il modello Uppaal} \label{ssec:Uppaal}
|
|||
|
|
|||
|
Il modello \`e composto da 3 template, rappresentanti un sender, un receiver e un link.
|
|||
|
|
|||
|
\subsubsection{Sender}
|
|||
|
|
|||
|
Tra gli stati del processo $Sender$, si nota lo stato iniziale di \textit{wait} \textbf{waitPacket}
|
|||
|
in cui il processo attende un evento per cominciare la preparazione di un pacchetto. Una
|
|||
|
volta che il pacchetto \`e pronto per essere mandato (con un tempo compreso nell'intervallo
|
|||
|
$[1,4]$ del clock $sc$) allora si passa allo stato \textbf{canSend}. Da qui, il pacchetto
|
|||
|
viene mandato sul canale di sincronizzazione $ML$ (urgente) e il $Sender$ passa a
|
|||
|
\textbf{waitACK}. La ricezione dell'ACK avviene sul canale di sincronizzazione $LM$
|
|||
|
(urgente) e il clock $sc$ viene resettato.
|
|||
|
Ricevuto l'ACK, il $Sender$ rimane nello stato di \textbf{receivedACK} in cui occupa un tempo
|
|||
|
nell'intevallo $[2,4]$ del clock $sc$ per processarlo, per poi resettare nuovamente il clock
|
|||
|
e ritornare allo stato iniziale.
|
|||
|
|
|||
|
|
|||
|
\subsubsection{Receiver}
|
|||
|
|
|||
|
Il processo $Receiver$ segue una dinamica simile a quella del $Sender$: anche questo ha $4$
|
|||
|
stati, di cui l'iniziale \textbf{waitPacket} \`e l'attesa di un pacchetto (mandato dal
|
|||
|
$Sender$ e trasportato dal $Link$ al $Receiver$ sul canale di sincronizzazione $LR$ (urgente).
|
|||
|
Ricevuto il pacchetto, il receiver utilizza un tempo compreso nell'intevallo $[2,4]$ per
|
|||
|
processarlo in \textbf{receivedPacket} e passare nello \textbf{donePacket} resettando il
|
|||
|
clock $rc$. Qui impiega tra $2$ e $3$ secondi per costruire un ACK e passare nello stato
|
|||
|
\textbf{canACK}, da cui pu\`o mandare l'acknowledgement sul canale di sincronizzazione $RL$
|
|||
|
(urgente).
|
|||
|
|
|||
|
\subsubsection{Link}
|
|||
|
|
|||
|
Il processo $Link$ \`e modellato senza perdite (canale perfetto) e utilizza $5$ stati, di cui
|
|||
|
quello iniziale \`e considerato uno stato interno e modella le situazioni in cui i processi
|
|||
|
$Sender, Receiver$ stanno eseguendo operazioni locali (per cui non c'\`e comunicazione sul
|
|||
|
canale). Gli altri stati si comportano in maniera simile agli stati gi\`a visti negli altri
|
|||
|
due processi, utilizzando il clock $lc$.
|
|||
|
|
|||
|
%\centerimage{trim=1cm 10cm 3cm 4cm, clip=true}
|
|||
|
\centerimage{width=\columnwidth}
|
|||
|
{modAsend.jpg}{img:sendA}
|
|||
|
{Sender A}
|
|||
|
|
|||
|
%\centerimage{trim=1cm 10cm 3cm 4cm, clip=true}
|
|||
|
\centerimage{width=\columnwidth}
|
|||
|
{modArecv}{img:recvA}
|
|||
|
{Receiver A}
|
|||
|
|
|||
|
%\centerimage{trim=1cm 10cm 3cm 4cm, clip=true}
|
|||
|
\centerimage{width=\columnwidth}
|
|||
|
{modAlink.jpg}{img:linkA}
|
|||
|
{Link A}
|
|||
|
|
|||
|
|
|||
|
\subsection{Analisi TCTL delle propriet\`a}
|
|||
|
|
|||
|
Sono state controllate 4 propriet\`a sul modello A. Essendo un modello \textit{perfetto},
|
|||
|
senza perdite n\`e rumore, si nota come rispetti tutte le propriet\`a verificate.
|
|||
|
|
|||
|
\begin{description}
|
|||
|
\item{\textbf{1.} } $AG (not deadlock)$ \`e vera, quindi la traccia del sistema di
|
|||
|
processi \`e infinita.
|
|||
|
\item{\textbf{2.} } $sender.waitACK --> (sender.receivedACK)$ \`e vera, in quanto senza
|
|||
|
perdite il sender sar\`a sempre in grado di ricevere l'ACK entro un tempo finito.
|
|||
|
\item{\textbf{3.} } $AF receiver.receivedPacket$ \`e vera, in quanto non ci sono
|
|||
|
constraint sul tempo di attesa di $receiver.waitPacket$, pertanto un pacchetto
|
|||
|
verr\`a sempre ricevuto.
|
|||
|
\item{\textbf{4.} } Il tempo minimo e massimo tra l'invio del messaggio e la ricezione dell'ACK
|
|||
|
corrispondente da parte del $Sender$ sono ottenibili grazie a un clock aggiuntivo
|
|||
|
$fc$ che viene resettato ogni volta che un pacchetto viene mandato sul canale $ML$.
|
|||
|
Per questo nello stato $sender.canSend$ contiene il tempo minimo e massimo espressi
|
|||
|
come \textit{bound} dell'intervallo, in questo caso $[19,31]$.
|
|||
|
\end{description}
|
|||
|
\newpage
|
|||
|
|
|||
|
\section{Modello B} \label{sec:modB}
|
|||
|
MODELLO B. Si modifichi il modello in modo da prevedere la possibilità che il link
|
|||
|
perda un messaggio o un ack (la perdita equivale sia alla perdita effettiva che al
|
|||
|
caso di messaggio corrotto, perchè l’algoritmo si comporta in modo analogo). Non
|
|||
|
cambiate il protocollo, modellate semplicemente un link con perdita o
|
|||
|
corruzione del messaggio.
|
|||
|
%=======================================================================================================
|
|||
|
\subsection{Il modello Uppaal} \label{ssec:Uppaal}
|
|||
|
|
|||
|
Il modello \`e composto da 3 template, rappresentanti un sender, un receiver e un link.
|
|||
|
Il sender e il receiver mantengono la struttura del modello A, mentre nel $Link$ vengono
|
|||
|
introdotte due perdite possibili: una per il pacchetto e una per l'ACK.
|
|||
|
|
|||
|
\subsubsection{Link}
|
|||
|
|
|||
|
Il $Link$ in questo caso ha possibilit\`a di perdere i pacchetti (scelta non deterministica)
|
|||
|
in due stati: $receivedPacket$ e $receivedACK$, ovvero quelli in cui \`e stato mandato un
|
|||
|
messaggio dal sender al link o dal receiver al link. Si nota come l'invariante degli due
|
|||
|
stati sia $lc < 8$, dove con $lc == 8$ si sa con certezza che il pacchetto \`e stato perso
|
|||
|
oppure ricevuto correttamente.
|
|||
|
Per implementare la perdita \`e stato utilizzato un posto aggiuntivo rispetto al modello A,
|
|||
|
chiamato $lostPacket$, che riporta allo stato fantasma del link senza per\`o mandare il
|
|||
|
pacchetto o l'ACK.
|
|||
|
|
|||
|
%\centerimage{trim=1cm 10cm 3cm 4cm, clip=true}
|
|||
|
\centerimage{width=\columnwidth}
|
|||
|
{modBlink.jpg}{img:linkB}
|
|||
|
{Link B}
|
|||
|
|
|||
|
|
|||
|
\subsection{Analisi TCTL delle propriet\`a}
|
|||
|
|
|||
|
\begin{description}
|
|||
|
\item{\textbf{1.} } $AG (not deadlock)$ \`e falsa, infatti la traccia del simulatore
|
|||
|
mostra come un pacchetto perso causi deadlock perch\`e $Sender$ e $Receiver$ sono
|
|||
|
rimasti in attesa di risposta e il canale non ha pi\`u comunicazioni al suo interno.
|
|||
|
\item{\textbf{2.} } $sender.waitACK --> (sender.receivedACK)$ \`e falsa, per lo stesso
|
|||
|
motivo per cui la $1.$ lo \`e.
|
|||
|
\item{\textbf{3.} } $EF receiver.receivedPacket$ \`e vera, perch\`e nonostante la
|
|||
|
possibilit\`a di deadlock, c'\`e almeno una traccia in cui il pacchetto viene
|
|||
|
consegnato correttamente. Questo significa che i pacchetti non sono persi con
|
|||
|
sicurezza ma tramite una scelta non deterministica.
|
|||
|
\item{\textbf{4.} } Il tempo minimo e massimo tra l'invio del messaggio e la ricezione dell'ACK
|
|||
|
corrispondente da parte del $Sender$ sono ottenibili grazie a un clock aggiuntivo
|
|||
|
$fc$ che viene resettato ogni volta che un pacchetto viene mandato sul canale $ML$.
|
|||
|
Dato che abbiamo una probabilit\`a di perdita all'interno del canale, possiamo
|
|||
|
stabilire con sicurezza solo il tempo \textbf{minimo}, che risulta equivalente a
|
|||
|
quello del modello A.
|
|||
|
\end{description}
|
|||
|
\newpage
|
|||
|
|
|||
|
\section{Modello C} \label{sec:modC}
|
|||
|
MODELLO C. Mantenendo il comportamento del canale previsto per il modello B, si
|
|||
|
modelli il mittente e il ricevente descritti dall’algoritmo 3.
|
|||
|
%=========================================================================================================
|
|||
|
\subsection{Il modello Uppaal} \label{ssec:Uppaal}
|
|||
|
|
|||
|
Il modello \`e composto da 3 template, rappresentanti un sender, un receiver e un link.
|
|||
|
Il sender \`e stato implementato in due versioni, una che utilizza un timer singolo e una che
|
|||
|
utilizza due timer. Il link non cambia rispetto al modello B.
|
|||
|
|
|||
|
Si utilizzano inoltre $3$ variabili globali booleane aggiuntive: $next, ack, frame$. La
|
|||
|
scelta di utilizzare variabili booleane \`e data dal fatto che in STOP\&WAIT i messaggi sono
|
|||
|
mandati singolarmente, per cui basta differenziare due messaggi successivi per riconoscere i
|
|||
|
duplicati, come effettuato nel $Receiver$.
|
|||
|
|
|||
|
\subsubsection{Sender (timer singolo)}
|
|||
|
|
|||
|
Si estende il template $Sender$ del Modello A con la possibilit\`a di inviare nuovamente i
|
|||
|
messaggi nel caso questi venissero persi, nel caso non fosse ricevuto un ACK e nel caso l'ACK
|
|||
|
ricevuto non corrispondesse a quello atteso. Per fare ci\`o sono state utilizzate le
|
|||
|
variabili globali di cui sopra e uno stato $lostPacket$ il cui accesso viene controllato da
|
|||
|
una guardia sul timer $x0$ (singolo). Se il timer "scatta", ovvero se trascorre il tempo
|
|||
|
stabilito nello stato $waitACK$, allora \`e forzato lo stato $lostPacket$ che riportando a
|
|||
|
$canSend$ senza cambiare i valori di $frame$ e $next$ permette la ritrasmissione.
|
|||
|
Inoltre, per il controllo della correttezza del'ACK, si utilizza una transizione con guardia
|
|||
|
che porta dallo stato $receivedACK$ allo stato $lostPacket$, per ritrasmettere nel caso l'ACK
|
|||
|
ricevuto non fosse corretto.
|
|||
|
|
|||
|
\subsection{Sender (timer doppio)}
|
|||
|
|
|||
|
Per il sender a timer doppio, \`e stata duplicata la struttura del primo sender di modo da
|
|||
|
permettere una scelta tra $next == 1$ e $next == 0$. In questo modo si pu\`o discriminare tra
|
|||
|
i due tipi di frame possibili.
|
|||
|
|
|||
|
\subsubsection{Receiver}
|
|||
|
|
|||
|
Al receiver del Modello A viene aggiunta la capacit\`a di riconoscere pacchetti duplicati
|
|||
|
tramite una variabile locale $correctFrame$ e uno stato $dupPacket$. La transizione a questo
|
|||
|
stato viene controllata da una guardia che discrimina se il frame ricevuto \`e corrispondente
|
|||
|
a quello atteso. Nel caso il frame non corrispondesse, viene aggiornata la variabile $ack$ e
|
|||
|
viene mandato l'ACK per il pacchetto ricevuto, seppur duplicato, per permettere il
|
|||
|
proseguimento del sender.
|
|||
|
|
|||
|
|
|||
|
%\centerimage{trim=1cm 10cm 3cm 4cm, clip=true}
|
|||
|
\centerimage{width=\columnwidth}
|
|||
|
{modCsend1.jpg}{img:sendC}
|
|||
|
{Sender C (1 timer)}
|
|||
|
|
|||
|
\centerimage{width=\columnwidth}
|
|||
|
{modCsend2.jpg}{img:sendC2}
|
|||
|
{Sender C (2 timer)}
|
|||
|
|
|||
|
%\centerimage{trim=1cm 10cm 3cm 4cm, clip=true}
|
|||
|
\centerimage{width=\columnwidth}
|
|||
|
{modCrecv}{img:recvC}
|
|||
|
{Receiver C}
|
|||
|
|
|||
|
|
|||
|
\subsection{Analisi TCTL delle propriet\`a}
|
|||
|
|
|||
|
Il sistema rispetta le propriet\`a seguenti sia con un timer sia con due, dimostrando che non
|
|||
|
c'\`e necessit\`a per questo modello di due timer. Inoltre, il valore dei timer (settato a
|
|||
|
$50$ in entrambi i casi) deve essere maggiore del tempo impiegato da un ACK a tornare al
|
|||
|
sender, ossia due volte il tempo impiegato dal canale per spedire un pacchetto pi\`u
|
|||
|
l'eventuale tempo di elaborazione nel receiver. Altrimenti si ha $deadlock$, perch\`e il
|
|||
|
sender non riesce a spedire nuovamente il pacchetto se canale \`e occupato dall'ACK del receiver.
|
|||
|
Il valore minimo del timer per questo modello \`e $42$.
|
|||
|
|
|||
|
\begin{description}
|
|||
|
\item{\textbf{1.} } $AG (not deadlock)$ \`e vera, quindi la traccia del sistema di
|
|||
|
processi \`e infinita.
|
|||
|
\item{\textbf{2.} } $sender.waitACK0 || sender.waitACK1 --> (sender.receivedACK0 ||
|
|||
|
sender.receivedACK1)$ \`e falsa, in quanto il canale pu\`o subire perdite.
|
|||
|
\item{\textbf{3.} } $E<> (sender.receivedACK0 \&\& ack == next )$ \`e vera, infatti esiste
|
|||
|
almeno un caso in cui l'ACK ricevuto dal sender \`e corretto (e quindi il modello \`e
|
|||
|
in grado di passare messaggi correttamente).
|
|||
|
\item{\textbf{4.} } $link.lostPacket --> (sender.canSend0 || sender.canSend1 ||
|
|||
|
receiver.canACK)$ \`e vera, in quanto in caso di pacchetto perso il sistema non si
|
|||
|
blocca ma permette al sender di mandare di nuovo il messaggio o al receiver di
|
|||
|
trasmettere l'ACK.
|
|||
|
\item{\textbf{4.} } Il tempo minimo e massimo tra l'invio del messaggio e la ricezione dell'ACK
|
|||
|
corrispondente da parte del $Sender$ sono ottenibili grazie a un clock aggiuntivo
|
|||
|
$fc$ che viene resettato ogni volta che un pacchetto viene mandato sul canale $ML$.
|
|||
|
Per questo nello stato $sender.canSend$ contiene il tempo minimo e massimo espressi
|
|||
|
come \textit{bound} dell'intervallo, in questo caso $[21,32]$.
|
|||
|
\end{description}
|
|||
|
\end{document}
|