Consultorio NSL: Virtualización y antivirus

Hace un tiempo escribí sobre virtualización en MacOS utilizando Parallels Desktop. Y hace unos días, Juan formulaba la siguiente pregunta en los comentarios de la entrada en cuestión:

Hola, si tengo Windows en Parallels, ¿es necesario instalar un antivirus?.

Gracias.

Switcher

La respuesta, como casi siempre, es un poco a la gallega: depende. Depende de los matices exactos de la pregunta, así que vamos a concretar el ámbito de lo que queramos proteger con el antivirus. La respuesta está centrada en un Mac con Parallels, pero puede generalizarse para cualquier equipo con cualquier máquina virtual.

1. Quiero proteger mi Windows virtualizado

En este caso suponemos que queremos proteger la máquina virtual contra los virus que afecten a Windows XP. El software se ejecuta igual en una máquina virtual que en un ordenador físico normal y corriente, por lo que los virus siguen afectándonos de la misma forma. Una buena solución es, por tanto, instalar un antivirus en la máquina virtual para protegerla de este perro mundo.

Otra opción es hacer copias periódicas del archivo del Mac que contiene la máquina virtual con Windows para restaurarlo en caso de problemas, pero esto ocupa espacio adicional y puede que no sea del todo fiable.

2. Quiero proteger mi Mac

A veces se planta la duda de si un virus que ataque a Windows en la máquina virtual podría causar problemas en nuestro equipo. La respuesta es que no, aunque hay matices.

En principio, no hay ninguna manera por la que un virus pueda saltar de la máquina virtual al ordenador que la simula, el antifitrión. Y aunque pudiera violar la protección de memoria, lo cual no parece nada sencillo, el código ejecutable de Windows no funciona en MacOS, así que hasta en el caso más apocalíptico estaríamos a salvo.

Sin embargo, un virus diseñado a tal efecto podría acceder a los directorios de nuestro equipo compartidos por Parallels y modificar nuestros archivos de forma relativamente sencilla. Para estar seguros y evitar esta posibilidad caben dos opciones:

  1. Deshabilitar la compartición de archivos entre el Mac y la máquina virtual.
  2. Compartir los archivos en sólo lectura. Esto es recomendable como norma general para evitar errores de esos que tienen mal arreglo.

Todo esto podemos configurarlo desde las propiedades de la máquina virtual en cuestión. Creo que eso es todo, si algo no ha quedado bien explicado lo resolvemos en los comentarios.

Aprovecho la ocasión para recordaros que podéis plantear dudas sobre cualquier tema para ser resueltas en nuestro Consultorio Nosololinux. Al fin y al cabo, este blog se creó para eso (y vaya si ha degenerado… :-P).

Microsoft se droga

Si hay dos temas estrella en la blogosfera en este 2007 que comienza, esos son el iPhone y Windows Vista. Como sobre el primero ya hemos hablado, vamos a por el segundo.

Que Windows Vista va a ser un fiasco sólo comparable al de Windows ME en su momento es algo que incluso deben saber en Microsoft. Creo, de todos modos, que los de Redmond no han hecho un mal trabajo, más bien diría que han hecho un trabajo que no hacía falta.

No he instalado ni probado Vista, y mi opinión profesional es que hay que haberse bebido muchos chupitos para decidir embarcarse en una aventura semejante: hay mucho que perder y poco que ganar. Básicamente, por la documentación que he leído, los grandes cambios que introduce Vista se enmarcan en la ampliación de las funciones del núcleo y su reestructuración, así como la sustitución de la capa gráfica, ambas reformas se hacían imprescindibles para suplir los defectos de Windows en seguridad y usabilidad.

He visto bastantes capturas de pantalla y me parece sinceramente que no hay nada que pueda calificarse como revolucionario. Las ventanas siguen estando llenas de botones y opciones complicadas que sólo dificultan el uso. Por otro lado, los cuadros de opciones siguen siendo igual de ortopédicos que en otro tiempo… sobreviven las ventanas llenas de fichas y de botones, persisten los Aceptar, Aplicar y Cancelar que superó MacOS hace mucho tiempo ya… desde mi punto de vista (ejem) esto son defectos imperdonables. Creo que Windows Vista conservará ese manejo oscuro y poco intuitivo que va camino de consagrar como hereditario.

En este contexto, Vista sólo puede ofrecer, básicamente, que es más seguro y bonito que su predecesor, claro que ser más seguro y más bonito que algo como Windows XP no tiene mucho mérito. No sé si será más seguro o no porque como digo no he podido probarlo (ni ganas que tengo), lo que sí puedo decir es que en mi opinión no es nada bonito. Ohhh siento el jarro de agua fría, chicos, pero me quedo con mi MacOS de ventanas metalizadas antes que con el Windows de ventanas de colores.

No sé, comparemos el Explorer (el administrador de archivos de Windows)…

windows_vista_explorer.png

…con el Finder (el equivalente en MacOS X Tiger):

finder.png

