pdf, 100K - Departamento de Informática

Anuncio
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Archivos y Directorios
Atributos de un archivo, estructura del
sistema de archivos, enlaces simbólicos y
operaciones sobre el directorio
1
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Funciones: stat, fstat y lstat
#include <sys/types.h>
#include <sys/stat.h>
int stat(const char *pathname, struct stat *buf);
int fstat(int *fildes, struct stat *buf);
int lstat(const char *pathname , struct stat *buf);
return: 0 si OK, -1 si existe error
• stat retorna estado de un archivo con nombre
• fstat retorna estado de un archivo abierto
• lstat es similar a stat, pero se aplica a un enlace simbólico
(no entrega información sobre el enlace referenciado)
Raúl Monge
III-2
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Estructura de Estado de un Nodo
struct stat { /* estructura dependiente de la implementación */
mode_t
ino_t
dev_t
dev_t
nlink_t
uid_t
gid_t
off_t
time_t
time_t
time_t
long
long
st_mode;
st_ino;
st_dev;
st_rdev;
st_nlink;
st_uid;
st_gid;
st_size;
st_atime;
st_mtime;
st_ctime;
st_blksize;
st_blocks;
/* tipo de archivo & modo (permisos) */
/* # de i-node */
/* # de dispositivo (sistema de archivo) */
/* # de dispositivo para archivos especiales */
/* # de enlaces */
/* User ID del dueño */
/* Grupo ID del dueño */
/* tamaño en bytes para archivos regulares */
/* tiempo de último acceso */
/* tiempo de última modificación */
/* tiempo de última modificación de status */
/* mejor tamaño de bloque de E/S */
/* # de bloques asignados de 512 bytes */
};
Raúl Monge
III-3
1
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Tipos de Archivo
• Archivo Regular. String de bytes (binario o texto)
• Archivo de Directorio. Contiene nombres,
atributos y puntero a otros archivos.
• Archivo de Especial de Caracteres. Corresponde
a un dispositivo de caracteres (e.g. terminal).
• Archivo de Especial de Bloques. Corresponde a
un dispositivo de bloques (e.g. disco).
• FIFO. Para IPC (pipe con nombre)
• Socket. Para IPC (en redes)
Raúl Monge
III-4
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Permisos de Acceso
• Cada archivo tiene permiso de lectura, escritura y
ejecución (RWX) para el dueño, el grupo y otros
(9 bits en st_mode).
• Bit de ejecución en directorios es permiso de
búsqueda.
• Para poder abrir un archivo cualquiera es
necesario tener permiso en cada directorio en el
sendero hacia el archivo.
• Los permisos pueden ser cambiados con el
comando chmod.
Raúl Monge
III-5
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Set-user-ID y Set-group-ID
Cada proceso tiene 6 o más Id`s asociados:
• El ID real del usuario y del grupo se toman del
archivo de passwd y no cambian (excepto para
superusuario)
• El ID efectivo del usuario y del grupo determina
permisos de acceso a archivos
• El saved set-user ID y saved set-group-ID
contienen copias de los ID efectivos y se usan con
la función setuid.
Raúl Monge
III-6
2
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Mecanismo de Cambio de ID
• Normalmente la ID efectiva coincide con la real.
• Sin embargo existe un modo que permite que un
proceso tome su ID efectiva del archivo (bits setuser-ID y/o set-group-ID activados en st_mode)
• Aplicación:
– Cambio de password: usuario debe modificar archivo
perteneciente a root y grupo sys.
Raúl Monge
III-7
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Verificación de Permisos
• Si el ID efectivo del usuario es 0 (superusuario), el acceso
está permitido.
• Si el ID efectivo del usuario es igual al ID del dueño del
archivo, acceso se concede si está habilitado, sino negarlo.
• Si el ID efectivo del grupo (o uno suplementario) es igual
al ID del dueño del archivo, acceso se concede si está
habilitado, sino negarlo.
• Si el acceso apropiado de OTROS está habilitado, se
concede el acceso, sino negarlo.
Raúl Monge
III-8
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Bits de Permisos de Acceso
en el Archivo
Raúl Monge
st_mode mask
Significado
S_IRUSR
S_IWUSR
S_IXUSR
user-read
user-write
user-execute
S_IRGRP
S_IWGRP
S_IXGRP
group-read
group -write
group -execute
S_IROTH
S_IWOTH
S_IXOTH
other-read
other -write
other -execute
S_ISUID
S_ISGID
S_IXOTH
set-user-ID on execution
set-group-ID on execution
saved-text (sticky bit)
III-9
3
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Propiedad de Archivos y
Directorios Nuevos
• POSIX.1 define para la creación de un archivo
(open o creat)
– La propiedad del archivo es igual al ID efectivo del
usuario
– La propiedad del grupo es igual ID efectivo del grupo o
al ID de grupo del directorio.
• Segunda opción de ID de grupo garantiza que esta
se propague en el subárbol del directorio en
cuestión.
Raúl Monge
III-10
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: access
#include <unistd.h>
int access(const char *pathname, int mode);
return: 0 si OK,
-1 si existe error
• Permite verificar permisos de accesos usando ID
reales
• mode es OR de R_OK, W_OK, X_OK y F_OK
• Sirve cuando se tiene activado set-XX-ID para
verificar si usuario real tiene permisos
Raúl Monge
III-11
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: umask
#include <sys/types.h>
#include <stat.h>
mode_t umask(mode_t cmask);
return: máscara anterior del modo creación del archivo
• Permite modificar la máscara del modo de
creación de archivos o directorio del proceso.
• Bits en alto se sustraen del permiso de acceso
• Es normal usar máscara 022 (en octal)
Raúl Monge
III-12
4
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Funciones: chmod y fchmod
#include <sys/types.h>
#include <stat.h>
mode_t chmod(const char *pathname, mode_t mode);
mode_t fchmod(int filedes, mode_t mode);
return: 0 si OK, -1 si existe error
• Permite modificar permisos de acceso del archivo por nombre o
descriptor
• mode es el OR al bit de permisos de acceso (9 bits) mas 2 bits para setuser-ID y set-group-ID.
• Algunas versiones antiguas de UNIX suportan el sticky bit para
mejorar el desempeño de algunos programas (permitido sólo por
superusuario su activación), manteniendo programa en área de swap.
Raúl Monge
III-13
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Funciones: chown, fchown y lchown
#include <sys/types.h>
#include <sys/unistd.h>
int chown(const char *pathname , uid_t owner, gid_t group);
int fstat(int *fildes, uid_t owner, gid_t group );
int lstat(const char *pathname , uid_t owner, gid_t group);
return: 0 si OK, -1 si existe error
• Permite cambiar ID del dueño y del grupo (con
restricciones: superusuario para UID y grupos del dueño)
• Interpretación de cada función similar a stat, i.e.:
– Archivo por nombre
– archivo abierto
– enlace simbólico
Raúl Monge
III-14
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Tamaño de un Archivo
• Se indica en st_stat de la estructura stat y se
interpreta así:
– Archivo regular: Número de bytes del archivo.
– Directorio: Bytes ocupados por el nodo (normalmente
un múltiplo de 16 o 512)
– Enlace simbólico: largo en bytes del nombre
• Un archivo regular puede tener un tamaño
superior al espacio de disco asignado (existen
huecos en el archivo, que se interpretan como 0s).
Raúl Monge
III-15
5
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Funciones: truncate y ftruncate
#include <sys/types.h>
#include <unistd.h>
int truncate(const char * pathname, off_t length);
int ftruncate(int fildes, off_t length);
return: 0 si OK, -1 si existe error
• Ambas funciones (no son parte de POSIX.1) truncan un
archivo al tamaño length.
• En caso de ser menor el largo real, efecto depende de
implementación:
– puede extender al largo agregando 0 (existe un hueco), o
– dejarlo tal cual.
Raúl Monge
III-16
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Sistema de Archivos
• Un dispositivo de almacenamiento (e.g. disco) se
divide en particiones, existiendo un sistema de
archivos en cada partición.
• El superbloque describe el sistema de archivo
• El sistema puede disponer de un bloque de
arranque.
• Cada i-node describe a un archivo, existiendo un
contador de enlaces (desde directorios).
• Un i-node de directorio tiene mínimo 2 enlaces.
Raúl Monge
III-17
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
Estructura del Sistema de Archivo
partición
partición
i-list
partición
Bloques de directorio y datos
Boot-block(s)
Super block
i-nodei-node
i-node …...
…... i-node
i-node
i-node
Raúl Monge
III-18
6
Departamento de Informática
Taller de Sistemas Operativos
Universidad Técnica Federico Santa María
i-nodes
data
data
data
data
mode
owners
timestamps
Block size
count
data
data
direct blocks
data
data
single indirect
double indirect
triple indirect
data
data
data
data
data
data
data
data
data
data
Raúl Monge
III-19
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: link
#include <unistd.h>
int link(const char *existingpath, const char *newpath);
return: 0 si OK,
-1 si existe error
• Permite crear en el directorio un nuevo enlace a un archivo
existente.
• Se debe incrementar el contador de enlaces.
• Muchos sistemas sólo permiten enlaces (duros) en un
mismo sistema de archivos.
• Sólo el superusuario puede crear un enlace que apunta a un
directorio (evitar ciclos).
Raúl Monge
III-20
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: unlink
#include <unistd.h>
int unlink(const char *pathname);
return: 0 si OK,
-1 si existe error
• Permite eliminar un enlace a un archivo en un directorio.
• Se debe decrementar el contador de enlaces en el i-node
referenciado.
• El archivo sigue accesible si existen otros enlaces.
• Si la cuenta alcanza 0, el archivo es borrado (en caso de
estar abierto, esta operación se posterga hasta el cierre).
Raúl Monge
III-21
7
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: remove
#include <stdio.h>
int remove(const char *pathname);
return: 0 si OK,
-1 si existe error
• Permite eliminar un enlace a un archivo o directorio, y
forma parte de ANSI C.
• Para un archivo remove es equivalente a unlink.
• Para un directorio remove equivale a rmdir.
Raúl Monge
III-22
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: rename
#include <stdio.h>
int rename(const char *oldname, const char *newname);
return: 0 si OK,
-1 si existe error
• Permite renombrar un enlace a un archivo o directorio, y
forma parte de ANSI C.
• Si se renombra un archivo, y el nuevo nombre existe, este
último es borrado.
• Si se renombra un directorio, y el nuevo nombre existe,
este último se borra ssi está vacio.
Raúl Monge
III-23
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Enlaces Simbólicos
• Es un puntero indirecto, a diferencia de un
enlace duro a un i-node.
• Permite superar superar limitaciones de
estos últimos:
– Es posible cruzar a otro sistema de archivo
– No está limitado al superusuario
Raúl Monge
III-24
8
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: symlink
#include <unistd.h>
int symlink(const char *actualpath, const char *sympath);
return: 0 si OK,
-1 si existe error
• Permite crear en el directorio un enlace simbólico
a un archivo o directorio.
• No es necesario que actualpath exista, y ambos
nombres no requieren estar en el mismo sistema
de archivo.
Raúl Monge
III-25
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: readlink
#include <unistd.h>
int readlink(const char *pathname, char *buf, int bufsize);
return: 0 si OK,
-1 si existe error
• Permite leer el nombre del enlace simbólico,
retornando el largo del string (no es terminado con
0).
• Dado que open sigue los enlaces simbólicos, esta
función permite efectivamente leer el enlace.
Raúl Monge
III-26
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: mkdir
#include <sys/types.h>
#include <sys/stat.h>
int mkdir(const char *pathname , mode_t * mode);
return: 0 si OK,
-1 si existe error
• Crea un directorio nuevo y vacio.
• Entradas . y .. se crean automáticamente
• mode especifica permisos de acceso, que son
modificados por la máscara del proceso (umask)
Raúl Monge
III-27
9
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Función: rmdir
#include <unistd.h>
int rmdir(const char *pathname );
return: 0 si OK,
-1 si existe error
• Permite borrar un directorio vacío.
• Si el # de enlaces llega a cero, y no está abierto
por ningún proceso, se libera el espacio ocupado
por el directorio.
Raúl Monge
III-28
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Lectura de Directorios
• Puede ser leído por quien tiene permisos,
pero sólo el kernel puede modificarlo.
• Estructura de entrada depende de la
implementación (típicamente incluye sólo
nombre e i-node)
• Esta estructura la define struct dirent en
<dirent.h>
Raúl Monge
III-29
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Funciones: opendir, readdir,
rewinddir y closedir
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char * pathname);
return: puntero si OK, NULL si fin de directorio o existe error
struct dirent readdir(DIR * dp);
return: puntero si OK, NULL si existe error
int rewinddir(DIR *dp);
int closedir(DIR *dp);
return: 0 si OK, -1 si existe error
• Permite abrir, leer, rebobinar y cerrar un directorio
Raúl Monge
III-30
10
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Caching de Archivos
• El Sistema Operativo mantiene en el kernel
un cache consistente en buffers de bloques
del disco.
• Lectura y escritura se prioriza a los buffers.
• Escritura al disco se retarda (delayed write).
• Para garantizar consistencia en el disco, se
usan funciones ad-hoc.
Raúl Monge
III-31
Departamento de Informática
Universidad Técnica Federico Santa María
Taller de Sistemas Operativos
Funciones: sync y fsync
#include <unistd.h>
int sync(void);
int fsync(int fildes);
return: 0 si OK,
-1 si existe error
• sync permite respaldar todos los buffers
modificados en el sistema al disco.
– El sistema normalmente llama en forma periódica esta
función (típicamente cada 30 [s] por update)
• fsync permite respaldar todos los buffers
modificados de un archivo.
Raúl Monge
III-32
11
Descargar