Inicio / Wikis / Tutoriales / Dentro del núcleo Linux 2.4 - Administración de Descriptores de Ficheros

Dentro del núcleo Linux 2.4 - Administración de Descriptores de Ficheros

(4 opiniones)
14 de Febrero de 2006
Linux

24 - Administración de Descriptores de Ficheros

Bajo Linux hay varios niveles de rodeos entre el descriptor de ficheros del usuario y la estructura de inodos del núcleo. Cuando un proceso realiza la llamada al sistema open(2), el núcleo devuelve un entero pequeño no negativo el cual puede ser usado para operaciones de E/S subsecuentes en este fichero. Cada estructura de fichero apunta a dentry a través de file->f_dentry. Y cada dentry apunta a un inodo a través de dentry->d_inode.

Cada tarea contiene un campo tsk->files el cual es un puntero a struct files_struct definida en include/linux/sched.h:



/*
* Abre la estructura tabla del fichero
*/
struct files_struct {
atomic_t count;
rwlock_t file_lock;
int max_fds;
int max_fdset;
int next_fd;
struct file fd; /* actualmente una matriz de descriptores de ficheros */
fd_set *close_on_exec;
fd_set *open_fds;
fd_set close_on_exec_init;
fd_set open_fds_init;
struct file * fd_array[NR_OPEN_DEFAULT];
};




El file->count es una cuenta de referencia, incrementada por get_file() (usualmente llamada por fget()) y decrementada por fput() y por put_filp(). La diferencia entre fput() y put_filp() es que fput() hace más trabajo usualmente necesitado para ficheros regulares, como la liberación de conjuntos de bloqueos, liberación de dentry, etc, mientras que put_filp() es sólo para manipular las estructuras de tablas de ficheros, esto es, decrementa la cuenta, quita el fichero desde anon_list y lo añade a la free_list, bajo la protección del spinlock files_lock.

El tsk->files puede ser compartido entre padre e hijo si el hilo hijo fue creado usando la llamada al sistema clone() con la bandera CLONE_FILES establecida en los argumentos de las banderas de clone. Esto puede ser visto en kernel/fork.c:copy_files() (llamada por do_fork()) el cual sólo incrementa el file->count si CLONE_FILES está establecido, en vez de la copia usual de la tabla de descriptores de ficheros en la tradición respetable en el tiempo de los clásicos
fork(2) de UNIX.

Cuando un fichero es abierto, la estructura del fichero asignada para él es instalada en el slot current->files->fd[fd] y un bit fd es establecido en el bitmap current->files->open_fds. Todo esto es realizado bajo la protección de escritura del spinlock read-write current->files->file_lock. Cuando el descriptor es cerrado un bit fd es limpiado en current->files->open_fds y current->files->next_fd es establecido igual a fd como una indicación para encontrar el primer descriptor sin usar la próxima vez que este proceso quiera abrir un fichero.
Valora este capítulo: (4 opiniones)
Autor y licencia de 'Dentro del núcleo Linux 2.4 - Administración de Descriptores de Ficheros'
Tigran Aivazian Extraído de: http://es.tldp.org/Manuales-LuCAS/DENTRO-NUCLEO-LINUX/dentro-nucleo-linux-html/ GNU Free Documentation License
Licencia GNU Free Documentation License: http://www.es.gnu.org/licencias/fdles.html
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.

Opiniona sobre 'Dentro del núcleo Linux 2.4 - Administración de Descriptores de Ficheros' (4)

Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.

Opina sobre este tutorial



* Valoración:
* Nombre:
* Correo electrónico:
* Título:
* Comentario:

Wikis relacionados con 'Dentro del núcleo Linux 2.4 - Administración de Descriptores de Ficheros'

Este documento describe cómo hacer el enmascarado (masqueradinq), proxy transparente, reenvío de puertos (port forwarding),... Más »
La fijación de precios está convirtiéndose en un modo de vida para muchos minoristas y... Más »
En este documento se presenta la información acerca de la instalación, configuración, ejecución y mantenimiento... Más »
Esta es la primerísima edición del Linux en Castellano COMO. La audiencia a la que... Más »
Este documento pretende ser el punto de entrada de los hispanohablantes al mundo Linux, intentando... Más »
¿Estás seguro de que deseas eliminar este capítulo?