Come parla esattamente un programma con un driver di dispositivo?


12

Quindi sono confuso su come esattamente noi programmatori parliamo con i dispositivi del computer. Ora non sto parlando delle grandi idee. So che ci sono driver di dispositivo che si trovano sopra l'hardware in modo che diversi programmi possano utilizzare lì funzionalità.

Ma in generale chi parla esattamente con i conducenti? Il programmatore sta scrivendo l'applicazione responsabile della chiamata di una funzione sul driver? Oppure il programmatore chiama una funzione attraverso il sistema operativo che quindi gestisce la chiamata al driver?



1
Un po 'di entrambi e varia a seconda del sistema operativo e del tipo di dispositivo.
whatsisname

Risposte:


12

Laddove è coinvolto un sistema operativo, i programmi non parlano ai driver di dispositivo, almeno non direttamente. I programmi parlano con astrazioni che, a loro insaputa, finiscono per parlare con i driver di dispositivo tramite uno o più livelli di astrazione.

Salterò le complessità dei moderni sistemi operativi e userò CP / M , un sistema operativo a microcomputer sviluppato 45 anni fa, come esempio. CP / M era una torta a strati con tre strati:

Programma. Il livello superiore è un programma che fa qualcosa di utile (elaborazione testi, riproduzione di Space Invaders) eseguendo calcoli e I / O. Diciamo che ad un certo punto il programma vuole visualizzare la lettera 'A' che l'utente può vedere. CP / M fornisce un'astrazione nota come console , che dovrebbe essere la ricerca dell'utente che interagisce con il programma. Il modo convenzionale per inviare un personaggio è con alcune istruzioni di assemblaggio:

LD C,2   ; Load 2 into register C
LD E,65  ; Load the ASCII code for 'A' into register E
CALL 5   ; Call CP/M's routine for getting things done

(Se non hai familiarità con loro, i registri possono essere pensati come variabili che vivono nel processore.) Arriveremo a ciò che i numeri magici 2e 5sono tutti in un minuto. L'aspetto da asporto qui è che tutto il programma sa che c'è una console e c'è un modo per scrivere su di essa. Non sa o si preoccupa di nulla al di là di questo. Questa è la prima di due astrazioni che CP / M utilizza per l'I / O.

BDOS . L'indirizzo 5chiamato dal programma è il punto di ingresso per il livello successivo, il sistema operativo di base del disco o BDOS . Il BDOS offre un'intera serie di funzioni numerate che sono come ordinare per numero dal menu di un ristorante. Dici che desideri l'output della console caricando il Cregistro con il numero di funzione ( 2per l'output della console) e il Eregistro con il carattere da inviare. L'output della console è un'operazione molto semplice e il BDOS non deve fare molto con esso oltre a chiamare il livello successivo.

BIOS. Il BIOS, o Basic Input / Output System, è il livello in cui vive tutto il codice specifico dell'hardware. Nei sistemi moderni, questo sarebbe considerato un insieme di driver di dispositivo. Come il BDOS, il BIOS fornisce chiamate per un set standard di operazioni molto primitive che il BDOS utilizza per svolgere la propria attività. Viene chiamata una di queste operazioniCONOUT, che si occupa di ottenere il carattere che il programma ha chiesto di scrivere due livelli sopra su qualunque hardware lo faccia. (A differenza dei PC, allora le cose non erano omogenee. Il sistema di ognuno aveva diversi modi per farlo accadere.) L'output della console è un pass-through semplice per il BDOS, ma fare qualcosa di più complesso come la creazione di un file su un disco potrebbe richiedere molti Il BIOS chiama per manipolare il supporto. Ancora una volta, poiché il BIOS ha un'interfaccia standard astratta, BDOS sa sempre come ottenere ciò che vuole e non gli importa di come lo fa il BIOS.

Probabilmente ti starai chiedendo perché ci sono due astrazioni (da programma a BDOS e da BDOS a BIOS) invece di una sola. La risposta è che CP / M e il suo BDOS potrebbero essere forniti in forma binaria ai produttori di computer, che scriverebbero un BIOS personalizzato con driver di dispositivo per il loro hardware, collegerebbero i due insieme e lo spedirebbero come sistema operativo per i loro sistemi. Questo è stato un grosso problema perché il BDOS era gestito da un'organizzazione e quindi era sempre una quantità nota per i programmi utente, rendendo possibile eseguire le stesse applicazioni su una varietà molto ampia (per il momento) di hardware. Ecco perché esistono sistemi operativi e non scriviamo solo programmi che modificano direttamente l'hardware .

Tutto ciò che ho descritto qui vale anche per i moderni sistemi operativi. Unix, ad esempio, estrae tutto come file. Dà programmi la stessa serie di chiamate di sistema ( open(), write(), close(), etc.) per comunicare se è un disco o una porta seriale. L'insieme di decisioni e astrazioni è molto più complesso, ma alla fine si riduce ancora a individuare quale codice del driver del dispositivo nel livello inferiore deve essere eseguito per consentire l'operazione.


Non ho mai veramente esaminato il codice CP / M prima (è un po ' prima del mio tempo ... Ho usato i computer CP / M ma non ho mai scritto codice per loro), ma sono piuttosto sorpreso dall'uso di call 5qui. Non rst 8sarebbe stato molto più efficace (sacrificerebbe 3 byte di memoria all'indirizzo di destinazione, ma ne risparmierebbe 2 ogni volta che viene chiamato ...)?
Jules,

@Jules: CP / M è stato sviluppato per l'8080, che aveva una sola modalità di interruzione in cui i dispositivi di interruzione avrebbero messo un'istruzione a byte singolo (di solito a RST) sul bus dati. Non posso dirlo con certezza, ma potrebbe essere stato che non ci fossero abbastanza slot per andare in giro per coprire le esigenze di tutti i dispositivi più DDT (che li ha usati per far accadere i punti di interruzione) più usarne uno per entrare nel BDOS .
Blrfl,

Ah. Questo ha senso, sì. La mia esperienza di sviluppo a 8 bit è limitata alle macchine che avevano una sola fonte di interrupt, quindi non dovevo preoccuparmi così tanto di queste cose ... :)
Jules,

Domanda veloce, in che modo questo processo si collega maggiormente al sistema operativo Windows e al kernel di Windows? O dovrei fare una nuova domanda per quello.
Jason,

@Jason: Wikipedia ha una pagina che descrive l'architettura e fornisce la risposta. Tutto ciò che Microsoft ha prodotto dal 1993 utilizza questa architettura. È praticamente la stessa cosa, solo con più strati nella torta.
Blrfl,

0

Esistono diverse possibilità:

  • Per i dispositivi comunemente usati, il sistema operativo include spesso un'API implementata dai driver e adattata dalla libreria standard della tua lingua. Esempi tipici: filesystem, stampanti, rete, strumenti MIDI.
  • Per i dispositivi più esotici, il produttore del dispositivo deve fornire i driver e talvolta questi includeranno anche i collegamenti linguistici per le lingue più diffuse. Almeno ci saranno collegamenti C, e praticamente tutte le lingue hanno un modo per chiamare le librerie C.
  • In qualche modo tra questi due casi, i dispositivi semplici possono semplicemente utilizzare una connessione per scopi generici come una porta seriale e il produttore pubblica solo il protocollo che è quindi possibile utilizzare tramite il driver della porta seriale generica.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.