Tranquilos, tengo un plan

Microsoft ha publicado hoy que el 46% de los programas que se utilizan en los ordenadores españoles son piratas. Sin duda debe ser porque han mirado en todos y conocen el dato. Aunque bueno, igual sí que han mirado en todos, sabiendo lo que cuidan la confidencialidad de sus usuarios… muajaja.

Total que nos anuncian un plan contra la piratería, que consistirá en ofrecer a los piratas una licencia a cambio de la factura del equipo que vino con el Windows ilegal. Así que algunas empresas estarán temblando ante la que se les viene encima…

Bueno, como no quiero quedarme atrás, yo también he elaborado mi propio plan contra la piratería, para que vean que echo una mano y tal. El plan consiste en lo siguiente:

Plan Nosololinux contra la piratería

1. Instalar Linux.

Para facilitar su difusión puede descargarse una versión en PDF (16 KB) de tan importante documento.

La efectividad de dicho plan está contrastada por millones de usuarios y cada vez más empresas.

La foto de los antepasados

Buscando y buscando apareció entre las fotos de la familia aquella que había olvidado donde aparecen juntas cuatro generaciones de la familia a la que todavía siento que pertenezco.

abuelo.jpg

Qué recuerdos… aunque Mac me mantenga alejado de ellos sé que terminaré volviendo…

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?

La prueba definitiva

Hoy les voy a dejar con una reflexión sencilla pero soprendente, en forma de expresión matemática. Seguro que han oído hablar de la famosa relación calidad – precio, que viene a expresar la conveniencia de adquirir o no un producto.

Simplificando en extremo, entre dos productos de misma calidad, elegiremos el de menor precio, y entre dos del mismo precio, el de mayor calidad. De modo que cuanto mayor sea esta relación, se supone que mejor va a ser el producto. En cualquier caso, la famosa relación puede expresarse así:

cp.jpg

Y ahora agárrese a la silla. Vamos a pensar en Linux: su calidad puede ser cuestionable, pero es gratuito, así que su precio es cero. De modo que tendremos:

infinito0.jpg

Como bien sabrán nuestros técnicos y matemáticos, cualquier cosa entre 0, en términos de análisis, puede considerarse infinito:

inf.jpg

Tal vez a alguien le sorprenda ésto, sabiendo que no se puede dividir entre 0. Sin embargo, es completamente cierto. Si quiere, haga la prueba con la calculadora: divida algo, por ejemplo 1.000 entre algo muy pequeño, por ejemplo 0,000000000000001. Ahora añada algún cero decimal al divisor y compruébelo: cuanto más se aproxima a cero el divisor más se acerca a infinito el resultado (ya me perdonarán los matemáticos por la explicación, pero es lo mejor que se me ocurre para ser accesible a todos)

El caso es que ésto demuestra matemáticamente que es mejor usar Linux, ya que la relación calidad – precio de Windows, por muy buena que sea, siempre será un número finito… lo cual no representa nada frente a la relación infinita de su competencia :-)

¡Chúpate esa Bill!