Dela via


Vad är en drivrutin?

En drivrutin är en programvarukomponent som låter operativsystemet och en enhet kommunicera. När en app till exempel behöver läsa data från en enhet anropas en funktion som implementeras av operativsystemet. Operativsystemet anropar sedan en funktion som implementeras av drivrutinen. Drivrutinen, som vanligtvis utvecklas av enhetens tillverkare, vet hur man kommunicerar med enhetens maskinvara för att hämta data. När drivrutinen hämtar data, ger den tillbaka till operativsystemet, som sedan ger tillbaka dem till appen.

diagram som visar interaktionen mellan ett program, operativsystem och drivrutin.

Att utvidga definitionen

Den här förklaringen förenklar begreppet drivrutiner. Här är några fler saker att tänka på:

  • Enhetstillverkaren utvecklar inte alltid drivrutinen. Om en enhet följer en publicerad maskinvarustandard kan Microsoft skriva drivrutinen så att enhetsdesignern inte behöver ange någon.

  • Alla drivrutiner kommunicerar inte direkt med en enhet. Ofta deltar flera drivrutiner i en drivrutinsstack i en I/O-begäran.

    Det konventionella sättet att visualisera stacken är med den första deltagaren högst upp och den sista deltagaren längst ned, som du ser i det här diagrammet. Vissa drivrutiner i stacken ändrar begäran från ett format till ett annat. Dessa drivrutiner kommunicerar inte direkt med enheten. I stället ändrar de begäran och skickar den till drivrutiner som är lägre i stacken.

    diagram som illustrerar kommunikationen mellan ett program, operativsystem, tre drivrutiner och en enhet.

    • Funktionsdrivrutin: Drivrutinen som kommunicerar direkt med enheten kallas funktionsdrivrutin.

    • Filterdrivrutin: Drivrutiner som utför extra bearbetning kallas filterdrivrutiner.

    Mer information finns i Drivrutinsstackar.

  • Vissa filterdrivrutiner observerar och registrerar information om I/O-begäranden men deltar inte i dem. Vissa filterdrivrutiner fungerar till exempel som kontrollanter för att se till att de andra drivrutinerna i stacken hanterar I/O-begäran korrekt.

För att förfina definitionen är en drivrutin alla programvarukomponenter som observerar eller deltar i kommunikationen mellan operativsystemet och en enhet.

Programvarudrivrutiner

Den här utökade definitionen är mer exakt men är fortfarande ofullständig. Vissa drivrutiner är inte associerade med någon maskinvaruenhet alls.

Om du behöver skriva ett verktyg som har åtkomst till grundläggande operativsystemsdatastrukturer kan du dela upp verktyget i två komponenter. Den första komponenten körs i användarläge och visar användargränssnittet. Den andra komponenten körs i kernelläge och kommer åt kärnoperativsystemdata. Komponenten som körs i användarläge kallas för ett program. Komponenten som körs i kernelläge kallas för en programvarudrivrutin. En programvarudrivrutin är inte associerad med en maskinvaruenhet.

Det här diagrammet illustrerar ett program i användarläge som kommunicerar med en programvarudrivrutin i kernelläge.

diagram som visar relationen mellan ett program och en programvarudrivrutin.

Programvarudrivrutiner körs alltid i kernelläge. De skrivs främst för att komma åt skyddade data som endast är tillgängliga i kernelläge. Alla enhetsdrivrutiner behöver inte åtkomst till kernellägesdata och resurser, så vissa enhetsdrivrutiner körs i användarläge.

Mer information om processorlägen finns i Användarläge och kernelläge.

Busschaufförer

En annan typ av förare är busschaufför. För att förstå bussdrivrutiner måste du förstå enhetsnoder och enhetsträdet.

Information om enhetsträd, enhetsnoder och bussdrivrutiner finns i Enhetsnoder och enhetsstackar.

Mer information om funktionsdrivrutiner

Förklaringen hittills förenklar funktionsdrivrutinen. Förklaringen hittills anger att funktionsdrivrutinen är den drivrutin som kommunicerar direkt med enheten. Den här instruktionen gäller för en enhet som ansluter direkt till PCI-bussen (Peripheral Component Interconnect). Funktionsdrivrutinen för en PCI-enhet hämtar adresser som är mappade till port- och minnesresurser på enheten. Funktionsdrivrutinen kommunicerar direkt med enheten genom att skriva till dessa adresser.

I många fall ansluter inte en enhet direkt till PCI-bussen. I stället ansluter enheten till ett värdbusskort som är anslutet till PCI-bussen. Till exempel ansluter en USB-ansluten brödrost till en värdadapter, som kallas USB-värdstyrenhet. Styrenheten är ansluten till PCI-bussen. USB-brödrosten har en funktionsdrivrutin och USB-värdstyrenheten har också en funktionsdrivrutin.

Funktionsdrivrutinen för brödrosten kommunicerar indirekt med brödrosten genom att skicka en begäran till funktionsdrivrutinen för USB-värdstyrenheten. Funktionsdrivrutinen för USB-värdstyrenheten kommunicerar sedan direkt med USB-värdstyrenhetens maskinvara, som kommunicerar med brödrosten.

Diagram som visar interaktionen mellan USB-brödrostdrivrutiner, USB-värdstyrenhetsdrivrutin och PCI-bussen.