Apuntes de un loco

Historias informáticas de ayer y hoy

Licencia

Buscar

Este Blog

Sindicación

Notas

  • Se ha deshabilitado el formulario de contacto del blog debido a abusos.

    Por determinación del administrador de Geeks.ms, los visitantes que no inicien sesión (visitantes anónimos) no podrán enviar comentarios a los blogs, para lo cual deberán registrar una cuenta de usuario e identificarse mediante la misma. También se admite la identificación a través de OpenID. Disculpen las molestias que les cause esta decisión.

Acerca de los contenidos

    La información ofrecida en este blog se proporciona tal cual, sin garantías de ningún tipo, y no otorga ningún derecho. Usted asume el riesgo de poner en práctica cuantos procedimientos se expongan aquí. En particular, si ha venido buscando alguna solución para una tarea o duda escolar y no le ha servido el contenido, por favor, no me eche la culpa. ;)

    Las anotaciones del blog representan una visión válida en el momento en que fueron publicadas o actualizadas. Más allá de esas fechas no se puede garantizar la veracidad de la información expuesta ni la exactitud o fiabilidad de los enlaces.

    Los comentarios son responsabilidad exclusiva de sus autores respectivos. El dueño del blog se reserva el derecho de editar, eliminar o no publicar aquellos comentarios que a su criterio infrinjan reglas básicas de respeto y convivencia en la red. En el caso de la edición, se expondrá claramente esta circunstancia y el motivo de la misma. El dueño del blog podrá asimismo borrar los enlaces que se desvíen demasiado de los temas tratados, muestren intenciones de autopromoción (publicidad descarada, spam convencional, etc.) o en general no inspiren confianza. Las direcciones de correo electrónico serán eliminadas o alteradas con el fin de reducir el riesgo de que sean objeto de "cosechadores" para el envío de mensajes basura masivos. El envío de comentarios implica el conocimiento de estas condiciones y la adhesión a las mismas.

Etiquetas

Archivo

Colegas y afines en Geeks.ms

Otros bloggers españoles

Bloggers de Microsoft

Herramientas interesantes

Geeks.ms

Mi blog personal

Webs y comunidades amigas

Retroinformática

¿Cuánto hace que no miras los disipadores de calor por si han acumulado polvo?

Ha transcurrido un mes y medio desde mi último post, ya me vale.

Hace unos días, en el blog de solución de problemas y depuración avanzada de Windows*, un ingeniero de soporte de Microsoft expuso un curioso problema en casa con uno de sus ordenadores. Estaba un día escaneando unas fotografías y de pronto le salió una pantalla azul. En un primer momento pensó que fue casual: según él, la máquina había funcionado bien hasta entonces. Sin embargo, el problema se repetía nuevamente al volver a escanear fotos, así que decidió investigarlo.

La primera impresión es sospechar de alguno de los componentes involucrados en la tarea que se estaba realizando cuando falló el sistema. En este caso, el controlador del escáner o el del USB —se supone que este escáner se comunica con el PC a través de un puerto USB— serían los candidatos con más papeletas. Sin embargo, el amigo Chad aseguró que estuvo usando el escáner durante mucho tiempo con los mismos controladores software sin observar inconveniente alguno. Esas caídas repentinas del sistema resultaban misteriosas.

Me limitaré a comentar brevemente el análisis del volcado de memoria. Podéis ver los detalles en el post de Chad: Debugging a bluescreen at home. En inglés, claro.

Todo análisis que se precie debe empezar introduciendo la orden !analyze -v en WinDbg. Esto proporciona información básica acerca de las condiciones del error, como el código de STOP, sus cuatro parámetros, el contenido de los registros y la secuencia de llamadas a subrutinas.

El volcado de pila parecía normal hasta cierto punto: una DLL del software del escáner llamó a una rutina de User32.dll que, eventualmente, acabaría en Win32k.sys, la implementación del sistema gráfico de Windows en modo kernel. La rutina ValidateHwnd de Win32k.sys llamó a una supuesta función en la dirección virtual 0x8738e300, donde se intentó acceder a memoria a través de un puntero no válido. Esto es un error grave.

