La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

D.I.A.Sistemas Operativos (ITIS) 1 Introducción Capítulo ¿Qué es un sistema operativo? 1.2 Evolución de los sistemas operativos 1.3 Tipos de.

Presentaciones similares


Presentación del tema: "D.I.A.Sistemas Operativos (ITIS) 1 Introducción Capítulo ¿Qué es un sistema operativo? 1.2 Evolución de los sistemas operativos 1.3 Tipos de."— Transcripción de la presentación:

1 D.I.A.Sistemas Operativos I @ (ITIS) 1 Introducción Capítulo 1 1.1 ¿Qué es un sistema operativo? 1.2 Evolución de los sistemas operativos 1.3 Tipos de sistemas operativos 1.4 Recordando aspectos hardware 1.5 Conceptos de sistemas operativos 1.6 Llamadas al sistema 1.7 Estructuras de los sistemas operativos

2 D.I.A.Sistemas Operativos I @ (ITIS) 2 Ruta de datos ALU Registros CPU Introducción Aplicaciones Programas del Sistema Hardware Dispositivos Físicos Microarquitectura Lenguaje máquina Sistema Operativo Compiladores Editores Intérprete de comandos Reserva de billetes Navegador web Sistema bancario Acceso a periféricos

3 D.I.A.Sistemas Operativos I @ (ITIS) 3 1.Es una máquina extendida –Esconde los detalles del hardware –Presenta una máquina virtual –Presenta abstracciones: fichero, proceso, I/O, memoria Por ejemplo: lectura de un fichero (Minix) ¿Qué es un sistema operativo? (1)

4 D.I.A.Sistemas Operativos I @ (ITIS) 4 ¿Qué es un sistema operativo? (2)

5 D.I.A.Sistemas Operativos I @ (ITIS) 5 2.Es un gestor de recursos –Memoria, procesador, discos, impresoras, … –Dispositivos no compartidos –Protección de memoria –¿Quién utiliza qué recurso? –Multiplexar recursos en tiempo y espacio ¿Qué es un sistema operativo? (3)

6 D.I.A.Sistemas Operativos I @ (ITIS) 6 Primeros sistemas batch (2ª generación) Evolución sistemas operativos (1) Impresora 7094 1401 Cinta de entrada Cinta del sistema Cinta de salida Dispositivo de cinta Lector de tarjetas

7 D.I.A.Sistemas Operativos I @ (ITIS) 7 3ª generación: - Multiprogramación - Simultaneous Peripheral Operation On Line - Tiempo compartido: CTTS, MULTICS, UNIX Evolución sistemas operativos (2) Trabajo 3 Trabajo 1 Trabajo 2 Sistema Operativo Particiones de Memoria

8 D.I.A.Sistemas Operativos I @ (ITIS) 8 4ª generación: - Alta escala de integración: microcomputadores - Control Program for Microcomputer - Disk Operating System - MicroSoft Disk Operating System - Graphical User Interface - Windows 3.x, 95, 98, NT, 2000, Me, XP, Vista - Linux (Red Hat, Debian, Caldera, Fedora...) - Sistemas operativos de Red - Sistemas operativos distribuidos Evolución sistemas operativos (3)

9 D.I.A.Sistemas Operativos I @ (ITIS) 9 Sistemas operativos para mainframe –Batch, transacciones, tiempo compartido –OS/390 Sistemas operativos para servidores –Servicios de impresión, ficheros, web –Unix, Windows 2000, Linux Sistemas operativos multiprocesador –Unix, Encore Sistemas operativos para ordenadores personales Sistemas operativos de tiempo real –Hard real-time system, soft real-time system Sistemas operativos empotrados (embarcados) –PalmOS, Windows CE Sistemas operativos para tarjeta inteligentes Tipos de sistemas operativos (1)

10 D.I.A.Sistemas Operativos I @ (ITIS) 10 Proceso –Un programa en ejecución. Espacio de direccionamiento –Programa ejecutable (texto) –Datos –Pila Contexto (entrada a la tabla de procesos) –Registros de la CPU –PC, SP, PSW. –Tabla de ficheros abiertos –Mapa de memoria –....... Conceptos de sistemas operativos (1)

