Passer en "mono-tache" sous XP ???

Signaler
Messages postés
18
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
24 novembre 2003
-
Messages postés
75
Date d'inscription
samedi 23 mars 2002
Statut
Membre
Dernière intervention
18 septembre 2006
-
Bonjour a tous,
Jaimerais pouvoir passer en mono-tache sous Windows XP, le temps nécessaire a l'exécution d'une routine assembleur et ensuite revenir a la situation initiale. Pendant l'exécution de cette routine assembleur, j'aimerais que le CPU me consacre 100% de son temps et ignore completement la totalité des autres taches.
PS: J'ai acces au niveau RING0 ... si ca peut aider ! :)
Des principes de fonctionnement sur le multi-tache ne vont pas m'aider beaucoup ! mais si vous avez des infos précises sur le sujet que je cherche ... Je suis Va-che-ment intéressé grave !!! merci ...

7 réponses

Messages postés
75
Date d'inscription
samedi 23 mars 2002
Statut
Membre
Dernière intervention
18 septembre 2006

Ben, en fait personne n'a vraiment accès au code source du kernel de windows, mais il doit utiliser les mêmes interruptions, à savori l'interruption 9( qui est un timer, par défaut 1024 fois par secondes ). Il doit( on en est pa sûr ! ) dérouter ce timer vers le scheduler qui est là pour changer d'application( n'oublie pas que ton PC ne gère qu'un tâche à la fois ! ). En gros, il faut trouver l'addresse en mémoire du scheduler et le changer temporairement pour qu'il ne fasse rien( un "ret" pas exemple ). Crois-moi, ce que tu demande n'est pas simple.
Une autre solution, qui n'est pas forcément fiable à 100% des cas, mais qui fonctionne à 90% est de passer toutes les taches en priorité 'idle' et de passer le temps de la routine en 'REAL_TIME', comme c'est une routine assembleur, elle ne doit pas être très longue en temps d'éxécution. Evidement, cette technique n'est pas totalement fiable mais doit pouvoir fonctionner avec de bons résultats sans toute fois compliquer trop le programme.

Vermifuge
vermi-fuge@libertysurf.fr
Messages postés
18
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
24 novembre 2003

merci de m'avoir répondu.
J'ai bien tout compris !
mais que penses tu de ce ci :
j'ai acces au mode Ring0 ... en Ring0, si je commence ma routine par un " cli " ... t'en pense quoi toi ? Y'en a qui me dise que si je place un " cli " en Ring0, je bloque toutes les interruptions et plus aucune autres taches ne viendra interrompre ma routine assembleur ... jusqu'au " sti " de cloture ? t'es d'accord avec ca toi ?
tout grand merci de me répondre ...
Messages postés
75
Date d'inscription
samedi 23 mars 2002
Statut
Membre
Dernière intervention
18 septembre 2006

Eh bien un "cli" ne fait strictement rien. L'instruction "cli" ne fonctionne qu'en mode réel( si tu connais pas les modes, va lire mon article sur http://codingskillz.free.fr/ ), hors WinXP tournant en mode protégé, les interruptions sont donc géré par ISR( Interrupt Service Routine ). Tu peux peut-être changer l'ISR depuis le mode 0( pour savoir comment faire, va lire mon artice( là, je crois que je fais un peut trop de pub ) ).

@+
Vermifuge
Messages postés
18
Date d'inscription
jeudi 26 juin 2003
Statut
Membre
Dernière intervention
24 novembre 2003

Hello,
Curieuse ta remarque ! Je respecte totalement ton avis, mais cela me semble curieux !
" Cli " ne fonctionne qu'en mode réel ... ???
Bein ... je pense pas ! je pense que l'instruction " cli " fonctionne aussi bien en mode réel que protégé !
Si " Cli " ne fonctionnait qu'en mode réel, quelle instruction serait alors utilisée en mode protégé pour inhiber les interruptions (ou exeptions, c'est comme tu veux).
Quand, en mode protégé, une exeption est déclanchée avec exécution de l'ISR correspondante ... cette ISR a besoin qu'on ne l'interrompe pas ... elle utilise quoi comme instruction alors ??? ... de plus ISR (Interrupt Service Routine) ... bein c'est jamais qu'une expression ! meme en mode réel, ou la, on parle d'interruption, il y a des " Interrupt Service Routine ". La notion d'ISR ne me semble pas spécifique au mode protégé.
Bon, maintenant, je ne suis pas le Bon Dieu, clair ! Et si je me permet de poser des questions dans le domaine, c'est que je ne suis pas un pro non plus !
Je peux aussi totalement me planter, mais alors qu'on m'explique plus ! je serai un bon élève ... hi
amicalement a tous ....
Messages postés
75
Date d'inscription
samedi 23 mars 2002
Statut
Membre
Dernière intervention
18 septembre 2006

Je ne suis pas professionnel aussi, mais cependant j'ai trouvé
une source( kernel de "Boso" il me semble ), où le gars désactive toutes les interruptions au moyen de l'ISR. Il est cependant possible que la source soit bidon... Tu peux toujours essayer, quoique je pense que la solution de changer les priorités soit une bonne solution. :)
Je doute qu'un simple 'cli' soit en mesure de bloquer complètement le système( il y aurait des tonnes de virus de ce type ! ). Je ne sais pas, faut voir, mais je persiste à dir que l'ISR permet de désacter l'interruption de changement de task( qui est l'IRQ 8, ce n'est pas une interruption du mode réel, elle est spécifique au mode protégé ).

@+
Vermifuge
Messages postés
33
Date d'inscription
mercredi 15 mai 2002
Statut
Membre
Dernière intervention
24 octobre 2003

L'instruction cli existe en mode protéger (je ne sais pas si je l'ai déjà tester, mais j'ai tester sti, donc cli marche), car j'ai déjà fait un petit OS en mode protéger, et si tu fait un sti avant d'intercepter les interuption tu a un crash assurer!

De plus la doc intel le dirait si cli et sti ne marcherait que en mode réel.

Si tu est en ring 0 et que tu fait un sti (il faut le ring0 pour fair un sti en mode Protéger) alors normalement RIEN n'arréte ton processus (le système, window ne peut plus prendre la main), sauf si tu appele le system (API) qui peut-être donne la main a windows
Messages postés
75
Date d'inscription
samedi 23 mars 2002
Statut
Membre
Dernière intervention
18 septembre 2006

Question bête, pourquoi tu fais le test ? Je viens de le faire sur Win98 et ça marche ! le CLI bloque toutes les interruptions du Win( Clavier, Souris, Sheduler, ... ), bref le crash parfait avec 1 instruction. Cependant, Win98 n'est pas préemptif, il y a donc une différence avec WinXP( WinXP tourne avec le noyau de Win2000, Win98( 2ièm édition ) tourne avec celui de Win3.11... ), il est donc possible que le CLI ne fonctionne pas avec XP. A voir, fais donc le test. :)

@+ Vermifuge
vermi-fuge@libertysurf.fr
http://codingskillz.free.fr/