Esto nos da una idea bastante realista de a filosofía de uso de Windows y MacOS a fecha de hoy. Hay otras prestaciones que han añadido, como los «gadgets» (copia barata de los «widgets» de MacOS), la búsqueda rápida (copia barata del «Spotlight» de MacOS) y alguna cosilla más que ya existía y que ahora presentan como novedad absoluta.

En fin, supongo que con esto Microsoft se coloca a la altura de Apple en cuanto a prestaciones. Qué pena que falte un mes para que Apple presente su nuevo sistema operativo, el Leopard, que incluirá las nuevas características que implementará Microsoft en Windows Vienna (previsto originalmente, por cierto, para febrero del año 2000. Y no, no es coña.)

Creo que deberíamos llamarlo «Windows Hiena»…

Me vuelvo a Windows

Atención: Este artículo fue publicado el 28 de diciembre, fecha en cual en España es costumbre gastarse bromas entre amigos o conocidos. Este artículo es una de esas bromas.

Pues lo del Mac no era para tanto… hoy me cansé definitivamente de MacOS y de Linux y lo he mandado todo lejos de mí para volver a la informática de verdad, la de PC con Windows, y esta vez quiero hacerlo bien.

Así que he vendido el Mac, pues se trata de tecnología demasiado alternativa para mí… un portátil no debería tener un aspecto estilizado bajo ninguna circunstancia, así que creo que me compraré un equipo negro, grande y aparatoso, que demuestre al mundo su superioridad tecnológica mediante su diseño poco cuidado. Eso de las cosas bonitas es para los que no controlan.

La productividad manda. Así que he recuperado mi viejo AMD K7 y le he instalado lo último en tecnología. Me refiero a Windows XP Home, por el que he pagado 150€ de licencia (bien a gusto, porque la calidad del producto lo vale de sobra)… He tenido algún problemilla al instalarlo, pero después de un par de días configurándolo todo tengo por fin un entorno de trabajo altamente productivo.

Claro que Windows (supongo que en su afán de reducir al máximo el espacio que ocupa instalado), no trae ningún programa medianamente usable, así que he comprado el Office XP, el Visual Studio, el Photoshop, el Corel y esas cosillas que he ido necesitando. Casi me quedo pobre, pero ante todo legalidad: protejamos a la humilde industria del software.

Lo cierto es que ya no me acordaba de lo bien que funciona Windows. Eso del botón inicio es un invento interesantísimo, aunque a veces me tarda un buen rato en abrir el menú… Me encanta ese diseño sobrio, esas ventanas grandes, vistosas y azules (una vez que superas la epilepsia están bien). Esos iconos de baja resolución que se pixelan enteros. Jo, que pasada, no sé cómo pude alejarme del verdadero camino.

Además, tiene grandes ventajas sobre otros sistemas como Linux, y es que cuando cargas mucho el equipo, se va todo a la mierda y si tienes suerte ves una pantallita azul super churrada. Así consiguen quitarte las costumbres más feas, como abrir varios programas a la vez o utilizar el ratón demasiado deprisa. Llega un momento en el que usuario y PC trabajan en sincronía, con una complicidad maravillosa basada en el miedo.

Respecto a Internet, he decidido usar sólo Internet Explorer, y la experiencia es muy buena. Muchas páginas funcionan mal, y los diseñadores se quejan de que no cumple nosequé estándares, pero yo creo que eso lo dicen porque no tienen ni idea. De hecho, me estoy currando un sitio con el FrontPage y está quedando de vicio… también me han entrado un par de troyanos, pero supongo que son gajes del oficio.

Qué quieren que les diga, ya estaba harto del Mac y de su informática para imbéciles. Ahora he vuelto a la de verdad, he recuperado la aventura de buscar la opción adecuada en el panel de control, o de encontrar un fichero en el disco duro… aunque lo mejor es la instalación de los programas: El MacOS ha perdido la esencia, con ese absurdo sistema de arrastrar el programa a la carpeta de aplicaciones y arrastrarlo a la papelera cuando quieres desinstalarlo. Es mejor un buen asistente de esos que fallan siempre, o programas que permiten ponerlos pero no quitarlos… cada día es una interesante aventura, una apasionante lucha entre humano y máquina.

Y sí, ya sé que hay virus y esas cosas, pero me he puesto el Panda, que en la caja poner que me protegerá contra todo. Hasta acaba de impedir que se me derrame el café sobre el teclado, se lo juro.

inocente.gif

La dura vida de los procesos

Ya adelanté hace mucho tiempo que la vida de los programas no es nada agradable a pesar de las apariencias, y de hecho puede llegar a ser bastante surrealista. Hoy aprenderemos a solidarizarnos con estas pobres criaturas. Para seguir leyendo interesa que recuerde qué es un proceso: básicamente, es la forma en que nos referiemos un programa que esté ejecutándose en el sistema. Las diferencias son sutiles pero importantes.

Y por favor, sea prudente: esta entrada puede herir su sensibilidad… ;-)

