Todo los dispositivos instalados en una máquina pueden ser accedidos a través de un interfaz de ficheros bajo el directorio /dev/ . Allí podemos encontrar los dispositivos conectados a las controladoras IDE (hda, hdb, hdc y hdd), el dsp de la tarjeta de sonido, etc.
Los ficheros asociados a un dispositivo pueden ser de dos tipos, de
caracter y de
bloque . Si ejecutamos un
ls -l /dev
, la primera columna nos indica el tipo de dispositivo, ``c''
para dispositivos de caracter y ``b'' para dispositivos de bloque.
Los
dispositivos de caracter
son accedidos secuencialmente, un caracter cada
vez. Algunos ejemplos de dispositivos de caracter son el ratón, el teclado, un
terminal de texto, una cinta magnética, null
, etc.
Los dispositivos de bloque se caracterizan por ser de acceso aleatorio, la unidad mínima de lectura-escritura no es un caracter, sino un bloque (1KB). Algunos ejemplos de dispositivos de caracter son los discos duros, los disquetes, los CDROMS, etc.
$ ls -l /dev ... brw-rw---- 1 root disk 3, 0 jul 5 2000 hda brw-rw---- 1 root disk 3, 1 jul 5 2000 hda1 brw-rw---- 1 root disk 3, 2 jul 5 2000 hda2 ... brw-rw---- 1 root disk 3, 64 jul 5 2000 hdb ... crw-rw-rw- 1 root root 1, 3 nov 16 04:09 null ... crw-rw-rw- 1 root root 1, 5 nov 16 04:09 zero ...
Las columnas 4 y 5 (separadas por una coma) de la salida del comando anterior nos informan del número mayor y el número menor del dispositivo.
Cuando accedemos a un dispositivo, hemos de utilizar su driver asociado, el número mayor, no es más que un identificador que nos informa de por qué driver es manejado cada dispositivo. Como un mismo driver puede manejar varios dispositivos, es necesario identificar estos con otro número, el número menor. Así, un determinado dispositivo está determinado unívocamente por su combinación ``número mayor-número menor''.
Cuando yo hago un cat mi_fich > /dev/null
, el kernel ha de acceder al
driver del disco duro donde esté almacenado mi_fich4.2, tendrá que
usar el driver ``3'', para el dispositivo con número menor ``2''.
Para escribir en \dev\null
el kernel usa el driver ``1'', considerando
que hemos accedido al dispositivo con número menor ``3''.
Gracias a la existencia de los números menores, un mismo driver puede
implementar diferentes operaciones dependiendo del número menor del dispositivo
al que lo esté usando. Por ejemplo el driver de los dispositivos null
y
zero
es el mismo, pero dependiendo de por cual de los dos le llames,
se comportará de manera diferente.