Cracking (I): El poder del lado oscuro

Le propongo que nos embarquemos en una interesante aventura durante el fin de semana. Hoy presento una serie de tres artículos sobre el apasionante mundo del cracking (si no sabe qué es, vamos a explicarlo inmediatamente). En esta primera entrega vamos a hacer una pequeña introducción y a aprender algún concepto básico. En la segunda, veremos a través de un ejemplo que los programas pueden modificarse con relativa facilidad. Para terminar, en la tercera estudiaremos un caso práctico de lo que puede hacerse con este «conocimiento prohibido»…

Quizás alguna vez haya tenido que utilizar un programa de los que «caducan» a los treinta días, o con ciertas funciones limitadas por ser una versión gratuita de una aplicación comercial. Y quizás alguna vez le hayan dejado un «parche» para burlar éstas restricciones… Si no sabe de qué estoy hablando, es que es usted una persona honrada y nunca ha «crackeado» un programa. En ese caso, sepa que muchos de los programas con uso restringido pueden modificarse para que puedan ser utilizados sin limitaciones… a este procedimiento se le suele llamar «crackear», y se trata normalmente de una actividad ilegal.

Éste es un mundo inmenso: Tal vez le hayan prestado una versión del juego de moda que, misteriosamente, no pide que inserte el CD cada vez que arranca. Otras veces, son los decodificadores de TV o las tarjetas de los mismos las que son crackeadas para poderlas utilizar sin restricciones. Hasta las play-station pueden ser modificadas para que admitan juegos grabados sobre discos no-originales… Todas son diversas caras de la misma moneda.

El término «cracker» se suele utilizar para referirse a alguien que viola la seguridad de un sistema para obtener beneficio o causar daños (en contraposición a la ética del hacker). Sin embargo, hay otra acepción que es la que nos interesa, que viene muy bien explicada en la Wikipedia:

También se denomina cracker a quien diseña o programa cracks informáticos, que sirven para modificar el comportamiento o ampliar la funcionalidad del software o hardware original al que se aplican, sin que en absoluto pretenda ser dañino para el usuario del mismo. Esta acepción está más cercana al concepto de hacker en cuanto al interés por entender el funcionamiento del programa o hardware, y la adecuación a sus necesidades particulares, generalmente desarrolladas mediante ingeniería inversa.

Creo que con ésto hemos aclarado casi todo, aunque quien tenga curiosidad por el tema puede visitar los artículos que he referido antes. Los términos son muy confusos y en algunos sitios se dan definiciones contradictorias, así que tal vez le resulte complicado (a mí me duele bastante la cabeza después de un buen rato buscando referencias fiables y objetivas…)

Efectivamente, la cosa va de «modificar el comportamiento de un programa». Siendo un poco cínicos, podemos pensar que eliminar una protección es, en efecto, una forma de modificar o ampliar la funcionalidad del software…

Ya dijimos que los programas no son más que conjuntos de instrucciones adecuadamente ordenadas. Existen técnicas, conocidas «ingeniería inversa» que sirven para ver el interior de los programas y modificar su comportamiento. Actualmente, la mayoría de las licencias de las aplicaciones comerciales prohíben realizar ingeniería inversa sobre el código, aunque en la práctica sea imposible de detectar. Utilizando ésta técnica puede aprenderse muchísimo sobre el funcionamiento real del software (y en consecuencia de sus protecciones)

Modificar el código de un programa comercial para evitar una protección o restricción impuesta por el fabricante se considera ilegal, y además, la mayoría de los crackers no están muy interesados en los programas que crackean, sino en las técnicas de protección y entre el «reto» que se establece entre ellos y el programador de la aplicación… Es por eso que, desde hace algunos años, existen programas llamados «crackmes», que viene de «crack me» (crackéame en inglés). Como éstas aplicaciones son creadas expresamente para ser crackeadas es perfectamente legal hacerlo, y no estamos perjudicando a nadie. En cierto modo, se puede decir que éstos programas sirven para canalizar la furia asesina de los crackers.

También se puede argumentar que pueden servir como campo de pruebas para cometer delitos, pero eso sería como prohibir la investigación sobre energía nuclear porque hay quien puede utilizarlo para hacer el mal.

En la siguiente entrega nos vamos a poner manos a la obra y vamos a ver cómo modifica un programa mediante técnicas de ingeniería inversa, y para ello vamos a servirnos de un crackme… ¡les espero!

Siguientes artículos:
Cracking (II): A golpes de martillo
Cracking (y III): Cracker por un día

Chuck Norris y la informática

Chuck Norris está de moda. Tras el boom de Chuck Norris Facts, llegó la fiebre al mundo castellanoparlante, en forma del mil y una webs sobre los hechos conocidos que se le atribuyen…