Dando a luz

¿Cómo empieza la vida de un proceso? Pues como la de (casi) todo el mundo: con un parto. En efecto, los procesos nacen de otros procesos. No me estoy riendo de ustedes, es la pura verdad: muchos programas crean subprocesos para que éstos se encarguen de ciertas tareas auxiliares y aprovechar la famosa simultaneidad. Se trata de una forma de entender la vida bastante interesada: tengo hijos para que me ayuden en el trabajo que no quiero o no puedo realizar…

cloned_homers.jpgA su vez, estos hijos tendrán su descendencia, y de esta manera los procesos formarán una bonita familia feliz en memoria. Toda estirpe tiene un origen, y es lógico pensar que tendrá que existir un proceso «patriarca» que engendre al resto. Cuando el sistema arranca, se crea un proceso 0, cuya función es engendrar al proceso 1, que recibe el nombre de “Init?. Este proceso, el padre de todos, se encarga de iniciar el sistema correctamente, teniendo hijos que asumirán las diferentes funciones del sistema y tendrán más hijos. A partir de este momento, todos los programas que se ejecuten serán, de alguna manera, descendientes de Init, que permanecerá siempre en el sistema, como el capitán de un barco.

Hay que hacer una precisión. Técnicamente los procesos no tienen hijos. No. Los procesos se clonan a sí mismos (esto empieza a ser surrealista). Es decir, Init crea un clon de sí mismo y le manda atender una función del sistema. Aunque son iguales en su origen, quedan completamente diferenciados y el Init original conserva cierto poder sobre la copia, con lo que podemos considerar que es su padre. Para que quede claro, es igual que el capítulo de Los Simpsons en que Homer crea clones de sí mismo a los que manda a hacer el trabajo sucio.

Una vida peligrosa

Después de este parto accidentado, la vida del proceso transcurrirá con mayor o menor interés, desempeñando la función que su padre le encomendó. En todo ese tiempo, puede ser expulsado momentáneamente de la ejecución, puede quedarse dormido en espera de algún evento que le despierte nuevamente… tendrá, en general, una existencia aparentemente relajada.

Y digo aparentemente porque en todo este tiempo, una enorme cantidad de peligros amenazan su existencia… un proceso puede morir por muchos motivos:

  • Puede ser por muerte natural, en la que llega al final de su tarea asignada. Como no tiene nada más que hacer, se muere.
  • También puede suicidarse si encuentra una anomalía que no sabe resolver por sí mismo.
  • Puede ser matado por otro proceso, siempre que el proceso asesino tenga “licencia para matar?, que se traduce en que sea su padre o un proceso del administrador.
  • Puede ser matado por el sistema operativo, por varios motivos: intentó realizar una operación no admitida, cometió un error, no tenía memoria suficiente, acaparaba un determinado recurso… cualquier momento es bueno para morir.

El mecanismo por el que un proceso elimina a otro es muy interesante. Si un proceso padre quiere matar a su hijo (cosa muy común por otro lado), le pide primero que se muera por las buenas, porque puede que el hijo quiera hacer algo antes de morirse.

El bondadoso padre le dice “mira, te voy a matar, así que haz lo que tengas que hacer y haz el favor de morirte?. Eso equivale a enviarle una señal, llamada SIGTERM, que quiere decir “termina?. Si el hijo sigue en ejecución pasado un tiempo, el padre cumplirá sus amenazas y le matará, enviándole la señal SIGKILL (unos cachondos mentales, los del Unix…)

El hijo zombie

El objetivo final de la vida de un proceso hijo es informar a su padre de que terminó su trabajo con éxito, y lo es tanto que un proceso no morirá hasta haber informado de que lo hizo. En principio no hay problema, pero ¿qué pasa si un proceso padre muere y el hijo continúa funcionando? Cuando el hijo termine sus tareas, no podrá informar a su padre de que ha hecho los deberes, y como un chico obediente esperará a su padre (que no va a volver jamás, qué dura es esta vida…).

En este caso, el proceso huérfano sigue vivo pero no tiene nada que hacer, así que decimos que el proceso está Zombie. La cosa se pone macabra. ¿Quién se hace cargo de esta pobre criatura? Pues el proceso Init hace de padre adoptivo, recoge lo que el hijo tenía que decir, lo desecha (porque realmente no le vale para nada) y acto seguido exorciza al zombie vía SIGKILL y lo manda al descanso eterno.

Divertido ¿eh?

Referencia cruzada

Una referencia cruzada es una forma de presentar los resultados cuando consultamos varias tablas de una base de datos. Pero no quiero hablar sobre ésto sino sobre el post de Misslucifer:

Windows monarca de España, Borbón sistema operativo

Que me ha impresionado muchísimo por el curiosísimo paralelismo que explica, y que fue introducido en los comentarios de Un poco de Windows, artículo publicado en esta casa en el día de ayer.

Espero que lo disfruten, yo me lo he pasado en grande leyéndolo :-)

