[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux-team] processus et segments



On Sat, Jul 24, 1999 at 10:02:52AM +0200, Frédéric Detienne wrote:
> Les pages sont bien taggees avec un access READ ou RW. Cela cree des segments qui n'ont pas forcement rapport au segments geres par le processeur. Il _peut_ y avoir mapping entre les deux mais ce n'est pas obligatoire.
Il n'y a pas de flag execute ? Pour les pages TEXT ?
OK, tu confirmes bien mes impressions. Quand je parlais de segments, je ne parlais pas de i386 ;))

> Donc, sous Unix, il y a bien un segment DATA et un segment TEXT au moins. Sous tous les Unix que je connais, il y a aussi un segment KERNEL. On trouve egalement un segment shared (pour les DLL's). Ce que l'on appelle le DATA segment (c'est un segment logique, i.e. pour la facilite d'expression) est splitte en 2: HEAP et STACK. Linux gere tous ces segments avec des vm_area_struct (ca, je n'avais pas vu avant).
Donc:
- chaque processus a un TEXT et un DATA; ce sont des segments qui regroupent virtuellement les pages allouées au processus
mais évidemment, les segments ne sont pas des blocs de pages contigües dans la mémoire... donc ces segments-ci n'ont rien
à avoir avec les segments du microprocesseur.
- il y a un segment KERNEL pour le kernel-space
- le segment SHARED reprend toutes les shlibs chargées en mémoire virtuelle

Seul truc où j'étais vraiment pas sur: le heap est dans le segment DATA (ainsi que le stack, mais ça semblait évident ;)).

> Pour ce qui est de l'allocation, le kernel se fiche du malloc. (a ma connaissance toujours) il n'y a qu'un seul appel systeme qui dit au kernel l'adresse memoire maximum de la heap utilisee par un process. C'est l'appel BRK. Le zones allouees ou liberees par malloc et free sont des notions du user space seulement.
Exact.

> En clair, malloc regarde s'il a reserve assez de place au niveau du kernel (pour la heap)
> 1) Si oui, il "note" le bloc alloue et retourne un pointeur a l'appelant. Le tout en user space.
> 2) Sinon, malloc appelle le kernel et lui dit d'etendre la zone de heap jusqu'a l'adresse xyz. Le kernel update la table des pages pour permettre un eventuel "page fault" qui provoquerait le mapping vers une page physique. Quand l'appel system retourne (et s'il reussit), malloc alloue un bloc de memoire comme au point (1).
Ouaip, c'est exactement le concept de "page fault". Mais c'est vrai que l'aspect user space/kernel space est intéressant,
j'y avais pas pensé.

> Je n'ose pas trop m'aventurer bcp plus loin parce que je ne suis pas un guru du machin. Je repond de memoire et je confirme avec le code sous les yeux.
Ok, merci bcp pour les infos ;)))

-- 
  -o)  Pascal Bleser        | Instead of giving  Windows
  /\\  C++/UNIX Development | the "three-finger-salute",
 _\_v  ATOS Payment Systems | give it  the  "one-finger-
       Aachen, Germany      | goodbye"  {jfk/propaganda}
<pbleser@atos-group.com>--------------<guru@linuxbe.org>

---------
Visit the Linux Supertore Online: http://www.redcorp.com !
If you want to be deleted from the list, send a mail to
majordomo@rtfm.be with "unsubscribe linux-team" in the body.