Sistemas operativos modernos

Campo Bytes Descripción Mode 2 Tipo de archivo, bits de protección, bits setuid, setgid Nlinks 2 Número de entradas de directorio que apuntan a este nodo-i Uid 2 Identificador de usuario (UID) del dueño del archivo Gid 2 Identificador de grupo (GID) del dueño del archivo Size 4 Tamaño del archivo en bytes Addr 39 Dirección de primeros 10 bloques de disco, luego 3 bloques indirectos Gen 1 Número de generación (se incrementa en cada reciclaje del nodo-i) Atime 4 Hora de último acceso al archivo Mtime 4 Hora de última modificación del archivo Ctime 4 Hora de última modificación del nodo-i (excepto las otras horas) Figura 10-32. Estructura del nodo-i en System V. Veamos ahora la manera en que el sistema lee un archivo. Recordemos que una llamada tí­ pica al procedimiento de biblioteca para invocar la llamada al sistema read tiene este aspecto: n = read{fd, buffer, nbytes); Cuando el kemel obtiene el control, lo único que tiene para comenzar son estos tres parámetros, y la información de sus tablas internas relacionada con el usuario. Uno de los elementos de las tablas internas es el arreglo de descriptores de archivo, el cual se indiza con un descriptor de archivo y contiene una entrada por cada archivo abierto (hasta el número máximo, que suele ser cercano a 20 ). Lo que se busca es partir de este descriptor de archivo y obtener el nodo-i correspondien­ te. Consideremos un posible diseño: simplemente se coloca un apuntador al nodo-i en la tabla de descriptores de archivo. Aunque sencillo, por desgracia este método no funciona. El proble­ ma es el siguiente. Cada descriptor de archivo tiene asociada una posición de archivo que in­ dica en cuál byte principiará la siguiente lectura (o escritura). ¿Dónde debe colocarse? Una posibilidad es colocarla en la tabla de nodos-i. Sin embargo, tal estrategia falla si dos o más procesos no relacionados abren el mismo archivo al mismo tiempo, porque cada uno tiene su propia posición de archivo. Una segunda posibilidad es colocar la posición en la tabla de descriptores de archivo. Así, cada proceso que abra un archivo obtendrá su propia posición privada de archivo. Por desgra­ cia, este método también fracasa, pero el motivo es más sutil y tiene que ver con la naturaleza del compartimiento de archivos en UNIX. Consideremos un script de shell, s, que consta de dos coman­ dos, p] y p2, que deben ejecutarse en orden. Si el script se invoca con la línea de comandos s >x se espera que p l escriba sus salidas en x, y luego p 2 escriba sus salidas también en x, a partir del punto donde p l se detuvo.

RkJQdWJsaXNoZXIy MjI4NDcx