Besturingssysteem en hardware

Waarom wordt, wanneer zoals hierboven het statusregister van een apparaat via memory-mapped I/O wordt gelezen, volatile gebruikt en wordt dat gebied ingesteld om niet te worden gecachet?

#define STATUS (*(volatile unsigned int *)0x40001000)
while ((STATUS & 1) == 0)
    ;   /* 装置の準備ができるまで待つ */
  1. AOmdat met volatile de leesinstructies tot één worden samengevoegd, wat sneller is
  2. BOmdat bij cachen de waarde van het apparaatregister automatisch naar 0 terugkeert
  3. COmdat de waarde door het apparaat verandert en een wijziging gemist wordt als niet telkens daadwerkelijk opnieuw wordt gelezen
Antwoord en toelichting tonen

Antwoord: C. Omdat de waarde door het apparaat verandert en een wijziging gemist wordt als niet telkens daadwerkelijk opnieuw wordt gelezen

De waarde van een apparaatregister wordt door het apparaat gewijzigd, los van het programma. Zonder volatile kan de compiler concluderen dat de waarde in de lus niet verandert, hem slechts één keer lezen en code genereren die eindeloos wacht. Als het gebied gecachet wordt, blijft de CPU bovendien de oude waarde uit de cache lezen en is de verandering van het apparaat niet zichtbaar. Volatile voorkomt dat leesacties worden weggelaten en werkt dus tegengesteld aan samenvoegen tot één. De waarde wordt door cachen ook niet 0.

Dit onderwerp oefenen Naar de onderwerppagina

Meer vragen over Besturingssysteem en hardware

  1. In welk geval is polling, waarbij de CPU de status van een apparaat herhaaldelijk controleert zonder interrupts, voordeliger?
  2. Welke bewerking moet de software uitvoeren voordat de CPU gegevens leest die een apparaat via DMA naar het hoofdgeheugen heeft geschreven, in een systeem waarin hardware de cache niet coherent houdt (niet-coherent)?
  3. Wat is de juiste hoofdrol van de IOMMU?
  4. Wat is de juiste rol van een apparaatdriver?
  5. Wat is de belangrijkste reden dat gangbare besturingssystemen verhinderen dat toepassingen rechtstreeks registers van apparaten lezen en schrijven?

Vergelijkingen bij dit onderwerp