Système d'exploitation et matériel

Pour lire le registre d’état d’un périphérique par entrées/sorties mappées en mémoire comme ci-dessus, pourquoi ajouter volatile et configurer cette zone comme non cachée ?

#define STATUS (*(volatile unsigned int *)0x40001000)
while ((STATUS & 1) == 0)
    ;   /* 装置の準備ができるまで待つ */
  1. AParce qu’avec volatile, les lectures sont regroupées en une seule, ce qui accélère
  2. BParce que, mise en cache, la valeur du registre du périphérique revient automatiquement à 0
  3. CParce que la valeur est modifiée par le périphérique, et qu’il faut réellement la relire à chaque fois pour ne pas manquer ses changements
Afficher la réponse et l'explication

Réponse : C. Parce que la valeur est modifiée par le périphérique, et qu’il faut réellement la relire à chaque fois pour ne pas manquer ses changements

La valeur d’un registre de périphérique est modifiée par le périphérique, indépendamment du programme. Sans volatile, le compilateur peut juger que la valeur ne change pas dans la boucle, ne la lire qu’une fois et produire un code qui attend indéfiniment. De plus, si la zone est mise en cache, le CPU continue de lire l’ancienne valeur en cache et ne voit pas les changements du périphérique. volatile interdit d’omettre les lectures, ce qui est l’inverse d’un regroupement. La mise en cache ne remet pas non plus la valeur à 0.

S'entraîner sur ce thème Retour au thème

Autres questions sur Système d'exploitation et matériel

  1. Dans quel cas la scrutation (polling), où le CPU examine de façon répétée l’état d’un périphérique sans utiliser d’interruptions, est-elle avantageuse ?
  2. Dans un système où le matériel ne maintient pas la cohérence des caches (non cohérent), quel traitement le logiciel doit-il effectuer avant que le CPU lise des données écrites en mémoire principale par un périphérique via DMA ?
  3. Quel est le rôle principal d’une IOMMU ?
  4. Quel est le rôle d’un pilote de périphérique ?
  5. Pour quelle raison principale un OS courant empêche-t-il les applications de lire et écrire directement les registres des périphériques ?

Comparatifs sur ce thème