Dela via


Synkroniserar avbrottskod

Följande faktorer komplicerar drivrutinskoden som hanterar maskinvaruavbrott i system med flera processorer:

  • Varje gång en enhet avbryter ger den avbrottsspecifik information som är instabil eftersom den kan skrivas över nästa gång enheten avbryter.

  • Enheter avbryter vid relativt höga IRQL-nivåer och deras avbrottshanteringsrutiner (ISR) kan avbryta körningen av annan drivrutinskod.

  • För DIRQL-avbrott måste ISR köras på DIRQL-nivå medan ett drivrutinsspinnlås hålls, så att ISR kan förhindra ytterligare avbrott medan den sparar flyktig information. DIRQL förhindrar avbrott av den aktuella processorn, och spinnlåset förhindrar avbrott av en annan processor.

  • ISR måste köras snabbt eftersom enheten inte kan avbryta medan ISR körs. Långa ISR-körningstider kan göra systemet långsammare eller orsaka dataförlust.

  • Både ISR och rutinen för uppskjutet proceduranrop (DPC) måste vanligtvis komma åt ett lagringsområde där ISR lagrar enhetens flyktiga data. Dessa rutiner måste synkroniseras med varandra så att de inte får åtkomst till lagringsområdet samtidigt.

På grund av alla dessa faktorer måste du använda följande regler när du skriver drivrutinskod som hanterar avbrott:

Mer information om hur du synkroniserar drivrutinsrutiner finns i Synkroniseringstekniker för Framework-Based drivrutiner.