You are on page 1of 8

Sistemas Operativos. Universidad Carlos III de Madrid.

(c) Área de Arquitectura y Tecnología de Computadores

Objetivos
2

 

SISTEMAS OPERATIVOS: SISTEMAS DE FICHEROS
Directorios

Conocer los conceptos de fichero y directorio así como sus características. Utilizar los servicios de gestión de Ficheros y directorios ofrecidos por el sistema operativo. Comprender la estructura de un sistema de ficheros. Comprender los mecanismos en los que se apoya un servidor de ficheros y aplicarlos a ejercicios sencillos.
Sistemas Operativos - Curso 2008/2009

Contenido
3 4

Organización de ficheros

   

Directorios. Alternativas de estructura. Interpretación de nombres. Manipulación de directorios.

Un sistema de ficheros puede almacenar gran cantidad de ficheros. Se necesita algún mecanismo para organizar y localizar los ficheros. Extensiones: Organización por tipo de fichero. Directorio: Metáfora de la carpeta con documentos.
Sistemas Operativos - Curso 2008/2009

 

Sistemas Operativos - Curso 2008/2009

Concepto de directorio
5 6

Ejemplo: Explorador de Windows

Directorio: Objeto que relaciona de forma unívoca un nombre de usuario de fichero con su descriptor interno. Organizan y proporcionan información sobre la estructuración de los sistemas de ficheros. Un directorio tiene entrada por cada fichero que alberga. Información de la entrada:
 

Descriptor interno del fichero. Posiblemente, algunos atributos del fichero.
Sistemas Operativos - Curso 2008/2009 Sistemas Operativos - Curso 2008/2009

Material de apoyo. Debe completarse estudiando el libro de texto.

1

