Sistemas Operativos Tema 1 - Definición de sistema operativo - Arquitecturas de los Sistemas Operativos. - Presentación de MINIX - Introducción al IBM PC - Conceptos básicos de Sistemas Operativos - Procesos - Ficheros 6. Llamadas al sistema - Para gestión de procesos - Relacionadas con señales - Para gestión de ficheros - Para gestión de directorios - Para protección - Para gestión de tiempo 7. El Intérprete de órdenes SO. Tema 1 TR 2 1. Definición de Sistema Operativo Programa interfaz entre los programas de aplicación y el hardware de un sistema de computación con el doble objetivo de: - gestionar los recursos: módulos de administración, coordinación, control de conflictos, etc. - facilitar la labor de los usuarios. Por ello, el sistema operativo proporciona al usuario una máquina extendida. El propio S.O. suele estructurarse en niveles a fin de auto servirse de las ventajas de la abstracción que proporcionan los niveles más bajos. SO. Tema 1 TR 3 2. Arquitectura de los S. O. MINIX 2.1 Sistemas Operativos monolíticos (UNIX) - El Sistema Operativo es un conjunto de procedimientos Cada procedimiento puede invocar a cualquier otro No se obtiene transparencia Estructura rudimentaria de ejecución - modo usuario (no se pueden ejecutar algunas instrucciones) - modo supervisor (todas las instrucciones están permitidas) Nivel 2: Proc Usuario Nivel 1: Nucleo Init Proceso de Proceso de Proceso de usuario usuario usuario SISTEMA OPERATIVO ... Procedimiento principal Procedimiento de servicio Procedimientos auxiliares Figura: Arquitectura del Sistema Operativo monolítico SO. Tema 1 TR 4 2.2 Sistemas en niveles Es la extensión inmediata del caso monolítico 5 4 3 2 1 0 El operador Programas de usuario Gestión de entrada/salida Comunicación operador-procesos Gestión de la memoria y del tambor Asignación del procesador y multiprogramación Fig. Estructura del sistema operativo THE 2.3 Máquinas virtuales Dos niveles de gestión: - proporcionar multiprogramación (viene a equivaler a replicar el hardware emulándolo mediante una capa software) - prestar servicios (viene a ser instalar un Sistema Operativo sobre cada instancia del hardware virtual) 370 virtuales instrucciones de E/S trap CMS CMS CMS VM/370 Hardware del 370 Figura. Estructura de VM/370 con CMS llamadas al sistema trap SO. Tema 1 TR 5 2.4 Modelo cliente - servidor - Tendencia a que la mayoría del Sistema Operativo esté en niveles superiores y reducir los niveles básicos a lo mínimo posible Los procesos actúan como clientes que envían peticiones a los procesos servidores Un servidor realiza la función pedida y envía una respuesta Es muy tolerante: Un fallo en un módulo no afecta a todo el sistema Es muy fácil de adaptar a sistemas distribuídos - La separación entre mecanismos básicos y estrategias de gestión proporciona simplicidad Proceso cliente Proceso cliente Proceso Servidor servidor terminal ... Servidor Servidor ficheros memoria modo usuario modo privilegiado Núcleo El cliente obtiene servicio enviando mensajes a los procesos servidores Figura. El modelo cliente-servidor Máquina 1 ... Cliente Máquina 2 Servidor de ficheros Máquina 3 Servidor de procesos Núcleo Núcleo Núcleo Máquina 4 Servidor de terminal . . . Núcleo Red de comunicaciones mensaje del cliente al servidor Figura. El modelo cliente-servidor en un sistema distribuido SO. Tema 1 TR 6 3. Presentación de MINIX MINIX es, en palabras de su autor, "un nuevo sistema operativo que, aunque completamente distinto en su estructura interna, fuera compatible con UNIX desde el punto de vista del usuario". Está concebido con fines docentes y por ello es un sistema operativo pequeño: - tiene estructura muy modularizada - se ha sacrificado eficiencia en pro de inteligibilidad - es compatible con la versión 7 de UNIX - está escrito en C - puede ejecutarse incluso sin disco duro - es facilmente portable. - Primera versión sobre IBM-PC MINIX es un subconjunto de procesos que se comunica entre sí y con procesos de los usuarios, todo ello mediante el uso de una sóla primitiva de comunicación entre procesos, la transmisión de mensajes. Este diseño ofrece una estructura mucho más modular: SO. Tema 1 4 3 2 Procesos de usuario Procesos servidores Gestión E/S 1 TR 7 Proceso Proceso Proceso de usuario de usuario de usuario Init Gestor de Memoria Tarea de disco Tarea tty ... Gestor de Ficheros Tarea Tarea del reloj del sistema Systems calls ... NUCLEO Figura. Arquitectura de MINIX Nivel 1: - Captura las interrupciones y traps. - Proporciona un modelo de procesos secuenciales que comunican por mensajes. - La parte del código que trata con las interuupciones y cambios de contexto se escribe en lenguaje ensamblador. El resto en C. Nivel 2: - Contiene los procesos de E/S uno por cada tipo de dispositivo. Se denominan tareas para distinguirlos de los procesos de usuario. - En muchos sistemas las tareas de E/S se denominan manejadores de dispositivos. - Existe una tarea especial, denominada tarea del sistema, que no gestiona nada. Su misión es servir de puente entre las capas 1 y 3. Los niveles 1 y 2 se enlazan en un solo programa binario denominado kernel. Nivel 3: - Proporciona servicios mediante llamadas al sistema - gestor de memoria - sistema de ficheros Nivel 4: - Resto del sistema y usuarios SO. Tema 1 TR 8 4. Introducción al IBM PC El procesador Intel 8088: Utiliza palabras de 16 bits - Registros aritméticos: AX, BX, CX, DX - Sobre todo, para operaciones aritméticas. - CX para contadores de iteración y desplazamientos. - Los registros se dividen en 2 bytes: H (alto) y L (bajo) - Registros de puntero: SI, DI, BP, SP - SI y DI para movimiento y comparación, en algunas instrucciones - BP registro puntero de propósito general - SP puntero de pila hardware - Registros de segmento: CS, DS, SS, ES - Conceptualmente: 20 bits con los 4 bits inferiores puestos a 0 - Los segmentos empiezan en direcciones múltiplo de 16 bytes - Son registros de reubicación. - CS: base del segmento de código - DS: base del segmento de datos - SS: para el segmento pila - ES: registro auxiliar - Registro PSW: Para contener el vector de estado de un proceso. Registros aritméticos Registros punteros Registros de segmento AH AL SI CS BH BL DI DS CH CL BP SS DH DL SP ES 8 bits 16 bits 16 bits Figura. El 8088 tiene 12 registros, todos ellos diferentes. - Modos de operación: Sólo supervisor SO. Tema 1 TR 9 - Organización de la memoria: Espacio de direcciones de 1 MB (desde 0 hasta 220-1) Conviene que cada palabra ocupe un byte par para la parte de menor peso y un byte para la parte de mayor peso (por compatibilidad) - 640 KB inferiores: RAM para código y datos de programas - 360 KB superiores: ROM y RAM especiales - Click: fragmento de 16 posiciones de memoria que comienzan en dirección múltiplo de 16 bytes Dirección 64 K SP Dirección 64 K b a retorno SP Dirección 64 K b a retorno BP anterior SI DI x y z Datos Datos Datos Código Código Código 16 bits 16 bits 16 bits Parámetros reales Registros salvados Variables locales SP Figura. Efectos de la pila del programa de las llamadas a procedimiento - Entrada / Salida: Directa entre procesador y controlador. - No utiliza el módulo BIOS - Los controladores tienen asignadas direcciones al margen del espacio de memoria (no hay E/S con interfaz por memoria) SO. Tema 1 - TR 10 El procesador envía órdenes a los controladores – Un controlador, al terminar, envía una interrupción que provoca: – tres almacenamientos en la pila: PSW, CS, PC - inhibición de aceptar interrupciones poniendo a 0 el bit de interrupciones de PSW - carga de nuevos valores en CS y PC desde una dirección dada de memoria, que corresponden al vector de interrupciones del controlador SP (a) PSW CS PC SP (b) Figura. (a) Pila antes de una interrupción. (b) Pila después de una interrupción. SO. Tema 1 TR 11 5. Conceptos básicos de Sistemas Operativos UNIX tiene dos abstracciones fundamentales o principios de diseño: el concepto de proceso y el de fichero. 5.1 Procesos - Contienen código ejecutable, datos, pila, contador de programa, puntero de pila y otros registros e información para ejecución - En tiempo compartido: suspensiones temporales - Tabla de procesos: lista enlazada que contiene toda la información relativa a un proceso excepto su espacio de direcciones - Un proceso suspendido consta de: - espacio de direcciones - entrada en la tabla de procesos - Procesos hijo. Cada proceso tiene uid del usuario que lo creó, estableciéndose una jerarquía entre procesos padres e hijos A C B D E SO. Tema 1 TR 12 Proceso ligero Concepto equivalente al de máquina virtual. Es la abstracción de un procesador físico. Para implementar un proceso se deben crear unos registros virtuales (Tabla de Control del Procesador) y una pila. Proceso pesado Elementos necesarios para la ejecución, es decir, proceso ligero más memoria PROCESO (UNIX) = proceso (ligero) + MEMORIA Registros PROCESO UNIX PILA DATOS CODIGO Zona de memoria para que la pila pueda crecer. SO. Tema 1 TR 13 5.2 Ficheros Abstracción para el manejo de memoria secundaria. Asociada al concepto de fichero existe una organización característica: Directorio: fichero con estructura interna especialmente adecuada para almacenar los datos referentes a ficheros - Estructura de directorios - Algunos directorios - raíz - propio - de trabajo de un proceso - Nombre simbólico de un fichero - Protección de ficheros. Máscaras de bits Descriptor de fichero: Valor "short int" que devuelve el sistema en respuesta a una solicitud de acceso a un fichero si dicho acceso está permitido. Si no se permite, se devuelve un código de error. Necesarios para hacer operaciones con ficheros, ya que una vez asignado será su nombre propio. Los procesos tienen una tabla de descriptores de ficheros con todos los ficheros que tiene abiertos 0 1 2 ... console console console ... STD_INPUT STD_OUTPUT STD_ERR Otros ficheros abiertos La redirección consiste en reasignar los ficheros estándar. De forma que $ a.out > F1 genera una variante sobre la tabla anterior 0 1 2 ... console F1 console ... STD_INPUT STD_OUTPUT STD_ERR Otros ficheros abiertos A este mecanismo se le conoce como independencia de dispositivo SO. Tema 1 TR 14 Sistema de ficheros: Sólo son accesibles si están montados porque no se soportan nombres de ficheros que incluyan nombre de dispositivo de soporte. Ello a fín de proporcionar transparencia de dispositivo a los usuarios. - Al montar un sistema de ficheros en un directorio, el nombre de ese directorio pasa a referirse al directorio raiz del sistema de ficheros montado. El contenido anterior de ese directorio queda oculto. Estructura de ficheros típica de UNIX: / etc bin usr users juan lib dev pedro aaI dso /users/pedro/dso Para el nombrado de ficheros hay que dar la trayectoria desde la raíz. Para evitarlo, se puede utilizar el directorio de trabajo que se guarda en una variable del sistema llamada HOME y que se denota por . , el directorio superior al de trabajo es el .. En este ejemplo el directorio de trabajo de Pedro es HOME = /users/pedro Ficheros especiales: Simulación de los dispositivos Entrada / salida para que se puedan manejar como ficheros. -Tipos - De bloques - Para dispositivos organizados en bloques de caracteres - De caracteres - Para dispositivos organizados en flujos de caracteres SO. Tema 1 TR 15 - Algunos ficheros - Fichero de entrada estándar: descriptor de fichero 0 - Fichero de salida estándar: descriptor de fichero 1 - Fichero de errores estándar: descriptor de fichero 2 - Números de dispositivo de los ficheros especiales: - principal (mayor device number): tipo de dispositivo. Todos los dispositivos con el mismo número principal comparten el código del manejador de dispositivo (driver) - secundario (minor device number): dispositivo en concreto dentro de los de su clase. Se pasa como parámetro al manejador. Dentro del directorio /dev están todos los dispositivos del sistema /dev/hd0 /dev/hd1 /dev/tty0 /dev/tty1 /dev/lpr /dev/net ... De esta forma al escribir sobre el dispositivo tty0, estaré haciéndolo sobre el terminal. De igual modo ocurrirá con la impresora, que se vemos sus permisos, comprobaremos que no podemos leer de ella. Pipes: Fichero intermedio para pasar datos de un proceso a otro. Ello permite que la comunicación entre procesos sea similar a las operaciones de lectura y escritura en ficheros. Se utiliza una llamada al sistema especial (distinta de las de uso normal con ficheros) Su implementación consiste en variar las entradas estandar sobre las tablas de ficheros de cada proceso. $ cat | wc genera cat: 0 console STD_INPUT 1 fich_intermed STD_OUTPUT io SO. Tema 1 TR 16 2 ... console ... STD_ERR Otros ficheros abiertos wc: 0 fich_intermed io 1 console 2 console ... ... STD_INPUT STD_OUTPUT STD_ERR Otros ficheros abiertos - Señales: Equivalente software de las interrupciones hardware. Tipos: (1) 2 3* (4)* (5)* (6)* (7)* (8)* 9 (10)* (11)* (12)* 13 14 15 16 SIGHUP SIGINT SIGQUIT SIGILL SIGTRAP SIGIOT SIGEMT SIGFPE SIGKILL SIGBUS SIGSEGV SIGSYS SIGPIPE SIGALRM SIGTERM sin asignar El modem ha detectado apertura de la línea telefónica Se ha apretado la tecla DEL Señal quit del teclado Instrucción ilegal Interrupción de traza Instrucción IOT Instrucción EMT Desbordamiento-vaciamiento en coma flotante Matar proceso Error en el bus Violación de la segmentación Argumente ilegal en la llamada al sistema Escritura en tubo sin lector conectado Alarma Señal de terminación generada por software MINIX no implementa las representadas entre paréntesis. Los * indican señales que provocan un volcado a disco de la memoria del proceso si se ignoran o no se capturan 6. Llamadas al sistema. Están relacionadas con los procesos o con los ficheros. - Los mecanismos para realizar llamadas al sistema dependen estrechamente del hardware - Suele ser necesario expresarlos en ensamblador - Existe una biblioteca de procedimientos para poder hacer llamadas al sistema desde C SO. Tema 1 TR 17 - Hay 41 llamadas al sistema - Muchas llamadas al sistema devuelven -1 si hay error. El número de error se almacena en 'errno' Gestión de procesos: pid = fork() s = wait(&estado) s= execve(nombre,argv,envp) exit (estado) tamanyo = brk(direccion) pid = getpid() Crea un proceso hijo idéntico al padre Espera que un hijo termina y devuelve su estado Reemplaza la imagen de memoria de un proceso Termina la ejecución del proceso y devuelve su estado final Pone el límite superior del segmento de datos a "direccion" Devuelve el identificador de proceso del llamador Señales funcant = signal(senyal,func) Especifica que una señal se capture, ignore, etc. s = kill(pid,senyal) Envía una señal a un proceso residual = alarm(segundos) Pone una señal SIGALRM para que se dispare después de un cierto tiempo s = pause() suspende al llamador hasta la siguiente señal SO. Tema 1 TR 18 Gestión de ficheros fd = creat(nombre,modo) fd = mknod(nombre,modo, direccion) fd = open(fichero,como) s = close(fd) n = read(fd,buffer,nbytes) n = write(fd,buffer,nbytes) pos = lseek(fd,posicion, dedonde) s = stat(nombre,&buf) fd = dup(fd1) s = pipe(&fd[0]) s = ioctl(fd,peticion,argp) Crea un nuevo fichero o trunca uno existent Crea un nodo-i normal,especial o directorio Abre fichero para lectura,escritura o ambas Cierra un fichero abierto Lee datos de un fichero en un buffer Escribe datos de un buffer a un fichero mueve el puntero de posición del fichero Devuelve el estado leído del nodo-i de un fichero Duplica el descriptor de un fichero abierto previamente Crea un tubo Realiza operaciones particulares en ficheros especiales Gestión de directorios y de sistemas de ficheros s = link(nombre1,nombre2) s = unlink(nombre) s = mount(especial,nombre, rwindicadores) s = umount(especial) s = chdir(nombredir) s = chroot(nombredir) Crea una nueva entrada de directorio, nombre2, para el fichero nombre1 Borra una entrada de directorio Monta un sistema de ficheros Desmonta un sistema de ficheros Cambia de directorio de trabajo Cambia el directorio raiz Protección s = chmod(nombre,modo) uid = getuid() gid = getgid() s = setuid(uid) s = setgid(gid) s = chown(nombre, propietario, grupo) s = chroot(nombredir) Cambia los bits de protección de un fichero Devuelve el uid del llamador Devuelve el gid del llamador Asigna un valor al uid del llamador Asigna un valor al gid del llamador Cambia el propietario de un fichero y su grupo Cambia el directorio raíz SO. Tema 1 TR 19 Gestión de tiempo seg = time(&seg) s = stime(tp) s = utime(fichero, instante) s = times(buffer) Devuelve el tiempo transcurrido en seg. desde el 1-1-1970 Especifica tiempo transcurrido desde el 1-1-1970 Pone instante de "último acceso" al fichero Devuelve tiempos de sistema y usuario usados hasta ahora 7. El intérprete de órdenes (shell) - Es el interfaz básico entre el sistema operativo y el usuario - Una sesión de trabajo de usuario consiste en la ejecución del shell. - Su funcionamiento es interactivo y envía un símbolo de atención cuando espera datos del usuario. - Los datos que acepta el shell son órdenes al Sistema Operativo. - Para atender una orden el shell crea un proceso hijo. Entretanto que se ejecuta el hijo, el shell espera a que ese termine. - La entrada y la salida estándar del shell están conectadas al terminal - Redireccionamiento de la entrada estándar: < - Redireccionamiento de la salida estándar: > - Redireccionamiento de la salida de error estándar: 2> - Realización de un shell simplificado: while (TRUE) { leer_comando(comando,parametros); if (fork() != 0) { wait(&status); } else { execve(comando,parametros,0) } } // bucle infinito // lee del terminal // crea proceso hijo // código del padre // código del hijo donde se supone que TRUE es una constante definida a 1, de manera que se puede emplear para hacer bucles infinitos.