11 D.I.A.Sistemas Operativos I @ (ITIS) 11 Proceso –operaciones asociadas a un proceso (p.ejem.: shell) Crear un proceso (relación padre-hijo) Terminar un proceso Comunicación y sincronización entre procesos Pedir/ liberar memoria Esperar a que termine uno de los hijos Cargar una imagen de texto Establecer/tratar/enviar señales (p.ejem.: temporizadores) –Un proceso tiene varios identificadores uid, identificador del propietario del proceso pid, identificador del propio proceso gid, identificador del grupo al que pertenece el proceso Conceptos de sistemas operativos (2)

12 D.I.A.Sistemas Operativos I @ (ITIS) 12 Interbloqueo entre procesos Los interbloqueos se producen por la competencia entre procesos por conseguir los recursos del sistema Conceptos de sistemas operativos (3)

13 D.I.A.Sistemas Operativos I @ (ITIS) 13 Gestión de memoria –Asignación/liberación de memoria –Mecanismos de protección –Gestión de huecos y compactación –Gestión de la memoria virtual (paginación, segmentación) Gestión de dispositivos de E/S –Teclados, monitores, impresoras, discos,... –Software de E/S independiente del dispositivo (protección, buffering, esquema de nombrado, tamaño de bloque,...) –Software de entrada salida dependiente del dispositivo (drivers) Conceptos de sistemas operativos (4)

14 D.I.A.Sistemas Operativos I @ (ITIS) 14 Sistema de ficheros Conceptos de sistemas operativos (5) Directorio raiz Ficheros Estudiantes Pedro Ana María Cursos SO-I SD EUI DIA ATC SIA Apuntes Libros Tribunales TFC1 TFC2

15 D.I.A.Sistemas Operativos I @ (ITIS) 15 Operaciones sobre ficheros –Crear, abrir, cerrar, leer, escribir, posicionar, borrar,... Un directorio también es un fichero Un fichero tiene un nombre: absoluto, relativo File descriptor Sistemas de ficheros montado Tipos de ficheros –Ficheros ordinarios –Ficheros especiales –Pipes Conceptos de sistemas operativos (6)

16 D.I.A.Sistemas Operativos I @ (ITIS) 16 Shell –No es parte del sistema operativo –sh, csh, ksh, bash –Crea procesos para ejecutar comandos –Gestiona las redirecciones (entrada/salida) y pipes cat file1 file2 file3 | sort > /dev/lp –Ejecución en background cat file1 file2 file3 | sort > /dev/lp & Seguridad –Bits rwx de los ficheros (propietario, grupo, otros) rwx rwx rwx Conceptos de sistemas operativos (7)

17 D.I.A.Sistemas Operativos I @ (ITIS) 17 Veremos llamadas en POSIX Son invocaciones de rutinas de biblioteca Llamadas al sistema (1)

18 D.I.A.Sistemas Operativos I @ (ITIS) 18 Ejemplo: count = read (fd, buffer, nbytes) 0 Dirección Llamadas al sistema (2) Espacio del Sistema Manejador de llamada al sistema Dispatch Retorno al llamador Trap al kernel Pone código de read en el registro 4 5 Incrementa PP Llamada a read Push fd Push &buffer Push nbytes 1 2 3 11 9 10 7 8 0xFFFFFFFF Espacio de Usuario (Sistema Operativo) 6 ¿ ?

19 D.I.A.Sistemas Operativos I @ (ITIS) 19 PROCESOS. SEÑALES. FICHEROS. ……. Veremos llamadas en POSIX. No todas. man man 1 write “envia un mensaje a otro usuario” man 2 write “escribe a un descriptor de fichero” Portable Operating System Interface, viniendo la X de UNIX bytesLeidos = read (fichero, buffer, nBytes); Si falla  bytesLeidos = -1. Verificar siempre los errores. En la variable errno el código del error. Llamadas al sistema (3)

20 D.I.A.Sistemas Operativos I @ (ITIS) 20 GESTIÓN DE PROCESOS. Cada proceso tiene asociados varios identificadores pid_tgetpid (void); /* pid */ pid_tgetppid (void); /* ppid */ uid_tgetuid (void);/* real user ID */ uid_tgeteuid (void);/* effective user ID */ gid_tgetgid (void);/* real group ID */ gid_tgetegid (void);/* effective group ID */ Llamadas al sistema (4)

21 D.I.A.Sistemas Operativos I @ (ITIS) 21 GESTIÓN DE PROCESOS. FORK Crea un proceso. #include pid_t fork (void) El hijo es idéntico al padre, salvo en: pid, ppid recursos asignados Los bloqueos en ficheros del padre no los hereda el hijo. Señales pendientes del padre no las hereda el hijo. Llamadas al sistema (5)