El bug de los conguitos

El título ya es impactante… ¿Qué es un «bug»? Pues es un fallo más o menos importante que se cuela en un programa (ya ven, los informáticos somos así de inútiles…). Cuando una aplicación hace cosas raras (falla, termina repentinamente o se bloquea) suele ser debido a los bugs. Aunque la mayoría no supone un problema grave, otras veces son causa de vulnerabilidades que pueden ser explotadas para perjudicar a un usuario.

Por ejemplo, en los antiguos servidores de páginas web (por antiguos digo de hace unos cuatro o cinco años…) cuando se pasaban muchos datos a una web dinámica el ordenador en que estuviera alojada fallaba (los más expertos sabrán que estoy hablando del famoso atauque por desbordamiento de búfer, o buffer overflow). Ésta vulnerabilidad permitía, por ejemplo, ejecutar código remotamente en un servidor público, con los problemas de seguridad que produjo en su momento.

La palabra «bug» viene del inglés «insecto», y se usa en éste contexto porque en los primeros ordenadores, aquellos vetustos gigantes, los fallos eran causados no por mala programación sino por insectos que se introducían en las válvulas y en los componentes electromecánicos y provocaban que funcionaran mal… las cosas que aprende uno… Por cierto, que en la última entrega sobre Cracking usamos un debugger, ¿se acuerda? Éste tipo de programas nos ayuda a eliminar éstos incómodos bichitos de nuestras aplicaciones :-)

conguitos.jpgPero quiero presentarles un bug muy divertido e interesante, que puede utilizarse para colgar cualquier sistema Windows 9x (las versiones 95, 98 y Me) y que impide hacer ciertas cosas en los sistemas Windows NT (la gama 2000 y el XP). Supongo que apenas nadie usa Windows 98 ya, pero si algún día tienen la oportunidad, tecleen en el explorador de Windows la ruta «C:\con\con». El sistema mostrará una pantalla azul y morderá el polvo miserablemente. Si se pierde con tanta versión y tanto Windows, puede leer éste artículo publicado ayer.

Éste error podía ser explotado con un fichero html que intentara abrir esa carpeta. De hecho hubo quien lo creo, y lo puso como página de inicio en Internet Explorer, en dos o tres equipos de un ciber. Cada vez que alguien arrancaba el navegador, el equipo se colgaba. Fantástico, ¿eh?

Si usa Windows XP, en principio está a salvo… pero éste bug dejó sus secuelas, no crea… Vaya a cualquier carpeta de su disco. Ahora intente crear un archivo o una carpeta con el nombre «con». ¿Lo consigue? No sólo pasa con «con», también puede probar con «lpt1». No parece muy posible.

Éstos son problemas clásicos de Windows que han sido explotados amplia y vilmente. ¿A qué se debe? El antiguo MS-DOS, y por tanto los primeros Windows, usan nombres internamente para identificar los dispositivos, salvando las distancias, son como los «dev» de Linux. Por ejemplo el «con» denota la consola, el «lpt1» el puerto paralelo… Cuando se teclea c:\con\con, el sistema trata de buscar un archivo «con» utilizando la consola… simplificando una historia complicada (y además de verdad), se forma un enorme lío porque nada tiene sentido para Windows y entonces aparece la pantalla azul diciendo que nos va a poner dos velas negras…

Los Windows 9x estaban construidos sobre el MS-DOS, razón por la cual el fallo se hizo presente en éstas versiones. Hay un montón de nombres que, al igual que «con», provocan fallos en éstos sistemas, de modo que cuando se construyó Windows NT se corrigió. Los Windows de ésta familia (2000, XP…) no están diseñados sobre el DOS, pero sí que es necesario guardar la compatibilidad hacia atrás. Quien escribe ésto supone que para evitarse problemas decidieron «cortar por lo sano» y no permitir crear éstos ficheros con nombres especiales, ya que si ejecutáramos un programa en modo compatibilidad con Windows 95, podría fallar al confundir el teclado con una carpeta. También, podríamos crear un archivo con ese nombre reservado, que provocaría fallos al abrirlo con el MS-DOS o al portarlo a Windows anteriores… (Por cierto, ¿y si lo creamos con Linux y lo intentamos abrir?)

Lo más grave de éste fallo, conocido popularme como «el bug de los conguitos» es que cuando se descubrió, podría ejecutarse sobre algunos servidores basados en Windows y desactualizados (en realidad la mayoría de servidores usan Unix, así que eran muy pocos). Uno tecleaba por ejemplo «www.peich.com/con/con» ¡y el servidor caía! Imaginen los ratos de irrepetible diversión a los mandos del invento :-P

Hay infinidad de bugs: unos se conocen y se arreglan con facilidad. Otros, como éste problema con el «con» y los dispositivos perduran a través de los siglos como muestra de lo que sucede cuando se es medianamente chapucero o hay prisa por entregar el sistema… Otros no llegan a ésta categoría y son simples fallos de diseño, cosas que los programadores no pudieron prever y que se manifiestan en forma de problemas en ciertos contextos… Y ésto me recuerda un fallo muy antiguo sin solucionar de Internet Explorer que veremos más adelante, con el que van ustedes a hacerse algunas preguntas…

