Etiquetas

8/02/2007

Llamadas al sistema en el núcleo 2.6 de linux (escrito en octubre del 2005)

Esta mañana hemos realizado en clase de Diseño de Sistemas Operativos la práctica 2, de creación de llamadas de sistema en el núcleo (sin usar módulos).

Aunque el guión estaba preparado para un núcleo 2.4, hemos logrado adaptarlo para el 2.6.13.4 con unos cambios mínimos.

En primer lugar, hay que introducir la entrada de la llamada al sistema en la lista. Anteriormente se introducía en este archivo:

/usr/src/linux/arch/i386/kernel/entry.S


Pero ahora se han separado las entradas de llamadas al sistema en un archivo distinto, que es incluído en el anterior. El nuevo archivo es éste:

/usr/src/linux/arch/i386/kernel/syscall_table.S


La nueva llamada al sistema se introduce al final de la lista, con una entrada así:

.long sys_nueva_llamada /* 375 */


El comentario es el número de la llamada al sistema. Es opcional, pero se recomienda incluirlo cada 5 llamadas por legibilidad del código.

Una vez introducida en la tabla de llamadas, debemos introducir su prototipo en la cabecera unistd.h . En mi caso, lo añadí únicamente al unistd.h de la arquitectura i386, localizado en /usr/src/linux/include/asm-i386/unistd.h. El prototipo se incluye con esta entrada, nuevamente al final de la lista y siempre con cuidado de asignarle un número nuevo, no usado:

#define __NR_nueva_llamada 375


Justo debajo debería aparecer una línea que indica el número de llamadas al sistema en la lista. Debemos incrementar ese número tantas veces como llamadas nuevas hayamos introducido, o podrían darse problemas una vez compilado el núcleo:

#define NR_syscalls 376


Ahora que la nueva llamada consta en el sistema, podemos introducir el cuerpo de la llamada. Esto podemos hacerlo al final del archivo /usr/src/linux/kernel/sys.c . Por ejemplo:

asmlinkage long sys_nueva_llamada(void){
printk("Esta llamada es nueva\n");
return 0;
}


Ya sólo queda recompilar e instalar el núcleo con los cambios y hacer un programa que pruebe que nuestra llamada funciona.

Antes de ese paso, nos encontramos con problemas ya que el código estaba preparado para el núcleo 2.4, mientras que no era compatible con el 2.6.13. Por ejemplo, el puntero p_pptr (que apunta al padre de un proceso en la estructura task_struct) ahora es llamado parent.

