[SOS]Multi Threads et Allocation memoire...
Romain LABBE
labbe.romain at wanadoo.fr
Ven 18 Nov 09:48:47 CET 2005
Salut Thomas,
Cela repond en partie à ma question, mais du coup il faut donc bien
protéger l'allocateur de memoire virtuelle.
Par exemple dans Linux 2.6 pour protéger le kVmm on utilise quoi ? Un
semaphore ? On désative les interruptions lors de l'allocation ? Autre ?
Merci
A++
Romain
> -----Message d'origine-----
> De : sos-bounces at the-doors.enix.org
> [mailto:sos-bounces at the-doors.enix.org] De la part de Thomas Petazzoni
> Envoyé : vendredi 18 novembre 2005 00:03
> À : sos at the-doors.enix.org
> Objet : Re: [SOS]Multi Threads et Allocation memoire...
>
>
> Salut,
>
> On Thu, 17 Nov 2005 11:02:53 +0100
> "Romain LABBE" <labbe.romain at wanadoo.fr> wrote:
>
> > Quand je regarde le code de SOS et les flags (ATOMIC) je
> comprends pas
> > ben ou tous ça mène. Je vois pas comment est protégé la vmm
> > (sos_disable_IRQs, ou semaphore, ou …) dans SOS ?
>
> Le flag ATOMIC ici n'a rien à voir avec la synchronisation.
> Il est censé avoir la même signification que GFP_ATOMIC sous
> Linux. Sous Linux, il y a plusieurs types d'allocations, en
> particulier GFP_KERNEL et GFP_ATOMIC. Si il n'y a pas assez
> de mémoire, alors GFP_KERNEL peut bloquer, en attendant que
> le swapper (processus chargé de transférer une partie des
> données sur le disque) ou le processus chargé de synchroniser
> sur disques les données "sales" du cache de blocs aient
> libéré de la mémoire. A contrario, GFP_ATOMIC précise qu'on
> ne souhaite pas bloquer, mais qu'on préfère que ça retourne
> NULL si l'allocation ne peut être effectuée.
>
> À l'heure actuelle, dans SOS, il n'y a pas de swap, ni de
> cache des blocs. Donc finalement, toutes les allocations sont
> "ATOMIC".
>
> En ce qui concerne la synchronisation, SOS a fait un choix
> simple: le noyau n'est pas préemptif. Lorsque du code noyau
> s'exécute, il peut être interrompu par une interruption, mais
> à l'issue de cette interruption, on retournera _forcément_
> dans le thread qui a été interrompu. Et tant que ce thread
> n'aura pas effectué une opération bloquante ou n'aura pas
> explicitement rendu le processeur, il disposera de tout le
> processeur. Cela simplifie grandement l'implémentation,
> puisque la synchronisation est beaucoup plus simple: il n'y a
> souvent pas besoin de synchronisation, sauf lorsque l'on
> accède à des données qui sont partagées avec un gestionnaire
> d'interruption. C'est dans les sections accédant à ces
> données partagées avec les gestionnaires d'interruption que
> SOS utilise sos_disable_IRQs(). Pour plus d'infos sur tout
> cela, voir section 1.3 de l'article 6.
>
> Pour information, KOS a pris le parti opposé: un OS
> complètement préemptif. C'est plus "beau" conceptuellement,
> mais c'est aussi plus complexe à implémenter, puisqu'il faut
> à chaque instant se demander si une synchronisation n'est pas
> nécessaire. Et parfois, ce n'est pas trivial.
>
> Toujours pour l'histoire, le noyau Linux n'était pas
> préemptif à l'origine, et jusqu'aux noyaux 2.2/2.4. Lorsqu'un
> processus effectuait un appel système, celui-ci s'effectuait
> d'une seule traite dans le noyau. Le noyau 2.6 est maintenant
> totalement préemptif. Il y a plusieurs raisons à ce
> changement, parmi lesquelles :
> - un noyau préemptif permet de diminuer la latence de
> réaction à un évènement, ce qui est intéressant pour une
> utilisation "desktop" d'un ordinateur ;
> - un noyau non-préemptif se comporte assez mal quand le
> nombre de processeurs augmente. En effet, dans les anciennes
> versions de Linux, quand un processeur était dans le noyau,
> les autres processeurs ne pouvaient pas être en même temps
> dans le noyau, et devaient attendre... Une perte de
> performances assez importante, et d'autant plus importante
> que le nombre de processeurs augmente.
>
> Voilà. J'espère que cela répond à ta question.
>
> Bonne soirée,
>
> Thomas
> --
> PETAZZONI Thomas - thomas.petazzoni at enix.org
> http://{thomas,sos,kos}.enix.org - Jabber:
> thomas.petazzoni at jabber.dk http://{agenda,livret}dulibre.org
> - http://www.toulibre.org Fingerprint : 0BE1 4CF3 CEA4 AC9D
> CC6E 1624 F653 CB30 98D3 F7A7
>
Plus d'informations sur la liste de diffusion Sos