Un poco de Windows ;-)

Les voy a contar una historia que explica muchas cosas. Hace un montón de años (en 1981), una empresa llamada Microsoft desarrolló su primer sistema operativo: el MS-DOS, que fue encargado por IBM para usarse en sus ordenadores personales. Después de unos años y ciertas tretas sucias por parte de Microsoft (ya apuntaban maneras, los muchachos), ésta compañía se convertía en el centro de atención al lanzar el Windows 3.1 (antes hubo otros Windows, pero eran verdaderamente lamentables). Era sólo un entorno gráfico para el MS-DOS, como una máscara bonita para utilizarlo sin volverse loco. Por cierto, que se parecía tanto a los sistemas que incorporaban entonces los ordenadores de Apple, que éstos interpusieron una demanda a Microsoft que fue desestimada.

Yo llegué a utilizar Windows 1.0 porque en mi colegio había un equipo viejo con el invento, y tenía ésta pinta:

windows1.jpg

Años más tarde la empresa de Bill Gates lanzaba Windows 95. En la presentación se colgaba. Para mí ese momento es el símbolo de una década y de una forma de entender la informática que comienza a resquebrajarse. A Windows 95 (ya con 32 bits) lo comercializaron como Sistema Operativo, pero en realidad se sigue considerando un entorno gráfico (recuerden cómo se cargaba primero el MS-DOS y después Windows). Windows 98 fue un lavado de cara, aunque mejoró la estabilidad. Por cierto, no sé si saben que todos los Windows 95 y 98 se cuelgan irremediablemente a los 50 días de estar activos :-PSigamos. Windows Milennium Edition (Me) fue más de lo mismo. En realidad, había que llenar el hueco entre el 98 y el XP, y se inventaron éste. Aunque añadía funciones básicas como iconos más bonitos de 32 x 32 píxeles, lo cual siempre está bien. Los sistemas personales no evolucionaban gran cosa, y la informática personal Windows estaba en declive…

Pero desde 1993, Microsoft se encontraba desarrollando el Windows NT, dirigido a las empresas. Windows NT era un sistema construido desde cero, que era verdaderamente estable. Tan estable y tan bueno que su rendimiento era bajísimo, por lo que tuvieron que quitar algunas características y hacer que fuera un poco más malo aunque más rápido… qué cosas…

De Windows NT saldría el Windows 2000, más o menos al tiempo que el Me. El Windows 2000 funciona de maravilla, por cierto. De ésta familia, salió el Windows XP y saldrá el Windows Vista si los astros lo permiten.

Así que, resumiendo, hay dos familias de Windows: una, la llamada W9X (Windows 95, 98 y Me), formada por los sistemas de orientación más doméstica, que realmente nunca han sido considerados como Sistemas Operativos en el pleno sentido del término. La otra es llamada WNT (Windows NT, 2000 y XP), que surgió de la vertiente empresarial y técnica, y que es la rama más estable. Éstas ramas se unen en Windows XP, aunque empezaron a acercarse con el Me.

¿Y por qué les he contado todo ésto? Simplemente porque lo van a necesitar para entender bien el siguiente artículo :-)

Imagen | Wikipedia

¿Por qué se cuelgan los ordenadores? (y II)

Hace un par de días comentaba qué eso de que los ordenadores se bloqueen y cuáles son las principales causas de los cuelgues. En concreto, explicaba:

[…] los motivos tenemos que buscarlos en un montón de factores. Pero como todo en la informática, vamos a dividirlos en dos partes: hardware (el cuerpo del ordenador) y software (el alma del ordenador).

En la primera entrega nos referimos a las causas lógicas, esto es, al software, y como lo prometido es deuda, aquí va la segunda y última parte de ésta -por lo menos para mí- interesante entrada.

El hardware

Cuando falla un componente software, como el sistema operativo o un programa, el ordenador se ralentiza o nos presenta algún error, pero el equipo sigue activo y si tenemos un poco de pericia tal vez seamos capaces de salvar los muebles.

Aunque en ocasiones el ordenador se «bloquea» completamente: no responde el teclado, el ratón ni nada… y no muestra mensajes de error. Es como si se hubiera muerto súbitamente y no queda más remedio que apagarlo manualmente (seguro que ésto también le ha sucedido… :-P)

Las causas de este tipo de problemas solemos encontrarlas en el hardware: cuando el ordenador queda «muerto», suele deberse a que el microprocesador (el «cerebro» del ordenador) ha dejado de funcionar. ¿Por qué? Normalmente se debe a un problema de refrigeración: el ventilador se ha desconectado, está sucio, o no rinde lo suficiente. También puede ser que hemos forzado el micro más de lo normal (haciendo operaciones matemáticas o ejecutando muchos procesos) y se ha recalentado hasta dejar de funcionar…

