Seguramente al leer el título de este post pensaste en que me voy a referir a las pantallas azules de Windows. Correcto. También puedes haber pensado que es un post para criticarlas. Bueno, eso no será así. Este post tiene como objetivo explicarlas.
Historia
Hace ya un par de años, leí un recorte en el típico mural de las empresas, que estaba escrito por alguien conocido por mí y un referente nacional en muchos aspectos.
El artículo escrito se llamaba “El software nuestro de cada día” y estaba escrito por José Miguel Piquer.
Jo y Microsoft
José Miguel, o “Jo” como le dicen los más cercanos, fue profesor mío en algunos cursos en la carrera de “Ingeniería Civil en Ciencias de la Computación e Informática,” en la Universidad de Chile.
Siempre un gusto ir a sus clases, magister, doctorado y varios títulos más que pueden leer en su página personal del Departamento de Ciencias de la Computación (DCC), le recuerdo como acérrimo detractor de Microsoft y Windows.
Artículo
Bueno, el inicio del artículo escrito por él, esboza la siguiente frase:
Hay que aceptar que resulta extremadamente frustrante enfrentarse a sistemas que se caen: desde las pantallas azules clásicas de Windows, pasando por los sitios webs bancarios que no responden, hasta las agendas y sus fatal exceptions que se están volviendo más norma que excepción.
Después, el artículo va realmente a lo importante que él quiere exponer, pero con ésta introducción cae lamentablemente en facilismos con una frase que no aporta mucho, más que exacerbar el cuento de “nunca acabar” de las pantallas azules.
El artículo está escrito en julio del 2005, diez años después del festín de pantallas azules que nos daban Windows 95, Windows 98, Windows 98 segunda edición y finalmente (por suerte!) Windows Millenium Edition.
En mis años de estudiante (93-99) nunca hubo un PC en la universidad (salvo el de la secretaria del DCC), así que dudo que él personalmente se haya enfrentado a un sistema de estos, aunque no es por ahí donde quiero llevar este post.
Profesor, todos esperamos mucho de usted. Por favor, no caiga en frases fáciles. No las necesita. Usted está lejos de ser un político.
En el año 2005, ya existía Windows 2003, sistema operativo que casi no presentaba pantallas azules. Más aún, en 4 años, no recuerdo haber visto una pantalla azul en Windows 2003, experiencia que seguramente tú compartes.
¿Son las pantallas azules exclusivas de Windows?
Casi. En los otros sistemas operativos no son necesariamente azules.
Pantallas azules de diferentes sistemas operativos
Hagamos una revisión de las pantallas y los sistemas operativos.
Tenemos la clásica de Windows 9X.

¿Mac OS?, por supuesto que sí, aunque tienen una diferencia con las de Windows. Son más bonitas y mejor logradas, pero el mensaje no dice nada útil, y que el usuario no pueda intuir que tiene que hacer.
Bueno, no siempre son bien logradas, aunque el mensaje es de mayor utilidad que la pantalla anterior.

¿Linux?, claro que sí, en variadas distribuciones, aunque son llamadas Kernel Panic (un nombre más realista para el problema que analizaremos más adelante).



¿Quién esté libre de pecado…
…que lance la primera piedra?, o como dice mi amigo Luisón, el sol sale para todos, y la noche también.
Como ven, no hay sistemas operativos sin fallas, aunque Apple crea y venda lo contrario. Todos enfrentan los mismos problemas. Apple tiene una ventaja en este aspecto sobre Microsoft, la cual se minimizará en el tiempo, mientras se pueda instalar Windows Vista o XP sobre hardware homologado por Apple.
Además, es cosa de leer foros para darse cuenta de que Apple funciona bien con software Apple. Cuando empiezas a instalar software de terceros que no cuentan con buenos procesos de certificación, la situación se equipara.
Vamos a la teoría
Considerando la arquitectura de procesadores x86, en el año 1982, con el lanzamiento del 80286, se comienzan a dar los primeros pasos en lo que hoy se conoce como protected mode.
Protected mode, provee dentro de un conjunto de características, la existencia de cuatro niveles de privilegio, conocidos también como anillos (rings), numerados desde el 0 al 3.

El anillo 0 tiene acceso irrestricto a todo. El anillo 3 tiene accesos restringidos y acotados. El anillo 1 tiene más restricciones que el 0, pero menos que el 2 y menos que el 3 obviamente.
Anillos y Windows
Hoy en día, un sistema Windows 2003 ejecuta código en dos anillos. El 0 y el 3. También corre para XP y 2000. Tengo entendido que Vista utiliza el 0, 2 y 3, pero no lo puedo garantizar.
En el anillo 0 se ejecuta el Kernel de Windows, el cual realiza algunas de las actividades listadas a continuación. Administración de memoria, acceso al hardware a través del HAL, acceso a dispositivos utilizando drivers, priorización de actividades, plug and play, acceso a redes utilizando protocolos como TCP/IP o HTTP, etc.
En el anillo 3 se ejecutan las aplicaciones. Cada vez que una aplicación necesita de alguno de los elementos anteriormente mencionados, y que maneja el Kernel, necesita solicitárselo a éste ya que la aplicación no tiene permiso para acceder directamente.
Esta solicitud y cambio de contexto entre la aplicación y el Kernel tiene un costo, el cual fue tratado de minimizar en el pasado, pero las lecciones aprendidas fueron duras.
¿Por qué se producen?
Una pantalla azul en Windows se produce cuando se produce una falla en código que se ejecuta en el Kernel.
Si una aplicación se cae (anillo 3), nuestro amigo Dr. Watson la atiende y la mata, pero el sistema operativo sigue funcionando sin problema. Hoy en día, Windows te pregunta si deseas enviar el reporte de error a Microsoft, utilizando la aplicación Windows Error Reporting.
Si el Kernel falla (anillo 0), no hay remedio ni doctor que te salve. Bueno, Dr. Watson no salvaba las aplicaciones sino que les aplicaba la eutanasia. Con un Kernel con alguna excepción, no se puede seguir funcionando. Cualquier intento (teórico) de seguir funcionando podría implicar que se corrompan archivos en el disco, por ejemplo.
Mencionaba hace un rato que en Linux, la pantalla azul se llama Kernel panic. En efecto, eso es. Es un problema en el Kernel y no hay mucho más que hacer, salvo entrar en pánico.
En los SO Windows de hoy, versión 2000 en adelante, los motivos de las pantallas azules son los siguientes. Este gráfico fue generado con datos hasta el mes de Abril del 2004, obtenido del libro Windows Internals de Solomon y Russinovich.

