Nouvelles Chroniques d'Amethyste

Penser au Sens, pas au Verbe

Processus et domaine d’application

Poster un commentaire

Processus

Un processus (process) est un conteneur pour un (ou plusieurs) exécutables (un programme) et ses données. Le processus fournit à l’exécutable un espace mémoire réservé par le système d’exploitation. De plus le processus est parcourut par au moins 1 thread, mais très souvent on en rencontre plus. Toutes ressources ou fichiers ouverts ou créés par le programme appartient lui aussi au processus.
Pour finir un processus embarque un contexte de sécurité qui lui est propre. Ce contexte dicte au processus ce qu’il a le droit ou non de faire sur la machine, le réseau ou toute autres ressources.

Comme on le voit, un processus agit comme une frontière pour isoler un programme des autres programmes. Le processus est la plus petite unité d’isolation d’un code sous Windows.
Une erreur, un plantage dans un processus, n’affecte que les applications qui tournent dans le processus. Les autres processus ne sont pas affectés si ce n’est pas un éventuel verrou sur une ressource, l’utilisation d’espace mémoire…

Théoriquement, un serveur voulant héberger plusieurs sites ou plusieurs services créera autant de processus qu’il y aura d’instances afin de les isoler les uns des autres.
Seulement la création d’un processus est une opération coûteuse en ressources système. On va rapidement atteindre les limites physiques du serveur.

Domaine d’application

L’environnement .Net propose une solution à ce problème: le domaine d’application (application domain).

Par certains aspects, les domaines d’application (DA) ressemblent à un processus: ils sont à la fois frontière et conteneur. Cela signifie en particulier qu’un objet vit dans un et un seul DA. Par exemple une classe avec des propriétés statiques ne partagera pas son état avec un autre DA, chaque application a sa propre copie de cache, session…

Il y a toutefois des spécificités:

  • Il ne s’agit que d’un concept .Net. Windows ne gère pas les domaines d’application.
  • Les DA n’ont pas leur propre contexte de sécurité. Ils utilisent celui du processus
  • Les DA appartiennent à un seul processus, mais un processus peut héberger plusieurs DA

Ce dernier point peut être important surtout si l’on sait que par défaut ASP.NET est lancé en full trust.

Un DA est moins coûteux à créer et a besoin de moins de ressources puisqu’ils partages celles de leur processus hôte.

Il est possible de savoir combien de DA sont chargés dans un processus avec perfmon.exe:

2014-08-09_21-03-50

Vision développeur

Les processus sont pris en charge par la classe Process. Par exemple le code suivant fournit le processus courant:

Process process = Process.GetCurrentProcess();

L’instance expose un grand nombre de propriétés comme la collection de modules chargés en mémoire, la durée de consommation de la CPU, les threads…

On peut aussi choisir d’énumérer tous les processus disponibles:

foreach (Process process in Process.GetProcesses())
{
    Console.WriteLine(process.ProcessName);
}

Chaque application .Net tourne dans un DA. On peut obtenir des informations à son sujet avec le code suivant:

AppDomain appDomain = AppDomain.CurrentDomain;

Et les états du domaine:

2014-08-09_19-06-24

Publicités

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s