Los procesadores trabajan a temperaturas altísimas. Si no se lo creen, pueden comprobarlo intentando freir un huevo sobre él en poco más de 10 minutos. En esta web explican cómo hacerlo paso a paso, aunque probablemente no se atreva… ¿Se imagina ir al servicio técnico con el ordenador manchado de huevo frito?

Cambiando de tercio, muchas veces el procesador deja de responder porque no le llega suficiente tensión. Los microprocesadores incorporan mecanismos que los deshabilitan si la corriente eléctrica no sobrepasa un determinado voltaje para que no provoquen un funcionamiento no deseado… ahora bien, ¿por qué podría suceder ésto? Tenga en cuenta que todo lo que conecte a su PC debe ser alimentado: no puede pretender conectar la cámara fotográfica, dos discos duros, tres lectores/grabadores de DVD, un montón de tarjetas (la inalámbrica, una de red convencional, la gráfica, la de sonido, las extensoras de puertos), el pen-drive, el MP3 del amigo… más el teclado, el ratón… sencillamente, ¡su ordenador no puede con todo! Si necesita conectar una legión de dispositivos, lo mejor será que piense en instalar una fuente de alimentación más potente que la que pueda tener…

Por último, los cuelgues pueden deberse a picos de tensión y otros fallos de alimentación. Éstos le serán muy difíciles de corregir, en la mayor parte de las ocasiones dependerán de la zona en la que viva… por ejemplo, en las proximidades de cables de alta tensión los dispositivos electrónicos se entienden francamente mal… también puede tener problemas si sufre frecuentes apagones o caidas de tensión. Como posible solución puede instalar un estabilizador o un SAI.

Los estabilizadores son aparatos compuestos de filtros y reguladores que consiguen mantener una alimentación estable (las subidas de tensión pueden dañar seriamente los equipos electrónicos). Yo tengo uno al que conecto el ordenador y me quedo muy tranquilo… Los SAI son más caros, pero ofrecen las ventajas de un estabilizador más una batería por si hay una bajada de tensión o un apagón… la mayoría de las empresas los utilizan.

Causas combinadas

Y para terminar, nos quedan por analizar las inestabilidades producidas por los controladores de los dispositivos. Los controladores o «drivers», son esos programas que tenemos que instalar para poder utilizar la impresora o el escáner: contienen instrucciones que permiten que el ordenador «sepa» como manejarlos. Son aplicaciones muy especiales, y como dependen mucho del hardware, no he querido englobarlos en ninguna de las secciones anteriores.

Éstos programas tienen prioridades muy altas (ver el post sobre el reparto de CPU) y por tanto, sus fallos suelen afectar mucho al ordenador: por ejemplo, un problema con su tarjeta gráfica puede provocar frecuentes pantallazos azules… y si no, que se lo pregunten a Dante ;-)

Hasta aquí este especial dedicado al apasionante mundo de los cuelgues… espero que les sirva para entender mejor a esa pobre e inocente máquina que llamamos ordenador.

¿Por qué se cuelgan los ordenadores? (I)

Si se ha preguntado alguna cuál es el origen del extraño nombre de este blog, Segmentation Fault, hoy está de enhorabuena (tal vez no…): lea este post entero y lo entenderá todo… Antes de nada quiero decir que no soy muy partidario de dividir las entradas, pero en esta ocasión no veo otra posibilidad… Sxim me dejó éste nuevo post en bandeja, cuando a raíz del post sobre el reparto de CPU, preguntaba:

¿Qué decimos técnicamente cuando decimos que «un programa / el ordenador se ha trabado»?

Seguro que al menos una vez se le ha colgado el ordenador. Y casi seguro que habrán sido más de una (y más de dos… :-P) Pero voy a empezar con una mala noticia… por desgracia, los cuelgues son algo propio e inseparable de la informática. Ayer existieron, existen hoy, y con toda probabilidad, seguirán existiendo mañana.

¿A qué nos referimos cuando decimos que el ordenador «se cuelga»? Hay muchas formas en que un equipo puede dejar de responder: puede ser que los programas fallen en cadena. También puede ser que el Sistema Operativo deje de funcionar por algún motivo. Puede ocurrir que sencillamente el equipo deje de responder y haya que reiniciarlo… cualquier cosa.

¿Y qué produce un cuelgue? Bien, no podemos señalar a nada ni nadie como causante de la catástrofe: los motivos tenemos que buscarlos en un montón de factores. Pero como todo en la informática, vamos a dividirlos en dos partes: hardware (el cuerpo del ordenador) y software (el alma del ordenador). Hoy vamos a empezar con éste último:

El software

Tenemos que ver al ordenador como una máquina muy compleja, con un montón de cables y circuitos complicadísimos. Para regir todo esto, necesitamos al Sistema Operativo (SO). Bien, los SO son programas gigantescos y muy enrevesados, así que podemos considerar normal que se equivoquen al gestionar esa enorme complejidad electrónica. Los SO tienen que tener lo que llamamos mecanismos de protección del sistema, que impiden que los programas se influyan unos sobre otros (de forma no deseada, se entiende).

