HLT (x86-instruktion)

I x86- datorarkitekturen är HLT (stopp) en assemblerspråksinstruktion som stoppar den centrala processorenheten (CPU) tills nästa externa avbrott avfyras. Avbrott är signaler som skickas av hårdvaruenheter till CPU:n som varnar den om att en händelse inträffade som den borde reagera på. Till exempel skickar hårdvarutimers avbrott till CPU:n med jämna mellanrum.

De flesta operativsystem kör en HLT -instruktion när det inte finns något omedelbart arbete att göra, vilket försätter processorn i viloläge . I Windows NT , till exempel, körs den här instruktionen i " System Idle Process ". På x86-processorer är opkoden för HLT 0xF4 .

Historik på x86

Alla x86-processorer från 8086 och framåt hade HLT- instruktionen, men den användes inte av MS-DOS före 6.0 och var inte specifikt utformad för att minska strömförbrukningen förrän Intel DX4 -processorn släpptes 1994. MS-DOS 6.0 gav en POWER.EXE som kunde installeras i CONFIG.SYS och i Microsofts tester sparade det 5%. Några av de första 100 MHz DX-chipsen hade ett buggigt HLT-tillstånd, vilket fick utvecklarna av Linux att implementera ett "no-hlt"-alternativ för användning när de kördes på dessa chips, men detta fixades i senare chips.

Intel har sedan dess introducerat ytterligare instruktioner som ger processorn. Dessa inkluderar:

  • PAUSE i SSE2 avsedd för snurrslingor. Tillgänglig för användarutrymme (ringningar med låg privilegie).
  • MONITOR / MWAIT i SSE3 för trådsynkronisering.
  • TPAUSE (tidsinställd paus) och UMONITOR / UMWAIT (användarutrymmesmonitor/mwait). Tillgänglig för användarutrymme.

Bearbeta

Nästan varje modern processorinstruktionsuppsättning innehåller en instruktion eller viloläge som stoppar processorn tills mer arbete behöver göras. I avbrottsdrivna processorer stoppar denna instruktion CPU:n tills ett externt avbrott tas emot. På de flesta arkitekturer tillåter exekvering av en sådan instruktion processorn att avsevärt minska sin strömförbrukning och värmeeffekt, vilket är anledningen till att den vanligtvis används istället för att vänta på att sova och gå på tomgång. I de flesta processorer minskar stopp (istället för looping) också latensen för nästa avbrott.

Användning i operativsystem

Eftersom att utfärda HLT- instruktionen kräver ring 0- åtkomst, kan den endast köras av privilegierad systemprogramvara som kärnan . På grund av detta är det ofta bästa praxis inom applikationsprogrammering att använda applikationsprogrammeringsgränssnittet ( API) som tillhandahålls för detta ändamål av operativsystemet när inget mer arbete kan göras, till exempel Linuxs sched_yield() . Detta kallas att "lämna" processorn. Detta gör att operativsystemets schemaläggare kan avgöra om andra processer är körbara; om inte. Om varje process ligger i viloläge eller väntar, kommer den normalt att utföra en HLT-instruktion för att minska strömförbrukningen tills nästa hårdvaruavbrott.

Se även