Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1512 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Fork et consommation memoire

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fork et consommation memoire

n°214769
pospos
Posté le 22-01-2003 à 15:32:06  profilanswer
 

bonjour!
 
bon j'ai une question concernant la facon dont la memoire est gérée lors d'un fork:
 
je viens du monde windows, et pour moi faire un fork ca revien purement et simplement à lacer un deuxieme process, avec donc une consommation double de la memoire
ca se passe comment sous linux? j'ai entendu parler de "Copy-On-Write", kk1 pourrait m'eclairer la dessus?
 
en fait voila mon probleme concret:
j'ai un script perl, developpé sous win2k, et qui a besoin d'etre lancé en plusieurs exemplaires.
j'avais tout d'abord pensé utiliser les nouvelles possibilités multithread de perl 5.8, mais c'est pas encore la folie (tout est dupliqué, ca bouffe de la ram à mort).
 
Donc pour l'instant je lance plusieurs process, mais chacun me bouffe environ 12Mo (interpreteur perl + librairies + ...)
 
j'ai essay sous linux, en lancant egalement les process un par un, et ca me fait la meme chose (12Mo par porcess)
 
esque si je fais un fork dans le code perl (ou que je le lance avec un '&' dans le terminal, c'est pareil k'un fork?) ca me bouffera pas 12Mo pour chaque process?
 
merci de vos reponses, messieurs les gourous de l'unix !! :jap:

mood
Publicité
Posté le 22-01-2003 à 15:32:06  profilanswer
 

n°214774
Tomate
Posté le 22-01-2003 à 15:37:37  profilanswer
 

en C, je crois ke tout est duplique
en effet, le pere et le fils n ont pas acces a la meme memoire (copie des variables et pointeurs) avec un fork classique
 
pour partager la mem (en C tjs), il fo utiliser vfork
 
 
voilou ;)

n°214779
pospos
Posté le 22-01-2003 à 15:46:35  profilanswer
 

tomate77 a écrit :

en C, je crois ke tout est duplique
en effet, le pere et le fils n ont pas acces a la meme memoire (copie des variables et pointeurs) avec un fork classique
 
pour partager la mem (en C tjs), il fo utiliser vfork
 
 
voilou ;)


 
ok merci :jap:  
 
et meme le code est dupliqué? c'est pas du "lecture seule" et partagé par les processus (une histoire de "réentrance standard des processus" ) ? ca ca marche que pour un fork et pas en lancant duex processus" à la mains" non? et le copy on write ca intervient sur la partie non "lecture seule" c'est ca?
 
je suis desolé de poser des questions debiles, je suis totalement nouveau dans ce monde sans pitiée des OS unix!

n°214791
Tomate
Posté le 22-01-2003 à 16:07:09  profilanswer
 

desole je sais po ce ke c est ke "copy on write" ou autre :D
 
je sais ke les process crees par le pere ne partage pas grand chose (copie des variables, pour le code je ne sais pas du tout)
 
mais 2 process lances a la main ne partagent rien (ca c est sur !), pour le fork, le pere connait le pid du fils (le fils ne connait pas le pid du pere je crois puisque 0 est renvoye dans le cas ou on se trouve ds le fils)
 
voilou

n°214792
pospos
Posté le 22-01-2003 à 16:08:56  profilanswer
 

ok merci
je vais tester tout ca...

n°214796
Tomate
Posté le 22-01-2003 à 16:15:16  profilanswer
 

de rien ;)

n°214801
kadreg
profil: Utilisateur
Posté le 22-01-2003 à 16:25:00  profilanswer
 

tomate77 a écrit :

desole je sais po ce ke c est ke "copy on write" ou autre :D


 
Moi je sais, mais c'est trop long à expliquer pendant que je bosse. Dans la pratique, même si on a l'impression que tout est dupliqué, c'est pas forcément le cas en réalité.


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°214803
Jar Jar
Intaigriste
Posté le 22-01-2003 à 16:28:06  profilanswer
 

