In che modo un programma utente accede a un dispositivo?

1

In Linux, da link

user programs talk with device drivers through device files

Ma se ho capito bene,

  • se il driver del dispositivo si trova nel kernel del sistema operativo, un programma utente accede al dispositivo, effettuando chiamate di sistema per richiedere al kernel del sistema operativo di agire per suo conto. In che modo il file di dispositivo e le chiamate di sistema funzionano insieme, dal momento che entrambi aiutano il programma utente ad accedere al dispositivo? (Il file del dispositivo agisce sia come identificativo del dispositivo che come interfaccia con il driver del dispositivo?)

  • Se il driver del dispositivo si trova all'esterno del kernel del sistema operativo, il programma utente utilizza solo il file del dispositivo per accedere al dispositivo, senza chiamate di sistema?

Grazie.

    
posta Tim 04.02.2015 - 15:27
fonte

2 risposte

5

Il programma in modalità utente sempre utilizza le chiamate di sistema per comunicare con l'hardware. Il file del dispositivo esiste esclusivamente in modo che il programma possa utilizzare ben note , semplici , standard chiamate di sistema per svolgere il lavoro anziché un dispositivo complicato quelli specifici.

Fondamentalmente, leggere e scrivere un file di dispositivo coinvolge esattamente le stesse chiamate di sistema open() , read() , write () 'ecc. come leggere da un file di testo vaniglia. Dal momento che molti programmatori sanno già come fare questo, ciò rende il controllo di un dispositivo relativamente facile - devi solo conoscere il nome del nodo del dispositivo e il protocollo per parlare con esso, piuttosto che i verbi speciali per programmare la tua snella scheda TV.

Con un driver dello spazio utente puoi in linea di principio permettere al programma spaziale dell'utente di usare un modo più complicato di parlare con il guidatore, ma perché vorresti farlo? I file di dispositivo comportano una notevole riduzione della complessità per una moderata perdita di espressività, quindi sono generalmente preferiti. In questo modo solo i programmatori di driver devono approfondire la complessità della scheda specifica.

    
risposta data 04.02.2015 - 15:35
fonte
3

Un handle di file è un'astrazione, anche per un normale file di testo. Quando l'utente esegue una chiamata di sistema read , succede molto all'interno del kernel. Per l'utente, sembra che tu stia leggendo byte consecutivi da un disco, ma quei byte potrebbero trovarsi su dischi separati su computer separati o in vari livelli di memoria cache. Il kernel deve trovare il posto migliore per recuperare quei byte e restituirli allo spazio utente.

Non c'è nulla di particolarmente speciale sui byte su un disco. Se il tuo dispositivo è un mouse, la chiamata di sistema read all'interno del kernel potrebbe interrogare l'hardware per ottenere la posizione corrente degli assi e lo stato dei pulsanti. Quindi, il "file" che l'utente legge contiene una struct con quell'informazione, ripetuta più e più volte. Permette all'utente di utilizzare le stesse chiamate di sistema. Hanno solo bisogno di imparare il formato struct, che di solito è fornito in un file di intestazione.

    
risposta data 04.02.2015 - 15:56
fonte

Leggi altre domande sui tag