Mostrando las entradas con la etiqueta geek. Mostrar todas las entradas
Mostrando las entradas con la etiqueta geek. Mostrar todas las entradas

jueves, 18 de marzo de 2010

Elegía de un Proceso Distribuido

[Basado en una historia real de punto flotante.]

Advertencia: La historia descrita a continuación contiene texto computacional explícito. Se recomienda leerlo en compañía de un sysadmin experimentado.

(¡es broma! léanlo, por favor) :D

por: Romeo Sánchez

Él era un proceso como cualquier otro; bueno, no como cualquiera, sino uno de alta prioridad, privilegiado, siempre sirviendo a los demás. Ella era un proceso más sencillo que luego se convertiría en su cliente. Cuando la conoció, desde el primer handshake de TCP, fue amor a primera vista. Comenzaron a tratarse, aunque al principio el scheduler no los hacía coincidir (el de alta prioridad casi siempre estaba ocupado), así que decidieron citarse (válgame la redundancia) por rendezvous, es decir, en cada encuentro uno esperaba pacientemente hasta que el otro llegara. Su relación se dio, como todas las relaciones, con cambios de contexto entre el modo kernel y el modo usuario que rompían la monotonía. De vez en cuando uno sorprendía al otro con alguna llamada síncrona inesperada que le alegraba el día, o incluso algún mensaje asíncrono, aunque también tenían sus interrupciones de I/O como toda pareja de procesos.

Con el tiempo decidieron tener un subproceso. Era uno pequeño, ligero, nacido a partir de un fork() en un nuevo shell. Siempre fue tímido y con dificultad lo mostraba un ps -a, aunque en ocasiones se rebelaba y acaparaba al procesador, consiguiendo llamar la atención no sólo de su proceso padre, sino hasta del mismo root. Aún así tenía sus ratos buenos, y hacía todas sus tareas con múltiples hilos de ejecución, escuchando atentamente.

Sin embargo, a pesar de sus emotivos encuentros por rendezvous, comenzaron a tener problemas y a contender, discutir, por el uso de los recursos. Las interrupciones eran cada vez más frecuentes, y la competencia por ser el primero en tener acceso al recurso derivó en una race condition insoportable ya para ambos, al grado de llegar a cuestionar incluso a root, diciéndole: "¿por qué me permites ejecutarme? un `kill -9` sería lo mejor, ya no quiero vivir así". Esa era su elegía de día y de noche, pero sólo otros daemons como cron lo escuchaban en silencio sin poder hacer nada. Quizá si el programador, recordando el caso de la cena de filósofos o del barbero dormilón, hubiera establecido una exclusión mutua (un mutex, pues) en las secciones críticas, el problema se habría resuelto, pero al final, después de una larga lucha de contención por recursos, quedaron atrapados en un deadlock, un bloqueo mutuo, cada quien esperando que el otro cediera, pero sin ceder él mismo, arruinando la relación, la comunicación, la ejecución y la interacción.

El desenlace fue triste: un solo `kill -9` fulminante bastó para terminar con su sufrimiento. El nuevo problema es que el proceso hijo ahora es huérfano, y dada su rebeldía, ni siquiera init, el más sabio de todos los procesos, ha podido hacer algo por él. Es ahora un alma en pena, un zombie, condenado a pagar por los errores de sus padres y por los errores del programador llevando para siempre (o al menos hasta el próximo reboot) un estigma en cada ps -a: la vergüenza de ser <DEFUNCT>.

:wq!

sábado, 14 de febrero de 2009

Criptografía para románticos

Sí, también tengo un lado romántico; si no me creen, pregúntenle a mi esposa (no crean que es casualidad el hecho de llamarme Romeo :-D). Lo que pasa es que no uso con frecuencia mi romanticismo, que es diferente. Pero, ¿qué tiene qué ver la criptografía con el romance? Absolutamente todo. Yo mismo usaba la técnica del cifrado César hace muchos años para comunicarme con una novia que tuve: ella me escribía, o yo le escribía, pero siempre usando un sencillo algoritmo de sustitución de letras y una llave compartida previamente (me estoy refiriendo a una llave criptográfica, k=3, no sean mal pensados). La llave no era otra cosa sino un número que representa cuántas letras hay que desplazar. Por ejemplo, si ella quería escribirme: "necesito verte", simplemente cambiaba la 'n' por 'q' (3 letras después), la 'e' por 'h', y así sucesivamente hasta tener: "qhfhvlwr yhuwh", mensaje que se ingeniaba para mandarme por un medio no tan seguro (con alguna amiga). Yo recibía aquél papelito perfumado y procedía a decodificarlo, aplicando la llave con el algoritmo en sentido contrario: la 'q' por 'n' (3 letras antes), la 'h' por 'e', la 'f' por 'c', hasta tener el mensaje. Nuestro sistema funcionó correctamente y, dado que no nos descubrieron, puedo decir que nadie lo rompió nunca a pesar de su sencillez... el rompimiento fue otro. Así es la vida. ;-)

Ahora que me doy cuenta, creo que debí haber escrito todo esto usando algún cifrado, porque ahora que lo lea mi esposa se me va a armar tremendo lío. :-D

Sin embargo, ¿quién usa el cifrado César hoy en día? (En todo caso, les recomiendo usar cifrado Vigenère, que también es sencillo y prácticamente irrompible). Tal vez cifrar los mensajes mantenga fuera de la vista de los padres y otros curiosos las declaraciones de amor entre romeos y julietas, a menos que tengan un papá o mamá criptoanalistas... (hijos: si están leyendo esto y no quieren que me entere de algún mensaje que les intercepte, tendrán que ir investigando sobre criptografía de curva elíptica o, quizá para entonces, criptografía cuántica... o mejor aún, ¡cuéntenmelo todo!, ¿para qué se complican? :-D).

En fin, todo sea por conservar algo de intimidad y guardar secretos, pero siguiendo un principio básico en criptografía: estar de acuerdo. No vaya a pasar como aquella canción de Juan Luis Guerra que dice: "te mando señales de humo como un fiel apache, pero no comprendes el truco y se pierde en el aire". Ya me imagino, el cuate aquél mandando las señales con código morse ("y un código morse transmite el 'te quiero' de un ángel, se pierde en el aire"), y la amada ni en cuenta. ¡Que alguien le enseñe código morse, por favor!.

Aunque es cierto que un mensaje cifrado (encriptado, pues) hace evidente que hay un secreto guardado en el mensaje (es decir, si alguien ve un papel perfumado que dice: "qhfhvlwr yhuwh", va a saber que hay algo secreto y sentirá la curiosidad de saber qué es lo que dice), pero ¿qué tal si el mensaje es digital y contiene una fotografía o una canción en MP3? ¿qué tal si en la fotografía o en la canción va oculto un mensaje, imperceptible a simple vista o a simple oído? Eso ya no sería tan evidente. Esto es posible gracias a la esteganografía y otras técnicas de covert channels, pero de eso hablaré en otra ocasión; hoy no, porque la esteganografía no es tan romántica como la criptografía.

Bueno, los dejo con una frase de amor pseudo-geek, en cifrado César, que dice:

"dpru hv phprulcdu vx gluhfflrq ls, hq oxjdu gh xvdu gqv"

Hasta luego.

:wq!

Nota cultural: Para aquellos que siempre quisieron saber la secuencia que usó el fiel apache de la canción para transmitir "te quiero" en las señales de humo, la representación en Morse es: - . / --.- ..- .. . .-. --- (es cierto, por mis venas corre sangre de telegrafista: feliz día del telegrafista).