Escuela de Educación Técnica Nº2 – Sistemas Operativos – Especialidad: Informática SISTEMAS OPERATIVOS - PROCESOS COMUNICACIÓN ENTRE PROCESOS Todas las computadoras modernas pueden hacer varias cosas al mismo tiempo. Mientras ejecuta un programa de usuario, una computadora también puede leer un disco y enviar texto. Si bien la CPU solo puede ejecutar un programa en un instante determinado, a lo largo de un segundo puede trabajar en varios programas, lo que da al usuario la ilusión de paralelismo. El modelo de procesos: Es un modelo conceptual desarrollado por los diseñadores de sistemas operativos para poder explicar el paralelismo. En este modelo, todo el software ejecutable de la computadora se organiza en varios procesos secuenciales. Un proceso es un programa en ejecución e incluye los valores que tienen el contador de programa, los registros y las variables. Simulamos que cada proceso tiene su propia CPU virtual aunque en realidad la verdadera CPU cambia en forma continua de un proceso a otro. Esta conmutación se denomina multiprogramación. Con la CPU conmutando entre los procesos, la rapidez con que un proceso realiza sus cálculos no es uniforme ni reproducible si el proceso se ejecuta otra vez. Un proceso es una actividad de algún tipo: tiene entrada, salida y estado. Los sistemas operativos deben poder crear o destruir procesos que se van generando durante la ejecución. En Unix los procesos pueden crearse mediante una llamada a bifurcación FORK. Un proceso hijo también puede llamar a una instrucción FORK y así puede crearse un arbol de procesos. Estados de los procesos Cada proceso es una entidad independiente con su contador de programa, y estado interno pero en ocasiones necesitan interactuar con otros procesos. Un proceso podría generar salidas que otro proceso utiliza como entrada. Cuando un proceso se bloquea generalmente es porque está esperando la entrada de otros procesos que no están disponibles. Creación de procesos: No todos los procesos que se requieren durante operación de una PC están presentes desde cuando el sistema arranca. Hay cuatro sucesos principales que causan la creación de procesos: Inicialización del sistema Ejecución de una llamada al sistema para crear procesos por parte de un proceso en ejecución. Solicitud de un usuario para crear un proceso. Inicio de un trabajo por lotes. (1)Cuando se arranca un sistema operativo, se crean varios procesos. Algunos son de primer plano (procesos que interactuan con usuarios). (2) Otros son de segundo plano (tienen una función específica) Estos procesos que quedan en segundo plano como por ejemplo para recibir correo electrónico entrante o para aceptar solicitudes de páginas web albergadas en nuestro equipo se llaman Escuela de Educación Técnica Nº2 – Sistemas Operativos – Especialidad: Informática “daemons” (demonios). En Windows se pueden ver usando el administrador de tareas. (3) Un proceso en ejecución puede crear llamadas a otros procesos que lo ayuden a realizar su labor. Esto tiene utilidad especial cuando varios procesos están relacionados pero son independientes. Ej. descarga de gran cantidad de datos, proceso de esos datos (suma, resta, etc.) en otro proceso. (4) Solicitud del operador haciendo clic en un ícono o escribiendo un comando. En Unix la llamada al sistema para crear un proceso se llama fork. En Windows una llamada de Win32, CreateProcess se encarga de crear el proceso y de cargar el programa correcto dentro del proceso creado. Terminación de Procesos: Todo proceso termina y puede ser debido a las siguientes condiciones: Terminación normal Terminación por error Error Fatal Terminado por otro proceso. Terminación normal: Cuando se termina de ejecutar un programa se envía una llamada para avisar al sistema operativo sobre la terminación. Esta llamada es exit en Unix y ExitProcess en Windows. Los programas terminan en pantalla cuando elegimos salir del menú o cuando cerramos la ventana de Windows. Terminación por error: cuando el proceso durante su ejecución se encuentra con un error, termina. Por ejemplo si un proceso tiene que llamar a un archivo, y este archivo no es encontrado, el proceso termina. Error fatal: Cuando un proceso tiene un error dentro de si mismo y por eso no puede terminar de ejecutarse. Terminado por otro proceso: Puede ocurrir que otro proceso pida que un proceso que se está ejecutando, termine. Jerarquía de procesos: En algunos sistemas, cuando un proceso crea otro proceso, el proceso padre y el hijo se mantienen asociados. El proceso hijo puede a su vez crear otro proceso y así se crea un árbol de procesos. Así funciona Unix. Windows no tiene jerarquía de procesos pero cuando un proceso crea a otro recibe una ficha (identificador) que le sirve para controlar a su hijo. Estados de los procesos: Los procesos pueden encontrarse: En ejecución: usando la CPU en un instante determinado. Listo: Puede ejecutarse pero se encuentra detenido en forma temporal esperando que se ejecute otro proceso. Bloqueado: no puede ejecutarse hasta que no ocurra un suceso externo. Todo el manejo de interrupciones y suspensión y reanudación de procesos quedan ocultos en el calendarizador. El resto del sistema operativo adopta una estructura precisa en forma de procesos. Implementación de procesos: El sistema operativo mantiene una tabla llamada tabla de procesos con una entrada por proceso. Esta tabla informa cual es el estado del proceso, su contador de programa, apuntador de pila, asignación de memoria, estado de sus archivos abiertos, información contable y de calendarización y todas las demás cosas que deben guardarse cuando el proceso pasa de estado en Escuela de Educación Técnica Nº2 – Sistemas Operativos – Especialidad: Informática ejecución a listo o bloqueado para que se vuelvan a poner en marcha después como si nunca se hubieran detenido. Comunicación entre procesos: En ocasiones los procesos tienen que comunicarse entre ellos. Algunos, deben transferir su salida a otro proceso. Las situaciones en las cuales dos o mas procesos están leyendo o escribiendo datos compartidos y el resultado final depende de quién y cuándo se ejecuta. Exclusión mutua: La parte del programa que tiene acceso a la memoria compartida se llama “región crítica”. La exclusión mutua es una manera de asegurar que durante el lapso en que el programa recorre la región crítica, excluya a otro proceso del uso de las variables y datos compartidos. Se necesita cumplir cuatro condiciones para encontrar una solución a las regiones críticas: 1) Dos procesos no pueden estar al mismo tiempo dentro de sus regiones críticas. 2) No pueden hacerse suposiciones sobre las velocidades ni el número de las CPU. 3) Ningún proceso que se esté ejecutando fuera de su región crítica puede bloquear a otros procesos. 4) Ningún otro proceso deberá tener que esperar de manera indefinida para entrar en su región crítica. El problema de la cena de los filósofos: Existe un problema de sincronización llamado “problema de la cena de los filósofos”. Cinco filósofos están sentados en torno a una mesa circular. Cada uno tiene un plato de espagueti. El espagueti es tan escurridizo que se necesitan dos tenedores para comerlo. Entre cada par de platos hay un tenedor. La vida de un filósofo consisten períodos alternados de comer y pensar. (Esto es una abstracción). Cuando un filósofo siente hambre, trata de tomar los tenedores que tiene a su izquierda y a su derecha uno a la vez en cualquier orden. Si logra tomar los dos tenedores come durante un tiempo, luego los deja sobre la mesa y sigue pensando. La pregunta clave es ¿podemos escribir un programa para un filósofo que haga lo que debe hacer y nunca se atore? (Tener en cuenta que es necesario tomar los dos tenedores). La respuesta obvia es que el procedimiento “tomar tenedor” espera hasta que el tenedor en cuestión esté libre y luego se apodera de él. Pero ¿qué sucedería si todos los procedimientos deciden tomar el tenedor izquierdo al mismo tiempo? Ninguno podría tomar el derecho nunca y se produciría un bloqueo irreversible. Podríamos generar un programa en el cual cuando un proceso observa que el tenedor está ocupado, deja el tenedor durante un tiempo aleatorio y vuelve a agarrarlo y a verificar si el otro está también libre. Fuente: Sistemas Operativos modernos - Tanenbaum