Está en la página 1de 46

Sistemas operativos: una visin aplicada

Captulo 8
Gestin de Archivos y Directorios

Contenido

Visin del usuario del sistema de archivos


Archivos
Directorios
Servicios de archivos
Servicios de directorios
Sistemas de archivos
El servidor de archivos

Sistemas operativos: una visin aplicada 1 J. Carretero, F. Garca, P. de Miguel, F. Prez

1
Visin del usuario

Visin lgica:
Archivos
Directorios
Sistemas de archivos y particiones
Visin fsica:
Bloques o bytes ubicados en dispositivos

Visin Visin
lgica fsica

Sistemas operativos: una visin aplicada 2 J. Carretero, F. Garca, P. de Miguel, F. Prez

Funcin principal

El SF establece una correspondencia entre los archivos y los


dispositivos lgicos.
Interfaz de acceso

SISTEMA
DE
FICHEROS

Proteccin
Sistemas operativos: una visin aplicada 3 J. Carretero, F. Garca, P. de Miguel, F. Prez

2
Caractersticas para el usuario

Almacenamiento permanentes de informacin. No desaparecen


aunque se apague el computador.
Conjunto de informacin estructurada de forma lgica segn
criterios de aplicacin.
Nombres lgicos y estructurados.
No estn ligados al ciclo de vida de una aplicacin particular.
Abstraen los dispositivos de almacenamiento fsico.
Se acceden a travs de llamadas al sistema operativo o de
bibliotecas de utilidades.

Sistemas operativos: una visin aplicada 4 J. Carretero, F. Garca, P. de Miguel, F. Prez

Sistema de archivos

El acceso a los dispositivos es:


Incmodo
Detalles fsicos de los dispositivos
Dependiente de las direcciones fsicas
No seguro
Si el usuario accede a nivel fsico no tiene restricciones
El sistema de archivos es la capa de software entre dispositivos y
usuarios.
Objetivos:
Suministrar una visin lgica de los dispositivos
Ofrecer primitivas de acceso cmodas e independientes de
los detalles fsicos
Mecanismos de proteccin
Sistemas operativos: una visin aplicada 5 J. Carretero, F. Garca, P. de Miguel, F. Prez

3
Archivos: visin lgica
Conjunto de informacin relacionada que ha sido definida por su creador
Estructura de un archivo:
Secuencia o tira de bytes (UNIX, POSIX)

Posicin
Registros (de tamao fijo o variable)

Registro 1 C1 C2 C3 C4 C5 Registro 1 C1 C2 C3
Registro 2 C1 C2 C3 C4 C5 Registro 2 C1 C3 C4 C5
Registro 3 C1 C2 C3 C4 C5 Registro 3 C1 C2 C3 C4
Registro 4 C1 C2 C3 C4 C5 Registro 4 C1 C2 C3 C4 C5

Registro n C1 C2 C3 C4 C5 Registro n C1 C3 C4

Sistemas operativos: una visin aplicada 6 J. Carretero, F. Garca, P. de Miguel, F. Prez

Concepto de archivo

Un espacio lgico de direcciones contiguas usado para


almacenar datos
Tipos de archivos:
Datos:
numricos
carcter
binarios
Programas:
cdigo fuente
archivos objetos (imagen de carga)
Documentos

Sistemas operativos: una visin aplicada 7 J. Carretero, F. Garca, P. de Miguel, F. Prez

4
Representacin del archivo

La informacin relacionada con el archivo se mantiene en el descriptor del


archivo, al que se apunta desde los directorios.
Es distinto en cada sistema operativo: nodo-i, registro Windows, etc.
Tipos de archivos:
Archivos normales: ASCII y binarios.
Archivos especiales: de bloques y de caracteres
Atributos de un archivo:
Nombre
Tipo
Dueo y grupo
Informacin de proteccin
Tamao real
Hora y fecha de creacin
Hora y fecha del ltimo acceso
Hora y fecha de la ltima modificacin
Nmero de enlaces
Sistemas operativos: una visin aplicada 8 J. Carretero, F. Garca, P. de Miguel, F. Prez

Ejemplos de representacin

cabecera
Atributos
Tamao
Nombre
Nombre Seguridad
Atrib.
Size KB
Agrup. FAT Datos

Vclusters

Sistemas operativos: una visin aplicada 9 J. Carretero, F. Garca, P. de Miguel, F. Prez

5
Nombres de fichero y extensiones I

Muy importante para los usuarios. Es caracterstico de cada


sistema de archivos.
Problema: usar nombre lgicos basados en tiras de caracteres.
Motivo: los usuarios no recuerdan el nombre 001223407654
Tipo y longitud cambian de un sistema a otro
Longitud: fija en MS-DOS o variable en UNIX
Extensin: obligatoria o no, ms de una o no, fija para cada
tipo de archivos, etc.
Sensibles a tipografa. Ejemplo: CATALINA y catalina
son el mismo archivo en Windows pero distintos en LINUX.
El sistema de ficheros trabaja con descriptores internos, slo
distingue algunos formatos (ejecutables, texto, ...). Ejemplo:
nmero mgico UNIX.
Sistemas operativos: una visin aplicada 10 J. Carretero, F. Garca, P. de Miguel, F. Prez

Nombres de fichero y extensiones II


Los directorios relacionan nombres lgicos y descriptores internos de ficheros
Las extensiones son significativas para las aplicaciones (html, c, cpp, etc.)

Sistemas operativos: una visin aplicada 11 J. Carretero, F. Garca, P. de Miguel, F. Prez

6
Estructura del fichero

Ninguna - secuencia de palabras o bytes (UNIX)


Estructura sencilla de registros
Lneas
Longitud fija
Longitud variable
Estructuras complejas
Documentos con formato (HTML, postscript)
Fichero de carga reubicable (mdulo de carga)
Se puede simular estructuras de registro y complejas con una
estructura plana y secuencias de control
Quin decide la estructura?
Interna: El sistema operativo
Externa: Las aplicaciones

Sistemas operativos: una visin aplicada 12 J. Carretero, F. Garca, P. de Miguel, F. Prez

Archivos: visin lgica y fsica


