[Linux-bruxelles] Explication concernant temps de chargement d'un prog

Dusausoy Bruno bruno.dusausoy at skynet.be
Jeu 3 Avr 10:13:59 CEST 2003


Le jeu 03/04/2003 à 09:16, Emmanuel Di Pretoro a écrit :
> Bonjour,
> 
> J'ai une question qui ne résulte pas directement d'un problème mais d'une curiosité. J'ai programmé un petit programme dont l'interface graphique est en GTK2. Quand je le lance pour la première fois, cela prend un temps certain. Par contre, si je le quitte le programme et que je le relance quelques secondes ou minutes après, le chargement est nettement plus rapide. Donc, ma question est comment cela se fait-il  ? Je suppose que les librairies qui viennent d'être utilisées ne sont pas immédiatement déchargées de la mémoire vive, mais j'aimerais avoir des explications plus précises (quitte à aller potasser du code, mais je ne sais pas trop où chercher !). Ce qui titille directement ma curiosité est le fait que je travaille avec Gnome2, et donc, ce dernier utilise les libairies en question. Maintenant, cette application se connecte à un serveur Postgresql, cela a donc peut-être également son importance (et dans ce cas, je rajouterai un splash screen à mon programme pour faire patienter l'utilisateur ;-))
> 
> Merci d'avance, et bonne journée,
> 
> Manu

Unix fait une utilisation intensive de la RAM : il y stocke entre autres
de "buffers caches". Pour ne pas rentrer dans les détails (cf. mon cours
de systemes d'exploitation :) ) voici comment il agit. N'oubliez pas que
je simplifie à l'extrême, donc ce n'est pas tout à fait juste (notamment
en ce qui concerne la terminologie "bloc") :
- chaque  "bloc" du disque dur a un numéro unique, un identificateur.
- lorsque le noyau veut lire un bloc, il regarde d'abord dans une liste
contenant les "blocs" utilisés récemment si ce bloc y est. La liste est
évidemment vide à chaque démarrage.
- si le bloc cherché est dans la liste, le noyau l'utilise. Il n'y a pas
d'accès au disque dur => gain de rapidité enorme.
- sinon, 2 cas:
	- la liste est pleine : il faut donc trouver une victime et la
remplacer avec le "bloc" qui convient.=> Accès mémoire pour trouver la
victime + accès disque et memoire pour trouver et charger le bloc en
mémoire.
	- la liste n'est pas pleine : il faut juste charger le bon bloc en
mémoire. => accès disque et memoire.

Dans TOUS les cas : lorsque vous démarrez une application plusieurs fois
d'affilée (en faisant l'hypothese que vous ne démarrez que cette
application et elle seule - là encore c'est simplifié, sinon c'est trop
compliqué) le gain de performance est conséquent...

NB : Linux ajuste la taille du "buffer cache" suivant la taille de la
mémoire. On n'a donc jamais trop de mémoire, car au plus vous avez de
mémoire, au plus le "buffer cache" sera grand, au plus les données
seront stockées en mémoire => gain de rapidité énorme.
-- 
Dusausoy Bruno <bruno.dusausoy at skynet.be>





Plus d'informations sur la liste de diffusion Linux-bruxelles