Todo kernel tiene sus cosas

linux jediHoy estaba charlando con un compañero y a raiz de la conversación me he acordado de que no todo el mundo es consciente de las peculiaridades que tiene desarrollar el kernel (o parte) de un sistema operativo, concretamente Linux. Al volver a casa he buscado en el libro de Robert Love “Linux Kernel Development” porque estaba seguro de que tenía un pequeño apartado en el que describía algunas de estas “cosas” especiales que tiene desarrollar en el kernel. Os las pongo aquí y añado alguna cosa de cosecha propia:

Ausencia de glibc

El kernel de Linux no está linkado contra libc, principalmente por motivos de eficiencia y de tamaño, pero también por evitar situaciones del tipo “qué fue antes, el huevo o la gallina”; es decir, dependencias cíclicas entre el kernel y la librería. Para que los programadores del kernel no sufran (demasiado) muchas de las funciones más utilizadas de libc se han implementado directamente en el kernel. Este es el caso de printk (sustituyendo a printf).

Ausencia de protección de memoria

A diferencia del espacio de usuario, donde el kernel controla que un proceso no acceda a posiciones de memoria que no le pertenecen, nadie vigila que el kernel no lo haga (who watches watchmen?). Esto quiere decir que los accesos erróneos de memoria dentro del kernel son especialmente desastrosos. Normalmente resultan en un oops, que viene siendo un error mayor del kernel. Cabe resaltar también que la memoria del kernel no es paginable/swappable, por lo que cada byte adicional de memoria que consume es un byte menos disponible de memoria física.

Dificultades con el punto flotante

Una aplicación en espacio de usuario que desee usar punto flotante normalmente provoca un trap, que es capturada por el kernel y realiza una serie de acciones para cambiar el modo de entero a punto flotante. Como es evidente, el kernel no puede trapearse a sí mismo, por lo que el programador debería salvar y restaurar manualmente los registros de punto flotante (entre otras cosas). Por estos motivos no existe punto flotante en el kernel.

Kernel Stack mínima

La pila del kernel es estática (a diferencia de la pila de usuario) y de pequeño tamaño. Normalmente la pila del kernel es de un tamaño de dos páginas, lo que suponen 8Kbs en sistemas de 32 bits y 16Kbs en los de 64.

Sincronización

El problema de la concurrencia y la sincronización dentro del kernel adquiere un nuevo significado. Puesto que el kernel es interrumpible (preemtive), el propio kernel puede ser expropiado en favor de otro proceso que ejecute el mismo código. Sin el control adecuado las estructuras del kernel podrían verse afectadas y provocar un malfuncionamiento.

Estos son sólo algunos de los aspectos que diferencian la programación dentro del kernel de la programación en espacio de usuario. No hay que olvidar que el kernel es un programa tremendamente grande e interconectado, y que por su peculiar función tiene segmentos de código realmente complejos y que pueden fundir el cerebro de más de un programador.

Sea como sea, que no os de miedo el kernel, animaos a echarle un vistazo y a programar en él; nunca hay suficientes desarrolladores del kernel 😉

[+] http://www.kernel.org/pub/linux/docs/lkml

Anuncios
Tagged with: , ,
Publicado en Linux, Programación
2 comments on “Todo kernel tiene sus cosas
  1. Rigolox dice:

    Muy buena la imagen, 🙂

    Justo ayer tuve líos con glib en un FreeBSD 8 al intentar compilar una de las piezas principales de LXDE y la verdad sigo sin entender que pasa, será que el núcleo de estos sistemas no tiene partes de la biblioteca dentro.

    NaCl u2

  2. Adrián dice:

    No he tenido el placer de compilarme nada para FreeBSD, así que no te puedo decir, pero es más que probable que sea un asunto de símbolos. Si lo consigues ya nos cuentas 😉

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Archive
A %d blogueros les gusta esto: