8
votes

Désactiver les interruptions matérielles et logicielles

est-il possible de désactiver toutes les interruptions avec un programme ASM / C / C ++ pour obtenir un contrôle total sur le processeur?

si oui -> comment?

Si non -> Comment le système d'exploitation "atomique" appelle le travail (par exemple, entrer dans une section critique)?

Merci pour votre aide!


2 commentaires

Vous devez indiquer quel processeur vous utilisez. Et quel système d'exploitation le cas échéant. Sur le système d'exploitation Modern Desktop / serveur, le code UseLland fonctionne généralement dans un mode non privilégié vous empêchant de le faire.


MS Windows (XP SP2 / SP3, Vista, 7) Versions X86 et X64, processeurs Intel Modern Intel (E.G. Intel Core 2 Duo)


3 Réponses :


3
votes

sur X86 et la plupart des autres processeurs modernes, vous pouvez obtenir des instructions atomiques. Ceux qui sont GURANTED ne doivent pas être finis d'exécuter avant qu'un autre thread / processeur puisse accéder à cette mémoire.

Sous Win32, vous avez les fonctions interlockées * qui résument que vous avez à vous sur des plates-formes prises en charge.

sur un MIPS Beaucoup d'instructions peuvent avoir un .J'ai ajouté à la fin de l'instruction afin de garantir le verrouillage.


2 commentaires

Sur un X86, vous pouvez préfixer certaines instructions avec «verrouillage» pour les faire atomique.


Pour quelle plate-forme? Si c'est pour Windows, alors msdn.microsoft.com/fr- US / Bibliothèque / MS684122 (vs.85) .aspx



10
votes

en X86 Assembly, les commandes sont

  • sti définir un bit d'activation d'interruption
  • CLI Bit d'activation d'interruption transparente

    Ces commandes définissent et effacez le si le drapeau . Lorsque le drapeau IF est défini, la CPU gérera les interruptions matérielles et, lorsqu'il est clair, la CPU ignorera les interruptions matérielles. Cela n'affecte pas le traitement des interruptions non masquables cependant, ni n'affecte les interruptions de logiciels ou les exceptions. Ces instructions ne fonctionnent pas non plus en mode non privilégié (généralement plus haut que la bague 0, selon iOOL ) bien que.


3 commentaires

Vous l'avez en arrière. Sti activé les interruptions. CLI désactivé.


Il ne désactive pas non plus les interruptions de logiciels ni les exceptions


Merci aux gars pour vos commentaires et mes modifications: STI Active les interruptions, CLI désactive les interruptions est en effet correcte. J'étais sûr que c'était l'inverse, mais j'ai appris mon assemblée sur un C64, donc je l'ai regardée: le 6510 avait CLI Désactiver et STI pour activer. Je suis confus;-)



2
votes

Le X86 a un drapeau d'interruption (si) dans le registre des drapeaux. Lorsque ce drapeau est défini sur 0, les interruptions matérielles sont désactivées, sinon elles sont activées. La commande CLI définit ce drapeau sur 0 et STI le définit à 1. Les instructions de chargement des valeurs dans le registre des drapeaux (telles que POPF et IRET) peuvent également modifier ce drapeau.

bonne chance!


0 commentaires