Los programas guardan muchos datos que necesitan para funcionar, y mantienen éstos datos en memoria (podemos verlo como una consigna de un supermercado o de un aeropuerto), y para acordarse se quedan con la llave, en la que viene el número de taquilla en que dejaron una información. Por ejemplo: «el nombre del usuario está en el armarito número 9». Cuando el programa quiere recordar cómo se llamaba el usuario (para saludarle), toma la llave de la consigna 9 y la abre. A éstas llaves se les suele denominar punteros en informática.

Hemos dicho que debemos evitar que los programas se molesten unos a otros, y para ello, es necesario que mantengan separados sus armaritos y que no confundan sus llaves (a nadie le gustaría que le robaran la mochila en el híper, por ejemplo…). Bien, pues tenemos nuestro programita con sus datos identificados señalados en un enorme manojo de llaves. Ahora imagine que otro programa abre por error una taquilla y modifica el contenido, o que nuestra aplicación pierde una llave, o el número de la llave se altera… cualquier catásfrofe que se le ocurra. En la cruda realidad, éstos desarreglos significan generalmente errores críticos de ejecucion: el programa esperaba encontrarse otra cosa en su taquilla, y simplemente, falla.

¿Por qué se colgaban más los sistemas Windows? La explicación es que los Windows antiguos (95, 98…) no sabían hacer frente a un programa que trataba de abrir otra taquilla. Sencillamente se lo permitían, como si no fuera su problema… pero sí lo era. Los procesos empezaban entonces a fallar en cadena, por lo que tarde o temprano ocurrían dos cosas: o bien los armarios del SO eran alterados (pantalla azul), o bien el ordenador se quedaba sin recursos para atender las excepciones devueltas por los programas (bloqueo del sistema). Lo estoy contando a muy grandes rasgos, la realidad es generalmente mucho más complicada y menos novelesca…

Sin embargo, a partir de los Windows serios (NT, 2000, XP…) ésto se solucionó. De hecho, si usó W98 y ahora usa WXP, verá que el segundo es mucho más estable que el primero. En el caso de los Unix y los Linux, cuando un programa intenta acceder a una taquilla ajena, es fulminado inmediatamente y se produce un error. Unix tiene unas bases muy modulares, y por norma general, un fallo local no suele afectar al resto del sistema. Así, cuando un programa ejecuta una operación no válida, se produce un error denominado (agárrese) Segmentation Fault. En español, viene a ser «violación de segmento», que quiere decir que un proceso ha intentado acceder a memoria fuera de la que tiene reservada (fuera de su segmento, para entendernos…)

Sin embargo, es injusto decir que los errores o los cuelgues se produzcan exclusivamente a causa del software. Muchas veces, la culpa la tienen los dispositivos físicos: procesadores que no funcionan, fuentes de alimentación que no dan más de sí… todas estas cosas las vamos a analizar en la siguiente entrega. ¡Hasta entonces!

Actualización: Ya puedes leer la segunda parte del post.

El reparto de procesador

Cuando escribí el post sobre la secuencialidad, nunca pensé que terminaría escribiendo ésto. Sin embargo, creo que es una muestra más del enorme nivel de mis idolatrados lectores… en concreto, Ñita preguntaba:

Aun así, yo tengo una pregunta sobre ésto: ¿Cómo decide el procesador qué instrucción tiene que atender en cada momento, para que todos los programas que se están ejecutando tengan «su oportunidad de progresar en la vida»? xD
Es decir, ¿va rotando entre los programas que tiene abiertos..?

Nuestra lectora no va nada desencaminada, pero hay que aclarar que el procesador no decide nada: toda la responsabilidad para gestionar la multitarea recae sobre el sistema operativo (SO), quien asigna a los programas el tiempo de procesado con arreglo a unos parámetros.

Para entender ésto, tenemos que ver al procesador como un recurso: un bien limitado que todos los programas quieren utilizar y que sólo el sistema operativo gestiona, decidiendo qué programa se ejecutará y cuál no. Es como el director de orquesta.

Hasta hace unos años, los sistemas seguían un enfoque de «reparto no apropiativo», que consistía en que los programas utilizaban el procesador hasta que terminaban lo que hacían, o lo cedían voluntariamente a los demás. Sin embargo, este enfoque está basado en que la gente es buena, y por lo tanto no resultaba muy fiable… El enfoque de los sistemas operativos modernos se llama «reparto apropiativo», porque los programas no se quedan con el procesador por mucho que quieran, es el SO quien se encarga de arbitrar su uso. O sea, que es el SO quien se «apropia» del procesador cuando los procesos se ponen pesados… Ya sé que la intuición nos lleva a pensar que los nombres están al revés, pero se lo aseguro: están bien así.

