tema 3. sistema de ficheros y e/s - upv/ehu
TRANSCRIPT
![Page 1: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/1.jpg)
TEMA 3. Sistema de
Ficheros y E/S
Competencia C3: Usar las funciones de E/S de un Sistema Operativo para programar utilidades.
![Page 2: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/2.jpg)
P04. Independencia del Dispositivo ISO 2
Contenidos
1. Introducción a concepto de Independencia del Dispositivo, redirecciones.
2. Llamadas al sistema de E/S y funciones de biblioteca estándar de C.
3. Modos de operación sobre dispositivos y ficheros4. Organización del Sistema de ficheros. Espacios de
nombres, directorios.5. “Buffering” de E/S: En las bibliotecas de E/S y en las
llamadas al sistema.6. Acceso avanzado a las propiedades de los dispositivos.7. Ejercicios y proyecto de E/S.
![Page 3: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/3.jpg)
P04. Independencia del Dispositivo ISO 3
Blibliografía
[Capítulos 2,3 y 4] F.M. Márquez: UNIX. Programación Avanzada 3ª Edición. Rama,
2004.
[Apartados 5.2 y 5.3] C. Rodríguez, I. Alegria, J. González, A. Lafuente: Descripción
Funcional de los Sistemas Operativos. Síntesis, 1994
[Capítulo 12] W. Stallings: Sistemas Operativos. 5º Ed. Pearson Prentice-Hall, 2005.
[Capítulo 13] G. Nutt: Sistemas Operativos. 3º Ed. Pearson Addison Wesley, 2001
[Capítulo 12] A. Silberschartz: Operating Systemas Concepts. Sixth, John Wiley &
Son, 2003
![Page 4: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/4.jpg)
3.1 Introducción a concepto de
Independencia del Dispositivo, redirecciones.
a) Acceso al sistema operativo mediante llamadas al sistema
P04. Independencia del Dispositivo ISO 4
…
P ro g ra m a u su a r io
(có d ig o y d a to s)
Vec to r d e
in te r ru p c io n e s
R u t b ib lio teca
P a rá m etro s
S .O .
U s u a r io
M e m o ria
tr a p
R u t d e e n t/sa l
Va r. g lo b a le s
R u tin a
D IS P E R S O R A
M e c a n i s m o
d e
In te r r u p c io n e s
![Page 5: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/5.jpg)
Acceso al S.O. operativo mediante llamadas al
sistema. Ejemplo estudiado:
P04. Independencia del Dispositivo ISO 5
Espacio de Usuario
Espacio del Sistema Operativo
Mecanismo de
Interrupciones
main ()
{ char vec1[80], vec2[80];
while (TRUE)
{ rut_lib_entrada_1 (vec1, 80, SINCRO);
rut_lib_salida_2(vec1, 80, SINCRO);
}
parámetros
Rutinas de librería
void rut_dispersora ()
{ switch (par1)
{ case ENTRADA_1:
rut_entrada_1 (par2,par3,par4);
break;
case SALIDA_2:
rut_salida_2 (par2,par3,par4);
break;
case SINCRO:
if(par3==DIS1)sincronizacion (&final1);
else sincronizacion (&final2);
break;
default: errores (ENTRADA_SALIDA,par1);
}
//iret();
}
void rut_lib_entrada_1 ( char *vector, int num,
int asin_sin)
{
par1=ENTRADA_1;
par2=vector;
par3=num;
par4=asin_sin;
llamada_sistema (ENTRADA_SALIDA);
}
void rut_entrada_1(char *vector, int num, int asin_sin)
{
int estado;
Final1 = FALSE;
while ((estado=Leer_Reg_Estado(KDMA))==
NO_PREPARADO)
NOP;
Errores(KDMA,estado);
Programar_Dispositivo (DISP1, num, LECTURA);
Programar_KDMA (vector,num,INICIO_LECTURA);
if (asin_sin == SINCRO)
Sincronización (&Final1);
}
void Sincronizacion(int * Final)
{
while((*Final) = FALSE)NOP;
}
void rut_atencion_KDMA ()
{
int estado;
estado= Leer_Reg_Estado(KDMA);
errores(KDMA,estado);
Final1 = TRUE;//iret();
}
// Variables Globales
int Final1=TRUE;
KDMA
1
11
Llamada al Sistema
(TRAP)
2
3
10
4
5
6
7
89
Llamada al sistemaespecífica para leer
de DISP1
![Page 6: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/6.jpg)
P04. Independencia del Dispositivo ISO 6
Problema: ¿Cómo programar aplicaciones sin pensar en qué
dispositivos de entrada/salida usan?
Según el esquema visto en el tema 2:
o Un dispositivo Una llamada al sistema específica
o Cambiar de dispositivo Modificar el código del programa
¿Cómo independizar el programa de los dispositivos utilizados?
Solución: uso de dispositivos lógicos, canales
o El canal como abstracción del dispositivo
o En UNIX: file descriptor
Concepto de independencia de los dispositivos
Independencia del Dispositivo
![Page 7: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/7.jpg)
Independencia del dispositivo
P04. Independencia del Dispositivo ISO 7
![Page 8: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/8.jpg)
P04. Independencia del Dispositivo ISO 8
• Canales estándares = dispositivos preestablecidos
(entrada, salida, error). En Unix/Linux: 0, 1, 2 (Biblioteca estándar de C: stdin, stdout, stderr
• El Interprete de Comandos (IC) dispone de mecanismos para trabajar con canales: ( < > 2> ) ( >> ) Cuidado con (<<)
– Redirección de salida : [n]>word
– ls > listado.txt
– ls 1> listado.txt
– Redirección de entrada : [n]<word
– cat < listado.txt
– cat 0< listado.txt
– Redirección de salida añadiendo : [n]>>word
– cat >> listado.txt
– Redirección de salida de errores : 2>word
– Redirección de salida estándar y salida de errores : &>word o >&word
Canales preestablecidos (estándar)
![Page 9: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/9.jpg)
Concepto de proceso “filtro”
P04. Independencia del Dispositivo ISO 9
Filtro0 1Entrada
estándarSalida
estándar
Filtrostdin stdoutEntrada
estándarSalida
estándar
Biblioteca estándar de C
Llamadas al sistema
![Page 10: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/10.jpg)
3.2 Llamadas al sistema de E/S y funciones
de biblioteca estándar de C
Llamadas al sistema de lectura y escritura
int read (int fd, void *buf, unsigned lon);
int write ( int fd, void *buf, unsigned lon);
Funciones de biblioteca estándar C
usando los canales estándar (implícitamente)int getchar();
int putchar (int c);
int printf (const char *format, ...);
int scanf (const char *format, ...);
…
P04. Independencia del Dispositivo ISO 10
![Page 11: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/11.jpg)
P04. Independencia del Dispositivo ISO 11
Act 04.2 Ejemplo de ccopiar.c
con funciones de biblioteca estándar de C
stdin (implícito)
stdout (implícito)
![Page 12: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/12.jpg)
P04. Independencia del Dispositivo ISO 12
Act 04.3 Ejemplo de scopiar.c
con llamadas al sistema
Canal 0 (explícito)
Canal 1 (explícito)
![Page 13: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/13.jpg)
P04. Independencia del Dispositivo ISO 13
Actividad A04.4. Manejando mensajes de error
Canal estándar para la los mensajes de error (salida estándar de errores)
canal 2: con llamadas al sistema
stdout : con funciones de biblioteca estándar de C
– Redirección de salida de errores :
programa 2> word
![Page 14: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/14.jpg)
Utilizando canales de entrada-salida adicionales a
los estándar.
Para comprender mejor la funcionalidad de las funciones adicionales de E/S con los canales necesitamos conocer cómo gestiona UNIX las operaciones de E/S.
Los mecanismos que vamos a estudiar, son una simplificación de las estructuras reales que utiliza UNIX, pero nos sirven para intuir cómo las gestiona.
P04. Independencia del Dispositivo ISO 14
![Page 15: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/15.jpg)
P04. Independencia del Dispositivo ISO 15
Independencia del Dispositivo en UNIX
Modo
Índice
C-uso
Inode
Permisos
::::::
:::
Tabla de
Ficheros
AbiertosTipo
Permisos
Propietario
Grupo
Fechas
Nºenlaces
Tamaño
C-uso
Bloques Datos
::::::
Tabla de
Inodes
::::::
S.O.
TABLA DE CANALES
…..…..…..
Proceso A
T.Canales
Flags ptr
(TC) File descriptor table: struct fdtable in include/linux/fdtable.h (TFA)Open file Table: struct file in include/linux/fs.h(TI) Inode table(In memory) : struct inode in include/linux/fs.h
![Page 16: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/16.jpg)
P04. Independencia del Dispositivo ISO 16
Independencia del Dispositivo en UNIX
Modo
Índice
C-uso
Inode
Permisos
::::::
:::
Tabla de
Ficheros
AbiertosTipo
Permisos
Propietario
Grupo
Fechas
Nºenlaces
Tamaño
C-uso
Bloques Datos
::::::
Tabla de
Inodes
::::::
S.O.
DISCO
TABLA DE CANALES
ls dir > listado.txt
…..…..…..
Proceso A
T.Canales
Flags ptr
![Page 17: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/17.jpg)
P04. Independencia del Dispositivo ISO 17
Independencia del Dispositivo en UNIX
Modo
Índice
C-uso
Inode
Permisos
::::::
:::
Tabla de Ficheros
Abiertos
Tipo
Permisos
Propietario
Grupo
Fechas
Nºenlaces
Tamaño
C-uso
Bloques Datos
::::::
Tabla de
Inodes
::::::
S.O.
DISCO
TABLA DE CANALES
ls dir > listado.txt
…..…..…..
Proceso A
T.Canales
Flags ptr
@leer
@escribir
@cerrar
....
![Page 18: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/18.jpg)
P04. Independencia del Dispositivo ISO 18
Pasos para usar un Fichero
Inicio del uso de un Fichero
Abrir Fichero
Leer o Escribir
Cerrar Fichero
Finalización del uso de un Fichero
Sistema Operativo
Nombre del Fichero
Identificador del Fichero
Id. del Fichero, Buffer, longitud
Datos y Código de Retorno
Id. del Fichero
Código de Retorno
![Page 19: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/19.jpg)
P04. Independencia del Dispositivo ISO 19
Cara
Sector
Niveles de traducción de direcciones
Tipo
Permisos
Propietario
Grupo
Fechas
Nºenlaces
Tamaño
Bloques Datos
InodeBloques de Datos
del Inode
Directo 3
Directo 4
Directo 5
Directo 6
Directo 7
Directo 8
Directo 9
Inidirecto Simple
Indirecto Doble
Indirecto Triple
Directo 0
Directo 1
Directo 2
Directo 3
Directo 4
Directo 5
Directo 6
Directo 7
Directo 8
Directo 9
Inidirecto Simple
Indirecto Doble
Indirecto Triple
Directo 0
Directo 1
Directo 2
0 1 2 ... Tam-1Modo
Índice
C-uso
Inode
Permisos
::::::
:::
Tabla de Ficheros
Abiertos
@leer
@escribir
@cerrar
....
Leer/Escribir
Registro, canal
Leer/Escribir (Llamada al sistema)
byte, canal
Rutina Dispersora + Tabla de canales
Relativo a byte -> Bloque Relativo
Leer/Escribir
Bloque, fichero o dispositivo
Información de ubicación (I-node)
Bloque relativo -> Bloque absoluto
Leer/Escribir
Bloque Absoluto, dispositivo
Características físicas del dispositivo
Bloque absoluto -> Cilindro, pista, sector
Leer/Escribir
Datos registros controlador
USUARIO
SISTEMA
pista
34
1
25
6
7 0
![Page 20: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/20.jpg)
P04. Independencia del Dispositivo ISO 20
Llamadas al Sistema para lectura/escritura
de ficheros (UNIX/Linux)
Apertura/lectura/escritura/ubicación
int open (char *camino, int flags, int perm);
int open (char *camino, int flags);
int creat (char *camino, int perm);
int close (int fd);
int read (int fd, void *buf, unsigned lon);
int write ( int fd, void *buf, unsigned lon);
long lseek (int fd, long despl, int cod_pos);
// origen:0, pos_actual:1, final:2
// SEEK_SET, SEEK_CUR, SEEK_END
O_RDONLY O_WRONLY O_RDWR O_APPEND
O_CREAT O_NDELAY O_DSYNC O_SYNC
O_NOCTTY O_EXCL O_TRUNC, …
Flags:
![Page 21: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/21.jpg)
P04. Independencia del Dispositivo ISO 21
Funciones de Biblioteca de C
Apertura / lectura / escritura
#include <stdio.h>
FILE * fopen (char *camino, char *tipo);
int fclose (FILE *fd);
int fread (void *buf, int tam, int num, FILE *fd);
int fwrite (void *buf, int tam, int num, FILE *fd);
int getchar();
int putchar (int c);
int printf (const char *format, ...);
int scanf (const char *format, ...);
int fscanf (FILE *fd, const char *format, ...);
int fprintf (FILE *fd, const char *format, ...);
...
![Page 22: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/22.jpg)
P04. Independencia del Dispositivo ISO 22
Act 04.5: Ejemplo de utilización de los canales de entrada-
salida adicionales a los estándar (ctee.c y stee.c)
Vamos a construir dos versiones del comando tee de Linux.
1. Una con funciones de biblioteca (ctee)
2. Otra con llamadas al sistema (stee).
![Page 23: TEMA 3. Sistema de Ficheros y E/S - UPV/EHU](https://reader035.vdocuments.pub/reader035/viewer/2022070314/62bf5890e504740f3e371ee4/html5/thumbnails/23.jpg)
P04. Independencia del Dispositivo ISO 23
Act 04.6: Primera versión del proyecto de E/S
Vamos a construir la primera versión del proyecto de E/S a partir de las
utilidades ctee y stee ya desarrolladas.
Para su desarrollo, sigue las instrucciones indicadas en la documentación de la actividad 4.6