next up previous contents index
Next: Informando al kernel de Up: Módulos del Kernel de Previous: Un ejemplo de función   Índice General   Índice de Materias


Módulos para dispositivos de bloques en Linux

Como ya se comentó en la sección 4.1.5 (pág.  [*]), los dispositivos de bloque se diferencian de los de caracter, en que el acceso a los mismos de aleatorio y en que la unidad mínima de lectura-escritura es un bloque (normalmente 1KB).

Esto permite al kernel realizar una serie de optimizaciones sobre los accesos a dispositivos de bloque que para el caso de los de caracter no tienen sentido. El kernel se encarga de acumular las llamadas de escritura o lectura, metiéndolas en buffers, ordenándolas, de forma que se mejora de forma notable la velocidad de trabajo con el dispositivo.

Es por esto que en un driver de bloques, las funciones de lectura y escritura no las implementa el programador de drivers, ya están incluidas en el kernel. Básicamente cuando llega al driver una petición de lectura-escritura, este hace referencia (a través de f_ops) a unas funciones genéricas del kernel para el manejo de llamadas a dispositivos de bloques. El kernel ordena las llamadas, las optimiza y finalmente las almacena en una cola de peticiones .

Esta cola de peticiones es la que tenemos que ir atendiendo desde nuestro driver, cada elemento de la cola es del tipo request , y representa una petición de lectura o escritura para nuestro dispositivo.

Tenemos pues que las file_operations de read y write de nuestro driver, han de estar apuntando a las funciones por defecto del kernel de lectura y escritura de drivers de bloque. Estas a su vez transforman llamadas al sistema de lectura-escritura de datos en peticiones de lectura-escritura de bloques, que se almacenan en una cola de peticiones.



Subsecciones
next up previous contents index
Next: Informando al kernel de Up: Módulos del Kernel de Previous: Un ejemplo de función   Índice General   Índice de Materias
Alberto Cortés 2001-03-26