Non ne sono completamente sicuro, quindi non esitare a correggermi.
Ho letto su come funzionano i driver di dispositivo spazio utente su linux in questo articolo: Driver di dispositivo nello spazio utente .
Per quanto posso dire, funzionano perché il kernel mappa la memoria che il dispositivo utilizza per la configurazione e i buffer nello spazio utente. Questa memoria contiene la configurazione del dispositivo e qualsiasi buffer correlato e per questo le modifiche apportate a indirettamente influiscono sul dispositivo senza passare alla modalità kernel .
Ma i processi dello spazio utente non possono direttamente comunicare con il dispositivo. Possono solo leggere e scrivere su questa memoria condivisa. Se il driver dello spazio utente vuole informare il dispositivo di un cambiamento in questa memoria, deve utilizzare una chiamata di sistema (→ interrupt, modalità kernel invocazione).
Gli interrupt dal dispositivo vengono elaborati dal driver UIO (User-IO) in modalità kernel che lo passa allo spazio utente driver.
Quindi la risposta alla mia domanda è (se non mi sbaglio completamente): i processi in modalità utente non possono accedere a qualsiasi hardware direttamente e ovviamente senza alcuna chiamata di sistema che non possono richiedere la memoria condivisa.
Modifica : questo dovrebbe essere vero su qualsiasi sistema operativo poiché i meccanismi utilizzati per implementarlo sono cablati nella CPU. A sua volta potrebbe non essere vero per alcune CPU, indipendentemente dal sistema operativo, poiché la CPU potrebbe non supportare questo tipo di protezione.