De acuerdo con ésto, en la actualidad los programadores (me voy a incluir…) diseñamos las aplicaciones como si fuesen a ejecutarse ellas sólas en la máquina, aun sabiendo que no es cierto. Luego, será el sistema operativo quien de forma transparente, se encarga de pasar el turno a los programas.

Antes de seguir, cabe señalar que los programas cargados en el ordenador suelen denominarse procesos. Aquí lo vamos a usar como sinónimo de programa, aunque no sea muy correcto. También, muchas veces utilizamos CPU (Central Processing Unit, Unidad Central de Procesamiento) en vez de procesador.

Aquí un tema muy interesante del que se habrán dado cuenta los lectores más despiertos… Un sistema operativo no es más que un programa, así que… ¿qué pasa si un programa no «suelta» el procesador? Y es que para que el sistema pueda quitar de la ejecución a un programa, antes necesita ejecutarse él… ¿cómo lo logra? Digamos que el sistema operativo deja una «bomba de relojería» (una interrupción, que se llama) en el procesador. Cuando la bomba explota, el ordenador salta a ejecutar el código del planificador del sistema operativo, que se encarga de guardar los datos con los que estaba trabajando el programa y de seleccionar el siguiente «afortunado».

Visto de otra forma, es como si el sistema operativo permitiera a los programas usar su baño, y que la puerta del baño sólo puede abrirse desde dentro. Para asegurarse que nadie se queda a vivir, pondría un mecanismo en la puerta para que, transcurrido un tiempo, se abriera…

Una vez que el SO ha expulsado al programa que estaba ejecutando su código, hemos dicho que se pone a los mandos de la nave, y decide qué programa será el siguiente (normalmente habrá varios esperando). Esta decisión no es nada sencilla, y hay varias técnicas para decidir a quien se le deja el procesador… ahí van algunos, muy brevemente:

  • FCFS (First come, first served). Se ejecuta primero el que lleve más tiempo esperando.
  • RR (Round Robin). Consiste en un turno rotatorio. Se pone un tiempo máximo y se retira a los programas que lo exceden. Es el algoritmo que usa Windows…
  • SPN (Shortest Process Next). Se ejecuta primero el programa que se estima que va a durar menos… es como cuando te dejan pasar en la tienda porque sólo vas a llevar un pan.
  • SRT (Shortest Remaining Time). Ejecuta un programa que llegue a la «cola» si el tiempo que va a tardar es menor que lo que le queda al que está ejecutándose.
  • HRRN (Highest Response Ratio Next). Es algo más complicado, tiene en cuenta el tiempo que lleva esperando el programa y lo que estima que va a tardar para ser más justo.
  • Por Realimentación (no hay siglas :-P). Es también muy complicado, así que no lo voy a intentar explicar. Basta decir que es que usan los Unix (y por tanto, la mayoría de los Linux) y que funciona a las mil maravillas.

Hay algunos más, pero son realmente complicados. Aparte de lo dicho, los sistemas operativos suelen dejar que se asignen prioridades a los procesos (luego haremos un experimento con ésto) y otras técnicas.

El problema es que se nos puede ocurrir un algoritmo fantástico y muy justo, pero si es muy complicado gastaremos más recursos en calcular qué programa es el siguiente que en la ejecución de los procesos propiamente dicha… así que hay que encontrar un equilibrio entre complejidad y efectividad.

Bien, ¿Hacemos una prueba? Botón derecho sobre la barra de herramientas, así:

Ahora nos vamos a ir a la ficha «Procesos». Cuántas cosas… Menú «Ver – Seleccionar columnas…». Ahora marque éstas opciones:

Bien, ahora tiene ante usted una lista como la que se muestra debajo, donde tiene el nombre del programa que se está ejecutando, el tiempo que ha durado la ejecución de su código hasta el momento (vea qué poco necesitan en general). El otro parámetro cuantifica el uso de CPU, y el último nos dice qué prioridad tiene asignada el proceso.

Según esos valores los procesos de su equipo irán recibiendo más o menos CPU ¿No se lo cree? Cambie la prioridad de algún programa… Windows le dirá que se ande con cuidado, que la puede usted liar… no crea, no es para tanto, aunque por si acaso, guarde lo que esté haciendo…

Y ahora póngase a cambiar las prioridades de todo, súbasela a los programas que quiere que acaben antes. Después, intente dejarlo todo más o menos como estaba, o simplemente reinicie el sistema… esas cosas se le siguen atragantando al amigo… :-)

Si ha llegado hasta aquí, un premio: los programas que sirven para controlar a los dispositivos, como el ratón, tienen prioridades muy altas… ¿Se ha fijado que a veces en Windows no funciona nada y sin embargo puede seguir moviendo el ratón? Bien, es por ese motivo. Así que cuando piense que su ordenador va a bloquearse, en vez de teclear y mover el ratón compulsivamente, aleje sus manos y espere. En la mayoría de los casos se arreglará, pero lo último que necesita su equipo es que lo cargue más…