Usuario: Visin lgica.
Sistema operativo: visin fsica ligada a dispositivos. Conjunto de bloques.

Posicin

Visin lgica

Archivo A 1 2 3 4 5 6
Bloques: 13
20 7 8 9 10 11 12
1
8 13 14 15 16 17 18
3 19 20 21 22 23 24
16
19 25 26 27 28 29 30

Bloques de la Unidad de Disco

Visin fsica

Sistemas operativos: una visin aplicada 13 J. Carretero, F. Garca, P. de Miguel, F. Prez

7
Archivos: visin fsica

Bloque
Unidad de transferencia
2n sectores
Parmetro fijo por sistema de archivos
Agrupacin
Unidad de asignacin
2p bloques
Aumenta la secuencialidad del archivo
Descripcin de la estructura fsica:
Bloques utilizados

Sistemas operativos: una visin aplicada 14 J. Carretero, F. Garca, P. de Miguel, F. Prez

Descripcin fsica en UNIX (nodo-i)


Tipo de Fichero y Proteccin
Nmero de Nombres
Propietario Tamao mximo del archivo: 10Sb+(Sb/4)Sb +(Sb/4)2Sb +(Sb/4)3Sb
Grupo del Propietario Sb el tamao del bloque y direcciones de bloques de 4 bytes.
Tamao
Instante de creacin
Instante del ltimo acceso
Instante de la ltima modificacin
Puntero a bloque de datos 0
Puntero a bloque de datos 1
Punteros
a Bloques
de Datos
Puntero a bloque de datos 9
Punteros
Puntero indirecto simple a Bloques
Puntero indirecto doble de Datos

Puntero indirecto triple


Punteros
a Bloques
nodo-i de Datos

Punteros
a Bloques
de Datos

Punteros
a Bloques
de Datos

Punteros
a Bloques
de Datos

Sistemas operativos: una visin aplicada 15 J. Carretero, F. Garca, P. de Miguel, F. Prez

8
Descripcin fsica en MS-DOS (FAT)
FAT
Directorio Raz
Nombre Atrib. KB Agrup.
27 <eof>
pep_dir dir 5 27
fiche1.txt 12 45
45 58
51 <eof>
Directorio pep_dir
Nombre Atrib. KB Agrup. 58 <eof>

carta1.wp R 24 74
74 75
prue.zip 16 91 75 76
76 <eof>

91 92
FAT de 12 bits 4K agrupaciones
FAT de 16 bits 64K agrupaciones

Sistemas operativos: una visin aplicada 16 J. Carretero, F. Garca, P. de Miguel, F. Prez

Mtodos de Acceso

Acceso secuencial: lectura de los bytes del archivo en orden


ascendente, empezando por el principio.
read next, write next, reset, no read after last write,
rewind: ir al principio para buscar hacia delante
Lectura -> posicin = posicin + datos ledos
Dispositivos de cinta
ISAM: mtodo de acceso secuencial indexado
Acceso Directo:
read n, write n, goto n, rewrite n, read next, write next,
n = nmero de bloque relativo al origen
Dispositivos: discos magnticos

Sistemas operativos: una visin aplicada 17 J. Carretero, F. Garca, P. de Miguel, F. Prez

9
Contenido

Visin del usuario del sistema de archivos


Archivos
Directorios
Servicios de archivos
Servicios de directorios
Sistemas de archivos
El servidor de archivos
Puntos a recordar

Sistemas operativos: una visin aplicada 18 J. Carretero, F. Garca, P. de Miguel, F. Prez

Concepto de directorio

Objeto que relaciona de forma unvoca un nombre de usuario de


archivo con su descriptor interno
Organizan y proporcionan informacin sobre la estructuracin
de los sistemas de archivos
Una coleccin de nodos que contienen informacin acerca de los
archivos

Sistemas operativos: una visin aplicada 19 J. Carretero, F. Garca, P. de Miguel, F. Prez

10
Directorios: visin lgica
Esquema jerrquico.
Cuando se abre un archivo el SO busca el nombre en la
estructura de directorios.
Operaciones sobre un directorio:
Crear (insertar) y borrar (eliminar) directorios.
Abrir y cerrar directorios.
Renombrar directorios.
Leer entradas de un directorio.
Montar (combinar)
La organizacin jerrquica de un directorio
Simplifica el nombrado de archivos (nombres nicos)
Proporciona una gestin de la distribucin => agrupar
archivos de forma lgica (mismo usuario, misma aplicacin)

Sistemas operativos: una visin aplicada 20 J. Carretero, F. Garca, P. de Miguel, F. Prez

Estructura de los directorios

Tanto la estructura del directorio como los archivos residen en


discos
Los directorios se suelen implementar como archivos
Copias de respaldo en cintas, por seguridad
Informacin en un directorio: nombre, tipo, direccin, longitud
mxima y actual, tiempos de acceso y modificacin, dueo, etc.
Hay estructuras de directorio muy distintas. La informacin
depende de esa estructura.
Dos alternativas principales:
Almacenar atributos de archivo en entrada directorio
Almacenar <nombre, identificador>, con datos archivo en
una estructura distinta. sta es mejor.

Sistemas operativos: una visin aplicada 21 J. Carretero, F. Garca, P. de Miguel, F. Prez

11
Ejemplo de entradas de directorio

Tipo de Contador
Nombre archivo de bloques

...

Cdigo de archivo Nmeros


usuario extendido de bloque

Directorio de CP/M

Nmero
Tipo de del primer
Nombre archivo Reservado Hora bloque

Atributos Fecha Tamao

Directorio de MS-DOS

Nodo-i: Puntero al
descriptor del archivo Nombre

Directorio de UNIX
Sistemas operativos: una visin aplicada 22 J. Carretero, F. Garca, P. de Miguel, F. Prez

Directorio de un nivel

Un nico directorio para todos los usuarios


Problemas de nombrado y agrupacin

carta mapa.gif lista.txt ... Directorio ... programa.o

... Archivos ...

Sistemas operativos: una visin aplicada 23 J. Carretero, F. Garca, P. de Miguel, F. Prez

12
Directorio de dos niveles

Un directorio por cada usuario


Camino de acceso automtico o manual
El mismo nombre de archivo para varios usuarios
Bsqueda eficiente, pero problemas de agrupacin
... Directorio ...
marivi miguel elvira
maestro

test agenda ... Directorio ...


Directorio ... claves
datos lista.c ... claves del usuario
del usuario
... archivos ...
... archivos ...

mail lista.c ... Directorio ...


mio.o
del usuario

... archivos ...

Sistemas operativos: una visin aplicada 24 J. Carretero, F. Garca, P. de Miguel, F. Prez

Directorio con estructura de rbol


Bsqueda eficiente y agrupacin
Nombres relativos y absolutos -> directorio de trabajo
tmp home ... Directorio ... usr
raz

bin include mail


marivi miguel ... elvira

stdio.h buzon
test agenda claves
datos lista.c claves

sh rm vi

mio.o
correo agenda

Sistemas operativos: una visin aplicada 25 J. Carretero, F. Garca, P. de Miguel, F. Prez

13
Directorio con estructura de rbol

Los nombres absolutos contienen todo el camino


Los nombres relativos parten del directorio de trabajo o actual
Cambio de directorio:
cd /spell/mail/prog
cd prog
Borrar un archivo: rm <nombre-archivo>
Crear un subdirectorio: mkdir <nombre_dir>
Ejemplo:
cd /spell/mail
mkdir count
ls /spell/mail/count
Borrar un subdirectorio: rm -r mail

Sistemas operativos: una visin aplicada 26 J. Carretero, F. Garca, P. de Miguel, F. Prez

Nombres jerrquicos

Nombre absoluto: especificacin del nombre respecto a la raz (/


en LINUX, \ en Windows).
Nombre relativo: especificacin del nombre respecto a un
directorio distinto del raz
Ejemplo: (Estamos en /users/) miguel/claves
Relativos al dir. de trabajo o actual: aquel en el que se est al
indicar el nombre relativo. En Linux se obtiene con pwd
Directorios especiales:
. Directorio de trabajo. Ejemplo: cp /users/miguel/claves .
.. Directorio padre. Ejemplo: ls ..
Directorio HOME: el directorio base del usuario

Sistemas operativos: una visin aplicada 27 J. Carretero, F. Garca, P. de Miguel, F. Prez

14
Interpretacin de nombres en LINUX. I

.
..
.
..
.
..
claves 758
textos 3265

Sistemas operativos: una visin aplicada 28 J. Carretero, F. Garca, P. de Miguel, F. Prez

Interpretacin de nombres en LINUX. II

Interpretar /users/miguel/claves
Traer a memoria entradas archivo con nodo-i 2
Se busca dentro users y se obtiene el nodo-i 342
Traer a memoria entradas archivo con nodo-i 342
Se busca dentro miguel y se obtiene el nodo-i 256
Traer a memoria entradas archivo con nodo-i 256
Se busca dentro claves y se obtiene el nodo-i 758
Se lee el nodo-i 758 y ya se tienen los datos del archivo
Cundo parar?
Se ha encontrado el nodo-i del archivo
No se ha encontrado y no hay ms subdirectorios
Estamos en un directorio y no contiene la siguiente
componente del nombre (por ejemplo, miguel).

Sistemas operativos: una visin aplicada 29 J. Carretero, F. Garca, P. de Miguel, F. Prez

15
Sistemas de archivos y particiones

Volumen: conjunto coherente de metainformacin y datos.


Ejemplos de Sistemas de archivos:

MS-DOS
Dos copias Directorio Datos y
Boot
de la FAT Raz Directorios

UNIX
Super Mapas Datos y
Boot nodos-i
Bloque de bits Directorios

Sistemas operativos: una visin aplicada 30 J. Carretero, F. Garca, P. de Miguel, F. Prez

Contenido

Visin del usuario del sistema de archivos


Archivos
Directorios
Servicios de archivos
Servicios de directorios
Sistemas de archivos
El servidor de archivos
Puntos a recordar

Sistemas operativos: una visin aplicada 31 J. Carretero, F. Garca, P. de Miguel, F. Prez

16
Operaciones genricas sobre archivos

creat: crea un archivo con un nombre y proteccin y devuelve


un descriptor
delete: borra el archivo con un nombre
open: abre un archivo con nombre para una(s) operacin(es) y
devuelve un descriptor
close: cierra un archivo abierto con un descriptor
read: lee datos de un archivo abierto, usando su descriptor, a un
almacn en memoria
write: escribe datos a un archivo abierto, usando su descriptor,
desde un almacn en memoria
lseek: mueve el apuntador a relativo_a+ desplazamiento
ioctl: permite manipular los atributos de un archivo

Sistemas operativos: una visin aplicada 32 J. Carretero, F. Garca, P. de Miguel, F. Prez

Servicios POSIX para archivos

Visin lgica: tira secuencial de bytes


Apuntador de posicin a partir del cual se efectan las operaciones
Descriptores de archivos: enteros de 0 a 64K
Predefinidos (describir programas independientes de dispositivos):
0: entrada estndar
1: salida estndar
2: salida de error
Fork: duplicacin de BCP, pero comparticin de tabla de archivos.
Servicios consulta y modificacin atributos.
Proteccin:
dueo grupo mundo
rwx rwx rwx
Ejemplos: 755 indica rwxr-xr-x

Sistemas operativos: una visin aplicada 33 J. Carretero, F. Garca, P. de Miguel, F. Prez

17
Archivos, directorios y servicios en
POSIX (UNIX)
Tipos de archivo:
Normales
Directorios
Especiales
Nombres de archivo y directorio:
Nombre completo (empieza por /)
/usr/include/stdio.h
Nombre relativo al directorio actual (no empieza por /)
stdio.h asumiendo que /usr/include es el directorio
actual.
La entradas . y .. pueden utilizarse para formar rutas de
acceso
../include/stdio.h

Sistemas operativos: una visin aplicada 34 J. Carretero, F. Garca, P. de Miguel, F. Prez

creat. Crea un archivo

Servicio:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int creat(char *name, mode_t mode);

Argumentos:
name Nombre de archivo
mode Bits de permiso para el archivo
Devuelve:
Devuelve un descriptor de archivo -1 si error.

Sistemas operativos: una visin aplicada 35 J. Carretero, F. Garca, P. de Miguel, F. Prez

18
creat. Crea un archivo (II)

Descripcin:
El archivo se abre para escritura.
Si no existe crea un archivo vaci.
UID_dueo = UID_efectivo
GID_dueo = GID_efectivo
Si existe lo trunca sin cambiar los bits de permiso.

Ejemplos:
fd = creat("datos.txt", 0751);
fd = open("datos.txt", O_WRONLY | O_CREAT | O_TRUNC,
0751);

Sistemas operativos: una visin aplicada 36 J. Carretero, F. Garca, P. de Miguel, F. Prez

unlink. Borra un archivo

Servicio:
#include <unistd.h>
int unlink(const char* path);

Argumentos:
path nombre del archivo
Devuelve:
Devuelve 0 -1 si error.
Descripcin:
Decrementa el contador de veces que el archivo est abierto.
Si el contador es 0, borra el archivo y libera sus recursos.

Sistemas operativos: una visin aplicada 37 J. Carretero, F. Garca, P. de Miguel, F. Prez

19
open. abre un archivo
Servicio:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(char *name, int flag, ...);
Argumentos:
name puntero al nombre del archivo
flags opciones de apertura:
O_RDONLY Slo lectura
O_WRONLY Slo escritura
O_RDWR Lectura y escritura
O_APPEND El puntero de acceso se desplaza al final del archivo
abierto
O_CREAT Si existe no tiene efecto. Si no existe lo crea
O_TRUNC Trunca si se abre para escritura

Sistemas operativos: una visin aplicada 38 J. Carretero, F. Garca, P. de Miguel, F. Prez

open. Abre un archivo II

Devuelve:
Un descriptor de archivo -1 si hay error.

Ejemplos:
fd = open("/home/juan/datos.txt");
fd = open("/home/juan/datos.txt",
O_WRONLY | O_CREAT | O_TRUNC, 0750);

Sistemas operativos: una visin aplicada 39 J. Carretero, F. Garca, P. de Miguel, F. Prez

20
close. Cierra un descriptor de archivo

Servicio:
int close(int fd);
Argumentos:
fd descriptor de archivo
Devuelve:
Cero -1 si error.
Descripcin:
El proceso pierde la asociacin a un archivo.

Sistemas operativos: una visin aplicada 40 J. Carretero, F. Garca, P. de Miguel, F. Prez

read. Lectura de un archivo


Servicio:
#include <sys/types.h>
ssize_t read(int fd, void *buf, size_t n_bytes);
Argumentos:
fd descriptor de archivo
buf zona donde almacenar los datos
n_bytes nmero de bytes a leer
Devuelve:
Nmero de bytes realmente ledos -1 si error
Descripcin:
Transfiere n_bytes.
Puede leer menos datos de los solicitados si se rebasa el fin de archivo o
se interrumpe por una seal.
Despus de la lectura se incrementa el puntero del archivo con el nmero
de bytes realmente transferidos.
Sistemas operativos: una visin aplicada 41 J. Carretero, F. Garca, P. de Miguel, F. Prez

21
write. Escritura de un archivo
Servicio:
#include <sys/types.h>
ssize_t write(int fd, void *buf, size_t n_bytes);
Argumentos:
fd descriptor de archivo
buf zona de datos a escribir
n_bytes nmero de bytes a escribir
Devuelve:
Nmero de bytes realmente escritos -1 si error
Descripcin:
Transfiere n_bytes.
Puede escribir menos datos de los solicitados si se rebasa el tamao
mximo de un archivo o se interrumpe por una seal.
Despus de la escritura se incrementa el puntero del archivo con el
nmero de bytes realmente transferidos.
Si se rebasa el fin de archivo el archivo aumenta de tamao.

Sistemas operativos: una visin aplicada 42 J. Carretero, F. Garca, P. de Miguel, F. Prez

lseek.
Modifica el valor del puntero de posicin
Servicio:
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
Argumentos:
fd Descriptor de archivo
offset desplazamiento
whence base del desplazamiento
Devuelve:
La nueva posicin del puntero -1 si error.
Descripcin:
Coloca el puntero de acceso asociado a fd
La nueva posicin se calcula:
SEEK_SET posicin = offset
SEEK_CUR posicin = posicin actual + offset
SEEK_END posicin = tamao del archivo + offset
Sistemas operativos: una visin aplicada 43 J. Carretero, F. Garca, P. de Miguel, F. Prez

22
fnctl. modificacin de atributos de un archivo
Servicio:
#include <sys/types.h>
int fnctl(int fildes, int cmd /* arg*/ ...);
Argumentos:
fildes descriptor de archivos
cmd mandato para modificar atributos, puede haber varios.
Devuelve:
0 para xito -1 si error
Descripcin:
Modifica los atributos de un archivo abierto.

Sistemas operativos: una visin aplicada 44 J. Carretero, F. Garca, P. de Miguel, F. Prez

dup. Duplica un descriptor de archivo

Servicio:
int dup(int fd);
Argumentos:
fd descriptor de archivo
Devuelve:
Un descriptor de archivo que comparte todas las propiedades del fd -1
si error.
Descripcin:
Crea un nuevo descriptor de archivo que tiene en comn con el
anterior:
Accede al mismo archivo
Comparte el mismo puntero de posicin
El modo de acceso es idntico.
El nuevo descriptor tendr el menor valor numrico posible.

Sistemas operativos: una visin aplicada 45 J. Carretero, F. Garca, P. de Miguel, F. Prez

23
stat.
Obtiene informacin sobre un archivo

Servicio:
#include <sys/types.h>
#include <sys/stat.h>
int stat(char *name, struct stat *buf);
int fstat(int fd, struct stat *buf);
Argumentos:
name nombre del archivo
fd descriptor de archivo
buf puntero a un objeto de tipo struct stat donde se
almacenar la informacin del archivo.
Devuelve:
Cero -1 si error

Sistemas operativos: una visin aplicada 46 J. Carretero, F. Garca, P. de Miguel, F. Prez

stat.
Obtiene informacin sobre un archivo
Descripcin:
Obtiene informacin sobre un archivo y la almacena en una estructura de
tipo struct stat:

