CLI (x86)

Yhteensopivien prosessorien x86 -käskysarjassa CLI - käsky  on lyhenne sanoista "Clear Interrupt-Enable Flag" . Se nollaa keskeytyslipun (IF) EFLAGS-rekisterissä . Kun tämä lippu tyhjennetään, prosessori jättää huomioimatta kaikki ulkoisten laitteiden keskeytykset (lukuun ottamatta NMI:tä).

Tämän ohjeen toimintakoodi on 0xFA.

Yleiskatsaus

CLI-käsky kuuluu I/O-käskyjen luokkaan. Jos suojatussa tilassa sitä kutsutaan koodilla, jonka CPL on numeerisesti suurempi kuin IOPL, prosessori luo #GP(0)-poikkeuksen. Jos esimerkiksi IOPL = 2, suojarenkaiden 0, 1 ja 2 koodi voi suorittaa tämän komennon . Nykyaikaiset käyttöjärjestelmät asettavat IOPL:ksi = 0, jotta vain ydin voi suorittaa tämän käskyn.

Huomaa, että IF:ää voidaan muokata myös lataamalla EFLAGS, esimerkiksi POPF -käskyllä ​​.

CLI:tä käytetään yleisesti synkronointityökaluna. CLI/STI-käskyparilla voidaan korostaa keskeytymätöntä koodia asynkronisilla keskeytyksillä. Moniprosessorijärjestelmissä CLI-käsky muuttaa vain sen suorittimen IF-arvoa, jossa se on käynnissä, eikä muuta muiden IF-arvoa. Siksi siellä koodin synkronoimiseksi keskeytyskäsittelijöiden kanssa on tarpeen käyttää lisäksi synkronointiobjekteja (yleensä pyörityslukkoja). Esimerkiksi Linux-ytimessä on spin_lock_irqsave-toiminto, joka poistaa keskeytykset käytöstä ja yrittää saada spinlock-objektin.

INT , INT3 , INTO , BOUND -käskyjen aiheuttamat synkroniset ( ohjelmisto )keskeytykset käsitellään IF-lipun tilasta riippumatta.

Koska HLT-käsky pysäyttää prosessorin, kunnes tapahtuu keskeytys, CLI/HLT-yhdistelmä saa koneen pysähtymään kokonaan.

Katso myös