processus et boucle infinie -> ressources CPU à 100% ou pas?

processus et boucle infinie -> ressources CPU à 100% ou pas? - C - Programmation

Marsh Posté le 26-02-2006 à 20:40:09    

:hello:  
 
supposons que je crée une boucle infinie au sein d'un processus ou d'un thread..
 
à l'execution, on n'aura pas 100% des ressources du CPU occupées, si?

 
j'ai fait qques essais avec un createprocess() mais ma boucle monopolise le CPU.. donc j'ai un doute..
 
merci
 
Edit:
P.S. sur un O.S. préemptif !

Message cité 1 fois
Message édité par namerh le 26-02-2006 à 21:45:18
Reply

Marsh Posté le 26-02-2006 à 20:40:09   

Reply

Marsh Posté le 26-02-2006 à 20:50:50    

namerh a écrit :

supposons que je crée une boucle infinie au sein d'un processus ou d'un thread..
 
à l'execution, on n'aura pas 100% des ressources du CPU occupées, si?



Ben si, et sous Linux 2.4 (non préemptif), ça tue. Inclus un usleep(100) dans la boucle, ca va donner de l'air.
 
Tu parles de CreateProcess() (Windows). Ca va ramer sérieusement. Inclus un Sleep(1)...
 
Mais il y a certainement un problème de conception. Que veux-tu faire exactement ?

Message cité 1 fois
Message édité par Emmanuel Delahaye le 26-02-2006 à 20:53:51

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 26-02-2006 à 21:38:17    

Emmanuel Delahaye a écrit :

Mais il y a certainement un problème de conception. Que veux-tu faire exactement ?


Ralentir la bécane à mort ou la rendre inopérante ?    [:pingouino]  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 26-02-2006 à 21:38:26    

Linux 2.4 pas préemptif  :??:  
 
Enfin comme déja demandé, que veux tu faire ?
Si un programme a besoin de faire des calculs lourds (il n'attend rien de l'extérieur, il ne donne pas de temps aux autres à coup de Sleep() et autres,...), c'est normal que le processeur se trouve utilisé à fond tant que le calcul n'est pas fini...

Reply

Marsh Posté le 26-02-2006 à 21:45:50    

Mackila a écrit :

Linux 2.4 pas préemptif  :??:


http://sic.epfl.ch/SA/publications [...] ge9ag.html
"Par défaut, le noyau de Linux 2.4 n'est pas préemptif."


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 26-02-2006 à 21:46:48    

ah désolé je n'ai pas précisé que le système utilisé est préemptif..
 
donc je repose la question, un sleep() est-il toujours nécessaire à l'intérieur d'une boucle infinie, meme sur un système préemptif?
 
(ce que je fais est classé top secret :D .. bon disons que je m'initie à la prog système.. et que j'ai besoin d'un thread qui utilise une boucle non-stop pour gérer des événements clavier.. voila en gros.. mais ça dépasse l'objet de ma question ;))


Message édité par namerh le 26-02-2006 à 21:47:44
Reply

Marsh Posté le 26-02-2006 à 21:50:57    

namerh a écrit :

ah désolé je n'ai pas précisé que le système utilisé est préemptif..
 
donc je repose la question, un sleep() est-il toujours nécessaire à l'intérieur d'une boucle infinie, meme sur un système préemptif?


C'est moins critique qu'en coopératif, mais c'est quand même bien crade et c'est pas gentil pour les autres processus et threads...
 

Citation :

(ce que je fais est classé top secret :D .. bon disons que je m'initie à la prog système.. et que j'ai besoin d'un thread qui utilise une boucle non-stop pour gérer des événements clavier.. voila en gros.. mais ça dépasse l'objet de ma question ;))


Les évènements hardware, je les gère (Linux 2.4 embarqué pour Power PC) avec un thread de polling à 100 µs :  

usleep (100);


Message édité par Emmanuel Delahaye le 26-02-2006 à 22:05:28

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 26-02-2006 à 21:53:32    

Ecoute, tu fais ce que tu veux. Si tu veux faire une boucle infinie sans pause et donner au process correspondant realtime priority, be my guest.
 
Avec un sleep, il sera peut-être possible d'utiliser la machine, par exemple pour interrompre le process de ton projet secret de hack massif si ça venait à mal tourner.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 26-02-2006 à 21:53:59    

ok merci.. ça correspond à mes observations..
 
mes acquis théoriques sur la notion de préemption n'était pas bien assimilés.. je pensais que meme une boucle pouvait etre momentanément suspendue pour laisser un autre thread s'executer mais apparemment pas (sauf si on le prévoit en faisant un sleep)

Message cité 1 fois
Message édité par namerh le 26-02-2006 à 21:54:27
Reply

Marsh Posté le 26-02-2006 à 21:56:22    

namerh a écrit :

mes acquis théoriques sur la notion de préemption n'était pas bien assimilés.. je pensais que meme une boucle pouvait etre momentanément suspendue pour laisser un autre thread s'executer mais apparemment pas (sauf si on le prévoit en faisant un sleep)


 :heink:  


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 26-02-2006 à 21:56:22   

Reply

Marsh Posté le 26-02-2006 à 21:57:02    

Emmanuel Delahaye a écrit :

http://sic.epfl.ch/SA/publications [...] ge9ag.html
"Par défaut, le noyau de Linux 2.4 n'est pas préemptif."


 
Pour 2.4, il y a les patchs low-latency d'Andrew Morton et premmption de Robert Love.

Reply

Marsh Posté le 27-02-2006 à 04:40:56    

Emmanuel Delahaye a écrit :

http://sic.epfl.ch/SA/publications [...] ge9ag.html
"Par défaut, le noyau de Linux 2.4 n'est pas préemptif."


 
C'est le noyau lui-même qui n'est pas préemptif, mais les applis sont préemptées... Même en 2.4, une appli qui fait une boucle infinie en user space perd le cpu si un autre process a besoin du cpu. C'est la définition d'un système préemptif. Linux 2.4 est un système préemptif.
 
Celà dit, que le système soit préemptif ou non ne change pas grand chose au problème. Si tu peux faire autrement, faire une boucle infinie "active" n'est jamais une bonne solution. Il y a surement moyen d'endomir ton thread en attendant l'évenement qui l'intéresse.

Reply

Marsh Posté le 27-02-2006 à 08:48:12    

matafan a écrit :

C'est le noyau lui-même qui n'est pas préemptif, mais les applis sont préemptées...


Ah, ok. J'écris plus de drivers que d'applications, désolé !
 
 
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed