|
@@ -1,15 +1,18 @@
|
|
|
% TODO: remplacer confiant
|
|
|
-Après les présentations des objectifs liés aux communications inter-processus et
|
|
|
-de l'implémentation Linux, nous pouvons être assez confiant sur l'implémentation
|
|
|
-Windows. Malheureusement celle-ci vient nous rappeler qu'un changement de
|
|
|
-système implique parfois un changement de paradigme. La documentation quelque
|
|
|
-peu hasardeuse va néanmoins nous permettre de mettre en place une architecture
|
|
|
-similaire.
|
|
|
+Après la présentation des objectifs liés aux communications inter-processus et à
|
|
|
+l'implémentation Linux, nous pouvons essayer de reprendre le même modèle pour
|
|
|
+l'implémentation Windows. Malheureusement celle-ci vient nous rappeler qu'un
|
|
|
+changement de système implique parfois un changement de paradigme. La
|
|
|
+documentation quelque peu hasardeuse va néanmoins nous permettre de mettre en
|
|
|
+place une architecture similaire.
|
|
|
|
|
|
\section{Communication inter-processus}
|
|
|
|
|
|
-Windows dispose de beaucoup de moyen de communication inter-processus. Parmi
|
|
|
-ceux là, aucun ne va avoir les mêmes propriétés que les sockets Unix.
|
|
|
+Windows dispose de beaucoup de moyens de communication inter-processus. Parmi
|
|
|
+ceux là, aucun ne va avoir les mêmes propriétés que les sockets Unix. Nous
|
|
|
+allons même de base éliminer tous les moyens «haut niveau» comme les ports COM
|
|
|
+résolvant plutôt des problèmes d'interopérabilité et se concentrer sur les
|
|
|
+moyens plus bas niveau.
|
|
|
|
|
|
\subsection{Les sockets Windows}
|
|
|
|
|
@@ -18,14 +21,17 @@ mais ne fournissent pas de sockets locaux ou anonymes. Ceux-ci passent par la
|
|
|
pile réseau pour l'envoi de message. On notera cependant l'implémentation de
|
|
|
«TCP Loopback Fast Path» depuis Windows Server 2012. Cette fonctionnalité
|
|
|
conserve la sémantique du protocole TCP tout en désactivant des fonctionnalités
|
|
|
-comme l'algorithme de Nagle. C'est donc ce qui ressemble le plus aux sockets
|
|
|
-Unix, excepté l'accès au réseau et le passage de descripteur de fichiers.
|
|
|
-https://blogs.technet.microsoft.com/wincat/2012/12/05/fast-tcp-loopback-performance-and-low-latency-with-windows-server-2012-tcp-loopback-fast-path/
|
|
|
+comme l'algorithme de Nagle.
|
|
|
+\footnote{https://blogs.technet.microsoft.com/wincat/2012/12/05/fast-tcp-loopback-performance-and-low-latency-with-windows-server-2012-tcp-loopback-fast-path/}
|
|
|
+C'est donc ce qui ressemble le plus aux sockets Unix, excepté l'accès au réseau
|
|
|
+et le passage de descripteur de fichiers.
|
|
|
+
|
|
|
+
|
|
|
|
|
|
\subsection{Les canaux anonymes}
|
|
|
|
|
|
Les canaux anonymes donnent un moyen de communication unidirectionnel avec un
|
|
|
-écrivain et un lecteur. Il faut donc utiliser une paire de canaux anonyme pour
|
|
|
+écrivain et un lecteur. Il faut donc utiliser une paire de canaux anonymes pour
|
|
|
pouvoir discuter en full-duplex, mais également utiliser un mécanisme pour
|
|
|
transmettre le \inltype{HANDLE} d'un processus à l'autre. À noter que la plupart
|
|
|
des fonctions sur les canaux nommés fonctionnent avec les canaux anonymes, ces
|
|
@@ -56,13 +62,13 @@ HANDLE CreateNamedPipeA(
|
|
|
);
|
|
|
\end{code}
|
|
|
|
|
|
-\section{Transfert de ressource entre processus}
|
|
|
+\section{Transfert de ressources entre processus}
|
|
|
|
|
|
-Windows disposent de trois mécanismes pour partager des ressources entre
|
|
|
+Windows dispose de trois mécanismes pour partager des ressources entre
|
|
|
processus. Les ressources sont représentées par des objets \inltype{HANDLE}.
|
|
|
|
|
|
La première méthode est l'héritage, qui a lieu lors de la création d'un nouveau
|
|
|
-processus. Les descripteurs de fichiers marqués comme héritable, ou bien aucun
|
|
|
+processus. Les descripteurs de fichiers marqués comme héritables, ou bien aucun
|
|
|
si \inltype{bInheritHandles} est précisé à \inltype{FALSE} lors de l'appel de
|
|
|
\inltype{CreateProcess}, seront récupérés dans le nouveau processus avec la même
|
|
|
valeur. Lorsqu'un \inltype{HANDLE} est hérité, il garde la même valeur dans le
|
|
@@ -95,7 +101,7 @@ droit \inltype{PROCESS_DUP_HANDLE}. Étant donné que la fonction peut être
|
|
|
utilisée de la source vers la destination ou depuis la destination récupérant un
|
|
|
\inltype{HANDLE} appartenant à la source, le processus ayant accès à l'autre
|
|
|
processus est capable de copier tout accès existant et dispose donc des mêmes
|
|
|
-droits que l'autre processus.
|
|
|
+droits que ce dernier.
|
|
|
|
|
|
Cette remarque est importante pour se rendre compte que l'utilisation de cette
|
|
|
méthode implique nécessairement un broker, qui sera suffisamment privilégié pour
|
|
@@ -104,8 +110,8 @@ cette fonction directement dans les workers impliquerait que chacun des workers
|
|
|
auraient les mêmes droits que ses voisin et, de façon transitive, aurait accès à
|
|
|
toutes les zones de privilèges connexes dans le graphe d'IPC.
|
|
|
|
|
|
-Enfin, la troisième méthode consiste à utiliser les objets nommées qui sont
|
|
|
-créés d'un côté par le processus parent, puis ouvert par les processus enfants
|
|
|
+Enfin, la troisième méthode consiste à utiliser les objets nommés qui sont
|
|
|
+créés d'un côté par le processus parent, puis ouverts par les processus enfants
|
|
|
en les référençant par leur nom.
|
|
|
|
|
|
Dans le prototype, j'ai utilisé des canaux nommés pour faciliter la mise en place
|