También fue necesario cambiar la función verify_area (deprecada en el 2.6) por access_ok . Los parámetros son los mismos, pero el resultado es justo el contrario (mientras que verify_area devuelve 0 cuando se puede acceder al area de memoria indicada, access_ok devuelve 0 cuando no se puede acceder.

8/01/2007

Escribiendo código portable

Uno de los mayores problemas cuando un proyecto debe funcionar en varios sistemas es ver cómo diferentes compiladores se atragantan en código que funciona bien en otro compilador.

La guía de portabilidad en C++ del proyecto Mozilla es una buena lectura para evitarse quebraderos de cabeza después. Aunque está orientada a C++, tiene aspectos aplicables a C. Por ejemplo no hay que olvidar que el inlining de funciones es una lotería, especialmente en compiladores como el de HP-UX, donde directamente se sugiere aniquilar todo uso de inline.

7/07/2007

Cuando el diablo no tiene nada que hacer...

De vuelta de Hamburgo con un certificado B1 de alemán debajo del brazo. ¿Ahora qué hace uno para entretenerse?

Pues aprender guitarra por mi cuenta, aprovechando la que mi hermano mayor ya no usa. A los 25 años empiezo un poco tarde, pero aun así me gustaría llegar a tocar como este hombre, aunque tenga 40 cuando lo logre:



No tengo ganas de meterme a cursos sin saber si de verdad sirvo, así que mejor aprender un poco por mi cuenta antes de decidir. De momento recursos en internet no faltan para ir empezando. De lo más decente que he visto ahora mismo es la web de justinguitar.com. Lo mejor es que tiene videotutoriales en youtube que ayudan bastante para saber si la estás fastidiando al tocar un acorde o no. Y gratis, al menos la parte para empezar.

Lo peor ha sido afinar la guitarra, pero gracias a Dios hay programas para afinar bastante buenos.

Veremos si llego a algún sitio con esto, o si la guitarra se queda criando polvo junto al kimono de karate.

6/21/2007

John Lasseter, enderezando Disney

Más buenas noticias en cuanto a cine.


Tras la compra de Pixar por parte de Disney, muchos especularon que en realidad lo que se quería era poner a los directivos de Pixar al frente del gigante de la animación occidental. Pues desde luego parece que han acertado.John Lasseter, fundador de Pixar y director de películas de animación tan exitosas como Toy Story, acaba de prohibir los churros directos a video y DVD. Cuando digo churros hablo de secuelas en plan El Rey León 24 o La Sirenita 51. Y es que según afirma Lasseter, semejantes despropósitos hacen que el público pierda el respeto a las grandes producciones que elaboran para la gran pantalla. Personalmente estoy de acuerdo.


¿La gota que colmó el vaso? Una película con animación hecha por ordenador llamada Campanilla. Sí, la de Peter Pan. Y pensada como la primera parte de una serie dedicada a las hadas de Disney, como también se quería hacer con las princesas. Lasseter decidió tras visionar una parte del trabajo cancelar el proyecto así como muchos otros en desarrollo, y despedir a la presidenta de DisneyToon Studios, responsable de la dirección actual.


En unos cuantos años veremos si Disney vuelve a resurgir como un coloso de la animación con la innovación por bandera o se pega un batacazo por no ir en una línea totalmente comercial. Naturalmente deseo lo primero.

Blade Runner: The Final Cut

Warner Bros ya tiene los derechos de distribución. En otoño de este año (coincidiendo con el 25 aniversario) saldrá la edición especial multidisco, incluyendo la versión original estadounidense (1982), la versión internacional (con mínimos cambios respecto a la anterior), el montaje del director (1992) y el montaje final, remasterizado y con escenas nuevas, bajo la supervisión de Ridley Scott.


Y ya ha salido un trailer en la televisión estadounidense:



Ahora podré volver a ver una nueva versión de mi película favorita, y esta vez con la calidad propia de un DVD. No como el que poseo del montaje del director que fue pasado tal cual, sin mejoras en la calidad de imagen ni de sonido.

5/30/2007

Mapas de Google, ahora con visita virtual

Google está empezando a introducir una nueva prestación en Google Maps que permite ver la calle a partir de fotos tomadas desde un automóvil. El sistema es espectacular, permitiendo rotar la cámara, avanzar, etc. De momento sólo hay ciudades estadounidenses, pero seguramente la cosa se extienda a otros países.

Un ejemplo.

5/29/2007

LOLCODE

LOLCODE, un lenguaje de programación creado para adaptarse a la forma cutre de escribir en internet. Hasta el punto de ir todo en mayúsculas. Los if-then-else son la pera. De un ejemplo de la página principal:


HAI
CAN HAS STDIO?
PLZ OPEN FILE "LOLCATS.TXT"?
AWSUM THX
VISIBLE FILE
O NOES
INVISIBLE "ERROR!"
KTHXBYE

4/14/2007

I <3 U




Esta chorrada me tiene riendo desde hace dos horas. El que no lo entienda, que vea la película.

3/12/2007

Videojuegos




(Intervención estelar del creador de Super Mario)

Más chorradas en www.mega64.com

2/27/2007

Ojalá estuvieses aquí

Ayer, en la estación de tren asistí a (parecía ser) un ataque de histeria. Un hombre empezó a gritar, y otro que le acompañaba le agarró para contenerle, quién sabe si para evitar que se tirase delante del tren. Lo único que pude entender en alemán fue "ich weiß sie wieder" (¿lo vuelvo a saber?), frase que no paraba de repetir. Podría ser el tercer caso de locura del que me entero en menos de un año.

Los componentes de Pink Floyd están familiarizados con la locura. El abuso de LSD de Syd Barrett le llevó al manicomio, años después de abandonar el grupo en el que permaneció 3 años como compositor y guitarra. Durante ese tiempo escribió gran parte del material que les ayudaría a mantenerse durante los primeros años.

El album Wish you were Here es en parte un homenaje a Barrett, especialmente las canciones Shine on your crazy Diamond y Wish you were Here. Durante la grabación del disco Barrett en persona visitó el estudio. Ninguno de los miembros del grupo pudo reconocerle al principio. Después del reencuentro, Barrett se despidió para no volver a ser visto por Pink Floyd.

Mi canción favorita de ese album, Wish you were Here, es de esas en las que el significado puede variar según el contexto en que se escuche. Pensando en Barrett, quizás sea un deseo expreso de su vuelta a la cordura. O su paso a la forma de locura en que se encontraba el grupo por aquel entonces.



Wish You Were Here

So, so you think you can tell
Así que crees poder distinguir

Heaven from Hell,
el paraíso del infierno,
blue skies from pain.
el cielo azul del dolor.

Can you tell a green field from a cold steel rail?
¿Puedes distinguir un prado verde de un frío rail de acero?
A smile from a veil?
¿Una sonrisa de un velo?
Do you think you can tell?
¿Crees que puedes?

And did they get you to trade your heroes for ghosts?
¿Y te hicieron cambiar tus héroes por fantasmas?
Hot ashes for trees? Hot air for a cool breeze?
¿Cenizas por árboles? ¿Aire cálido por una brisa fresca?
Cold comfort for change? And did you exchange
¿Frío confort por cambio? ¿Acaso cambiaste...
a walk-on part in the war for a lead role in a cage?
... un papel de extra en la guerra, por el protagonismo en una jaula?

How I wish, how I wish you were here.
Cómo quisiera, cómo quisiera que estuvieses aquí.
We're just two lost souls swimming in a fish bowl,
Somos dos almas perdidas nadando en una pecera,
year after year,
año tras año,
running over the same old ground. What have we found?
recorriendo el mismo fondo. ¿Qué hemos encontrado?
The same old fears,
Los mismos miedos de antes,
wish you were here.
ojalá estuvieses aquí.