22 D.I.A.Sistemas Operativos I @ (ITIS) 22 GESTIÓN DE PROCESOS. FORK main () { int pid; pid = fork (); if (pid == -1) fprintf (stderr, "Error %d %s \n", errno, strerror(errno)); else if (pid == 0) { printf ("Soy el proceso hijo\n"); printf (" pid = %d, ppid = %d, uid = %d, euid = %d, gid = %d egid = %d\n", getpid(), getppid(), getuid(), geteuid(), getgid(), getegid()); } else { sleep (1); printf ("Soy el proceso padre\n"); printf (" pid = %d, ppid = %d, uid = %d, euid = %d, gid = %d egid = %d\n", getpid(), getppid(), getuid(), geteuid(), getgid(), getegid()); } } /* Soy el proceso hijo */ /* pid = 2798, ppid = 2797, uid = 1000, euid = 1000, gid = 1000 egid = 1000 */ /* Soy el proceso padre */ /* pid = 2797, ppid = 2178, uid = 1000, euid = 1000, gid = 1000 egid = 1000 */ Llamadas al sistema (6)

23 D.I.A.Sistemas Operativos I @ (ITIS) 23 GESTIÓN DE PROCESOS. WAIT Suspende la ejecución del proceso actual hasta que termine alguno de sus hijos (o hasta que reciba alguna señal). #include pid_t wait (int *status); r = wait (&status); - Si no existen hijos, devuelve –1. - Si no hay hijos “zombies” se duerme. - Si hay algún hijo “zombie” se liberan todos sus recursos. Llamadas al sistema (7)

24 D.I.A.Sistemas Operativos I @ (ITIS) 24 GESTIÓN DE PROCESOS. WAIT Llamadas al sistema (8)

25 D.I.A.Sistemas Operativos I @ (ITIS) 25 GESTIÓN DE PROCESOS. WAITPID Suspende la ejecución del proceso actual hasta que termine el hijo especificado en pid. #include pid_t waitpid (pid_t pid, int *status, int options) pid == -1  cualquier hijo (como en wait) pid > 0  cualquier hijo con id = pid pid == 0  cualquier hijo con su mismo process group ID pid < -1  cualquier hijo con process group ID == |pid| options  WNOHANG, WUNTRACED Llamadas al sistema (9)

26 D.I.A.Sistemas Operativos I @ (ITIS) 26 GESTIÓN DE PROCESOS. WAITPID r = waitpid (8, &status, 0); Devuelve en r el pid del hijo que terminó y almacena su estado (al salir) en status. Devuelve –1 si: - el padre no tiene hijos. - el pid no existe o indica un proceso que no es hijo suyo. Llamadas al sistema (10)

27 D.I.A.Sistemas Operativos I @ (ITIS) 27 GESTIÓN DE PROCESOS. EXIT Termina el proceso que invocó la llamada. #include void exit (int status); - Después de exit, pasa al estado de “zombie”. - Pone su estado de terminación en status. - Si el padre ha muerto, su ppid se pone a 1 (init). - No devuelve nada ni regresa. Llamadas al sistema (11)

28 D.I.A.Sistemas Operativos I @ (ITIS) 28 GESTIÓN DE PROCESOS. EXIT main () { int r, status; if (fork() != 0) { printf ("El proceso padre va a esperar al hijo\n"); r = wait (&status); printf ("Mi hijo tenia el pid: %d", r); printf (" y su valor de salida es: %x\n", status); } else { printf ("Proceso hijo va a salir\n"); exit (255); } } /* Proceso hijo va a salir */ /* El proceso padre va a esperar al hijo */ /* Mi hijo tenia el pid: 3174 y su valor de salida es: ff00 */ Llamadas al sistema (12)

29 D.I.A.Sistemas Operativos I @ (ITIS) 29 GESTIÓN DE PROCESOS. EXEC Cambia la imagen de memoria (texto, datos, pila) de un proceso y arranca la ejecución. #include int execve (const char *filename, const char *argv[], const char *envp[]); filename  el nombre de un fichero que contiene el programa a ejecutar. argv  argumentos al programa. envp  variables de entorno (0 si hereda las del programa llamante). Llamadas al sistema (13)