Tomate77, quand on ne sait pas, on se tait.
Sous Linux, le fork est implémenté par clone(), donc sans rien copier. Les processus gardent les mêmes zones mémoire, sauf que le processus fils n'a pas les droits d'écriture sur ces pages. À chaque fois qu'il essaie d'écrire sur une nouvelle page, ça génère une exception (puisqu'il n'a pas les droits) et la page est copiée (copy-on-write) pour qu'il puisse le faire. Conclusion, seules les pages (de 4 Ko) utilisées par les deux processus pour y écrire des données sont réellement copiées.
Donc quand le système t'affiche 8×12 Mo, c'est en fait de la mémoire partagée, à part les quelques pages qui diffèrent entre tes processus (plus le contexte d'exécution).
Note bien que même quand tu lances plusieurs fois le programme, le code et les bibliothèques partagées sont mappés en mémoire, mais ne sont lus sur le disque que si nécessaire (bien entendu dans la même zone mémoire pour tous les processus), donc là aussi la taille de tes processus est surestimée.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°214813
pospos
Posté le 22-01-2003 à 16:39:21  profilanswer
 

donc lancer deux processus dans deux terminaux, ou lancer deux processus avec un '&', ou lancer un processus qui fork ca revient exactement au meme?
sous windows c'est tout dupliqué (meme les dll)?
 
ou faut-il que je regarde pour voir la consommation memoire reelle?

n°214815
pospos
Posté le 22-01-2003 à 16:41:33  profilanswer
 

oups j'avais pas bien lu ton message! tu repond à ma question!
 
merci beaucoup à vous tous!

mood
Publicité
Posté le 22-01-2003 à 16:41:33  profilanswer
 

n°214817
Jar Jar
Intaigriste
Posté le 22-01-2003 à 16:43:08  profilanswer
 

pospos a écrit :

donc lancer deux processus dans deux terminaux, ou lancer deux processus avec un '&', ou lancer un processus qui fork ca revient exactement au meme?

Non, car un processus qui forke garde toutes les pages mémoire en commun.
 

Citation :

sous windows c'est tout dupliqué (meme les dll)?


Je n'en sais rien.
 

Citation :

ou faut-il que je regarde pour voir la consommation memoire reelle?


La seule méthode fiable, c'est de regarder ta mémoire utilisée avant et après le lancement (attention au buffer cache, c'est traître dans la mesure).


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°214856
Tomate
Posté le 22-01-2003 à 17:49:29  profilanswer
 

c super sympa, j aide plus personne ds ce cas
 
Jar Jar t etonne pas si peu de personnes veulent passer a linux, vu comment tu reponds gentiement :pfff:

n°214889
Jar Jar
Intaigriste
Posté le 22-01-2003 à 18:27:26  profilanswer
 

tomate77 a écrit :

c super sympa, j aide plus personne ds ce cas
 
Jar Jar t etonne pas si peu de personnes veulent passer a linux, vu comment tu reponds gentiement :pfff:

C'est peut-être très gentil de vouloir répondre et ça part certainement d'un bon sentiment, mais si c'est pour répondre des conneries en avouant que tu ne sais pas vraiment de quoi tu parles, il vaut mieux se taire.


---------------
« No question is too silly to ask, but, of course, some are too silly to answer. » -- Perl book
n°214900
mean
Posté le 22-01-2003 à 19:35:46  profilanswer
 

En tout cas les pages de code ne sont pas dupliqués.
Tu perds qq ko du a la nouvelle table de MMU du process aussi

n°215041
pospos
Posté le 23-01-2003 à 10:21:53  profilanswer
 

ne vous battez pas, vous m'avez tous bien aidé!
 
merci :jap:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Fork et consommation memoire

 

Sujets relatifs
probleme de memoire sous xp97% de ma mémoire utilisée, c'est Normal?
[FreeBSD / Linux] Problème de détection mémoire du noyauMémoire partagée : augmenter la valeur max d'un segment ? (SHMMAX)
mémoireupgrade mémoire et surcharge cpu
[ MPLAYER ] Problème avec mplayer : il se répend dans la mémoire[ TOP ] Pourquoi ma mémoire fuit ?
[Le saviez vous ?] Windows plus rapide niveau memoire que nux...Probleme PengAOL (derniere version avant le Fork) !
Plus de sujets relatifs à : Fork et consommation memoire


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR