UniTO/anno2/YearI/SecondSem/VPC/labs/uppaal/uppaal.tex
Francesco Mecca 5e286062f8 MCAD 2019
2018-11-22 13:09:11 +01:00

279 lines
13 KiB
TeX
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\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 lack
possono essere persi. Il tempo di trasmissione sul link \`e variabile allinterno 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è lalgoritmo 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 dallalgoritmo 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}