30 D.I.A.Sistemas Operativos I @ (ITIS) 30 GESTIÓN DE PROCESOS. EXEC - Si éxito, no regresa. - Los descriptores abiertos se mantienen abiertos. - Las señales se resetean al valor por omisión. - Se pueden actualizar los euid y egid en función de los bits set-uid y set-gid del fichero. Ejemplo: cp f1 f2 La shell crea un proceso y este proceso ejecuta: r = execve (“/bin/cp”, &argv, &envp); Llamadas al sistema (14)

31 D.I.A.Sistemas Operativos I @ (ITIS) 31 GESTIÓN DE PROCESOS. EXEC argv puntero a los argumentos “cp” “f1” “f2” NULL envp puntero al entorno “HOME = /home/jorge\0” “PATH = :bin:/usr/bin\0” “SHELL = /bin/sh\0” NULL “USER = jorge\0” Llamadas al sistema (15)

32 D.I.A.Sistemas Operativos I @ (ITIS) 32 GESTIÓN DE PROCESOS. EXEC Llamadas al sistema (16) Ejemplo de una shell simplificada: while (TRUE) leer_comando (comando, parametros); if (fork() != 0) { r = wait (&status); } else{ execve (comando, parametros, 0); exit (127); /* ¿? */ } ¿Cómo sería el background? ¿Qué pasaría con el hijo?

33 D.I.A.Sistemas Operativos I @ (ITIS) 33 GESTIÓN DE SEÑALES. Señal  interrupción software ha ocurrido un evento asíncrono (Ctrl-C) Cada señal tiene un nombre ( ) ¿Qué condiciones pueden disparar una señal? Teclas del teclado: DELETE  SIGINT Excepciones hardware: dirección memoria invalida  SIGSEGV Llamada al sistema kill. Condiciones software: SIGALRM  expira una alarma Llamadas al sistema (17)

34 D.I.A.Sistemas Operativos I @ (ITIS) 34 GESTIÓN DE SEÑALES. ¿Qué puede hacer un proceso cuando se recibe una señal? Ignorar la señal (excepto para SIGKILL y SIGSTOP). Capturar la señal y tratarla  escribir la rutina de tratamiento de la señal. Dejar la acción por omisión (matar al proceso que la recibe). Llamadas al sistema (18)

35 D.I.A.Sistemas Operativos I @ (ITIS) 35 GESTIÓN DE SEÑALES. SIGABRTllamando a la función abort.terminate/w core SIGALRMExpira el tiempo de una alarmaterminate SIGBUSfallo hardware definido por la implementación terminate/w core SIGFPEexcepción aritmética (/0, oveflow,...)terminate/w core SIGILLinstrucción ilegalterminate/w core SIGINTControl_Cterminate SIGKILLni atrapar ni ignorarterminate SIGPIPEescribir en un pipe sin lectoresterminate SIGQUITcontrol-backslashterminate/w core SIGSEGVreferencia inválida a memoriaterminate/w core SIGTRAPfallo hardware definido por la implementación terminate/w core SIGUSR1a definir por el usuarioterminate SIGUSR2a definir por el usuarioterminate Llamadas al sistema (19)

36 D.I.A.Sistemas Operativos I @ (ITIS) 36 GESTIÓN DE SEÑALES. SIGACTION Permite examinar o modificar (o ambas) la acción asociada con una determinada señal. #include int sigaction (int signum, const struct sigaction *act, struct sigaction *oldact); siendo: signum: número de señal (salvo SIGKILL y SIGSTOP) act: si no es NULL  modificando la acción. oldact: si no es NULL  acción previa Llamadas al sistema (20)

37 D.I.A.Sistemas Operativos I @ (ITIS) 37 GESTIÓN DE SEÑALES. SIGACTION struct sigaction { void (*sa_handler) (int); /*dirección del manejador de la señal o SIG_IGN o SIG_DFL */ sigset_t sa_mask; /* señales a bloquear */ int sa_flags; /* modifica el comportamiento del proceso */ }; *sa_handler: ponemos la rutina de tratamiento. sa_flags: SA_RESETHAND /* no recarga la señal */ Llamadas al sistema (21)