struct stat {
mode_t st_mode; /* modo del archivo */
ino_t st_ino; /* nmero del archivo */
dev_t st_dev; /* dispositivo */
nlink_t st_nlink; /* nmero de enlaces */
uid_t st_uid; /* UID del propietario */
gid_t st_gid; /* GID del propietario */
off_t st_size; /* nmero de bytes */
time_t st_atime; /* ltimo acceso */
time_t st_mtime; /* ltima modificacion */
time_t st_ctime; /* ltimo modificacion de datos */
};

Sistemas operativos: una visin aplicada 47 J. Carretero, F. Garca, P. de Miguel, F. Prez

24
stat.
Obtiene informacin sobre un archivo

Comprobacin del tipo de archivo aplicado a st_mode:


S_ISDIR(s.st_mode) Cierto si directorio
S_ISCHR(s.st_mode) Cierto si especial de caracteres
S_ISBLK(s.st_mode) Cierto si especial de bloques
S_ISREG(s.st_mode) Cierto si archivo normal
S_ISFIFO(s.st_mode) Cierto si pipe o FIFO

Sistemas operativos: una visin aplicada 48 J. Carretero, F. Garca, P. de Miguel, F. Prez

Ejemplo. Copia un archivo en otro

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>

#define BUFSIZE 512

main(int argc, char **argv) {


int fd_ent, fd_sal;
char buffer[BUFSIZE];
int n_read;

Sistemas operativos: una visin aplicada 49 J. Carretero, F. Garca, P. de Miguel, F. Prez

25
Ejemplo. Copia un archivo en otro (II)

/* abre el archivo de entrada */


fd_ent = open(argv[1], O_RDONLY); if (fd_ent < 0) {
perror("open");
exit(-1);
}

/* crea el archivo de salida */


fd_sal = creat(argv[2], 0644);
if (fd_sal < 0) {

close(fd_ent);
perror("open");
exit(-1);
}

Sistemas operativos: una visin aplicada 50 J. Carretero, F. Garca, P. de Miguel, F. Prez

Ejemplo. Copia un archivo en otro (III)


/* bucle de lectura del archivo de entrada */
while ((n_read = read(fd_ent, buffer, BUFSIZE)) > 0) {
/* escribir el buffer al archivo de salida */
if (write(fd_sal, buffer, n_read) < n_read) {
perror("write2);
close(fd_ent); close(fd_sal);
exit(-1);
}
}
if (n_read < 0) {
perror("read");
close(fd_ent); close(fd_sal);
exit(-1);
}
close(fd_ent); close(fd_sal);
exit(0);
}

Sistemas operativos: una visin aplicada 51 J. Carretero, F. Garca, P. de Miguel, F. Prez

26
Contenido

Visin del usuario del sistema de archivos


Archivos
Directorios
Servicios de archivos
Servicios de directorios
Sistemas de archivos
El servidor de archivos
Puntos a recordar

Sistemas operativos: una visin aplicada 52 J. Carretero, F. Garca, P. de Miguel, F. Prez

Servicios POSIX para directorios

Visin lgica: tabla de entradas nombre lgico, nodo-i


Cada entrada tiene la siguiente estructura:

Struct dirent {
char *d_name; /* nombre archivo */
...
}

Gestin complicada porque los nombres de archivo tienen


longitud variable.
Servicios POSIX: gestin de directorios y de la tabla

Sistemas operativos: una visin aplicada 53 J. Carretero, F. Garca, P. de Miguel, F. Prez

27
mkdir. Crea un directorio
Servicio:
#include <sys/types.h>
#include <dirent.h>
int mkdir(const char *name, mode_t mode);
Argumentos:
name nombre del directorio
mode bits de proteccin
Devuelve:
Cero -1 si error
Descripcin:
Crea un directorio de nombre name.
UID_dueo = UID_efectivo
GID_dueo = GID_efectivo
Sistemas operativos: una visin aplicada 54 J. Carretero, F. Garca, P. de Miguel, F. Prez

rmdir. Borra un directorio

Servicio:
#include <sys/types.h>
int rmdir(const char *name);

Argumentos:
name nombre del directorio
Devuelve:
Cero -1 si error
Descripcin:
Borra el directorio si est vaco.
Si el directorio no est vaco no se borra.

Sistemas operativos: una visin aplicada 55 J. Carretero, F. Garca, P. de Miguel, F. Prez

28
opendir. Abre un directorio

Servicio:
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(char *dirname);

Argumentos:
dirname puntero al nombre del directorio
Devuelve:
Un puntero para utilizarse en readdir() o closedir().
NULL si hubo error.
Descripcin:
Abre un directorio como una secuencia de entradas. Se
coloca en el primer elemento.

Sistemas operativos: una visin aplicada 56 J. Carretero, F. Garca, P. de Miguel, F. Prez

closedir. Cierra un directorio

Servicio:
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);

Argumentos:
dirp puntero devuelto por opendir().
Devuelve:
Cero -1 si error.
Descripcin:
Cierra la asociacin entre dirp y la secuencia de entradas de
directorio.

Sistemas operativos: una visin aplicada 57 J. Carretero, F. Garca, P. de Miguel, F. Prez

29
readdir. Lectura de entradas de directorio

Servicio:
#include <sys/types.h>
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
Argumentos:
dirp puntero retornado por opendir().
Devuelve:
Un puntero a un objeto del tipo struct dirent que representa una
entrada de directorio o NULL si hubo error.
Descripcin:
Devuelve la siguiente entrada del directorio asociado a dirp.
Avanza el puntero a la siguiente entrada.
La estructura es dependiente de la implementacin. Debera asumirse que
tan solo se obtiene un miembro: char *d_name.

Sistemas operativos: una visin aplicada 58 J. Carretero, F. Garca, P. de Miguel, F. Prez

rewindir. Sita el puntero de directorio

Servicio:
#include <sys/types.h>
#include <dirent.h>
void rewindir(DIR *dirp);
Argumentos:
dirp puntero devuelto por opendir()
Descripcin:
Sita el puntero de posicin dentro del directorio en la
primera entrada.

Sistemas operativos: una visin aplicada 59 J. Carretero, F. Garca, P. de Miguel, F. Prez

