2012-04-15 15 views
6

Mi pregunta es bastante amplia, lo sé, pero me he estado preguntando sobre esto durante mucho tiempo.¿Debería un dispositivo USB defectuoso bloquear un kernel Linux libre de errores?

Un poco de historia. Trabajo en un laboratorio de Física donde todas las computadoras de laboratorio ejecutan Debian (mezcla de la versión anterior y Lenny) o más recientemente Ubuntu 10.4 LTS. Hemos escrito una gran cantidad de software personalizado para interactuar con el hardware del experimento y otras computadoras.

Tenemos muchas placas FPGA que controlan varias partes del experimento, estas están conectadas a través de USB a diferentes computadoras. Después de actualizar una computadora que controlaba un experimento, comenzamos a ver bloqueos/bloqueos de la computadora que ejecutaba todos los láseres. Esto solía ser completamente estable.

Mi pregunta es la siguiente: si todo el ordenador se bloquea debido a un problema con a) Python/GTK software de interfaz gráfica de usuario b) controlador de dispositivo USB o c) El dispositivo real puede esto ser atribuido a la Linux kernel (u otros niveles del sistema operativo)?

¿Es injusto pedirle al kernel de Linux que no entre en pánico incluso si cometo errores en mi implementación de software/hardware.

Mi propia conjetura: Cualquier aplicación de nivel de usuario nunca debería ser capaz de bloquear todo el sistema, ya que solo deberían tener acceso a sus propios recursos.

Cualquier controlador de dispositivo se convierte en una parte del kernel mismo y, por lo tanto, será capaz de bloquearlo. ¿Mi razonamiento suena?

Pregunta de bonificación: ¿Existe alguna forma de aislar el dispositivo y el kernel de alguna manera para que Linux siga funcionando felizmente sin importar qué errores estúpidos se cometan con el hardware? Eso sería muy útil por dos razones: 1) la depuración es más fácil con un sistema en ejecución, 2) A los efectos del experimento realmente necesitamos tiempos de actividad prolongados y tener solo una parte del bloqueo del sistema es infinitamente mejor que los bloqueos en uno parte del sistema que se propaga al resto.

Cualquier enlace y material de lectura sobre este tema sería apreciado. Gracias.

+0

No soy experto en accidentes, pero diría que tienes razón en tus conjeturas. Acerca de la pregunta de bonificación, los errores _logical_ (es decir, el protocolo incorrecto) deberían ser resueltos por el núcleo sin más problemas; pero los errores físicos (es decir, cortocircuito, sobreintensidad, etc.) no pueden, en general, ser gestionados por el kernel y provocarán diferentes niveles de desastre. – rodrigo

Respuesta

3

Tiene razón en que el código sin privilegios no debería ser capaz de cerrar el sistema, a menos que exista una falla en el kernel. Sin embargo, la línea entre no privilegiados y privilegiados no es exactamente igual que el espacio de usuario frente al kernel. Un programa en modo usuario puede abrir /dev/kmem y destruir las estructuras de datos internas del sistema operativo, si la cuenta de usuario tiene privilegios de superusuario.

Para aislar el kernel principal de los problemas del controlador del dispositivo, ejecute el controlador del dispositivo dentro de una máquina virtual.

Varios sistemas VM populares, incluida VMWare Workstation, admiten el reenvío de un dispositivo USB arbitrario desde el host al invitado sin un controlador específico del dispositivo en el host.

+0

Pregunta de seguimiento. Suponiendo que el controlador del dispositivo se escribió correctamente, cualquier falla de hardware (del dispositivo conectado) no debería ser capaz de bajar el sistema, ¿correcto? – HansHarhoff

+0

@HansHarhoff: Siempre que el hardware fallado no cause las tolerancias máximas permitidas especificadas para el puerto de la computadora donde se adjunte para ser violado, eso es correcto.La mayoría de los hosts USB son tolerantes a los cortocircuitos, por ejemplo. Por otro lado, si tienes un rayo, salta a un cable USB, todas las apuestas están apagadas porque se excederán las clasificaciones máximas. –

+0

Mis dos preocupaciones principales son cuando dice cortocircuitos en el puerto USB (o al menos caídas de tensión) y la desconexión accidental/repentina del hardware. Estamos a punto de probar si los concentradores USB con alimentación podrían funcionar como un amortiguador para el cortocircuito. Con respecto a la eliminación repentina, creo que lo importante es tener un tiempo de espera cuando se espera la respuesta. – HansHarhoff

Cuestiones relacionadas