chuck_norris.jpg

 La última que ha llegado a mis manos, habla de su compleja relación con la informática, así que les dejo que se diviertan (si alguien conoce la fuente original que lo comunique, no pude encontrarla)

  • Chuck Norris cuelga tiras de Mahoma en su blog.
  • Chuck Norris le instaló una Ubuntu a su reloj de arena.
  • A Chuck Norris no le compiló un programa en C. Así nació C++.
  • Chuck Norris sabe que P=NP. Nadie tiene huevos a pedirle que lo desmuestre. En tu próximo examen puedes poner: «P=NP porque lo dice Chuck Norris», y ningún profesor se atreverá a suspenderte.
  • Los compiladores no dan warnings a Chuck Norris, Chuck se los da a ellos.
  • Chuck Norris tiene el número 0 en la cola de matriculación.
  • Chuck Norris aprobó ITIS en 3 años.
  • Hace tiempo un decano no le concedió un cambio de grupo a Chuck Norris. Ahora tenemos una decana.
  • Chuck Norris olvidó una vez su contraseña. Se estuvo torturando a sí mismo durante cinco horas, hasta que la confesó.
  • A Chuck Norris no se le solapan las asignaturas, él solapa a quien haga falta.
  • Solo una persona en el mundo conoce el significado de «4:2:0 YCbCr» y de «3D-6D». Esa persona es Chuck Norris
  • Al final del curso pasado Chuck Norris se pasó por el despacho de Fran. Este año Ingeniería del Software ha sido asequible.
  • Chuck Norris no necesita refrigerar su equipo. El calor huye de él.
  • Chuck Norris sabe cuanto es ?-?, 0*?, 0/0, ?/?, ?^0, 0^0 y 1^?. Pero no se lo ha dicho a nadie.
  • A Chuck Norris no le corrigen el examen. Su examen es el modelo para corregir a los demás.
  • Chuck Norris no usa ratón, usa el brazo amputado de un teleco.
  • Se compró el Encina para que Chuck Norris hiciera sus prácticas.
  • Chuck Norris postea en cualquier foro sin tener que reescribir su contraseña.
  • En ITIS un 50% de los matriculados son mujeres. No las ves nunca porque están en casa de Chuck Norris.
  • Chuck Norris recorrió un bucle infinito. Dos veces.
  • Chuck Norris no lee manuales de Java: los mira fijamente hasta que obtiene la información que busca.
  • Chuck Norris hizo las prácticas de redes simplemente mirando el monitor y el cable ethernet.
  • Chuck Norris no necesita wifi, se comunica por telepatía.
  • Chuck Norris comprime los datos a fuerza de meterle patadas giratorias a los 1 y los 0.
  • Los requisitos de las asignaturas se deciden en base al expediente de Chuck Norris. Y a sus puños.
  • Chuck Norris pasó todas las pruebas de Humor Amarillo. Dos veces. Como se quedó con ganas, inventó el Gran Prix.
  • Chuck Norris hizo la práctica de Orientacion a Objetos según la iba presentando.
  • Chuck Norris es un 10% de profesor. No tiene nada que ver con la genética, una vez Chuck Norris se comió a uno.
  • Linus Torvalds no quería liberar el kernel Linux. Chuck Norris habló con él.
  • Los programas de Chuck Norris siempre compilan a la primera.
  • Al PC de Chuck Norris no le entran virus ni troyanos. Él es su propio antivirus y firewall.
  • Chuck Norris vive con tu madre en un castillo. A veces lo trae gordo, a veces lo trae fino.
  • Chuck Norris puede dividir entre cero.
  • Chuck Norris recomienda Mozilla Firefox.
  • Nadie se atrevería a usar la cuenta de Chuck Norris.
  • En un aula pequeña hay 84.523 de objetos con los que Chuck Norris podría matarte, incluyendo el aula en sí…
  • Chuck Norris no hace algoritmos eficientes, el miedo les hace ir más rápido.
  • La capacidad de un disco Blu-Ray es la equivalente al tamaño de un fichero de texto con todas las razones que Chuck Norris encontraría para matarte.

Para los que les haya parecido demasiado friki, los siguientes artículos volverán a ser comprensibles para todos… :-P pero tenía que publicar ésto. Estaba pensando cómo se sentirá un lector que odie los chistes sobre el tal Chuck… ¡vaya pesadilla!

¿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.

Segmentation Fault 1.1 released

Llevo unos días algo más callado de lo normal, y el motivo no es otro que los cambios que he estado realizando en la plantilla. Aparte de incluir una pequeña descripción sobre el blog y el enlace al Top 10, los enlaces de sindicación están más claros y ha aparecido un botón de artículo aleatorio, para que quienes se sumen al blog puedan ir descubriendo las entradas anteriores… no son cambios radicales, pero me han llevado bastante tiempo (Blogger me ha hecho alguna novatada…).

