Afbryd behandlingen i Windows

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gerne vide, hvilke tråde processer enheden afbryder. Hvad sker der, når der opstår en afbrydelse, når en brugertilstandstråd kører? Har andre brugertråde også mulighed for at køre, når systemet behandler en afbrydelse?


Venligst foreslå mig nogle referencemateriale, der beskriver, hvordan afbrydelser håndteres af Windows.

Bedste reference


Apparatafbrydelser bliver (normalt) behandlet af hvilken som helst tråd, der havde CPU'en, der tog afbrydelsen, men i en ring 0 og på et andet beskyttelsesniveau. Dette begrænser nogle af de handlinger, en afbryderhåndterer kan tage, for det meste af tiden er den aktuelle tråd ikke relateret til den tråd, der venter på, at arrangementet skal ske, at afbrydelsen indikerer.


Selve kernen er lukket kilde, og kun dokumenteret gennem sin interne API. Det API er udsat for enhedsdriverforfattere og beskrevet i driverudviklingssæt.


Nogle ressourcer til at komme i gang:



  • Enhver udgave af Microsoft Windows Internals af Salomon og Russinovich. Nuværende synes at være den 4. udgave, men selv en gammel udgave hjælper.

  • Windows DDK, nu omdøbt til WDK. Dets dokumentation er også tilgængelig online. Sørg for at læse Kernel Mode Design Guide ... [2] [3] [4]

  • Sysinternals har værktøjer og artikler til at undersøge og forklare kernens adfærd. Dette var en uafhængig side, indtil Microsoft blev træt af Mark Russinovich, som tilsyneladende ville vide mere om, hvordan kernen fungerede, end de gjorde. [5]



Bemærk at kildekoden til mange af de fælles enhedsdrivere er inkluderet i DDK i prøverne. Selvom produktionsversionerne næsten helt sikkert er forskellige, kan du læse prøvekørerne selv, når du læser nogle spørgsmål, selvom du ikke selv vil implementere en chauffør.

Andre referencer 1


Som ethvert andet operativsystem behandler Windows interferenser i Kernel-tilstand med et forhøjet Interrupt Priority Level (jeg tror, ​​de kalder dem IRPL'er, men jeg ved ikke, hvad 'R' står for). Enhver brugergrænse eller kerne-tråd på lavere niveau, der kører på samme maskine, afbrydes, mens afbrydelsesanmodningen behandles, og genoptages, når ineterrupt-behandlingen er afsluttet.

Andre referencer 2


For at lære mere om afbrydelser af enheder på Windows skal du studere enhedsdriverudvikling. Dette er et nicheemne, jeg tror ikke, du kan finde mange nyttige ressourcer på nettet, og du skal muligvis søge en bog eller et kursus.


Under alle omstændigheder håndterer Windows interrupts med Interrupt Request Level (IRQL) og Udskudt procedureopkald. En afbrydelse håndteres i Kernel-tilstand, som kører i højere prioritet end brugertilstand. En ordentlig afbryderhåndterer skal reagere meget hurtigt. Den udfører kun de absolut nødvendige operationer og registrerer et udløbet procedureopkald til at køre i fremtiden. Dette sker, når systemet er i en Interrupt Request Level. [6]