Compartir archivos de Linux - procesar y abrir archivos

  
 

Linux admite compartir archivos abiertos entre diferentes procesos. Para ilustrar el uso compartido de archivos, primero expliquemos la estructura de datos que el kernel utiliza para todas las E /S. La relación entre ellos determina el impacto que un proceso puede tener en otro en términos de intercambio de archivos.

0.1 y objetos relacionados con archivos
(1) inode (i node): almacena información general de un archivo, cada inode tiene un número de inode, en el sistema de archivos, un número de inode puede ser único Identificar un archivo.
(2) dentry (objeto de elemento de directorio): cada dentry representa una parte específica de la ruta. Guardar información de enlace para un directorio. Comprensión personal: describa la correspondencia entre un archivo y un nombre. Archivo (3): Una relación entre un archivo que se abre y un proceso. El objeto de archivo representa un archivo que ha sido abierto por el proceso. En la memoria, el objeto no es un archivo físico. Se crea mediante la llamada al sistema open () correspondiente y se destruye con la llamada al sistema close () (solo se destruye si su recuento de referencia es 0). Varios procesos pueden abrir y manipular el mismo archivo, por lo que puede haber varios objetos de archivo correspondientes en el mismo archivo. Es la información en el apue "entrada de tabla de directorio", la compensación del archivo de connotación y así sucesivamente.

0.2 y objetos relacionados con el proceso
(1) files_struct: Cada proceso utiliza una estructura files_struct para registrar el uso de descriptores de archivos, esta estructura se denomina tabla de archivos abiertos del usuario (con tabla descriptora) . Son los datos privados del proceso. Es la "tabla de descriptor de archivo abierto" en apue.
(2) fs_struct: La estructura fs_struct describe la relación entre un proceso y un sistema de archivos.
La relación de estos objetos se muestra a continuación.


Interpretación del objeto de archivo Apue 0.3
Veamos la relación entre los archivos y los procesos descritos en apue. La figura siguiente (Figura 3-1) muestra las tres tablas del proceso. Relación entre. El proceso tiene dos archivos abiertos diferentes: un archivo se abre como entrada estándar (descriptor de archivo 0) y el otro se abre como salida estándar (descriptor de archivo 1).


(1) Cada proceso tiene un elemento de registro en la tabla de procesos (tabla de descriptor de archivo abierto), el elemento de registro contiene una tabla de descriptores de archivos abiertos, que puede ser Se trata como un vector, y cada descriptor ocupa un elemento.

Cada descriptor de archivo está asociado con:
· marca de descriptor de archivo (close_on_exec).
· Puntero a una entrada de tabla de archivos.

Nota: los archivos (tipo de estructura de archivos) en el descriptor del proceso de Linux (tast_struct) se describen aquí.

(2) El kernel mantiene una tabla de archivos para todos los archivos abiertos. Cada entrada de archivo contiene: indicadores de estado de

middot; (incluidos lectura /escritura, relleno, sincronización, no bloqueo, etc.)
· compensación de archivo actual
· apunta a la entrada del nodo v del archivo Puntero

Nota: la "entrada de archivo" que se describe aquí es el objeto de archivo en el sistema Linux.

(3) Cada archivo abierto tiene una estructura de v-nodos. El v-nodo contiene punteros a tipos de archivos y funciones que realizan varias operaciones en este archivo. Para la mayoría de los archivos, el v-node también incluye el i-node del archivo. Esta información se lee en el disco desde el disco cuando el archivo se abre de nuevo. Estos archivos se leen del disco a la memoria, por lo que estos parámetros se pueden usar rápidamente.

Nota: El nodo v descrito aquí es el nodo i en linux, que corresponde al objeto inodo.

Después de nuestra discusión, nos centramos principalmente en estos tres objetos.

0.4 Recuento de referencias
Hay varios recuentos de referencias en varios de los objetos relacionados con el archivo que analizamos, y sus significados son diferentes. Comprender estos recuentos de referencias es fundamental para nuestro análisis a continuación.
(1) file_struct reference count: indica el número de procesos (subprocesos) que comparten esta estructura.
(Discutiremos los archivos que comparten hilos.)
(2) fs_struct reference count: indica el número de procesos (hilos) que comparten esta estructura.
(Discutiremos los archivos que comparten hilos)
(3) recuento de referencias de objetos de archivo: Abra el recuento de referencias de archivos, consulte el número de descriptores de objetos de archivos.
(dup y fork aumentarán este conteo, el primer abrir hará este conteo 1, cerrar reducirá este conteo, 0 destruirá el objeto de archivo)
(4) conteo de referencias de dentry: cada conteo corresponde a un archivo Objeto
(5) recuento de referencia de inodo: cada recuento corresponde a un dentry.
Extensiones:
(1) close_on_exec flag
Como puede verse en la figura, esto está marcado en la estructura de archivos del proceso, es un indicador de mapa de bits de todos los descriptores de archivo (manejadores de archivos) de un proceso, cada bit Corresponde a un descriptor de archivo abierto, que se utiliza para determinar el descriptor de archivo que debe cerrarse al llamar al sistema execve (), que se puede configurar con fcntl.
(2) Apéndice: estructura de i-node
struct dinode {ushort di_mode; /* tipo de archivo + autoridad de usuario * /short di_nlink; /* número de enlace del archivo * /ushort di_uid; /* ID de usuario propietario * /Ushort di_gid; /* pertenece a la ID del grupo de usuarios principal * /off_t di_size; /* tamaño de archivo * /char di_addr [40]; /* dirección de inicio del área de datos del archivo * /time_t di_atime; /* hora de último acceso * /time_t di_mtime; /* Última hora de modificación * /time_t di_ctime; /* Crear hora * /};

Copyright © Conocimiento de Windows All Rights Reserved