oups
This commit is contained in:
96
docs/rapport/rapport_etat_art/coherence_forte/index.tex
Normal file
96
docs/rapport/rapport_etat_art/coherence_forte/index.tex
Normal file
@ -0,0 +1,96 @@
|
||||
La cohérence forte présente, dans un premier temps, l'approche la plus intuitive pour une application collaborative dans le cloud.
|
||||
Prenons l'approche de chercher à répliquer un processus d'édition local d'un document. Formalisons dans un premier temps ce qu'on attend d'une application d'édition de document local.
|
||||
|
||||
\begin{figure}[!h]
|
||||
\centering
|
||||
\resizebox{!}{.4\columnwidth}{
|
||||
\input{images/local1.latex}
|
||||
}
|
||||
\caption{Bob edit un document localement}
|
||||
\label{local_1}
|
||||
\end{figure}
|
||||
|
||||
On voit sur la figure \ref{local_1} que Bob émet une requête à son interface utilisateur. À partir de là le clavier partage l'information au système jusqu'à l'application d'édition. En fonction du traitement de cette information, si elle est acceptée par l'application d'édition, alors elle affiche un document modifié en accord avec la saisie de Bob à l'écran. Ce qui donne un feedback à Bob concernant son action initiale.
|
||||
Dans notre modélisation, nous séparons bien les actions de l'utilisateur sur ses interfaces (l'écran et le clavier) des interactions au sein du système.
|
||||
|
||||
Dans un cas d'usage courant, une application d'édition local ne présente pas de problèmes liés à la présence de plusieurs éditeurs en simultanés. Il y a en effet une seule interface homme-machine, c'est-à-dire de façon pragmatique un unique écran et clavier.
|
||||
|
||||
Imaginons ainsi un cas où Alice et Bob souhaitent éditer ensemble un même document. Si on voulait simplement appliquer le fonctionnement local que nous venons de décrire à cette nouvelle problématique. Il conviendrait de simplement rajouter un IHM à Alice. Ainsi il y a toujours une seule application d'édition collaborative sur lequel viennent se connecter cette fois-ci deux interfaces (comme visible dans la figure \ref{local_2}).
|
||||
|
||||
\begin{figure}[!h]
|
||||
\begin{multicols}{2}
|
||||
|
||||
\centering
|
||||
\resizebox{!}{.7\columnwidth}{
|
||||
\input{images/local2.latex}
|
||||
}
|
||||
\caption{Alice et Bob éditent un document localement}
|
||||
\label{local_2}
|
||||
|
||||
\columnbreak
|
||||
|
||||
\centering
|
||||
\resizebox{!}{.8\columnwidth}{
|
||||
\input{images/local2fail.latex}
|
||||
}
|
||||
\caption{Alice et Bob éditent un document localement de manière concurente}
|
||||
\label{local_2_fail}
|
||||
\end{multicols}
|
||||
\end{figure}
|
||||
|
||||
|
||||
Nous avons à présents deux acteurs qui éditent et lise le document, et un autre qui s'occupe de stocker et de synchroniser le document entre ces deux acteurs.
|
||||
|
||||
La limite liée à cette approche réside dans le fait que les communications entre Alice et l'application et Bob et l'application ne peuvent pas être garentits comme équitables. En effet, Alice et Bob peuvent très bien se retrouver déconnectés de manière non prévisible et asynchrone. Ou bien avoir des temps de transmissions de leurs informations qui diffèrent. Le caractère non-deterministe des ces erreurs peut résulter en des incohérences dans l'ordre d'arrivé des informations soumises par Alice et Bob. Ce qui peut a terme créer des incohérences dans le document final.
|
||||
|
||||
C'est néanmoins une problèmatique qui peut être assimilée à de la gestion de la concurrence entre processus. C'est en effet un domaine qui est étudié depuis l'apparition des premiers processeurs multi-coeur. Une approche que nous pouvons donc prendre à la programmation concurente serait de résoudre ce problème en venant utliser des techniques de synchronisation de processus. C'est-à-dire en utilisant des mécanismes de synchronisation tel que des verrous dans notre application. On peut par exemple utiliser des sémaphores pour gérer les accès concurrents à la mémoire partagée. Ce qui resulterais en l'execution suivante:
|
||||
|
||||
\begin{figure}[!h]
|
||||
\centering
|
||||
\resizebox{!}{.7\columnwidth}{
|
||||
\input{images/serialized.latex}
|
||||
}
|
||||
\caption{Alice et Bob éditent un document localement avec des vérous}
|
||||
\label{serialized}
|
||||
\end{figure}
|
||||
|
||||
On voit sur la figure \ref{serialized} que les actions d'Alice et Bob sont sérialisées. C'est-à-dire que les actions d'Alice et Bob sont exécutées l'une après l'autre. Ce qui permet d'éviter les problèmes de concurrence entre les deux acteurs. Cependant, cette approche est très limitée. En effet, elle ne permet pas de profiter des avantages de l'édition collaborative. En effet, cela signifie que l'un des deux acteurs doit attendre que l'autre ait fini d'éditer le document pour pouvoir à son tour l'éditer. Ce qui rabaisse les performance de l'application à la latence de l'acteur le plus lent.
|
||||
|
||||
En revenons dans notre contexte initial qui est une applicationn d'édition collaborative nous souhaitons pouvoir gérér un grand nombre d'utilisateur en simultanés. Ainsi la probabilité d'avoir une expérience dégradé pour l'ensemble des utilisateur croit avec le nombre d'utilisateur. Pour pallier à ce problème l'approche qui peut être adopté est d'exclure les utilisateurs possèdant des connections trop limités avec le serveur.
|
||||
|
||||
C'est néanmoins la seule approche qui nous permet d'obtenir une cohérence absolue autant dans la prise en compte des opérations d'écritures des acteurs que dans le traitement de leurs lectures.
|
||||
|
||||
Selon Perrin on se placerait dans une approche qui relèverait de la cohérence séquentielle.
|
||||
|
||||
\subsection{Cohérence séquentielle}
|
||||
|
||||
% blbla sur la cohérence séquentielle de manière très théorique et fondamentale
|
||||
|
||||
|
||||
|
||||
\paragraph{Validité}
|
||||
|
||||
Dans une application d'édition collaborative on s'attend à ce que toutes les entrées des utilisateurs soient prises en compte. Il nous parait en effet inacceptable que des saisies disparaisses de manière aléatoire durant l'exécution.
|
||||
|
||||
Ce principe nous permet d'introduire une première propriété utilisée par Perrin pour définir et classer les différents critères de cohérence qu'est la validité.
|
||||
|
||||
La validité peut ainsi être résumé comme la propriété qui permet d'assurer que toutes les saisies réalisées, et seulement elles, soient prises en compte dans l'exécution du système.
|
||||
|
||||
Ceci se traduit par l'affichage d'un retour quant à la saisie de bob sur son application. Lui signifiant que son interaction avec l'application à bien était prise en compte, et n'est donc pas passée à la trappe. Elle n'implique néanmoins aucune notion d'ordre dans les saisies, ce qui signifie que les saisies peuvent être réagencées durant l'exécution.
|
||||
|
||||
\paragraph{Convergence}
|
||||
|
||||
Une autre attente d'une application d'édition collaborative est en quelque sorte sont determinisme sur une durée infinie. On s'attend en effet, une fois toutes les éditions terminés, que le document soit identique pour tous les acteurs. C'est-à-dire que peut importe l'ordre dans lequel les saisies ont été réalisées, le document final doit être identique pour tous les noeuds.
|
||||
|
||||
C'est ce que Perrin appelle la convergence qu'il définit plus formellement comment étant la propriété qui assure que si un nombre finit d'ecriture et infini de lecture sont réaliséés, alors tous les noeuds finissent par avoir la même valeur.
|
||||
|
||||
\paragraph{Localité D'état}
|
||||
|
||||
La dernière propriétée du model de Perrin est la localité d'état.
|
||||
|
||||
Elle consiste en le fait que chaque acteur doivent garder une vision local cohérente du système. Par exemple, comme illustrée dans la Figure \ref{local_state}, au fur et à mesure des éditions de Bob, sa vue local va évoluer en conséquence, mais si il recoit à un moment donné une édition d'Alice qui est antérieur à une de ses éditions, alors il doit privilégier sa propre édition. C'est-à-dire que sa vue local doit être cohérente avec son historique d'édition quitte à diverger de la vue local d'Alice.
|
||||
|
||||
\begin{figure}[!h]
|
||||
\caption{Localité d'état}
|
||||
\label{local_state}
|
||||
\end{figure}
|
@ -1,7 +1,68 @@
|
||||
\subsection{Etat des différents critères}
|
||||
\subsubsection{Les modèles de mémoires partagées}
|
||||
Nous venons de définir la cohérence séquentielle et de proposer une approche pour la réalisser. Néanmoins nous avons vue que cette approche est limitès puisqu'elle pousse le système à être nivelé par le bas en s'adaptant à l'acteur le plus lent.
|
||||
Nous allons donc explorer d'autres approches réalisant plus de compromis dans la gestion de la cohérence du système.
|
||||
|
||||
\subsubsection{La cohérence forte}
|
||||
Cohérence Séquentielle \cite{lamport_how_1979}
|
||||
Ainsi là où la cohérence séquentielle (et par extension la cohérence forte) permettait de garantir nos 3 propriétées que sont la validité, la convergence et la localité d'état. Nous allons explorer des solution qui certaines de ces propriétées afin de gagner en performance et en résilience.
|
||||
|
||||
\subsubsection{La cohérence Faible}
|
||||
\subsection{Adaptation à notre problème}
|
||||
|
||||
Dans le cadre de notre problématique il convient dans un premier temps de spécifier quels sont les critères qui semblent être essentiels à la réalisation d'une application d'édition collaborative. Pour ca nous pouvons dèja imaginer ce qu'implique concretement ces différents critères sur le comportement de notre application.
|
||||
|
||||
\subsubsection{Validité}
|
||||
|
||||
Comme dit précèdemment, la validité permet d'assurer que les saisies de Bob soient toujours prise en compte en tout point du système. C'est-à-dire que si Bob saisit "Hello" puis "World" alors il s'attend à ce que ces deux saisies soient prises en compte. Ce qui se traduit par l'affichage de "Hello World" ou "World Hello sur son écran. Les états finaux incorects qui ne respecterais pas la validité sont alors "Hello", "World" ou "$\emptyset$".
|
||||
|
||||
De la même manière, les saisies des aitres acteurs du sytème peuvent donc très bien étre ignorés, intercalés entre les saises de Bob, et réagencés durant l'éxécution.
|
||||
|
||||
Ne pas prendre en compte le critère de validité dans notre application reviendrait donc à être capable d'ignorer des saisies soumises par l'utilisateur. C'est ce qui est formalisé par le critère de cohérence dit de Sérialization (selon Perrin).
|
||||
|
||||
L'application de la validité demande à notre système une approche d'acknowledgement. Puisque toutes saisies ce doit d'être considéré, le client doit s'assurer que sa saisie à bien était recu par l'ensemble des noeuds. Dans le cas d'une application centralisé, seul un intermédiaire doit être contacté. Mais dans un contexte plus distriué, le problème augmente en compléxité et en coût pour le réseau.
|
||||
|
||||
\paragraph{La Serialisation}
|
||||
|
||||
La sérialisation se propose donc comme étant l'exact inverse de la validité, c'est à dire un critère de cohérence fort auquel nous aurions retiré la validité. ($SER = \{C_\top\} - \{V\}$)
|
||||
|
||||
\subsubsection{Convergence}
|
||||
|
||||
La convergence permet d'assurer que le document final soit identique pour tous les acteurs. C'est-à-dire que peut importe l'ordre dans lequel les saisies ont été recu par chaque noeud, le document final doit être identique pour tous.
|
||||
|
||||
Il est important de noter que la convergence seule ne dit rien sur la source des données qui composent le document. Ainsi il est possible que le document final ne prenne pas en compte toutes les saisies réalisées sur le système. Ou bien même qu'il prenne en compte des saisies qui n'ont jamais été réalisées.
|
||||
|
||||
Appliqué à notre problème, la convergence assure que le document final soit identique pour tous les acteurs, ce qui peut sembler essentiel dans notre cas.
|
||||
|
||||
L'application de la convergence introduit dans notre système une notion de gestion des conflits. Si plusieurs acteurs souhaitent écrire au même moments, alors des mécanismes doivent être mise en place pour une gestion des conflits deterministe. C'est à dire, permettant de garantir une seule version pour tous les acteurs quelque soit sa position dans le système, et donc l'ordre potentiel de reception des saisies.
|
||||
|
||||
[Un exemple de gestion de conflits pas si évidente que ca]
|
||||
|
||||
Cette gestion des conflit peut être réalisé de manière distribué impliquant la mise en place d'un algorithme de consensus. Ce qui peut être très couteux en terme de performance et de complexité. Ou bien être délégué à un acteur centralisé qui aura le pouvoir de manipuler l'ordre final des saisies. Ce qui peut poser des problèmes en termes de gouvernance du système, donnant le pouvoir à un seul acteur.
|
||||
|
||||
Il est bon de noter que bien que la convergence est une propriétée qui semble importante dans le cadre d'une application d'édition collaborative classique. Il existe des manière de concevoir une application collaborative fournissant un document final identique, mais ne garantissant pas nécéssairement la convergence dans l'ordre où les saisies sont interprétés. Ce point sera discuté lorsque nous aborderons les CRDTs.
|
||||
|
||||
\subsubsection{Localité d'état}
|
||||
|
||||
La localité d'état permet d'assurer que les mises à jour d'affichages futures soient toujours cohérentes avec les mises à jour d'affichages passées. Indirectement, cela interdit le changement de l'ordre dans lequel les transactions passés sont interprétés une fois que le résultat est affiché à l'utilisateur. Mais empeche aussi l'insertion et la supression de transctions dans ce même passé.
|
||||
|
||||
L'objectif à haut niveau est de garder une expérience cohérente pour l'utilisateur, en interdisant à l'application de tolérer des retours en arrières de l'état courant.
|
||||
|
||||
Appliqué à notre problème, la localité d'état permet d'assurer que les saisies de Bob et celles qu'il a reçu soient toujours affichés dans l'ordre où elles ont étaient interprétés initialement. Cette propriétée permet par exemple d'empecher le cas où Alice traiterais la saisie de bob, bob de son coté suprime la saisie qu'il vient de réalisé, et Alice renvoit à Bob la saisie qu'elle vient de modifier. Ce cas est explicité dans la figure \ref{local_state_fail}.
|
||||
|
||||
\begin{figure}[!h]
|
||||
\centering
|
||||
\resizebox{!}{0.7\columnwidth}{
|
||||
\input{images/localiteEtatFail.latex}
|
||||
}
|
||||
\caption{Localité d'état non respectée}
|
||||
\label{local_state_fail}
|
||||
\end{figure}
|
||||
|
||||
Du point de vue de Bob, il vient de revoir aparaitre une ligne qu'il vient de supprimer, ce qui rend son expérience incohérente.
|
||||
|
||||
En effet, premièrement Bob à vue s'afficher sur son écran la ligne qu'il venant de saisir \\ $\delta = \{"Hello World"\}$ qui est le resultat de l'éxécution $\text{inserer}("Hello World")$. Puis il supprime le mot "World". Le passé des éxécutions de Bob devient donc $\text{inserer}("Hello World") \cdot \text{supprimer}(" World") = \{"Hello"\}$. Mettant ainsi à jour son état local. Enfin il recoit l'opération d'Alice qui vinet de réaliser une modification en se basant sur un état antérieur à l'état actuel de Bob. L'état qu'il recoit est donc le résultat des opérations $\text{inserer}("Hello World") \cdot \text{inserer}("Hello World") = \{"Hello World"\}$. On omet ici une opération que Bob à soumise, qu'il à pu constater comme étant comptabilisé dans le calcul de son état local, mais qui à ensuite était ignoré par le système. La cohérence de l'état local de Bob n'a donc pas était respectée.
|
||||
|
||||
|
||||
% \subsection{Etat des différents critères}
|
||||
% \subsubsection{Les modèles de mémoires partagées}
|
||||
|
||||
% \subsubsection{La cohérence forte}
|
||||
% Cohérence Séquentielle \cite{lamport_how_1979}
|
||||
|
||||
% \subsubsection{La cohérence Faible}
|
||||
|
43
docs/rapport/rapport_etat_art/images/local1.latex
Normal file
43
docs/rapport/rapport_etat_art/images/local1.latex
Normal file
@ -0,0 +1,43 @@
|
||||
% generated by Plantuml 1.2022.7
|
||||
\definecolor{plantucolor0000}{RGB}{24,24,24}
|
||||
\definecolor{plantucolor0001}{RGB}{0,0,0}
|
||||
\definecolor{plantucolor0002}{RGB}{226,226,240}
|
||||
\begin{tikzpicture}[yscale=-1
|
||||
,pstyle0/.style={color=plantucolor0000,line width=0.5pt,dash pattern=on 5.0pt off 5.0pt}
|
||||
,pstyle1/.style={color=plantucolor0000,fill=plantucolor0002,line width=0.5pt}
|
||||
,pstyle3/.style={color=plantucolor0000,fill=plantucolor0000,line width=1.0pt}
|
||||
,pstyle4/.style={color=plantucolor0000,line width=1.0pt}
|
||||
]
|
||||
\draw[pstyle0] (23pt,84.0679pt) -- (23pt,311.01pt);
|
||||
\draw[pstyle0] (134.7162pt,84.0679pt) -- (134.7162pt,311.01pt);
|
||||
\draw[pstyle0] (208.3289pt,84.0679pt) -- (208.3289pt,311.01pt);
|
||||
\draw[pstyle0] (368.0101pt,84.0679pt) -- (368.0101pt,311.01pt);
|
||||
\node at (5pt,65pt)[below right,color=black]{Bob};
|
||||
\draw[pstyle1] (23.3692pt,13.5pt) ellipse (8pt and 8pt);
|
||||
\draw[color=plantucolor0000,line width=0.5pt] (23.3692pt,21.5pt) -- (23.3692pt,48.5pt)(10.3692pt,29.5pt) -- (36.3692pt,29.5pt)(23.3692pt,48.5pt) -- (10.3692pt,63.5pt)(23.3692pt,48.5pt) -- (36.3692pt,63.5pt);
|
||||
\draw[pstyle1] (100.7162pt,55pt) arc (180:270:5pt) -- (105.7162pt,50pt) -- (164.3289pt,50pt) arc (270:360:5pt) -- (169.3289pt,55pt) -- (169.3289pt,78.0679pt) arc (0:90:5pt) -- (164.3289pt,83.0679pt) -- (105.7162pt,83.0679pt) arc (90:180:5pt) -- (100.7162pt,78.0679pt) -- cycle;
|
||||
\node at (107.7162pt,57pt)[below right,color=black]{Clavier};
|
||||
\draw[pstyle1] (179.3289pt,55pt) arc (180:270:5pt) -- (184.3289pt,50pt) -- (233.3289pt,50pt) arc (270:360:5pt) -- (238.3289pt,55pt) -- (238.3289pt,78.0679pt) arc (0:90:5pt) -- (233.3289pt,83.0679pt) -- (184.3289pt,83.0679pt) arc (90:180:5pt) -- (179.3289pt,78.0679pt) -- cycle;
|
||||
\node at (186.3289pt,57pt)[below right,color=black]{Ecran};
|
||||
\draw[pstyle1] (330.0101pt,55pt) arc (180:270:5pt) -- (335.0101pt,50pt) -- (402.2546pt,50pt) arc (270:360:5pt) -- (407.2546pt,55pt) -- (407.2546pt,78.0679pt) arc (0:90:5pt) -- (402.2546pt,83.0679pt) -- (335.0101pt,83.0679pt) arc (90:180:5pt) -- (330.0101pt,78.0679pt) -- cycle;
|
||||
\node at (337.0101pt,57pt)[below right,color=black]{Système};
|
||||
\draw[pstyle3] (123.0226pt,113.7739pt) -- (133.0226pt,117.7739pt) -- (123.0226pt,121.7739pt) -- (127.0226pt,117.7739pt) -- cycle;
|
||||
\draw[pstyle4] (23.3692pt,117.7739pt) -- (129.0226pt,117.7739pt);
|
||||
\node at (30.3692pt,98.0679pt)[below right,color=black]{Ecrit "Hello"};
|
||||
\draw[pstyle3] (356.6323pt,145.4799pt) -- (366.6323pt,149.4799pt) -- (356.6323pt,153.4799pt) -- (360.6323pt,149.4799pt) -- cycle;
|
||||
\draw[pstyle4] (135.0226pt,149.4799pt) -- (362.6323pt,149.4799pt);
|
||||
\node at (142.0226pt,129.7739pt)[below right,color=black]{Envoie "Hello"};
|
||||
\draw[pstyle4] (368.6323pt,198.892pt) -- (410.6323pt,198.892pt);
|
||||
\draw[pstyle4] (410.6323pt,198.892pt) -- (410.6323pt,211.892pt);
|
||||
\draw[pstyle4] (369.6323pt,211.892pt) -- (410.6323pt,211.892pt);
|
||||
\draw[pstyle3] (379.6323pt,207.892pt) -- (369.6323pt,211.892pt) -- (379.6323pt,215.892pt) -- (375.6323pt,211.892pt) -- cycle;
|
||||
\node at (375.6323pt,161.4799pt)[below right,color=black]{Accepte la saisie et};
|
||||
\node at (375.6323pt,179.186pt)[below right,color=black]{modifie le document};
|
||||
\draw[pstyle3] (219.8289pt,257.304pt) -- (209.8289pt,261.304pt) -- (219.8289pt,265.304pt) -- (215.8289pt,261.304pt) -- cycle;
|
||||
\draw[pstyle4] (213.8289pt,261.304pt) -- (367.6323pt,261.304pt);
|
||||
\node at (225.8289pt,223.892pt)[below right,color=black]{Afiche le document};
|
||||
\node at (225.8289pt,241.598pt)[below right,color=black]{mis à jour};
|
||||
\draw[pstyle3] (34.3692pt,289.01pt) -- (24.3692pt,293.01pt) -- (34.3692pt,297.01pt) -- (30.3692pt,293.01pt) -- cycle;
|
||||
\draw[pstyle4] (28.3692pt,293.01pt) -- (207.8289pt,293.01pt);
|
||||
\node at (40.3692pt,273.304pt)[below right,color=black]{Regarde};
|
||||
\end{tikzpicture}
|
16
docs/rapport/rapport_etat_art/images/local1.puml
Normal file
16
docs/rapport/rapport_etat_art/images/local1.puml
Normal file
@ -0,0 +1,16 @@
|
||||
@startuml local1
|
||||
|
||||
hide footbox
|
||||
|
||||
actor Bob
|
||||
participant Clavier
|
||||
participant Ecran
|
||||
participant Système
|
||||
|
||||
Bob -> Clavier : Ecrit "Hello"
|
||||
Clavier -> Système : Envoie "Hello"
|
||||
Système -> Système : Accepte la saisie et\nmodifie le document
|
||||
Système -> Ecran : Afiche le document\nmis à jour
|
||||
Ecran -> Bob : Regarde
|
||||
|
||||
@enduml
|
41
docs/rapport/rapport_etat_art/images/local2.latex
Normal file
41
docs/rapport/rapport_etat_art/images/local2.latex
Normal file
@ -0,0 +1,41 @@
|
||||
% generated by Plantuml 1.2022.7
|
||||
\definecolor{plantucolor0000}{RGB}{24,24,24}
|
||||
\definecolor{plantucolor0001}{RGB}{0,0,0}
|
||||
\definecolor{plantucolor0002}{RGB}{226,226,240}
|
||||
\begin{tikzpicture}[yscale=-1
|
||||
,pstyle0/.style={color=plantucolor0000,line width=0.5pt,dash pattern=on 5.0pt off 5.0pt}
|
||||
,pstyle1/.style={color=plantucolor0000,fill=plantucolor0002,line width=0.5pt}
|
||||
,pstyle2/.style={color=plantucolor0000,line width=0.5pt}
|
||||
,pstyle3/.style={color=plantucolor0000,fill=plantucolor0000,line width=1.0pt}
|
||||
,pstyle4/.style={color=plantucolor0000,line width=1.0pt}
|
||||
]
|
||||
\draw[pstyle0] (26pt,84.0679pt) -- (26pt,294.304pt);
|
||||
\draw[pstyle0] (75.9pt,84.0679pt) -- (75.9pt,294.304pt);
|
||||
\draw[pstyle0] (235.9633pt,84.0679pt) -- (235.9633pt,294.304pt);
|
||||
\node at (5pt,65pt)[below right,color=black]{Alice};
|
||||
\draw[pstyle1] (26.45pt,13.5pt) ellipse (8pt and 8pt);
|
||||
\draw[pstyle2] (26.45pt,21.5pt) -- (26.45pt,48.5pt)(13.45pt,29.5pt) -- (39.45pt,29.5pt)(26.45pt,48.5pt) -- (13.45pt,63.5pt)(26.45pt,48.5pt) -- (39.45pt,63.5pt);
|
||||
\node at (57.9pt,65pt)[below right,color=black]{Bob};
|
||||
\draw[pstyle1] (76.2692pt,13.5pt) ellipse (8pt and 8pt);
|
||||
\draw[pstyle2] (76.2692pt,21.5pt) -- (76.2692pt,48.5pt)(63.2692pt,29.5pt) -- (89.2692pt,29.5pt)(76.2692pt,48.5pt) -- (63.2692pt,63.5pt)(76.2692pt,48.5pt) -- (89.2692pt,63.5pt);
|
||||
\draw[pstyle1] (184.9633pt,55pt) arc (180:270:5pt) -- (189.9633pt,50pt) -- (282.623pt,50pt) arc (270:360:5pt) -- (287.623pt,55pt) -- (287.623pt,78.0679pt) arc (0:90:5pt) -- (282.623pt,83.0679pt) -- (189.9633pt,83.0679pt) arc (90:180:5pt) -- (184.9633pt,78.0679pt) -- cycle;
|
||||
\node at (191.9633pt,57pt)[below right,color=black]{Application};
|
||||
\draw[pstyle3] (224.2932pt,113.7739pt) -- (234.2932pt,117.7739pt) -- (224.2932pt,121.7739pt) -- (228.2932pt,117.7739pt) -- cycle;
|
||||
\draw[pstyle4] (26.45pt,117.7739pt) -- (230.2932pt,117.7739pt);
|
||||
\node at (33.45pt,98.0679pt)[below right,color=black]{saisir("Hello")};
|
||||
\draw[pstyle3] (37.45pt,145.4799pt) -- (27.45pt,149.4799pt) -- (37.45pt,153.4799pt) -- (33.45pt,149.4799pt) -- cycle;
|
||||
\draw[pstyle4] (31.45pt,149.4799pt) -- (235.2932pt,149.4799pt);
|
||||
\node at (43.45pt,129.7739pt)[below right,color=black]{lire("Hello")};
|
||||
\draw[pstyle3] (87.2692pt,177.186pt) -- (77.2692pt,181.186pt) -- (87.2692pt,185.186pt) -- (83.2692pt,181.186pt) -- cycle;
|
||||
\draw[pstyle4] (81.2692pt,181.186pt) -- (235.2932pt,181.186pt);
|
||||
\node at (93.2692pt,161.4799pt)[below right,color=black]{lire("Hello")};
|
||||
\draw[pstyle3] (224.2932pt,208.892pt) -- (234.2932pt,212.892pt) -- (224.2932pt,216.892pt) -- (228.2932pt,212.892pt) -- cycle;
|
||||
\draw[pstyle4] (76.2692pt,212.892pt) -- (230.2932pt,212.892pt);
|
||||
\node at (83.2692pt,193.186pt)[below right,color=black]{saisir(" World")};
|
||||
\draw[pstyle3] (37.45pt,240.598pt) -- (27.45pt,244.598pt) -- (37.45pt,248.598pt) -- (33.45pt,244.598pt) -- cycle;
|
||||
\draw[pstyle4] (31.45pt,244.598pt) -- (235.2932pt,244.598pt);
|
||||
\node at (43.45pt,224.892pt)[below right,color=black]{lire("Hello World")};
|
||||
\draw[pstyle3] (87.2692pt,272.304pt) -- (77.2692pt,276.304pt) -- (87.2692pt,280.304pt) -- (83.2692pt,276.304pt) -- cycle;
|
||||
\draw[pstyle4] (81.2692pt,276.304pt) -- (235.2932pt,276.304pt);
|
||||
\node at (93.2692pt,256.598pt)[below right,color=black]{lire("Hello World")};
|
||||
\end{tikzpicture}
|
38
docs/rapport/rapport_etat_art/images/local2.puml
Normal file
38
docs/rapport/rapport_etat_art/images/local2.puml
Normal file
@ -0,0 +1,38 @@
|
||||
@startuml local2
|
||||
|
||||
!pragma teoz true
|
||||
hide footbox
|
||||
|
||||
actor Alice
|
||||
actor Bob
|
||||
participant Application
|
||||
|
||||
Alice ->(15) Application: saisir("Hello")
|
||||
Application ->(15) Alice: lire("Hello")
|
||||
& Application ->(30) Bob
|
||||
|
||||
Bob ->(15) Application: saisir(" World")
|
||||
Application ->(15) Alice: lire("Hello World")
|
||||
& Application ->(30) Bob
|
||||
|
||||
@enduml
|
||||
|
||||
@startuml local2fail
|
||||
|
||||
!pragma teoz true
|
||||
hide footbox
|
||||
|
||||
actor Alice
|
||||
participant Application
|
||||
actor Bob
|
||||
|
||||
Alice ->(15) Application: saisir("Le chat")
|
||||
Application ->(15) Alice: lire("Le chat")
|
||||
& Application ->(15) Bob: lire("Le chat")
|
||||
|
||||
Bob ->(15) Application: saisir(" mange")
|
||||
& Alice ->(20) Application: saisir(" boit")
|
||||
Application ->(15) Alice: lire("Le chat mange boit")
|
||||
& Application ->(15) Bob: lire("Le chat mange boit")
|
||||
|
||||
@enduml
|
44
docs/rapport/rapport_etat_art/images/local2fail.latex
Normal file
44
docs/rapport/rapport_etat_art/images/local2fail.latex
Normal file
@ -0,0 +1,44 @@
|
||||
% generated by Plantuml 1.2022.7
|
||||
\definecolor{plantucolor0000}{RGB}{24,24,24}
|
||||
\definecolor{plantucolor0001}{RGB}{0,0,0}
|
||||
\definecolor{plantucolor0002}{RGB}{226,226,240}
|
||||
\begin{tikzpicture}[yscale=-1
|
||||
,pstyle0/.style={color=plantucolor0000,line width=0.5pt,dash pattern=on 5.0pt off 5.0pt}
|
||||
,pstyle1/.style={color=plantucolor0000,fill=plantucolor0002,line width=0.5pt}
|
||||
,pstyle2/.style={color=plantucolor0000,line width=0.5pt}
|
||||
,pstyle3/.style={color=plantucolor0000,fill=plantucolor0000,line width=1.0pt}
|
||||
,pstyle4/.style={color=plantucolor0000,line width=1.0pt}
|
||||
]
|
||||
\draw[pstyle0] (26.45pt,84.0679pt) -- (26.45pt,293.892pt);
|
||||
\draw[pstyle0] (230.5952pt,84.0679pt) -- (230.5952pt,293.892pt);
|
||||
\draw[pstyle0] (434.7404pt,84.0679pt) -- (434.7404pt,293.892pt);
|
||||
\node at (5pt,65pt)[below right,color=black]{Alice};
|
||||
\draw[pstyle1] (26.45pt,13.5pt) ellipse (8pt and 8pt);
|
||||
\draw[pstyle2] (26.45pt,21.5pt) -- (26.45pt,48.5pt)(13.45pt,29.5pt) -- (39.45pt,29.5pt)(26.45pt,48.5pt) -- (13.45pt,63.5pt)(26.45pt,48.5pt) -- (39.45pt,63.5pt);
|
||||
\draw[pstyle1] (179.2654pt,55pt) arc (180:270:5pt) -- (184.2654pt,50pt) -- (276.9251pt,50pt) arc (270:360:5pt) -- (281.9251pt,55pt) -- (281.9251pt,78.0679pt) arc (0:90:5pt) -- (276.9251pt,83.0679pt) -- (184.2654pt,83.0679pt) arc (90:180:5pt) -- (179.2654pt,78.0679pt) -- cycle;
|
||||
\node at (186.2654pt,57pt)[below right,color=black]{Application};
|
||||
\node at (416.3712pt,65pt)[below right,color=black]{Bob};
|
||||
\draw[pstyle1] (434.7404pt,13.5pt) ellipse (8pt and 8pt);
|
||||
\draw[pstyle2] (434.7404pt,21.5pt) -- (434.7404pt,48.5pt)(421.7404pt,29.5pt) -- (447.7404pt,29.5pt)(434.7404pt,48.5pt) -- (421.7404pt,63.5pt)(434.7404pt,48.5pt) -- (447.7404pt,63.5pt);
|
||||
\draw[pstyle3] (218.9152pt,126.0519pt) -- (228.5952pt,130.7739pt) -- (218.329pt,134.0304pt) -- (222.6114pt,130.3343pt) -- cycle;
|
||||
\draw[pstyle4] (26.45pt,115.7739pt) -- (228.5952pt,130.7739pt);
|
||||
\node at (33.45pt,96.0679pt)[below right,color=black]{saisir("Le chat")};
|
||||
\draw[pstyle3] (37.13pt,172.7579pt) -- (27.45pt,177.4799pt) -- (37.7162pt,180.7364pt) -- (33.4339pt,177.0403pt) -- cycle;
|
||||
\draw[pstyle4] (229.5952pt,162.4799pt) -- (26.45pt,177.4799pt);
|
||||
\node at (43.45pt,142.7739pt)[below right,color=black]{lire("Le chat")};
|
||||
\draw[pstyle3] (423.0604pt,172.7579pt) -- (432.7404pt,177.4799pt) -- (422.4742pt,180.7364pt) -- (426.7566pt,177.0403pt) -- cycle;
|
||||
\draw[pstyle4] (230.5952pt,162.4799pt) -- (432.7404pt,177.4799pt);
|
||||
\node at (237.5952pt,142.7739pt)[below right,color=black]{lire("Le chat")};
|
||||
\draw[pstyle3] (241.2752pt,219.4639pt) -- (231.5952pt,224.186pt) -- (241.8615pt,227.4424pt) -- (237.5791pt,223.7463pt) -- cycle;
|
||||
\draw[pstyle4] (433.7404pt,209.186pt) -- (230.5952pt,224.186pt);
|
||||
\node at (247.5952pt,189.4799pt)[below right,color=black]{saisir(" mange")};
|
||||
\draw[pstyle3] (219.0329pt,224.23pt) -- (228.5952pt,229.186pt) -- (218.2529pt,232.1919pt) -- (222.6238pt,228.601pt) -- cycle;
|
||||
\draw[pstyle4] (26.45pt,209.186pt) -- (228.5952pt,229.186pt);
|
||||
\node at (33.45pt,189.4799pt)[below right,color=black]{saisir(" boit")};
|
||||
\draw[pstyle3] (37.13pt,271.1699pt) -- (27.45pt,275.892pt) -- (37.7162pt,279.1484pt) -- (33.4339pt,275.4523pt) -- cycle;
|
||||
\draw[pstyle4] (229.5952pt,260.892pt) -- (26.45pt,275.892pt);
|
||||
\node at (43.45pt,241.186pt)[below right,color=black]{lire("Le chat mange boit")};
|
||||
\draw[pstyle3] (423.0604pt,271.1699pt) -- (432.7404pt,275.892pt) -- (422.4742pt,279.1484pt) -- (426.7566pt,275.4523pt) -- cycle;
|
||||
\draw[pstyle4] (230.5952pt,260.892pt) -- (432.7404pt,275.892pt);
|
||||
\node at (237.5952pt,241.186pt)[below right,color=black]{lire("Le chat mange boit")};
|
||||
\end{tikzpicture}
|
22
docs/rapport/rapport_etat_art/images/localiteEtat.puml
Normal file
22
docs/rapport/rapport_etat_art/images/localiteEtat.puml
Normal file
@ -0,0 +1,22 @@
|
||||
@startuml localiteEtatFail
|
||||
|
||||
Bob -> Bob : inserer("Hello World")
|
||||
Bob -> Bob : afficher() -> "Hello World"
|
||||
Bob -> Alice : partager("Hello World")
|
||||
|
||||
!pragma teoz true
|
||||
|
||||
Alice -> Alice : afficher() : "Hello World"
|
||||
|
||||
Alice -> Alice : souligner("Hello World")
|
||||
& Bob -> Bob : supprimer("Hello World", " World")
|
||||
|
||||
Alice -> Alice : afficher() : "__Hello World__"
|
||||
& Bob -> Bob : afficher() : "Hello"
|
||||
|
||||
Alice ->(25) Bob : \t\t partager("__Hello World__")\n
|
||||
& Bob ->(25) Alice : partager("Hello")
|
||||
Bob -> Bob : afficher() -> "__Hello World__"
|
||||
& Alice -> Alice : afficher() -> "__Hello__"
|
||||
|
||||
@enduml
|
76
docs/rapport/rapport_etat_art/images/localiteEtatFail.latex
Normal file
76
docs/rapport/rapport_etat_art/images/localiteEtatFail.latex
Normal file
@ -0,0 +1,76 @@
|
||||
% generated by Plantuml 1.2022.7
|
||||
\definecolor{plantucolor0000}{RGB}{24,24,24}
|
||||
\definecolor{plantucolor0001}{RGB}{226,226,240}
|
||||
\definecolor{plantucolor0002}{RGB}{0,0,0}
|
||||
\begin{tikzpicture}[yscale=-1
|
||||
,pstyle0/.style={color=plantucolor0000,line width=0.5pt,dash pattern=on 5.0pt off 5.0pt}
|
||||
,pstyle1/.style={color=plantucolor0000,fill=plantucolor0001,line width=0.5pt}
|
||||
,pstyle2/.style={color=plantucolor0000,line width=1.0pt}
|
||||
,pstyle3/.style={color=plantucolor0000,fill=plantucolor0000,line width=1.0pt}
|
||||
]
|
||||
\draw[pstyle0] (27.3692pt,39.0679pt) -- (27.3692pt,431.4221pt);
|
||||
\draw[pstyle0] (295.551pt,39.0679pt) -- (295.551pt,431.4221pt);
|
||||
\draw[pstyle1] (5pt,10pt) arc (180:270:5pt) -- (10pt,5pt) -- (44.7385pt,5pt) arc (270:360:5pt) -- (49.7385pt,10pt) -- (49.7385pt,33.0679pt) arc (0:90:5pt) -- (44.7385pt,38.0679pt) -- (10pt,38.0679pt) arc (90:180:5pt) -- (5pt,33.0679pt) -- cycle;
|
||||
\node at (12pt,12pt)[below right,color=black]{Bob};
|
||||
\draw[pstyle1] (270.101pt,10pt) arc (180:270:5pt) -- (275.101pt,5pt) -- (316.001pt,5pt) arc (270:360:5pt) -- (321.001pt,10pt) -- (321.001pt,33.0679pt) arc (0:90:5pt) -- (316.001pt,38.0679pt) -- (275.101pt,38.0679pt) arc (90:180:5pt) -- (270.101pt,33.0679pt) -- cycle;
|
||||
\node at (277.101pt,12pt)[below right,color=black]{Alice};
|
||||
\draw[pstyle1] (5pt,436.4221pt) arc (180:270:5pt) -- (10pt,431.4221pt) -- (44.7385pt,431.4221pt) arc (270:360:5pt) -- (49.7385pt,436.4221pt) -- (49.7385pt,459.49pt) arc (0:90:5pt) -- (44.7385pt,464.49pt) -- (10pt,464.49pt) arc (90:180:5pt) -- (5pt,459.49pt) -- cycle;
|
||||
\node at (12pt,438.4221pt)[below right,color=black]{Bob};
|
||||
\draw[pstyle1] (270.101pt,436.4221pt) arc (180:270:5pt) -- (275.101pt,431.4221pt) -- (316.001pt,431.4221pt) arc (270:360:5pt) -- (321.001pt,436.4221pt) -- (321.001pt,459.49pt) arc (0:90:5pt) -- (316.001pt,464.49pt) -- (275.101pt,464.49pt) arc (90:180:5pt) -- (270.101pt,459.49pt) -- cycle;
|
||||
\node at (277.101pt,438.4221pt)[below right,color=black]{Alice};
|
||||
\draw[pstyle2] (27.3692pt,70.7739pt) -- (69.3692pt,70.7739pt);
|
||||
\draw[pstyle2] (69.3692pt,70.7739pt) -- (69.3692pt,83.7739pt);
|
||||
\draw[pstyle2] (28.3692pt,83.7739pt) -- (69.3692pt,83.7739pt);
|
||||
\draw[pstyle3] (38.3692pt,79.7739pt) -- (28.3692pt,83.7739pt) -- (38.3692pt,87.7739pt) -- (34.3692pt,83.7739pt) -- cycle;
|
||||
\node at (34.3692pt,51.0679pt)[below right,color=black]{inserer("Hello World")};
|
||||
\draw[pstyle2] (27.3692pt,115.4799pt) -- (69.3692pt,115.4799pt);
|
||||
\draw[pstyle2] (69.3692pt,115.4799pt) -- (69.3692pt,128.4799pt);
|
||||
\draw[pstyle2] (28.3692pt,128.4799pt) -- (69.3692pt,128.4799pt);
|
||||
\draw[pstyle3] (38.3692pt,124.4799pt) -- (28.3692pt,128.4799pt) -- (38.3692pt,132.4799pt) -- (34.3692pt,128.4799pt) -- cycle;
|
||||
\node at (34.3692pt,95.7739pt)[below right,color=black]{afficher() -\textgreater "Hello World"};
|
||||
\draw[pstyle3] (283.551pt,156.186pt) -- (293.551pt,160.186pt) -- (283.551pt,164.186pt) -- (287.551pt,160.186pt) -- cycle;
|
||||
\draw[pstyle2] (27.3692pt,160.186pt) -- (289.551pt,160.186pt);
|
||||
\node at (34.3692pt,140.4799pt)[below right,color=black]{partager("Hello World")};
|
||||
\draw[pstyle2] (295.551pt,191.892pt) -- (337.551pt,191.892pt);
|
||||
\draw[pstyle2] (337.551pt,191.892pt) -- (337.551pt,204.892pt);
|
||||
\draw[pstyle2] (296.551pt,204.892pt) -- (337.551pt,204.892pt);
|
||||
\draw[pstyle3] (306.551pt,200.892pt) -- (296.551pt,204.892pt) -- (306.551pt,208.892pt) -- (302.551pt,204.892pt) -- cycle;
|
||||
\node at (302.551pt,172.186pt)[below right,color=black]{afficher() : "Hello World"};
|
||||
\draw[pstyle2] (295.551pt,236.598pt) -- (337.551pt,236.598pt);
|
||||
\draw[pstyle2] (337.551pt,236.598pt) -- (337.551pt,249.598pt);
|
||||
\draw[pstyle2] (296.551pt,249.598pt) -- (337.551pt,249.598pt);
|
||||
\draw[pstyle3] (306.551pt,245.598pt) -- (296.551pt,249.598pt) -- (306.551pt,253.598pt) -- (302.551pt,249.598pt) -- cycle;
|
||||
\node at (302.551pt,216.892pt)[below right,color=black]{souligner("Hello World")};
|
||||
\draw[pstyle2] (27.3692pt,236.598pt) -- (69.3692pt,236.598pt);
|
||||
\draw[pstyle2] (69.3692pt,236.598pt) -- (69.3692pt,249.598pt);
|
||||
\draw[pstyle2] (28.3692pt,249.598pt) -- (69.3692pt,249.598pt);
|
||||
\draw[pstyle3] (38.3692pt,245.598pt) -- (28.3692pt,249.598pt) -- (38.3692pt,253.598pt) -- (34.3692pt,249.598pt) -- cycle;
|
||||
\node at (34.3692pt,216.892pt)[below right,color=black]{supprimer("Hello World", " World")};
|
||||
\draw[pstyle2] (295.551pt,281.304pt) -- (337.551pt,281.304pt);
|
||||
\draw[pstyle2] (337.551pt,281.304pt) -- (337.551pt,294.304pt);
|
||||
\draw[pstyle2] (296.551pt,294.304pt) -- (337.551pt,294.304pt);
|
||||
\draw[pstyle3] (306.551pt,290.304pt) -- (296.551pt,294.304pt) -- (306.551pt,298.304pt) -- (302.551pt,294.304pt) -- cycle;
|
||||
\node at (302.551pt,261.598pt)[below right,color=black]{afficher() : "\underline{Hello World}"};
|
||||
\draw[pstyle2] (27.3692pt,281.304pt) -- (69.3692pt,281.304pt);
|
||||
\draw[pstyle2] (69.3692pt,281.304pt) -- (69.3692pt,294.304pt);
|
||||
\draw[pstyle2] (28.3692pt,294.304pt) -- (69.3692pt,294.304pt);
|
||||
\draw[pstyle3] (38.3692pt,290.304pt) -- (28.3692pt,294.304pt) -- (38.3692pt,298.304pt) -- (34.3692pt,294.304pt) -- cycle;
|
||||
\node at (34.3692pt,261.598pt)[below right,color=black]{afficher() : "Hello"};
|
||||
\draw[pstyle3] (37.9548pt,363.8051pt) -- (28.3692pt,368.716pt) -- (38.6973pt,371.7706pt) -- (34.3433pt,368.1591pt) -- cycle;
|
||||
\draw[pstyle2] (294.551pt,343.716pt) -- (27.3692pt,368.716pt);
|
||||
\node at (44.3692pt,306.304pt)[below right,color=black]{\qquad\qquad\qquad\qquad\qquad\qquad\qquad partager("\underline{Hello World}")};
|
||||
\node at (44.3692pt,324.01pt)[below right,color=black]{ };
|
||||
\draw[pstyle3] (283.9655pt,363.8051pt) -- (293.551pt,368.716pt) -- (283.2229pt,371.7706pt) -- (287.577pt,368.1591pt) -- cycle;
|
||||
\draw[pstyle2] (27.3692pt,343.716pt) -- (293.551pt,368.716pt);
|
||||
\node at (34.3692pt,324.01pt)[below right,color=black]{partager("Hello")};
|
||||
\draw[pstyle2] (27.3692pt,400.4221pt) -- (69.3692pt,400.4221pt);
|
||||
\draw[pstyle2] (69.3692pt,400.4221pt) -- (69.3692pt,413.4221pt);
|
||||
\draw[pstyle2] (28.3692pt,413.4221pt) -- (69.3692pt,413.4221pt);
|
||||
\draw[pstyle3] (38.3692pt,409.4221pt) -- (28.3692pt,413.4221pt) -- (38.3692pt,417.4221pt) -- (34.3692pt,413.4221pt) -- cycle;
|
||||
\node at (34.3692pt,380.716pt)[below right,color=black]{afficher() : "\underline{Hello World}"};
|
||||
\draw[pstyle2] (295.551pt,400.4221pt) -- (337.551pt,400.4221pt);
|
||||
\draw[pstyle2] (337.551pt,400.4221pt) -- (337.551pt,413.4221pt);
|
||||
\draw[pstyle2] (296.551pt,413.4221pt) -- (337.551pt,413.4221pt);
|
||||
\draw[pstyle3] (306.551pt,409.4221pt) -- (296.551pt,413.4221pt) -- (306.551pt,417.4221pt) -- (302.551pt,413.4221pt) -- cycle;
|
||||
\node at (302.551pt,380.716pt)[below right,color=black]{afficher() : "\underline{Hello}"};
|
||||
\end{tikzpicture}
|
25
docs/rapport/rapport_etat_art/images/seriaized.puml
Normal file
25
docs/rapport/rapport_etat_art/images/seriaized.puml
Normal file
@ -0,0 +1,25 @@
|
||||
@startuml serialized
|
||||
|
||||
!pragma teoz true
|
||||
hide footbox
|
||||
|
||||
participant Alice
|
||||
participant Server
|
||||
participant Bob
|
||||
|
||||
|
||||
Alice ->(10) Server : lock()
|
||||
Server -->(10) Alice : true
|
||||
|
||||
Bob -> Server : lock()
|
||||
& Alice ->(10) Server : inserer("hello world")
|
||||
Server -->(10) Bob : false
|
||||
& Alice ->(10) Server : lire()
|
||||
Server -->(10) Alice : "hello world"
|
||||
Alice -> Server : unlock()
|
||||
Bob -> Server : lock()
|
||||
Bob -> Server : lire()
|
||||
Server -->(10) Bob : "hello world"
|
||||
Bob -> Server : unlock()
|
||||
|
||||
@enduml
|
57
docs/rapport/rapport_etat_art/images/serialized.latex
Normal file
57
docs/rapport/rapport_etat_art/images/serialized.latex
Normal file
@ -0,0 +1,57 @@
|
||||
% generated by Plantuml 1.2022.7
|
||||
\definecolor{plantucolor0000}{RGB}{24,24,24}
|
||||
\definecolor{plantucolor0001}{RGB}{226,226,240}
|
||||
\definecolor{plantucolor0002}{RGB}{0,0,0}
|
||||
\begin{tikzpicture}[yscale=-1
|
||||
,pstyle0/.style={color=plantucolor0000,line width=0.5pt,dash pattern=on 5.0pt off 5.0pt}
|
||||
,pstyle1/.style={color=plantucolor0000,fill=plantucolor0001,line width=0.5pt}
|
||||
,pstyle2/.style={color=plantucolor0000,fill=plantucolor0000,line width=1.0pt}
|
||||
,pstyle3/.style={color=plantucolor0000,line width=1.0pt}
|
||||
,pstyle4/.style={color=plantucolor0000,line width=1.0pt,dash pattern=on 2.0pt off 2.0pt}
|
||||
]
|
||||
\draw[pstyle0] (30.45pt,39.0679pt) -- (30.45pt,434.1281pt);
|
||||
\draw[pstyle0] (210.5241pt,39.0679pt) -- (210.5241pt,434.1281pt);
|
||||
\draw[pstyle0] (328.7611pt,39.0679pt) -- (328.7611pt,434.1281pt);
|
||||
\draw[pstyle1] (5pt,10pt) arc (180:270:5pt) -- (10pt,5pt) -- (50.9pt,5pt) arc (270:360:5pt) -- (55.9pt,10pt) -- (55.9pt,33.0679pt) arc (0:90:5pt) -- (50.9pt,38.0679pt) -- (10pt,38.0679pt) arc (90:180:5pt) -- (5pt,33.0679pt) -- cycle;
|
||||
\node at (12pt,12pt)[below right,color=black]{Alice};
|
||||
\draw[pstyle1] (177.9423pt,10pt) arc (180:270:5pt) -- (182.9423pt,5pt) -- (238.1059pt,5pt) arc (270:360:5pt) -- (243.1059pt,10pt) -- (243.1059pt,33.0679pt) arc (0:90:5pt) -- (238.1059pt,38.0679pt) -- (182.9423pt,38.0679pt) arc (90:180:5pt) -- (177.9423pt,33.0679pt) -- cycle;
|
||||
\node at (184.9423pt,12pt)[below right,color=black]{Server};
|
||||
\draw[pstyle1] (306.3919pt,10pt) arc (180:270:5pt) -- (311.3919pt,5pt) -- (346.1303pt,5pt) arc (270:360:5pt) -- (351.1303pt,10pt) -- (351.1303pt,33.0679pt) arc (0:90:5pt) -- (346.1303pt,38.0679pt) -- (311.3919pt,38.0679pt) arc (90:180:5pt) -- (306.3919pt,33.0679pt) -- cycle;
|
||||
\node at (313.3919pt,12pt)[below right,color=black]{Bob};
|
||||
\draw[pstyle2] (198.7612pt,76.2256pt) -- (208.5241pt,80.7739pt) -- (198.3177pt,84.2133pt) -- (202.5333pt,80.4412pt) -- cycle;
|
||||
\draw[pstyle3] (30.45pt,70.7739pt) -- (208.5241pt,80.7739pt);
|
||||
\node at (37.45pt,51.0679pt)[below right,color=black]{lock()};
|
||||
\draw[pstyle2] (41.2128pt,117.9316pt) -- (31.45pt,122.4799pt) -- (41.6564pt,125.9193pt) -- (37.4408pt,122.1473pt) -- cycle;
|
||||
\draw[pstyle4] (209.5241pt,112.4799pt) -- (30.45pt,122.4799pt);
|
||||
\node at (47.45pt,92.7739pt)[below right,color=black]{true};
|
||||
\draw[pstyle2] (221.5241pt,150.186pt) -- (211.5241pt,154.186pt) -- (221.5241pt,158.186pt) -- (217.5241pt,154.186pt) -- cycle;
|
||||
\draw[pstyle3] (215.5241pt,154.186pt) -- (327.7611pt,154.186pt);
|
||||
\node at (227.5241pt,134.4799pt)[below right,color=black]{lock()};
|
||||
\draw[pstyle2] (198.7612pt,159.6376pt) -- (208.5241pt,164.186pt) -- (198.3177pt,167.6253pt) -- (202.5333pt,163.8533pt) -- cycle;
|
||||
\draw[pstyle3] (30.45pt,154.186pt) -- (208.5241pt,164.186pt);
|
||||
\node at (37.45pt,134.4799pt)[below right,color=black]{inserer("hello world")};
|
||||
\draw[pstyle2] (317.1338pt,201.0635pt) -- (326.7611pt,205.892pt) -- (316.4596pt,209.035pt) -- (320.7825pt,205.3863pt) -- cycle;
|
||||
\draw[pstyle4] (210.5241pt,195.892pt) -- (326.7611pt,205.892pt);
|
||||
\node at (217.5241pt,176.186pt)[below right,color=black]{false};
|
||||
\draw[pstyle2] (198.7612pt,201.3437pt) -- (208.5241pt,205.892pt) -- (198.3177pt,209.3314pt) -- (202.5333pt,205.5593pt) -- cycle;
|
||||
\draw[pstyle3] (30.45pt,195.892pt) -- (208.5241pt,205.892pt);
|
||||
\node at (37.45pt,176.186pt)[below right,color=black]{lire()};
|
||||
\draw[pstyle2] (41.2128pt,243.0497pt) -- (31.45pt,247.598pt) -- (41.6564pt,251.0374pt) -- (37.4408pt,247.2653pt) -- cycle;
|
||||
\draw[pstyle4] (209.5241pt,237.598pt) -- (30.45pt,247.598pt);
|
||||
\node at (47.45pt,217.892pt)[below right,color=black]{"hello world"};
|
||||
\draw[pstyle2] (198.5241pt,275.304pt) -- (208.5241pt,279.304pt) -- (198.5241pt,283.304pt) -- (202.5241pt,279.304pt) -- cycle;
|
||||
\draw[pstyle3] (30.45pt,279.304pt) -- (204.5241pt,279.304pt);
|
||||
\node at (37.45pt,259.598pt)[below right,color=black]{unlock()};
|
||||
\draw[pstyle2] (221.5241pt,307.01pt) -- (211.5241pt,311.01pt) -- (221.5241pt,315.01pt) -- (217.5241pt,311.01pt) -- cycle;
|
||||
\draw[pstyle3] (215.5241pt,311.01pt) -- (327.7611pt,311.01pt);
|
||||
\node at (227.5241pt,291.304pt)[below right,color=black]{lock()};
|
||||
\draw[pstyle2] (221.5241pt,338.716pt) -- (211.5241pt,342.716pt) -- (221.5241pt,346.716pt) -- (217.5241pt,342.716pt) -- cycle;
|
||||
\draw[pstyle3] (215.5241pt,342.716pt) -- (327.7611pt,342.716pt);
|
||||
\node at (227.5241pt,323.01pt)[below right,color=black]{lire()};
|
||||
\draw[pstyle2] (317.1338pt,379.5935pt) -- (326.7611pt,384.4221pt) -- (316.4596pt,387.5651pt) -- (320.7825pt,383.9164pt) -- cycle;
|
||||
\draw[pstyle4] (210.5241pt,374.4221pt) -- (326.7611pt,384.4221pt);
|
||||
\node at (217.5241pt,354.716pt)[below right,color=black]{"hello world"};
|
||||
\draw[pstyle2] (221.5241pt,412.1281pt) -- (211.5241pt,416.1281pt) -- (221.5241pt,420.1281pt) -- (217.5241pt,416.1281pt) -- cycle;
|
||||
\draw[pstyle3] (215.5241pt,416.1281pt) -- (327.7611pt,416.1281pt);
|
||||
\node at (227.5241pt,396.4221pt)[below right,color=black]{unlock()};
|
||||
\end{tikzpicture}
|
@ -10,6 +10,13 @@
|
||||
\usepackage{biblatex}
|
||||
\addbibresource{../../recherches/Stage.bib}
|
||||
|
||||
\usepackage{tikz}
|
||||
\usepackage{aeguill}
|
||||
|
||||
\usepackage{amsmath}
|
||||
|
||||
\usepackage{multicol}
|
||||
|
||||
\begin{document}
|
||||
|
||||
\title{Critères de Cohérence faible byzantine appliquée aux environements cloud}
|
||||
@ -34,6 +41,9 @@
|
||||
\section{Introduction}
|
||||
\input{intro/index.tex}
|
||||
|
||||
\section{Cohérence Forte}
|
||||
\input{coherence_forte/index.tex}
|
||||
|
||||
\section{Les critères de cohérence}
|
||||
\input{consistency_criteria/index.tex}
|
||||
|
||||
|
Reference in New Issue
Block a user