Publicidad
Publicidad

RSS Programación a pecho descubierto

Programando módulos para el Kernel de Linux. Simulaciones de casos de concurrencia.

Comentar
Programando módulos para el Kernel de Linux. Simulaciones de casos de concurrencia.

addEventListener('load', function (event) { prettyPrint() }, false);

En el último artículo de la serie hablábamos sobre la concurrencia en el Kernel de Linux. Hoy, en programando módulos para el Kernel de Linux vamos a zambullirnos de lleno en unas simulaciones de lo que podrían ser casos reales de protección de secciones críticas.

Vamos a presentar varios escenarios con plataformas y configuraciones del Kernel diferentes incrementando la complejidad conforme vayamos avanzando en el artículo.

El único caso que no vamos a tratar es el de una sección crítica en el contexto de procesos con un único procesador en un Kernel configurado para no ser interrumpible (non preemtible) al no ser necesario ningún tipo de bloqueo.

Leer más »

Programando módulos para el Kernel de Linux. Concurrencia en el Kernel

Comentar
Programando módulos para el Kernel de Linux. Concurrencia en el Kernel

addEventListener('load', function (event) { prettyPrint() }, false);

En el anterior artículo de la serie, nos introducíamos en los contexto de proceso e interrupciones, los timers y el RTC en Linux. Hoy vamos a hablar sobre la concurrencia en el Kernel de Linux.

Con la llegada de los procesadores de múltiples núcleos, cualquier sistema doméstico puede hacer uso del Multi Procesamiento Simétrico, SMP a partir de ahora (de Symmetric Multi Processing en Inglés).

Gracias al SPM y al Kernel prremptible disponemos de escenarios donde se generan múltiples hilos de ejecución. Estos hilos operan simultáneamente con estructuras del Kernel compartidas, por eso, el acceso a las mismas debe ser serializado.

Leer más »
Publicidad

Programando módulos para el Kernel de Linux. Contextos, interrupciones y timers

3 Comentarios
Programando módulos para el Kernel de Linux. Contextos, interrupciones y timers

addEventListener('load', function (event) { prettyPrint() }, false);

Ya hemos hablado anteriormente sobre los conceptos básicos de la programación de módulos para el Kernel de Linux y sobre los sistemas básicos implicados en el arranque y la gestión de memoria del sistema. Hoy vamos a introducirnos en la gestión de procesos.

En esta nueva entrega de la serie, vamos a adentrarnos en los cambios de contexto, interrupciones y timers. Ya hicimos una pequeña introducción a los Jiffies y como se calculan los loops_per_jiffy en el post anterior.

Hoy vamos a aprender como y por qué se usan antes de adentrarnos en el apasionante mundo de la concurrencia a nivel de Kernel donde su uso es habitual. Entender los conceptos del contexto de procesos, las interrupciones y los timers es fundamental para la tarea que nos ocupa en esta serie.

Leer más »

Programando módulos para el Kernel de Linux. Entendiendo el arranque y la gestión de sistemas básicos.

6 Comentarios
Programando módulos para el Kernel de Linux. Entendiendo el arranque y la gestión de sistemas básicos.

addEventListener('load', function (event) { prettyPrint() }, false);



Ya hemos hecho una introducción al desarrollo de módulos del Kernel para Linux y hemos explicado como configurar un entorno de desarrollo con Eclipse con el que trabajar. Hoy en Programando módulos para el Kernel de Linux vamos a hablar sobre el proceso de arranque del Kernel y los sistemas implicados.

Como todo sistema basado en arquitectura x86, Linux necesita que la BIOS cargue el MBR (Master Boot Record) desde el primer dispositivo de almacenamiento del sistema. El código residente en el MBR procesa la tabla de particiones del dispositivo y carga un gestor de arranque de Linux, generalmente GRUB o SYSLINUX desde la partición activa.

Finalmente, el gestor de arranque carga la imagen comprimida del Kernel en memoria y le pasa el control de la ejecución. El Kernel se descomprime a sí mismo y comienza el proceso de arranque. Esto por supuesto, partiendo del supuesto de que estamos arrancando un sistema simple sin RAIDS ni volúmenes lógicos ni nada por el estilo.

Leer más »

Configurar un entorno de desarrollo para el Kernel con Eclipse

4 Comentarios
Configurar un entorno de desarrollo para el Kernel con Eclipse

addEventListener('load', function (event) { prettyPrint() }, false);

Lo más importante a la hora de desarrollar módulos para el Kernel de Linux es sin duda configurar un entorno de desarrollo para el Kernel con Eclipse o con cualquier otro IDE a tu elección y con el que te sientas cómodo. Yo me siento muy cómodo con Eclipse, así que voy a hacerlo con él, puedes utilizar la información en este artículo uses Eclipse o no, lo único que cambia es el modo de depurar.

Doy por hecho que el lector conoce la forma de instalar Eclipse en su sistema a la vez que el Kernel de Linux. Para el objetivo del artículo es indiferente si desarrollamos sobre un Kernel descargado desde Kernel.org o es un Kernel específico con parches aplicados de una distribución.

Para realizar este artículo voy a utilizar un Kernel 3.0 descargado desde Kernel.org y la versión Indigo de Eclipse. Por supuesto, tú puedes utilizar el Kernel que más rabia te de o el que más te guste, no afecta para nada el desarrollo y desenlace del mismo.

Leer más »

Programando módulos para el Kernel de Linux

8 Comentarios
Programando módulos para el Kernel de Linux

addEventListener('load', function (event) { prettyPrint() }, false);



Hoy doy comienzo a una serie de artículos de introducción a la programación de módulos para el Kernel de Linux. A diferencia de cuando programamos aplicaciones de escritorio, sistemas o servidores, cuando programamos módulos para el Kernel de Linux, un segmentation fault supone el cuelgue total del sistema y la programación debe ser extremadamente cuidadosa.

No voy a hablaros acerca de lo que es Linux, o de que requisitos debe cumplir un sistema para que sea POSIX Compilant. Voy a hablaros sobre como se estructuran las fuentes del Kernel, como se compilan y como podemos crear y cargar un módulo simple en nuestro sistema. Doy por hecho que sabes como descargar las fuentes del Kernel de tu distribución o bien un Kernel genérico de Kernel.org.

Es necesario por parte del lector tener conocimientos sobre el sistema UNIX y sobre sistemas operativos en general, saber la diferencia entre un system call y un library call y tener unos conocimientos medios en el lenguaje de programación C. No soy un gurú de C ni del Kernel seguramente tenga muchos fallos y cosas que pulir.

Leer más »
Publicidad
Publicidad
Inicio
Inicio

Ver más artículos