No estoy completamente seguro de esto, así que no dude en corregirme.
Leí cómo funcionan los controladores de dispositivo de espacio de usuario en Linux en este artículo: Controladores de dispositivo en el espacio de usuario .
Por lo que puedo decir, funcionan porque el kernel asigna la memoria que el dispositivo usa para la configuración y los búferes en el espacio del usuario. Esta memoria contiene la configuración del dispositivo y cualquier búfer relacionado y, por lo tanto, los cambios en ella afectan indirectamente al dispositivo sin cambiar al modo de kernel .
Pero los procesos de espacio de usuario no pueden comunicarse directamente con el dispositivo. Solo pueden leer y escribir en esta memoria compartida. Si el controlador de espacio de usuario desea informar al dispositivo de un cambio en esta memoria, tiene que usar una llamada al sistema (→ interrumpir, modo kernel invocación).
Las interrupciones desde el dispositivo son procesadas por el controlador UIO (User-IO) en modo kernel , que pasa al espacio de usuario conductor.
Entonces, la respuesta a mi pregunta es (si no estoy completamente equivocado): los procesos en modo usuario no pueden acceder a ningún hardware directamente y, por supuesto, sin ninguna llamada al sistema, no pueden solicitar la memoria compartida tampoco.
Editar : Esto debería ser cierto en cualquier sistema operativo , ya que los mecanismos utilizados para implementarlo están programados en la CPU. A su vez, podría no ser cierto en ciertas CPU sin importar el sistema operativo, ya que la CPU podría no admitir este tipo de protección.