38 D.I.A.Sistemas Operativos I @ (ITIS) 38 GESTIÓN DE SEÑALES. SIGACTION void accion_alarma () { printf(“Pasaron 2 segundos\n”); } main () { struct sigaction tratamiento_alarma; tratamiento_alarma.sa_handler = accion_alarma; sigaction (SIGALRM, &tratamiento_alarma, 0); while (1) {alarm (2);pause ();} } - El proceso queda bloqueado de manera indefinida en la llamada al sistema pause. - Se escribe una vez el mensaje Pasaron 2 segundos. - Se escribe un número indefinido de veces el mensaje Pasaron 2 segundos. - Ninguna de las respuestas anteriores. Llamadas al sistema (22)

39 D.I.A.Sistemas Operativos I @ (ITIS) 39 GESTIÓN DE SEÑALES. KILL Envía una señal a un proceso o grupo de procesos. #include int kill (pid_t pid, int sig); El uid o el euid del emisor debe concidir con el uid o el euid del receptor (salvo si el emisor es el superusuario). pid > 0  al proceso identificado por pid. pid = 0  a todos los procesos en el grupo de procesos del proceso actual. pid = -1  a cada proceso excepto al 1 (init). pid < -1  a cada proceso cuyo ID de grupo sea igual a |pid|. Llamadas al sistema (23)

40 D.I.A.Sistemas Operativos I @ (ITIS) 40 GESTIÓN DE SEÑALES. ALARM Envía la señal SIGALRM al proceso que la invoca una vez transcurridos (al menos) los segundos que figuran como parámetro. #include unsigned int alarm (unsigned int sec); /* devuelve el número de segundos que faltan para que expire la alarma anterior; 0 si no hay ninguna */ Las sucesivas llamadas a alarm no se apilan: sólo tiene efecto la última. Si el número se segundos es 0  se cancela la alarma previa. Llamadas al sistema (24)

41 D.I.A.Sistemas Operativos I @ (ITIS) 41 GESTIÓN DE SEÑALES. PAUSE Suspende al proceso que la invoca hasta que recibe una señal. #include int pause (void); Generalmente ligada a una alarma. Siempre devuelve -1. Llamadas al sistema (25)