En breve añadiré los enlaces a otros blogs, que los debo desde hace un montón de tiempo. Y una vez más (y permitidme que de ahora en adelante os tutee), quiero daros las gracias por el enorme interés que habéis demostrado por esta bitácora… todo os lo debo a vosotros :-)

¡Nos vemos pronto!

¿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.

Sobre estadísticas y otros cuentos

Ahora que hay mucho bloguero recién llegado :-D voy a aprovechar la coyuntura para explicar qué es eso de las estadísticas, qué ofrecen y cómo puede uno añadirlas a su blog (y al final, propina). Es algo muy sencillo, pero lo mismo que habría explicado por email puedo hacerlo por aquí y que sea útil a más gente.

Un servicio de estadísticas es algo que contratamos quienes mantenemos una web, un blog o lo que sea, para poder analizar cuántos visitantes tenemos, y en ocasiones algunos parámetros de éstos visitantes que pueden interesarnos.

Yo utilizo StatCounter, que desde mi humilde punto de vista funciona francamente bien y es bastante completo. Los hay mucho mejores, pero tal vez no estén libres de publicidad ni sean gratuitos, como es el caso… Así que voy a dar cuatro notas sobre cómo contratarlo e incluirlo en la plantilla del blog, para que todos podamos tener nuestras bonitas y flamantes estadísticas.

Lo primero es acceder a la web del proveedor (en este caso www.statcounter.com) y allí proceder al registro. En éste caso, creo recordar que hacen falta muy pocos datos personales. Una vez hemos completado la solicitud, podemos elegir qué tipo de contador queremos. En el caso de mi blog, en principio preferí reservarme el número de visitas, así que simplemente hay una imagen publicitaria. Está situado al final, y queda así:

Lo que hay que hacer es tomar el código que nos propone el proveedor y copiarlo en la parte de la plantilla en la que queramos que aparezca el botón con el logo o con el contador. No doy muchos detalles sobre el proceso porque me pareció bastante intuitivo, pero si alguien necesita una ayudita, estoy a su disposición :-) La cosa, en uno de esos esquemas que tanto me gustan, queda así:

El que sepa un poco de HTML verá que se puede quitar la imagen y el enlace (a mano o eligiendo el modo invisible), pero StatCounter proporciona un servicio gratuito de bastante calidad, por lo que mi opinión es que hay que apoyar este tipo de comportamientos (cada vez más escasos) dejando la imagen y el enlace. Llegados aquí, vamos a resumir el procedimiento:

  1. Como siempre, tener una copia de la plantilla «por si acaso».
  2. Elegir el contador que más nos guste y tener bien claro el código que hay que copiar.
  3. Elegir el lugar del blog donde queremos insertar el botoncito e identificarlo en la plantilla.
  4. Copiar el código con cuidado y delicadeza, sabiendo lo que hacemos.
  5. Probar la plantilla y hacer las modificaciones oportunas para que quede todo bien.
  6. Guardar la plantilla.

Y de la que estoy, aprovechemos para comentar otra cosilla: las votaciones de Qualitativo. La cosa es muy muy sencilla, aquí no hay ni siquiera que registrarse. Sólo es un código que hay que copiar, así que una vez en su web nos vamos a «ejemplos», seleccionamos dónde tenemos el blog, y ahora sólo hay que copiar y pegar (podemos modificar lo que queramos directamente sobre el código: color, texto… todo eso).

La única dificultad está en localizar el pie del post, pero basta con leer el código de la plantilla atentamente. Normalmente basta localizar la etiqueta que muestro subrayada:

Al principio hay que lanzarse un poco, pero en cuanto hagamos cuatro cambios vamos a ver que en realidad es muy sencillo. El contador y el script para puntuar la web son dos ejemplos muy buenos de funcionalidad que podemos añadir al blog con muy poco esfuerzo. Quizá haya dado por hechas muchas cosas, si alguien tiene problemas que por favor lo pregunte, me comprometo a ayudar en la medida de mis posibilidades.

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…

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!

Secuencialidad simultánea

Seguro que en este momento, se encuentra usted realizando varias tareas simultáneamente en su ordenador. Por ejemplo, tiene abierto su cliente de correo, un procesador de textos y el navegador de Internet. Piénselo: mientras escribe un correo, edita un documento y navega por la red, y todo al mismo tiempo. Imagine que se aburre y decide abrir un juego. Está utilizando cuatro programas a la vez. ¿A la vez?

Todos utilizamos muchas aplicaciones al mismo tiempo cuando usamos el ordenador. Sin embargo, ésto es relativamente reciente: hasta la aparición de los sistemas modernos los ordenadores nunca fueron antes capaces de ejecutar varios programas al mismo tiempo… ésta característica, surgida a finales de los 70, se conoce como multitarea, y es la capacidad que tienen las máquinas de hacer muchas cosas a la vez, o mejor dicho, de simular que hacen muchas cosas a la vez.