Curso 2008/2009 Sistemas Operativos . misma aplicación) Sistemas Operativos .xls notas. elvira bin include mail stdio.xls notas. Debe completarse estudiando el libro de texto.jpg foto..doc listado.  La organización jerárquica de un directorio   Simplifica el nombrado de ficheros (nombres únicos) Proporciona una gestión de la distribución => agrupar ficheros de forma lógica (mismo usuario. Camino de acceso automático o manual El mismo nombre de fichero para varios usuarios Búsqueda eficiente. 2 .jpg sh correo agenda mio. carta.txt foto..  Abrir y cerrar directorios. Manipulación de directorios. Universidad Carlos III de Madrid.o rm vi Sistemas Operativos .jpg foto. Cuando se abre un fichero el SO busca el nombre en la estructura de directorios. Interpretación de nombres.Sistemas Operativos. Operaciones sobre un directorio: Crear (insertar) y borrar (eliminar) directorios.txt foto.. Un único directorio para todos los usuarios.  Renombrar directorios.doc listado..Curso 2008/2009 Alternativas de estructura 9 10 Directorio de un nivel        Directorio de un único nivel.c claves test agenda claves buzon carta.  Directorios.  Leer entradas de un directorio. Alternativas de estructura. Directorio con forma de grafo generalizado.Curso 2008/2009 Directorio de dos niveles 11 12 Directorio con estructura de árbol       Un directorio por cada usuario.h datos lista...jpg Sistemas Operativos .Curso 2008/2009 Sistemas Operativos . usr marivi miguel .Curso 2008/2009 Sistemas Operativos . Directorio con estructura de grafo acíclico. Problemas con el nombrado de los ficheros. (c) Área de Arquitectura y Tecnología de Computadores Directorios: visión lógica 7 8 Contenido        Esquema jerárquico. Directorio con estructura de árbol. Directorio raíz . Directorio de dos niveles.Curso 2008/2009 Material de apoyo.  Alta probabilidad de coincidencia de nombres. pero problemas de agrupación daniel carlos Búsqueda eficiente y agrupación Nombres relativos y absolutos -> directorio de trabajo tmp home .

.  Tamaño del fichero.  Entrada de directorio:  Atributos Asumen que todos los ficheros se almacenan con asignación contigua.  Identificador  Ejemplo: Formato ISO-9660 de CD-ROM Ubicación Fecha Nombre  Directorios para ficheros indexados.  Longitud Sistemas Operativos . tmp home . Sistemas Operativos .Curso 2008/2009 Tamaño Sistemas Operativos . Asumen que todos los ficheros se almacenan con asignación no contigua y los bloques se representan como una lista enlazada. elvira bin include mail stdio. no subdirectorios Algoritmo de búsqueda de bucle cuando se hace un enlace  Tanto la estructura del directorio como los ficheros residen en discos.Curso 2008/2009 caso de usar un fichero la mayoría son metadatos de dicho fichero.. tiempos de acceso y modificación. Asumen que todos los ficheros se almacenan con asignación no contigua y los bloques o extents se representan mediante una estructura indexada  Directorios para ficheros enlazados. dirección.h claves test agenda claves buzon sh correo agenda claves rm vi  Borrar un subdirectorio: rm -r mail Sistemas Operativos .   Problema grave: existencia de bucles en el árbol. longitud máxima y actual.  del fichero en entrada de directorio. Universidad Carlos III de Madrid. usr    Borrar un fichero: rm <nombre-fichero> Crear un subdirectorio: mkdir <nombre_dir> Ejemplo: cd /spell/mail mkdir count ls /spell/mail/count datos lista.Curso 2008/2009 Directorio de grafo acíclico 15  16 Estructura de los directorios  link: Un fichero con varios nombres -> control de enlaces   un único fichero con contador enlaces en descriptor (e.. Sistemas Operativos . Soluciones:   Información en un directorio: nombre. dueño. Físicos) ficheros nuevos con el nombre destino dentro (e.Curso 2008/2009 Material de apoyo.c marivi miguel .  En  Limitación de implementación en UNIX: sólo enlaces físicos dentro del mismo sistema de ficheros.. del primer bloque del fichero. si 0 borrar fichero b) recorrer los enlaces y borrar todos c) borrar únicamente el enlace y dejar los demás Permitir sólo enlaces a ficheros..Curso 2008/2009 Estructura de directorio: Alternativas 17 18 Directorio para ficheros contiguos   Directorios para ficheros contiguos.Curso 2008/2009 Sistemas Operativos . (c) Área de Arquitectura y Tecnología de Computadores Directorio con estructura de árbol 13 14 Directorio de grafo acíclico      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 Tienen ficheros y subdirectorios compartidos Este concepto no es visible para el usuario en Windows.. Debe completarse estudiando el libro de texto.Sistemas Operativos. Alternativas de implementación de directorios:  Utilizar  Borrado de enlaces:    bloques especiales con la información del directorio.  Utilizar un fichero cuyo contenido es el directorio. simbólicos) a) decrementar contador. Directorio raíz . tipo. 3 . etc.

 Alternativa más usada.  Directorio HOME: el directorio base del usuario   Sistemas Operativos . juegos. Universidad Carlos III de Madrid.  Tamaño del fichero. .   La longitud de los nombres no está predeterminada. de trabajo o actual: aquel en el se está al indicar el nombre relativo. (c) Área de Arquitectura y Tecnología de Computadores Directorio para ficheros enlazados 19 20 Directorio para ficheros indexados    Entrada de directorio:  Atributos de fichero.) Estructurado: operaciones claramente definidas y ocultación Sencillez: la entrada de directorio debe ser lo más sencilla posible.  Sencillez Eficiencia: localizar un fichero rápidamente Nombrado: conveniente y sencillo para los usuarios    Dos usuarios pueden tener el mismo nombre para ficheros distintos Los mismos ficheros pueden tener nombres distintos Nombres de longitud variable en la construcción de sistemas jerárquicos.  Fácil creación de sinónimos para el nombre de un fichero.  Directorios especiales: .Curso 2008/2009 Nombres jerárquicos 23 24 Contenido       Nombre absoluto: especificación del nombre respecto a la raíz (/ en LINUX.Curso 2008/2009 Directorios para ficheros indexados 21 22 Organización del directorio    Ventajas:  No hay que modificar el directorio para cambiar los atributos de un fichero. Debe completarse estudiando el libro de texto. Alternativas de estructura. …). Entrada de directorio:  Nombre. \ en Windows). Directorio de trabajo. Nombre relativo: especificación del nombre respecto a un directorio distinto del raíz Ejemplo: (Estamos en /users/) miguel/claves  Relativos al dir.. etc.  Identificador de metadatos de fichero (nodo-i. Sistemas Operativos . Manipulación de directorios.Curso 2008/2009 Material de apoyo. Id nodo-i Nombre Nombre Atributos Nro Primer Sistemas Operativos . 4 . Ejemplo: cp / users/miguel/claves .Curso 2008/2009   Agrupación: agrupación lógica de los ficheros según sus propiedades (por ejemplo: programas Pascal. Sistemas Operativos . Ejemplo: ls .  No hay que modificar el directorio cuando un fichero cambia de longitud..Curso 2008/2009 Sistemas Operativos .  Un nodo-i puede representar un directorio o un fichero. Interpretación de nombres.  Número del primer bloque.Sistemas Operativos. Directorio padre. En Linux se obtiene con pwd  Directorios.Curso 2008/2009 bloque Sistemas Operativos . entrada Ejemplo: FAT Tipo Hora Fecha Tamaño MFT.

5 ..Curso 2008/2009 Sistemas Operativos . Ejemplos de Sistemas de ficheros:  Hacen falta servicios para construir la jerarquía: mount y umount. El recorrido de cada directorio puede implicar más de una lectura a disco. . nombre de fichero>. /pepe/tmp.Curso 2008/2009 i-nodo 2 Sistemas Operativos . Interpretación de nombres.). (c) Área de Arquitectura y Tecnología de Computadores Interpretación de nombres en UNIX 25 26 Interpretación de nombres en UNIX   Cada directorio se almacena como un fichero con paras <número de i-nodo. Inicialmente en memoria el directorio /.. . 2 2 25 80 37 .. Localizar el i-nodo del fichero /users/daniel/notas. Alternativas de estructura.Curso 2008/2009 121 i-nodo 80 i-nodo i-nodo 33 Jerarquía de directorios 27 28 Sistemas de ficheros y particiones   ¿Árbol único de directorios? Por dispositivo lógico en Windows (c:\users\miguel\claves..)  Para todo el sistema en UNIX (/users/miguel/claves.  La búsqueda en un directorio es secuencial. Manipulación de directorios. tmp users Bin Depende del número de ficheros en el directorio y de la longitud de los nombres. Universidad Carlos III de Madrid..Curso 2008/2009 Montado de sistemas de ficheros o particiones 29 Volumen raiz (/dev/hd0) / Volumen sin montar (/dev/hd1) / mount /lib /bin /usr /d 1 /d2 /d3 /dev/hd1 /usr /lib /bin /usr Volumen montado Contenido 30     / Directorios.   Volumen: conjunto coherente de metainformación y datos.Curso 2008/2009 Material de apoyo.txt. j:\pepe\tmp.. carlos daniel 80 2 88 121 .Curso 2008/2009 Sistemas Operativos . proy daniel 88 80 21 33   ¿Cuantos bloques de disco ocupa un directorio?  ..   MS-DOS Boot UNIX Boot Super Bloque Mapas de bits nodos-i Datos y Directorios Dos copias de la FAT Directorio Raíz Datos y Directorios mount /dev/hda /users umount /users   Ventajas: imagen única del sistema y ocultan el tipo de dispositivo Desventajas: complican la traducción de nombres. . lectura Sistemas Operativos . Debe completarse estudiando el libro de texto.Sistemas Operativos. . . /d3/f1 /d3/f2 /usr/d1 /usr/d 3 /usr/d 3/f1 /usr/d3/f2 Sistemas Operativos . problemas para enlaces físicos entre ficheros Sistemas Operativos .

h> #include <sys/stat.  Argumentos:   name nombre del directorio mode bits de protección Cero ó -1 si error Crea un directorio de nombre name. Servicio: #include <sys/types.Curso 2008/2009 Devuelve:   Devuelve:   Descripción:   Descripción:    Material de apoyo. Universidad Carlos III de Madrid. NULL si hubo error. 6 . ¿Cómo se sabe si un nombre corresponde con fichero o directorio? Servicio #include <sys/types. Abre un directorio como una secuencia de entradas. (c) Área de Arquitectura y Tecnología de Computadores Ejemplo: manipulación de directorios 31 32 Mkdir – Crear un directorio     Servicios que realizan el tratamiento de los archivos que representan directorios. struct stat *buf).h> int mkdir(const char *name. Sistemas Operativos . S_ISDIR(s.Curso 2008/2009  Devuelve:   Descripción:    Sistemas Operativos . . La estructura es dependiente de la implementación.h> int closedir(DIR *dirp).h> #include <dirent.Curso 2008/2009 dirp puntero devuelto por opendir(). mode_t mode).Curso 2008/2009 Rmdir – Borrar un directorio 33 34 Opendir – Abrir un directorio   Servicio: #include <sys/types. UID_dueño = UID_efectivo GID_dueño = GID_efectivo Sistemas Operativos . struct stat *buf).h> #include <dirent.  Argumentos:    Argumentos:  dirp puntero retornado por opendir().h> struct dirent *readdir(DIR *dirp). Sistemas Operativos . Se coloca en el primer elemento.st_mode) /* cierto si se trata de directorio */ Servicio: #include <sys/types. Devuelve la siguiente entrada del directorio asociado a dirp. Servicio: #include <sys/types. Debería asumirse que tan solo se obtiene un miembro: char *d_name. Si el directorio no está vacío no se borra.h> #include <dirent..h> #include <dirent.  Argumentos:  name nombre del directorio Cero ó -1 si error Borra el directorio si está vacío.Curso 2008/2009  Argumentos:   Devuelve:  dirname puntero al nombre del directorio Un puntero para utilizarse en readdir() o closedir(). Cero ó -1 si error. Un puntero a un objeto del tipo struct dirent que representa una entrada de directorio o NULL si hubo error.h> DIR *opendir(char *dirname).h> int rmdir(const char *name). Sistemas Operativos . Sistemas Operativos .Sistemas Operativos..Curso 2008/2009  Devuelve:   Descripción:    Descripción:  Closedir – Cerrar un directorio 35 36 Readdir – Lectura de entradas de directorio   Servicio: #include <sys/types. Avanza el puntero a la siguiente entrada. Debe completarse estudiando el libro de texto. int fstat(int fd. Cierra la asociación entre dirp y la secuencia de entradas de directorio.h> int stat(char *name.

h> int link(const char *existing. El nuevo nombre es new. Debe completarse estudiando el libro de texto.h> void rewindir(DIR *dirp). existing no debe ser el nombre de un directorio salvo que se tenga privilegio suficiente y la implementación soporte el enlace de directorios Sistemas Operativos . Crea un nuevo enlace. Cuando el número de enlaces es igual a cero y ningún proceso lo mantiene abierto. Cero ó -1 si error. const char *new). const char *new). se libera el espacio ocupado por el archivo y el archivo deja de ser accesible.Curso 2008/2009  Descripción:    Devuelve:   Descripción:  Rename – Cambiar el nombre de un archivo 41 42 Getcwd – Obtener el nombre del directorio actual   Servicio: #include <unistd.  dirp Sistemas Operativos .Curso 2008/2009 existing nombre del archivo existente.  Argumentos:    Argumentos: puntero devuelto por opendir()  Descripción:  Sitúa el puntero de posición dentro del directorio en la primera entrada. físico o simbólico.Curso 2008/2009  Argumentos:   Devuelve:  name nombre de un directorio Cero ó -1 si error Modifica el directorio actual. Servicio: char *getcwd(char *buf. Sistemas Operativos .Curso 2008/2009  Devuelve:   Descripción:   Puntero a buf o NULL si error. Servicio: #include <unistd.  Argumentos:  name nombre de archivo Cero ó -1 si error Elimina la entrada de directorio y decrementa el número de enlaces del archivo correspondiente.Sistemas Operativos.  Argumentos: old nombre de un archivo existente  new nuevo nombre del archivo   Argumentos: buf puntero al espacio donde almacenar el nombre del directorio actual  size longitud en bytes de dicho espacio   Devuelve:  Cero ó -1 si error Cambia el nombre del archivo old. Servicio: int chdir(char *name). size_t size). Sistemas Operativos . aquel a partir del cual se forman los nombre relativos. Universidad Carlos III de Madrid.h> int rename(char *old. (c) Área de Arquitectura y Tecnología de Computadores Rewindir – Posicionar el puntero de directorio 37 38 Link – Crear una entrada de directorio   Servicio: #include <sys/types. char *new). Sistemas Operativos . para un archivo existente.Curso 2008/2009   Devuelve:  Descripción:    Unlink – Eliminación de entrad de directorio 39 40 Chdir – Cambiar el directorio actual   Servicio: #include <sys/types> int unlink(char *name). 7 . int symlink(const char *existing. El sistema no registra cuál es el enlace original.Curso 2008/2009 Descripción:  Material de apoyo.h> #include <dirent. Obtiene el nombre del directorio actual Sistemas Operativos . new nombre de la nueva entrada que será un enlace al archivo existente.

3 Estructura de directorios. } else { /* lee entrada a entrada */ while ( (dp = readdir(dirp)) != NULL) printf("%s\n". 8 . struct dirent *dp. 9. 10.9. Sistemas Operativos . MAX_BUF). buf)."No puedo abrir %s\n".4 Montaje de sistemas de archivos.3 Directorios. 10. closedir(dirp). } Sistemas Operativos . Estructura y almacenamiento del directorio. dp->d_name). (c) Área de Arquitectura y Tecnología de Computadores Ejemplo: Listado de un directorio 43 44 Ejemplo: Listado de un directorio /* abre el directorio pasado como argumento */ dirp = opendir(argv[1]). if (dirp == NULL) { #include <sys/types. char buf[MAX_BUF]. 11.3.h> #include <dirent.  Silberschatz 2006:    Sistemas Operativos .3. char **argv) { DIR *dirp.4. Debe completarse estudiando el libro de texto. argv[1]). 12. printf("Directorio actual: %s\n". Universidad Carlos III de Madrid. El servidor de directorios.h> #include <stdio. Directorios 9.Curso 2008/2009 void main(int argc. } exit(0).Sistemas Operativos.Curso 2008/2009 Lecturas recomendadas 45 Básica  Complementaria  Carretero 2007:    Stallings 2005:   9.h> #define MAX_BUF 256 fprintf(stderr. Nombre jerárquicos. /* imrpime el directorio actual */ getcwd(buf. 9.10.Curso 2008/2009 Material de apoyo. Implementación de directorios.