Publicado el 14 de Enero del 2017
1.176 visualizaciones desde el 14 de Enero del 2017
54,4 KB
11 paginas
Creado hace 11a (30/04/2014)
1
Master en Computación
Plataformas de Tiempo Real
POSIX Avanzado y Extensiones
Tema 1. Ficheros y entrada/salida
Tema 2. Gestión de Interrupciones en MaRTE OS
Tema 3. Monitorización y control del tiempo de ejecución
Tema 4. Planificación EDF
Tema 5. Planificación a Nivel de Aplicación
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
© M. Aldea, M. González
Mayo-2014
Tema 1. Ficheros y entrada/salida
1.1. Conceptos básicos
1.2. Gestión de ficheros
1.3. Llamadas para entrada/salida
1.4.
1.5. Entrada/salida sincronizada
1.6. Funciones de gestión de directorios
1.7. Tuberías y ficheros especiales FIFO
I/O asíncrona con threads
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
© M. Aldea, M. González
Mayo-2014
2
1.1 Conceptos básicos
Fichero: objeto del sistema operativo que se puede leer o escribir,
y que puede significar varias cosas:
- fichero normal: representa información (programas o datos)
1.1 Conceptos básicos
almacenada en el disco
- directorio
- fichero especial de dispositivo orientado a caracteres
Único tipo de fichero obligatorio en el perfil mínimo
- fichero especial de dispositivo orientado a bloques
- tubería o fichero especial FIFO
- opcionalmente: colas de mensajes, semáforos, objetos de
memoria compartida
• cada fichero se identifica mediante un nombre (pathname)
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
3
Tema 1. Ficheros y entrada/salida
Sistema de ficheros
El sistema de ficheros es una colección de ficheros junto a ciertos
atributos que los caracterizan
Proporciona un espacio de nombres, y contiene:
1.1 Conceptos básicos
- ficheros normales: residen en memoria secundaria
- directorios
- dispositivos orientados al carácter (sistema mínimo)
- dispositivos orientados a bloque
- tuberías o ficheros especiales FIFO
Se puede hacer I/O sobre todos ellos, excepto los directorios
Si el sistema de ficheros no existe (sistema mínimo), el espacio de
nombres (sin directorios) y los dispositivos se mantienen
© M. Aldea, M. González
Mayo-2014
4
1.1 Conceptos básicos
Conceptos básicos (cont.)
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
Descriptor de fichero (fd)
• Entero positivo que identifica un fichero que ha sido abierto
para I/O
• los descriptores 0, 1, y 2 suelen ser respectivamente la entrada
estándar, la salida estándar, y la salida de error
Descripción de fichero
• Estructura de datos perteneciente al kernel y que existe
asociada a un fichero abierto
• contiene: punteros de lectura/escritura, modo de acceso y
puntero al i-node (MaRTE OS: sólo el modo de acceso)
i-node
• Contiene la información relativa al fichero: localización en el
disco, tamaño, propietario, grupo, permisos, número de links,
etc.
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
© M. Aldea, M. González
Mayo-2014
Compartiendo descripciones de fichero
Entre procesos:
Proceso Padre
1.1 Conceptos básicos
fd 0
fd 1
...
fd i
Proceso Hijo
fd 0
fd 1
...
fd i
Otro Proceso
fd 0
fd 1
...
fd i
Descripciones
de ficheros
puntero lec/esc
puntero a i-nodo
puntero lec/esc
puntero a i-nodo
puntero lec/esc
puntero a i-nodo
...
...
Tabla de
i-nodos
Información
del i-nodo
Información
del i-nodo
...
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
5
6
Tema 1. Ficheros y entrada/salida
Compartiendo descripciones de fichero
Entre threads del mismo proceso:
1.1 Conceptos básicos
thread 1
fd0
thread 2
fd0
thread 3
fd1
Descripciones
de ficheros
puntero lec/esc
puntero a i-nodo
puntero lec/esc
puntero a i-nodo
...
...
Tabla de
i-nodos
Información
del i-nodo
Información
del i-nodo
...
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
1.2 Gestión de ficheros
Abrir un fichero:
© M. Aldea, M. González
Mayo-2014
7
1.2 Gestión de ficheros
#include <sys/stat.h>
#include <fcntl.h>
int open (const char *path, int oflag
[, mode_t mode]);
• abre un fichero para leer o escribir
• el path puede ser absoluto o relativo al directorio de trabajo
• crea una nueva descripción de fichero y retorna un descriptor
de fichero asociado a ella
• en caso de error retorna -1 y pone la variable errno al valor
apropiado
- algunos errores: EACCES, EEXIST, ... (ver la página del manual
para un listado completo)
1.2 Gestión de ficheros
(cont.)
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
© M. Aldea, M. González
Mayo-2014
Gestión de ficheros
Las opciones definidas para oflag permiten:
• abrir para leer, escribir, o ambos (sistema mínimo)
- O_RDONLY, O_WROLNY, O_RDWR
• añadir al final del fichero
- O_APPEND
• crear el fichero si no existe: requiere parámetro mode, que
indica los permisos de acceso
- O_CREAT
• truncar (a tamaño 0) el fichero si existe
- O_TRUNC
• I/O bloqueante o no bloqueante, etc. (sistema mínimo)
- O_NONBLOCK
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
8
9
Tema 1. Ficheros y entrada/salida
1.2 Gestión de ficheros
Gestión de ficheros
(cont.)
El parámetro mode se pone sólo si se crea el fichero, e indica los
permisos de lectura (R), escritura (W), y ejecución (X)
• Del propietario (USRer)
- S_IRUSR, S_IWUSR, S_IXUSR
• Del grupo de usuarios (GRouP)
- S_IRGRP, S_IWGRP, S_IXGRP
• Del resto de los usuarios (OTHers)
- S_IROTH, S_IWOTH, S_IXOTH
Este parámetro no se utiliza en el perfil de "Sistema de Tiempo
Real Mínimo"
En los sistemas mínimos no se pueden crear ficheros
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
Gestión de ficheros
Cerrar un fichero:
© M. Aldea, M. González
Mayo-2014
10
1.2 Gestión de ficheros
(cont.)
#include <unistd.h>
int close (int fildes);
• destruye el descriptor de fichero
• destruye la descripción del fichero si nadie lo tiene abierto
Crear un fichero: (NO en sistemas mínimos)
#include <sys/stat.h>
#include <fcntl.h>
int creat (const char *path, mode_t mode);
• es equivalente a un open indicando sólo escritura, creación del
fichero, y borrar la información del fichero, si existe
• sólo se puede hacer si hay sistema de ficheros
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
Gestión de ficheros
Borrar un fichero: (NO en sistemas mínimos)
#include <unistd.h>
int unlink (const char *path);
• se borra cuando lo cierra el último proceso
© M. Aldea, M. González
Mayo-2014
11
1.2 Gestión de ficheros
(cont.)
Cambiar de nombre a un fichero: (NO en sistemas mínimos)
#include <stdio.h>
int rename (const char *old, const char *new);
• para ficheros y directorios
Modificar el tamaño de un fichero: (NO en sistemas mínimos)
#include <unistd.h>
int ftruncate (int fildes, off_t length);
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
12
Tema 1. Ficheros y entrada/salida
1.3 Llamadas para entrada/salida
Leer:
1.3 Llamadas para entrada/salida
#include <unistd.h>
ssize_t read (int fildes, void *buf,
size_t nbyte);
• Intenta leer nbyte bytes de fichero especificado
almacenándolos en el buffer apuntado por buf
• retorna el número de bytes leídos (<=nbyte)
• retorna 0 cuando se ha llegado al fin de un fichero
• bloqueante o no, según lo definido en el open:
- Bloqueante (sin O_NONBLOCK): el thread se bloquea hasta que
se pueda leer algún dato
- No Bloqueante (con O_NONBLOCK): lee los bytes que puede. Si
no se puede leer ninguno retorna -1 y pone errno al valor
EAGAIN
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
Llamadas para entrada/salida
Escribir:
© M. Aldea, M. González
Mayo-2014
13
1.3 Llamadas para entrada/salida
(cont.)
#include <unistd.h>
ssize_t write (int fildes, const void *buf,
size_t nbyte);
• Intenta escribir nbyte bytes del buffer apuntado por buf en el
fichero especificado por fildes
• retorna el número de bytes escritos (<nbyte si no caben)
• bloqueante o no, según lo definido en el open:
- Bloqueante (sin O_NONBLOCK): el thread se bloquea hasta que
se puedan escribir todos los datos
- No Bloqueante (con O_NONBLOCK): escribe los bytes que
puede. Si no se puede escribir ninguno retorna -1 y pone
errno al valor EAGAIN
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
© M. Aldea, M. González
Mayo-2014
14
1.3 Llamadas para entrada/salida
Ejemplo: Llamadas para entrada/salida
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <misc/error_checks.h>
int main () {
int fd; // descriptor de fichero
char *str = "hola"; char str_leido[10];
int num = 4; int num_leido;
// crea el fichero para escritura
CHKE( fd=open("pru.dat", O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR) );
// escribe el string
if (write (fd, str, 5) != 5)
printf ("Error escribiendo string en el fichero \n");
// escribe el número
if (write (fd, &num, sizeof(int)) != sizeof(int))
printf ("Error escribiendo numero en el fichero \n");
// cierra el fichero
CHKE( close(fd) );
Plataformas de Tiempo Real
© M. Aldea, M. González
Mayo-2014
15
Tema 1. Ficheros y entrada/salida
1.3 Llamadas para entrada/salida
Ejemplo: Llamadas para entrada/salida (cont.)
// Lectura de los datos
// abre el fichero para lectura
CHKE( fd = open("pru.dat", O_RDONLY) );
if (read (fd, str_leido, 5) != 5)
printf ("Error leyendo string del fichero \n");
if (read (fd, &num_leido, sizeof(int)) != sizeof(int))
printf ("Error leyendo numero del fichero \n");
CHKE( close(fd) );
printf ("Leído string:%s y num:%d\n", str_leido, num_leido);
return 0;
}
Plataformas de Tiempo Real
Tema 1. Ficheros y entrada/salida
© M. Aldea, M. González
Mayo-2014
16
1.4 I/O asíncrona con threads
1.4 I/O asíncrona con threads
El estándar POSIX proporciona funciones para realizar
operaciones de entrada/salida asíncrona (AIO)
• Cada operación de AIO opera en paralelo con la aplicación
- envía una señal para informar que ha terminado
• Servicio es opcional (NO en sistemas mínimos)
Funciones entrada/salida asícro
Comentarios de: Master en Computación - Plataformas de Tiempo Real - POSIX Avanzado y Extensiones - Tema 1. Ficheros y entrada/salida (0)
No hay comentarios