Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Introduccin
1.1 Qu es un sistema operativo? 1.2 Evolucin 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
D.I.A. Sistemas Operativos I @ (ITIS) 1
Introduccin
Sistema bancario
Compiladores
Aplicaciones
Programas del Sistema
D.I.A.
D.I.A.
D.I.A.
D.I.A.
Cinta de entrada
1401
7094
1401
(2 generacin)
3 generacin:
- Multiprogramacin - Simultaneous Peripheral Operation On Line - Tiempo compartido: CTTS, MULTICS, UNIX
D.I.A. Sistemas Operativos I @ (ITIS) 7
Registros de la CPU PC, SP, PSW. Tabla de ficheros abiertos Mapa de memoria .......
Sistemas Operativos I @ (ITIS) 10
Los interbloqueos se producen por la competencia entre procesos por conseguir los recursos del sistema
D.I.A. Sistemas Operativos I @ (ITIS) 12
ATC
Libros
Apuntes Tribunales
TFC1
Mara SD SO-I TFC2
Ficheros
D.I.A. Sistemas Operativos I @ (ITIS) 14
D.I.A.
Ejecucin en background
cat file1 file2 file3 | sort > /dev/lp &
Seguridad
Bits rwx de los ficheros (propietario, grupo, otros)
rwx rwx rwx
D.I.A.
Espacio de Usuario
?
Manejador de llamada al sistema
Dispatch
Ejemplo:
D.I.A.
bytesLeidos = read (fichero, buffer, nBytes); Si falla bytesLeidos = -1. Verificar siempre los errores. En la variable errno el cdigo del error.
D.I.A. Sistemas Operativos I @ (ITIS) 19
D.I.A.
FORK
pid_t fork (void) El hijo es idntico al padre, salvo en: pid, ppid recursos asignados Los bloqueos en ficheros del padre no los hereda el hijo. Seales pendientes del padre no las hereda el hijo.
D.I.A. Sistemas Operativos I @ (ITIS) 21
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 */ D.I.A. Sistemas Operativos I @ (ITIS) 22
WAIT
Suspende la ejecucin del proceso actual hasta que termine alguno de sus hijos (o hasta que reciba alguna seal).
#include <sys/wait.h>
pid_t wait (int *status); r = wait (&status); - Si no existen hijos, devuelve 1. - Si no hay hijos zombies se duerme. - Si hay algn hijo zombie se liberan todos sus recursos.
D.I.A. Sistemas Operativos I @ (ITIS) 23
WAIT
Terminacin normal
status 00
Terminacin anormal
#0 status nmero de seal que mat al hijo = 1 volcado de memoria
D.I.A.
WAITPID
Suspende la ejecucin del proceso actual hasta que termine el hijo especificado en pid.
#include <sys/types.h> #include <sys/wait.h>
cualquier hijo (como en wait) cualquier hijo con id = pid cualquier hijo con su mismo process group ID cualquier hijo con process group ID == |pid| WNOHANG, WUNTRACED
Sistemas Operativos I @ (ITIS) 25
WAITPID
D.I.A.
EXIT
D.I.A.
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 */
D.I.A. Sistemas Operativos I @ (ITIS) 28
EXEC
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).
D.I.A. Sistemas Operativos I @ (ITIS) 29
EXEC
- Si xito, no regresa. - Los descriptores abiertos se mantienen abiertos. - Las seales se resetean al valor por omisin. - Se pueden actualizar los euid y egid en funcin 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);
D.I.A. Sistemas Operativos I @ (ITIS) 30
EXEC
NULL
puntero al entorno envp entorno HOME = /home/jorge\0 PATH = :bin:/usr/bin\0 SHELL = /bin/sh\0 USER = jorge\0 NULL
D.I.A. Sistemas Operativos I @ (ITIS) 31
EXEC
Ejemplo de una shell simplificada: while (TRUE) leer_comando (comando, parametros); if (fork() != 0) { r = wait (&status); } else{ execve (comando, parametros, 0); exit (127); /* ? */ } } Cmo sera el background? Qu pasara con el hijo?
D.I.A. Sistemas Operativos I @ (ITIS) 32
D.I.A.
SIGQUIT
SIGSEGV SIGTRAP SIGUSR1
control-backslash
referencia invlida a memoria fallo hardware definido por la implementacin a definir por el usuario
terminate/w core
terminate/w core terminate/w core terminate
SIGUSR2
D.I.A.
terminate
35
SIGACTION
Permite examinar o modificar (o ambas) la accin asociada con una determinada seal.
#include <signal.h>
int sigaction (int signum, const struct sigaction *act, struct sigaction *oldact); siendo: signum: nmero de seal (salvo SIGKILL y SIGSTOP) act: si no es NULL modificando la accin. oldact: si no es NULL accin previa
D.I.A. Sistemas Operativos I @ (ITIS) 36
SIGACTION
struct sigaction { void (*sa_handler) (int); /*direccin del manejador de la seal o SIG_IGN o SIG_DFL */ sigset_t sa_mask; /* seales a bloquear */ int sa_flags; /* modifica el comportamiento del proceso */ }; *sa_handler: ponemos la rutina de tratamiento. sa_flags: SA_RESETHAND /* no recarga la seal */
D.I.A.
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 nmero indefinido de veces el mensaje Pasaron 2 segundos. - Ninguna de las respuestas anteriores.
D.I.A. Sistemas Operativos I @ (ITIS) 38
KILL
ALARM
Enva la seal SIGALRM al proceso que la invoca una vez transcurridos (al menos) los segundos que figuran como parmetro.
#include <unistd.h>
D.I.A.
PAUSE
int pause (void); Generalmente ligada a una alarma. Siempre devuelve -1.
D.I.A.
A El nmero de A que se pueda imprimir en 2 segundos. Un nmero infinito de A Ninguna de las opciones anteriores.
D.I.A. Sistemas Operativos I @ (ITIS) 42
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 exista y se determina su creacin, este campo especifica el modo de proteccin del nuevo fichero.
D.I.A. Sistemas Operativos I @ (ITIS) 43
int close (int fd); Devuelve 0 si OK y 1 si error. Libera los cerrojos que pudiera tener el proceso sobre el fichero.
D.I.A.
int creat (const char *camino, mode_t modo); El fichero se queda abierto slo para escritura. macros para especificar modo: S_IRWXU, S_IRUSR, S_IWUSR, S_IWGRP, S_IXOTH, ..
D.I.A. Sistemas Operativos I @ (ITIS) 46
D.I.A.
ssize_t write (int fd, const void *buf, size_t num); Devuelve el nmero de bytes escritos que ser igual a num, 1 en caso contrario.
D.I.A.
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 = tamao del fichero + offset (puede <0)
D.I.A. Sistemas Operativos I @ (ITIS) 49
fd = dup (1)
close (1)
0 1 2 3
D.I.A.
close (f1)
Descriptores de ficheros 0 1 2 3
n = dup (fd)
close (fd)
0 1 2 3
D.I.A.
int pipe (int descf[2]); /* 0 si OK; -1 si error */ Limitaciones: Semi-duplex: flujo de datos en slo una direccin. Slo entre procesos con el mismo ancestro. descf[0]: abierto para lectura descf[1]: abierto para escritura
D.I.A. Sistemas Operativos I @ (ITIS) 53
FSTAT, LSTAT
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 simblico informacin sobre el enlace (no sobre el fichero).
D.I.A. Sistemas Operativos I @ (ITIS) 55
FSTAT, LSTAT
struct stat { mode_t st_mode; /* proteccin */ ino_t st_ino; /*nmero de i-node*/ dev_t st_dev; /*dispositivo en el que reside el fichero*/ dev_t st_rdev; /*nmero de dispositivo para ficheros especiales*/ nlink_t st_nlink; /*nmero de enlaces*/ uid_t st_uid; /* user ID del propietario*/ gid_t st_gid; /*group ID del propietario*/ off_t st_size; /*tamao en bytes ficheros regulares-*/ time_t st_atime; /*fecha del ltimo acceso*/ time_t st_mtime; /*fecha de la ltima modificacin*/ time_t st_ctime; /*fecha del ltimo cambio al i-node*/ long st_blksize; /* tamao del bloque de I/O*/ long st_blocks; /*nmero de bloques (512 bytes) asignados*/ }
D.I.A. Sistemas Operativos I @ (ITIS) 56
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
D.I.A. Sistemas Operativos I @ (ITIS) 57
int unlink (const char *pathname); Decrementa en 1 el campo st_nlink. Si se hace 0 elimina el fichero (los bloques que ocupa).
D.I.A.
2. 3. 4.
D.I.A.
Analice sintcticamente lo ledo y si no hay errores: Ejecute la orden, teniendo en cuenta que se debe admitir un mximo de 3 pipes encadenados. Si las llamadas fallan indique el error con fprintf
Sistemas Operativos I @ (ITIS) 60
D.I.A.
Lugar de desarrollo
cajal en cualquier ordenador con knoppix 2.6
Depuracin y pruebas
Depurador grfico ddd Pruebas que considere el alumno
Forma de entrega
La practica msh.c debe residir el directorio $HOME/so1s del alumno con menor nmero de matrcula ejecutar comando so1s en cajal
D.I.A.