30
link. Crea una entrada de directorio

Servicio:
#include <unistd.h>
int link(const char *existing, const char *new);
int symlink(const char *existing, const char *new);

Argumentos:
existing nombre del archivo existente.
new nombre de la nueva entrada que ser un enlace al archivo existente.
Devuelve:
Cero -1 si error.
Descripcin:
Crea un nuevo enlace, fsico o simblico, para un archivo existente.
El sistema no registra cul es el enlace original.
existing no debe ser el nombre de un directorio salvo que se tenga
privilegio suficiente y la implementacin soporte el enlace de directorios.

Sistemas operativos: una visin aplicada 60 J. Carretero, F. Garca, P. de Miguel, F. Prez

unlink. Elimina una entrada de directorio


Servicio:
#include <sys/types>
int unlink(char *name);
Argumentos:
name nombre de archivo
Devuelve:
Cero -1 si error
Descripcin:
Elimina la entrada de directorio y decrementa el nmero de
enlaces del archivo correspondiente.
Cuando el nmero de enlaces es igual a cero y ningn
proceso lo mantiene abierto, se libera el espacio ocupado por
el archivo y el archivo deja de ser accesible.
Sistemas operativos: una visin aplicada 61 J. Carretero, F. Garca, P. de Miguel, F. Prez

31
chdir. Cambia el directorio actual

Servicio:
int chdir(char *name);

Argumentos:
name nombre de un directorio

Devuelve:
Cero -1 si error
Descripcin:
Modifica el directorio actual, aquel a partir del cual se
forman los nombre relativos.

Sistemas operativos: una visin aplicada 62 J. Carretero, F. Garca, P. de Miguel, F. Prez

rename. Cambia el nombre de un archivo

Servicio:
#include <unistd.h>
int rename(char *old, char *new);

Argumentos:
old nombre de un archivo existente
new nuevo nombre del archivo
Devuelve:
Cero -1 si error
Descripcin:
Cambia el nombre del archivo old. El nuevo nombre es
new.

Sistemas operativos: una visin aplicada 63 J. Carretero, F. Garca, P. de Miguel, F. Prez

32
getcwd. obtiene el nombre del directorio actual

Servicio:
char *getcwd(char *buf, size_t size);

Argumentos:
buf puntero al espacio donde almacenar el nombre del
directorio actual
size longitud en bytes de dicho espacio
Devuelve:
Puntero a buf o NULL si error.
Descripcin:
Obtiene el nombre del directorio actual

Sistemas operativos: una visin aplicada 64 J. Carretero, F. Garca, P. de Miguel, F. Prez

Programa que lista un directorio

#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>

#define MAX_BUF 256

void main(int argc, char **argv)


{
DIR *dirp;
struct dirent *dp;
char buf[MAX_BUF];

/* imrpime el directorio actual */


getcwd(buf, MAX_BUF);
printf("Directorio actual: %s\n", buf);

Sistemas operativos: una visin aplicada 65 J. Carretero, F. Garca, P. de Miguel, F. Prez

33
Programa que lista un directorio (II)

/* abre el directorio pasado como argumento */


dirp = opendir(argv[1]);

if (dirp == NULL) {
fprintf(stderr,"No puedo abrir %s\n", argv[1]);
} else {

/* lee entrada a entrada */


while ( (dp = readdir(dirp)) != NULL)
printf("%s\n", dp->d_name);
closedir(dirp);
}
exit(0);
}

Sistemas operativos: una visin aplicada 66 J. Carretero, F. Garca, P. de Miguel, F. Prez

Contenido

Visin del usuario del sistema de archivos


Archivos
Directorios
Servicios de archivos
Servicios de directorios
Sistemas de archivos
El servidor de archivos
Puntos a recordar

Sistemas operativos: una visin aplicada 67 J. Carretero, F. Garca, P. de Miguel, F. Prez

34
Sistemas de archivos y particiones

El sistema de archivos permite organizar la informacin dentro de los


dispositivos de almacenamiento secundario en un formato inteligible para el
sistema operativo.
Previamente a la instalacin del sistema de archivos es necesario dividir
fsicamente, o lgicamente, los discos en particiones o volmenes [Pinkert
1989].
Una particin es una porcin de un disco a la que se la dota de una
identidad propia y que puede ser manipulada por el sistema operativo como
una entidad lgica independiente.
Una vez creadas las particiones, el sistema operativo debe crear las
estructuras de los sistemas de archivos dentro de esas particiones. Para ello se
proporcionan mandatos como format o mkfs al usuario.
#mkswap c /dev/hda2 20800
#mkfs -c /dev/hda3 b 8196 123100

Sistemas operativos: una visin aplicada 68 J. Carretero, F. Garca, P. de Miguel, F. Prez

Tipos de particiones

Particin 4 Particin 5

Particin 2

Particin 3

Sistemas operativos: una visin aplicada 69 J. Carretero, F. Garca, P. de Miguel, F. Prez

35
Sistemas de archivos y particiones (I)

Sistema de archivos: conjunto coherente de metainformacin y datos.


Ejemplos de Sistemas de archivos:

MS-DOS
Dos copias Directorio Datos y
Boot
de la FAT Raz Directorios

UNIX
Super Mapas Datos y
Boot nodos-i
Bloque de bits Directorios

Sistemas operativos: una visin aplicada 70 J. Carretero, F. Garca, P. de Miguel, F. Prez

Sistemas de archivos y particiones (II)

Descripcin de sistemas de archivos:


El sector de arranque en MS-DOS
El superbloque en UNIX
Relacin sistema de archivos-dispositivo:
Tpico: 1 dispositivo N sistemas de archivos (particiones)
Grandes archivos: N dispositivos 1 sistema de archivos
Tpicamente cada dispositivo se divide en una o ms particiones
(en cada particin sistema de archivos)
La tabla de particiones indica el principio, el tamao y el tipo de
cada particin.

Sistemas operativos: una visin aplicada 71 J. Carretero, F. Garca, P. de Miguel, F. Prez

36
Bloques y agrupaciones

Bloque: agrupacin lgica de sectores de disco y es la unidad