Es extraño que el depurador no fuera capaz de hacer corresponder la dirección 0x8738e300 a ningún módulo ejecutable. Era tierra de nadie. Un pequeño vistazo a los valores de memoria en torno a esa dirección revelaba una zona de datos en pleno pool no paginado. La causa inmediata del fallo fue consecuencia de un intento de ejecución de datos como código. Se da la circunstancia de que el patrón 00 00 hexadecimal corresponde a una instrucción válida en el conjunto de instrucciones x86 de 32 bits: ADD [EAX], AL (sumar el valor del registro AL al byte de la dirección de memoria a la que apunta el registro EAX).

Uno puede pensar en este momento en un puntero sin control, un puntero que apunta a una posición arbitraria de memoria. El desensamblado de las instrucciones previas a la dirección de retorno en Win32k!ValidateHwnd sugiere que la intención era llamar a la función nt!PsGetCurrentThread a través de un puntero global situado en una dirección fija. Ese puntero apuntaba a la dirección correcta.

Entonces, ¿que pudo hacer saltar al microprocesador a una dirección de memoria totalmente equivocada? La apertura de la carcasa del PC descubrió una realidad inquietante. La fotografía del conjunto disipador-ventilador del microprocesador habla por sí sola. Cuando Chad sacó de ahí toda esa suciedad, el ordenador volvió a funcionar con normalidad.

Conclusión: el proceso de escanear fotos debía de poner el procesador a trabajar a pleno rendimiento, con la consiguiente disipación de energía en forma de calor. El sistema de enfriamiento estaría desbordado, con un disipador ineficaz y un ventilador incapaz de llevar a cabo su tarea por muy rápido que girase.

Llegado a este punto, tengo algunas dudas:

  • Cuando el microprocesador se calienta, el ventilador suele acelerarse. Quizá el ventilador de la máquina de Chad no estaba controlado automáticamente o ya giraba a su velocidad máxima. Y justamente un ventilador a máxima velocidad acostumbra a hacer mucho ruido. (Uno también puede acostumbrarse al ruido, claro.)
  • Lo habitual es que la circuitería de la placa base desconecte momentáneamente y reinicialice el procesador en caso de sobrecalentamiento. Esto se observaría como un reinicio espontáneo de la máquina.
  • ¿Cómo es posible que el microprocesador, después de haber cargado en su puntero de instrucción (registro EIP) una dirección errónea, continuara funcionando como si nada hubiese ocurrido? En mi opinión, el sistema debería haber fallado de manera más espectacular, sin pantalla azul y mucho menos con un volcado de memoria completo y consistente.

En fin, bien está lo que bien acaba. O como dirían los anglosajones: All's well that ends well.

* Si alguien tiene idea de una traducción más precisa de Microsoft Advanced Windows Debugging and Troubleshooting, por favor, que la comparta.

Published 31/3/2008 19:59 por Ramón Sola

Comparte este post:

Comentarios

# re: ¿Cuánto hace que no miras los disipadores de calor por si han acumulado polvo?@ Tuesday, April 1, 2008 12:36 AM

Pues hombre, yo no tengo ni idea ni de ensamblador ni del "Debbuging and Troubleshooting", pero si de "cacharreo" de hardware y puedo asegurar que ese tipo de error tipo "irq not drive or equal" y cosas por el estilo se puede producir por llevar a los componentes a ciertos límites, tanto de voltaje como de temperatura. En este caso, yo aposaría más por un fallo de los módulos físicos de memoria que por el propio procesador, ya que con la cantidad de "mierda" que tiene el disipa, la cpu tiene que ponerse bastante "calentorra" pero aunque en malas condiciones, tiene un disipador, pero lo componentes que rodean a la cpu, como la memoria, que normalmente no tienen disipación o esta es pasiva, también se llevan el "calentón", y por experiencia, estos son muchos más sensibles a la temperatura que la placa o la cpu.

En resumidas cuentas, si tienes la cpu a ras de suelo, y tu chasis te ha costado menos que el lector de dvd (sin filtros, ni mallas, ni ventilador de entrada salida, etc), limpialo cada 3 meses, jejjejeje.

Un saludo.

Vas

# re: ¿Cuánto hace que no miras los disipadores de calor por si han acumulado polvo?@ Tuesday, April 1, 2008 1:00 AM

Excelente aportación, gracias. :-)

Ramón Sola

# re: ¿Cuánto hace que no miras los disipadores de calor por si han acumulado polvo?@ Tuesday, April 1, 2008 11:15 PM

Un buen bote de aire comprimido y una buena repisa en la ventana para que no se te caiga el equipo a la calle, jejejeje.

Un saludo.

Vas