El 15% desconocido se debe a que el nivel de corrupción en la información obtenida después de la caída es tan grande que no permite identificar ningún responsable.
Windows 9X y el festín de las pantallas azules
Por algún motivo de diseño, que jamás sabremos el origen, debido al costo del cambio de transición entre el anillo 3 y el 0, los diseñadores de ese sistema operativo consideraron que para mejorar el rendimiento, mucho código del sistema y aplicaciones correrían en el anillo 0.
Debido a esto, el más mínimo error en cualquier aplicación, podría comprometer el sistema completo, como ocurrió en la archiconocida presentación de Windows 98 de Bill Gates.
Esa fue una lección de duro aprendizaje.
Drivers
Como se pudo ver en el gráfico, el 70% de los problemas son producto de drivers de terceros que corren en el Kernel, y sólo el 5% es código defectuoso de Microsoft. Me gustaría saber cuál es la tasa actual, al final del 2007.
Cuando nosotros como usuarios instalamos un driver que no está certificado, estamos generando un potencial problema con nuestro computador. Por supuesto, ese driver puede estar muy bien desarrollado y jamás tendremos una pantalla azul.
En mi caso particular, el driver de mi webcam tiene problemas serios en Windows XP 64 bits. En Windows XP 32 bits funciona sin problema. En 64 bits, cada vez que abro el Messenger y la activo, pantalla azul. ¿Puede ser Messenger el responsable de la caída de mi equipo? Claro que no. Messenger corre en el anillo 3, pero el driver de mi webcam corre en el 0.
Windows Vista
Según tengo entendido, en Windows Vista, algunos o todos los drivers de terceros se ejecutan en el anillo 2, es decir, con mayor privilegio que las aplicaciones, pero con menor privilegio que el Kernel. Esto ayudaría enormemente a minimizar los problemas de pantallas azules producto de drivers defectuosos. Ya sabemos que para abril del 2004, el 70% de los errores reportados era por problemas de drivers defectuosos.
Parte de ésta información se puede encontrar aquí (sección Driver stability in Windows Vista), pero nada menciona de anillos. Sí menciona que parte del driver corre a nivel de usuario (anillo 3).
Ventaja de Apple
Apple tiene una gran ventaja sobre Microsoft, sin embargo, la posibilidad de instalar Windows sobre un equipo Apple mostrará nuevos aspectos en esta materia.
Como sabemos, el gran problema de Windows son los drivers de terceros.
Windows está hecho para que funcione sobre casi cualquier hardware que sea x86, x64 e IA64 compatible. Como hardware me refiero a placas madre, tarjetas de video de dudosa procedencia, memoria de dudosa procedencia, procesadores de segunda generación de Intel, tarjetas de red y cuanto hardware se pueda construir en el mundo.
Por otra parte, el hardware de los equipos Apple está homologado, probado y garantizado para que funcione bien, como piezas de una buena orquesta.
¿Qué sucede si quiero expandir la memoria de mi Apple? tengo que ir a Apple e instalar la que ellos dicen que funciona.
¿Qué sucede si quiero expandir la memoria de mi PC?. Voy y compro en la esquina la más económica.
Lo mismo para el resto del hardware, y por ende, los drivers.
Drivers malos, problemas de Kernel. Problemas de Kernel, pantallas azules.
Mi amigo Luisón ya instaló Vista en su Mac (también tiene un PC) y dice que anda mucho mejor que en el PC. Yo no puedo atestiguarlo, pero le creo.
Anillo 1
Antes de finalizar, una nota anecdótica. El anillo 1 estuvo mucho tiempo sin utilizarse, o al menos eso es lo que yo tengo entendido. Sin embargo, en estos últimos años se ha usado bastante, aunque probablemente no sepas cómo.
Si utilizaste Virtual Server o Virtual PC, las máquinas virtuales se ejecutan en el anillo 1. Esto significa que tienen más privilegios que tus aplicaciones, pero menos que el Kernel del sistema operativo host. Así, una maquina virtual no podrá hacer caer tu sistema operativo de host.
¿Anillo -1?
Otra nota curiosa. En hardware que soporta virtualización, quien controla la administración de las máquinas virtuales (Hypervisor en Windows 2008) se ejecuta en el anillo -1, para que las máquinas virtuales se ejecuten en los anillos correspondientes a como ha funcionado siempre (0 y 3). Más información en Ponicke Bloguea.
Espero haber arrojado un poco más de luz sobre el cuénto de nunca acabar de las pantallas azules.
Todos los sistemas operativos mencionados las tienen, y en todos el problema es el mismo.
Saludos, desde Santiago de Chile
Patrick