de transferencia mnima que usa el sistema de archivos.
Optimizar la eficiencia de la entrada/salida de los
dispositivos secundarios de almacenamiento.
Todos los sistemas operativos proporcionan un tamao de
bloque por defecto.
Los usuarios pueden definir el tamao de bloque a usar
dentro de un sistema de archivos mediante el mandato mkfs.
Agrupacin: conjunto de bloques que se gestionan como una
unidad lgica de gestin del almacenamiento.
El problema que introducen las agrupaciones, y los bloques
grandes, es la existencia de fragmentacin interna.
Sistemas operativos: una visin aplicada 72 J. Carretero, F. Garca, P. de Miguel, F. Prez

Tamao bloque, ancho banda y uso disco


Ancho de Banda (Kbytes/sec)

Uso del Espacio de Disco

800 100 %

75
500

50
100 uso del
ancho de
disco 25
50 banda
0 0
256 512 1K 2K 4K 8K 16K 32K

Tamao de Bloque

Sistemas operativos: una visin aplicada 73 J. Carretero, F. Garca, P. de Miguel, F. Prez

37
Estructuras de sistemas de archivos

Sistemas operativos: una visin aplicada 74 J. Carretero, F. Garca, P. de Miguel, F. Prez

Contenido

Visin del usuario del sistema de archivos


Archivos
Directorios
Servicios de archivos
Servicios de directorios
Sistemas de archivos
El servidor de archivos
Puntos a recordar

Sistemas operativos: una visin aplicada 75 J. Carretero, F. Garca, P. de Miguel, F. Prez

38
Servidor de archivos

Para proporcionar un acceso eficiente y sencillo a los


dispositivos de almacenamiento, todos los sistemas operativos
tienen un servidor de archivos que permite almacenar, buscar y
leer datos fcilmente.
Dicho servidor de archivos tiene dos tipos de problemas de
diseo muy distintos entre s:
Definir la visin de usuario del sistema de entrada/salida,
incluyendo servicios, archivos, directorios, sistemas de
archivos, etc.
Definir los algoritmos y estructuras de datos a utilizar para
hacer corresponder la visin del usuario con el sistema fsico
de almacenamiento secundario.
Sistemas operativos: una visin aplicada 76 J. Carretero, F. Garca, P. de Miguel, F. Prez

Estructura del servidor de archivos

Proceso de Proceso de Proceso de ... Proceso de


Usuario 1 Usuario 2 Usuario 3 Usuario n Nivel de
usuario
Nivel de
sistema

Sistema de Archivos Virtual

Mdulo de Organizacin de Archivos


ext2 msdos ffs ... proc

Cache de
Servidor de Bloques Bloques

Manejadores de Dispositivo

...

Sistemas operativos: una visin aplicada 77 J. Carretero, F. Garca, P. de Miguel, F. Prez

39
Servidor de bloques

Se encarga de emitir los mandatos genricos para leer y escribir


bloques a los manejadores de dispositivo.
La E/S de bloques de archivo, y sus posibles optimizaciones, se
lleva a cabo en este nivel del servidor de archivos.
Las operaciones se traducen a llamadas de los manejadores de
cada tipo de dispositivo especfico y se pasan al nivel inferior
del sistema de archivos.
Esta capa oculta los distintos tipos de dispositivos, usando
nombres lgicos para los mismos. Por ejemplo, /dev/hda3
ser un dispositivo de tipo hard disk (hd), cuyo nombre
principal es a y en el cual se trabaja sobre su particin 3.
Los mecanismos de optimizacin de la E/S, como la cache de
bloques, se incluye en este nivel.
Sistemas operativos: una visin aplicada 78 J. Carretero, F. Garca, P. de Miguel, F. Prez

Descomposicin en operaciones de
bloques

Archivos con estructura de bytes


Escritura leer
Fichero (tira de bytes)

Bloques

Sistemas operativos: una visin aplicada 79 J. Carretero, F. Garca, P. de Miguel, F. Prez

40
Manejadores de dispositivos

Un manejador por cada dispositivo, o clase de dispositivo, del sistema.


Su funcin principal es recibir ordenes de E/S de alto nivel, tal como
move_to_block 234, y traducirlas al formato que entiende el controlador
del dispositivo, que es dependiente de su hardware.
Habitualmente, cada dispositivo tiene una cola de peticiones pendientes, de
forma que un manejador puede atender simultneamente a varios dispositivos
del mismo tipo.
Una de las principales funciones de los manejadores de dispositivos es recibir
las peticiones de entrada/salida y colocarlas en el lugar adecuado de la cola de
peticiones del dispositivo afectado.
La poltica de insercin en cada cola puede ser diferente, dependiendo del
tipo de dispositivo o de la prioridad de los dispositivos. Para un disco, por
ejemplo, se suele usar la poltica CSCAN.

Sistemas operativos: una visin aplicada 80 J. Carretero, F. Garca, P. de Miguel, F. Prez

Flujo de datos en el S. de A.

read (fd, buffer, tamao)

Usuario buffer
tamao

archivo lgic o
(VFS)

archivo lgic o bloques del


(FFS) 3 4 5 6
archivo

Bloques lgicos
1756 bloques del
(Servidor 1340 840 8322
dispositivo
de bloques)

1340
1756
bloques del
Manejador de disco
disco y 840
dispositivo
8322

Sistemas operativos: una visin aplicada 81 J. Carretero, F. Garca, P. de Miguel, F. Prez

41
Relacin Sector Lgico y Sector Fsico (I)

El nivel ms bsico del servidor de bloques


Los dispositivos de almacenamiento secundario se muestran
como un array lineal de bloques.
Estructura fsica tridimensional
Nmero de sector fsico
Nmero de cabeza
Nmero de cilindro
Parmetros
Sectores/pista
Pistas/cilindro (N de cabezas)
Cilindros/disco (N de cilindros)

Sistemas operativos: una visin aplicada 82 J. Carretero, F. Garca, P. de Miguel, F. Prez

Relacin Sector Lgico y Sector Fsico (II)

Lgico= N sector fsico +


(sectores/pista)*cabeza +
(sectores/pista)*(N cabezas)*cilindro

Sector lgico Sector fsico Cabeza Cilindro