42 D.I.A.Sistemas Operativos I @ (ITIS) 42 GESTIÓN DE SEÑALES. void vacio (){} main () {struct sigaction tratamiento; int pid; pid = fork(); if (pid != 0) { alarm (2); pause (); kill (pid, SIGTERM); } else {tratamiento.sa_handler = vacio; sigaction (SIGALRM, &tratamiento, 0); while (1)printf (“A”); } A El número de A que se pueda imprimir en 2 segundos. Un número infinito de A Ninguna de las opciones anteriores. Llamadas al sistema (26)

43 D.I.A.Sistemas Operativos I @ (ITIS) 43 GESTIÓN DE FICHEROS. OPEN Abre o crea un fichero. #include int open (const char *camino, int flags); int open (const char *camino, int flags, mode_t mode); ¡¡Open devuelve el menor descriptor disponible.!! camino: nombre del fichero a abrir o a crear. mode: si el fichero no existía y se determina su creación, este campo especifica el modo de protección del nuevo fichero. Llamadas al sistema (27)

44 D.I.A.Sistemas Operativos I @ (ITIS) 44 GESTIÓN DE FICHEROS. OPEN Valores para flags: O_RDONLY/* sólo lectura */ O_WRONLY/* sólo escritura */ O_RDWR/* lectura y escritura */ /* Son mutuamente excluyentes */ O_APPEND: /* se sitúa al final del fichero */ O_CREAT: /* crea el fichero si no existe */ O_EXCL: /* si también se utilizó O_CREAT y el fichero ya existe, open falla */ O_TRUNC: /* si existe el fichero y se abrió para escritura o lectura/escritura, trunca su longitud a 0 */ O_SYNC: /* se fuerza la escritura física al dispositivo */ ………… y otros valores. Llamadas al sistema (28)

45 D.I.A.Sistemas Operativos I @ (ITIS) 45 GESTIÓN DE FICHEROS. CLOSE Cierra el fichero indicado. #include int close (int fd); Devuelve 0 si OK y –1 si error. Libera los cerrojos que pudiera tener el proceso sobre el fichero. Llamadas al sistema (29)

46 D.I.A.Sistemas Operativos I @ (ITIS) 46 GESTIÓN DE FICHEROS. CREAT Crea un nuevo fichero. #include int creat (const char *camino, mode_t modo); El fichero se queda abierto sólo para escritura. macros para especificar modo: S_IRWXU, S_IRUSR, S_IWUSR, S_IWGRP, S_IXOTH, ….. Llamadas al sistema (30)

47 D.I.A.Sistemas Operativos I @ (ITIS) 47 GESTIÓN DE FICHEROS. READ Intenta leer hasta nbytes de un fichero abierto previamente y dejarlos en buf. #include ssize_t read (int fd, void *buf, size_t nbytes); Devuelve el número de bytes leídos. 0 si estaba al final del fichero. –1 si error. Llamadas al sistema (31)

48 D.I.A.Sistemas Operativos I @ (ITIS) 48 GESTIÓN DE FICHEROS. WRITE Escribe datos a un fichero abierto previamente. #include ssize_t write (int fd, const void *buf, size_t num); Devuelve el número de bytes escritos que será igual a num, ó –1 en caso contrario. Llamadas al sistema (32)

49 D.I.A.Sistemas Operativos I @ (ITIS) 49 GESTIÓN DE FICHEROS. LSEEK Modifica la posición del puntero asociado al fichero indicado. #include off_t lseek (int filedes, off_t offset, int whence); Devuelve el nuevo valor del puntero ó –1 si error. whence: SEEK_SET puntero = offset desde el principio del fichero. SEEK_CUR puntero = puntero actual + offset (puede ser <0) SEEK_END puntero = tamaño del fichero + offset (puede <0) Llamadas al sistema (33)

50 D.I.A.Sistemas Operativos I @ (ITIS) 50 GESTIÓN DE FICHEROS. DUP Duplica un descriptor de fichero existente. #include int dup (int oldfd); Devuelve el descriptor menor disponible. Los dos descriptores comparten candados, posición puntero y flags. ¿Para qué vale dup?  redirecciones e/s. % ls > f1 Llamadas al sistema (34)

51 D.I.A.Sistemas Operativos I @ (ITIS) 51 GESTIÓN DE FICHEROS. DUP 0 2 3 1 Descriptores de ficheros 0 2 3 1 Descriptores de ficheros fd = dup (1) 0 2 3 FREE Descriptores de ficheros 0 2 3 1 open (f1,...) f1 close (1) Write (STDOUT,...) Llamadas al sistema (35)

52 D.I.A.Sistemas Operativos I @ (ITIS) 52 GESTIÓN DE FICHEROS. DUP 0 2 3 FREE Descriptores de ficheros close (f1) 0 2 3 1 Descriptores de ficheros n = dup (fd) 0 2 3 1 close (fd) Llamadas al sistema (36)

53 D.I.A.Sistemas Operativos I @ (ITIS) 53 GESTIÓN DE FICHEROS. PIPE Los pipes se utilizan para comunicar dos procesos. #include int pipe (int descf[2]); /* 0 si OK; -1 si error */ Limitaciones: Semi-duplex: flujo de datos en sólo una dirección. Sólo entre procesos con el mismo ancestro. descf[0]: abierto para lectura descf[1]: abierto para escritura Llamadas al sistema (37)

54 D.I.A.Sistemas Operativos I @ (ITIS) 54 GESTIÓN DE FICHEROS. PIPE main () { int n, fd[2]; pid_t pid; char line[80]; if (pipe(fd) < 0) {fprintf (stderr, "Error %d %s\n“, errno, strerror(errno)); exit (2);} if ((pid = fork()) < 0) {fprintf (stderr"Error %d %s\n“, errno, strerror(errno)); exit (3);} if (pid != 0) { /* padre */ close (fd[0]); write (fd[1], "hola mundo\n", 11); } else { /* hijo */ close (fd[1]); n = read (fd[0], line, 11); write (1, line, n); } exit (0); } Llamadas al sistema (38)

55 D.I.A.Sistemas Operativos I @ (ITIS) 55 GESTIÓN DE FICHEROS. STAT, FSTAT, LSTAT Devuelven información sobre el fichero especificado. #include int stat (const char *filename, struct stat *buf); int fstat (int filedes, struct stat *buf); int lstat (const char *filename, struct stat *buf); Devuelven 0 si OK; -1 si error. lstat  cuando el fichero nombrado es un enlace simbólico  información sobre el enlace (no sobre el fichero). Llamadas al sistema (39)

56 D.I.A.Sistemas Operativos I @ (ITIS) 56 GESTIÓN DE FICHEROS. STAT, FSTAT, LSTAT struct stat { mode_t st_mode; /* protección */ ino_t st_ino; /*número de i-node*/ dev_t st_dev; /*dispositivo en el que reside el fichero*/ dev_t st_rdev; /*número de dispositivo para ficheros especiales*/ nlink_t st_nlink; /*número de enlaces*/ uid_t st_uid; /* user ID del propietario*/ gid_t st_gid; /*group ID del propietario*/ off_t st_size; /*tamaño en bytes –ficheros regulares-*/ time_t st_atime; /*fecha del último acceso*/ time_t st_mtime; /*fecha de la última modificación*/ time_t st_ctime; /*fecha del último cambio al i-node*/ long st_blksize; /* tamaño del bloque de I/O*/ long st_blocks; /*número de bloques (512 bytes) asignados*/ } Llamadas al sistema (40)

57 D.I.A.Sistemas Operativos I @ (ITIS) 57 GESTIÓN DE FICHEROS. LINK Crea un enlace (un nuevo nombre) a un fichero existente. #include int link (const char *oldpath, const char*newpath); - Crea una nueva entrada newpath (en el directorio) que referencia al fichero existente oldpath. - Si newpath ya existe  -1 (error). - Solamente el superusuario puede crear un enlace nuevo a un directorio (¿por qué?). - Incrementa en 1 el campo st_nlink del i-node Llamadas al sistema (41)

58 D.I.A.Sistemas Operativos I @ (ITIS) 58 GESTIÓN DE FICHEROS. UNLINK Elimina una entrada a un directorio #include int unlink (const char *pathname); Decrementa en 1 el campo st_nlink. Si se hace 0  elimina el fichero (los bloques que ocupa). Devuelve 0 si OK; -1 si error. Llamadas al sistema (42)

59 D.I.A.Sistemas Operativos I @ (ITIS) 59 Objetivos: Familiarización con el uso de llamadas al sistema POSIX más usuales Comprensión del funcionamiento básico de una shell Manejo de un entorno Unix para trabajar Conocimiento de un depurador gráfico de lenguaje C Práctica de minishell (1)

60 D.I.A.Sistemas Operativos I @ (ITIS) 60 Construcción de una minishell que: 1.Muestre el prompt y lea de la línea de comandos ordenes que puedan contener la redirección de entrada y pipes: ORDEN = CMD [< fich_ent][ | CMD]* CMD = fich_ejec [argumentos]* –Ejemplos de ordenes válidas: msh$ ls –l -a msh$ grep Lopez < apellidos | sort msh$ cat notas | grep 10 | sort 2.Analice sintácticamente lo leído y si no hay errores: 3.Ejecute la orden, teniendo en cuenta que se debe admitir un máximo de 3 pipes encadenados. 4.Si las llamadas fallan indique el error con fprintf Práctica de minishell (2)

61 D.I.A.Sistemas Operativos I @ (ITIS) 61 La lectura del comando y análisis sintáctico se realizan usando las siguientes funciones: –int leeYanaliza() –char* obtenCmd( int i) –char** obtenAgs ( int cmdi) –char* obtenArg( int cmdi, int argj) –char* obtenFichEnt() –char* obtenFichSal() –int hayBackground() –int esFinFichero() La redirección y la ejecución del comando se realiza con las llamadas: open, close, dup, fork, exec y sus variantes y waitpid Más información: man –s2 llamada El tratamiento de errores de las llamadas con: #include fprintf(stderr, “error %d %s \n”, errno, strerror(errno)); Práctica de minishell (3)

62 D.I.A.Sistemas Operativos I @ (ITIS) 62 Enunciado de la práctica en la Web de la asignatura Ficheros necesarios en: – cajal  /eui/practs/so1s/practica1 –Web de la asignatura Lugar de desarrollo –cajal –en cualquier ordenador con knoppix 2.6 Depuración y pruebas –Depurador gráfico ddd –Pruebas que considere el alumno Fecha límite de entrega 16 de mayo a las 21 horas Forma de entrega –La practica msh.c debe residir el directorio $HOME/so1s del alumno con menor número de matrícula –ejecutar comando so1s en cajal Práctica de minishell (4)


Descargar ppt "D.I.A.Sistemas Operativos (ITIS) 1 Introducción Capítulo ¿Qué es un sistema operativo? 1.2 Evolución de los sistemas operativos 1.3 Tipos de."

Presentaciones similares


Anuncios Google