Así que su ordenador le engaña: puede parecerle que los programas se ejecutan todos simultáneamente, pero un ordenador sigue siendo una máquina secuencial: esto quiere decir que sólo puede ejecutar las instrucciones de una en una. Aunque como lo hace muy muy rápido nos da la impresión de que lo hace todo a la vez… y si lo piensa, verá que la idea es muy sencilla: imagine que ordena a su computador que ejecute The Gimp y Firefox, así de seguido… Su sistema operativo (Linux, Windows o lo que use) se encargará de ir «intercalando» instrucciones de uno y de otro, de tal modo que parezca que se están ejecutando a la vez.

Y ahora llega lo más interesante, que es el porqué de todo esto: el éxito de estas técnicas se basa en lo que llamamos escalas de tiempo: lo que para nosotros es un instante, para un procesador funcionando a 1 GHz puede ser una eternidad. Así, vamos a suponer un ordenador, donde:

  • una instrucción tarda en ejecutarse 1 microsegundo (0,000001 segundos)
  • una lectura o una escritura en un disco duro tarda 1 milisegundo (0,001 segundos)
  • un intervalo entre dos pulsaciones de tecla dura 0,5 segundos

Son datos normales y corrientes de cualquier ordenador anticuado. El tiempo de referencia que tomamos es el tiempo que tarda en ejecutarse una instrucción: para nosotros ese tiempo apenas es inteligible, no podemos sentir su paso, ya que nosotros pensamos en el tiempo en unidades mayores, más acordes a nuestros parámetros biológicos.

De hecho, pensamos en segundos. Así que vamos a considerar que una intrucción tarda 1 segundo en ejecutarse (es decir, lo mismo, pero en otra escala de tiempos). Entonces tendríamos que, en nuestro computador «humanizado»:

  • una instrucción que se ejecuta dura 1 segundo
  • una lectura o una escritura en un disco duro tarda ¡17 minutos!
  • un intervalo entre dos pulsaciones de tecla dura ¡¡6 días!!

¡6 días! Y eso que pensamos que tecleamos tremendamente rápido :-P ¿se imaginan al ordenador? Cada seis días le llegaría una carta «Han pulsado la S»… podría enviar la respuesta, llamar a la pantalla tranquilamente para que mostrara una S, escribirla en la memoria, incluso guardarla en el disco duro… y aún así le sobrarían varios días. Podría dedicar todo ese tiempo para ejecutar el Firefox, el buscaminas y todos esos programas que teníamos trabajando…

En las diferentes escalas temporales de los humanos y los ordenadores se encuentra la razón del éxito del llamado tiempo compartido (varios usuarios utilizando el mismo equipo) y de la multitarea (varias aplicaciones sobre el mismo ordenador). Cómo se organice nuestro procesador, cómodamente sentado en su despacho, para atender a tantas peticiones es otra historia, y esa historia no es nada sencilla (puedo asegurárselo… :-P)

Blogstorm

Siempre me ha hecho mucha gracia el término inglés para «brainstorm», que viene a ser lo que aquí conocemos como tormenta de ideas. Digo que me hace gracia porque traducido literalmente significa «tormenta de cerebros» y me encantaría ver una :-P

Superado este horrible «»chiste»», quiero advertir de que algo se mueve en el panorama bloguero… yo desconocía este fantástico mundo hasta hace relativamente poco tiempo. O mejor dicho: sabía que existían los blogs, pero no que hubiera blogs tan encantadoramente apasionantes como los que he podido descubrir.

Personalmente, me enganché de verdad a esto a partir del momento en que descubrí CPI. Desde entonces mi lista de marcadores ha ido aumentando de forma constante, hasta hacerse muy poco manejable :-P pero no me importa en absoluto. Un día decidir dar el salto, y dejé aparcada la literatura en estado puro para dedicarme a la divulgación. Y de momento la cosa no va mal.

Y digo que algo se mueve porque en los últimos tiempos he sido testigo privilegiado de la eclosión de dos nuevos blogs: por un lado el de Misslucifer, con No se me ocurre ningún título. Ya el título (más bien su ausencia) es prometedor, y uno se siente muy contento sabiendo que ha tenido parte de culpa en ello :-) Y por otro lado tenemos Neuronas de Silicio, chips de gelatina, interesantísimo y ambicioso blog al cual deseamos toda la suerte de este mundo… ;-)

Un servidor no quiere terminar este post sin un agradecimiento generalizado a toda la comunidad bloguera, por la cantidad de cosas nuevas que ha aprendido en los últimos tiempos por su culpa. Y también, por qué no, por la extraordinaria acogida que ha tenido este humilde blog intruso…