0 0 0 0
1 1 0 0
2 2 0 0
3 3 0 0
4 0 1 0
5 1 1 0
6 2 1 0
7 3 1 0
8 0 0 1

Sistemas operativos: una visin aplicada 83 J. Carretero, F. Garca, P. de Miguel, F. Prez

42
Estructuras de datos asociadas al S. de A. (I)
Tabla de archivos abiertos (tdaa) por un proceso, dentro del BCP, con sus
descriptores temporales y el valor del apuntador de posicin del archivo para
ese proceso.
El tamao de esta tabla define el mximo nmero de archivos que cada
proceso puede tener abierto de forma simultnea.
El descriptor de archivo fd indica el lugar de tabla. La tdaa se rellena
de forma ordenada, de forma que siempre se ocupa la primera posicin
libre de la tabla.
En los sistemas UNIX cada proceso tiene tres descriptores de archivos
abiertos por defecto: entrada estndar, fd = 0, salida estndar, fd =
1, error estndar, fd = 2.

Sistemas operativos: una visin aplicada 84 J. Carretero, F. Garca, P. de Miguel, F. Prez

Correspondencia bloques-archivos
Cmo asignar los bloques de disco a un archivo y cmo hacerlos
corresponder con la imagen del archivo que tiene la aplicacin?
Asignacin de bloques contiguos.
Sencillo de implementar y el rendimiento de la E/S es muy bueno.
Si no se conoce el tamao total del archivo cuando se crea, puede ser necesario
buscar un nuevo hueco de bloques consecutivos cada vez que el archivo crece.
Fragmentacin externa -> compactar el disco.
Asignacin de bloques discontiguos.
Se asigna al archivo el primer bloque que se encuentra libre.
No hay fragmentacin externa del disco ni bsqueda de huecos.
Los archivos pueden crecer mientras exista espacio en el disco.
Complica la implementacin de la imagen de archivo -> mapa de bloques
del archivo.

Sistemas operativos: una visin aplicada 85 J. Carretero, F. Garca, P. de Miguel, F. Prez

43
Mecanismos enlazados

Listas o ndices enlazados: desde cada entrada de un bloque


existe un enlace al siguiente bloque del archivo.
Ejemplo: tabla FAT de Windows
FAT

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

archivo A: 6 8 4 2

archivo B: 5 9 12

archivo C: 10 3 13

Sistemas operativos: una visin aplicada 86 J. Carretero, F. Garca, P. de Miguel, F. Prez

Mecanismos indexados
Cada archivo tiene sus bloques de ndice que incluyen apuntadores a
los bloques de disco del archivo.
El orden lgico se consigue mediante la insercin de los apuntadores en
orden creciente, a partir del primero, en los bloques de ndices.
Ventaja: basta con traer a memoria el bloque de ndices donde est el
apuntador a los datos para tener acceso al bloque de datos. Si un
apuntador de bloque ocupa 4 bytes y el bloque es de 4 Kbytes, con un
nico acceso a disco tendremos 1024 apuntadores a bloques del archivo.
Problema: el espacio extra necesario para los bloques de ndices.
Ese problema, fue resuelto en UNIX BSD combinando un sistema de ndices
puros con un sistema de ndices multinivel, que es que se usa actualmente en
UNIX y LINUX.
Permite almacenar archivos pequeos sin necesitar bloques de ndices.
Permite accesos aleatorios a archivos muy grandes con un mximo de 3
accesos a bloques de ndices.

Sistemas operativos: una visin aplicada 87 J. Carretero, F. Garca, P. de Miguel, F. Prez

44
Mapa de bloques en un nodo-i
nodo-i

Informacin
del archivo DISCO
820

...
Direcciones de
los 10 primeros 342
bloques 1623

8204 1134
Indirecto simple

...
10211
Indirecto doble Bloque
indirecto

Indirecto triple

2046
20464

675

Sistemas operativos: una visin aplicada 88 J. Carretero, F. Garca, P. de Miguel, F. Prez

Gestin de espacio libre

Mapas de bits, o vectores de bits: un bit por recurso existente (descriptor de


archivo, bloque o agrupacin). Si el recurso est libre, el valor del bit
asociado al mismo es 1, si est ocupado es 0.
Ejemplo, sea un disco en el que los bloques 2, 3, 4, 8, 9 y 10 estn ocupados y el
resto libres, y en el que los descriptores de archivo 2, 3 y 4 estn ocupados. Sus
mapas de bits de seran:
MB de bloques: 1100011100011.... M
MB de descriptores: 1100011...
Fcil de implementar y sencillo de usar. Eficiente si el dispositivo no est muy
lleno o muy fragmentado.
Listas de recursos libres: mantener enlazados en una lista todos los
recursos disponibles (bloques o descriptores de archivos) manteniendo
un apuntador al primer elemento de la lista.
Este mtodo no es eficiente, excepto para dispositivos muy llenos y
fragmentados
Uso de agrupaciones.

Sistemas operativos: una visin aplicada 89 J. Carretero, F. Garca, P. de Miguel, F. Prez

45
Ejemplo de listas de recursos

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

Bloques libres 7 11 14 16 17 18 (A)


Bloques libres 7,1 11,1 14,1 16,3 (B)

Sistemas operativos: una visin aplicada 90 J. Carretero, F. Garca, P. de Miguel, F. Prez

Incremento de prestaciones

Basados en el uso de almacenamiento intermedio de datos de entrada/salida


en memoria principal. Estos mecanismos son de dos tipos:
Discos RAM, cuyos datos estn almacenados slo en memoria.
Aceptan todas las operaciones de cualquier otro sistema de archivos y
son gestionados por el usuario.
Pseudodispositivos para almacenamiento temporal o para operaciones
auxiliares del sistema operativo. Su contenido es voltil.
Cache de datos, instaladas en secciones de memoria principal
controladas por el sistema operativo, donde se almacenan datos para
optimizar accesos posteriores.
Se basan en la existencia de proximidad espacial y temporal en las
referencias a los datos de entrada/salida.
Dos caches importantes dentro del servidor de archivos: cache de
nombres y cache de bloques.

Sistemas operativos: una visin aplicada 91 J. Carretero, F. Garca, P. de Miguel, F. Prez

46

También podría gustarte