0 Bewertungen0% fanden dieses Dokument nützlich (0 Abstimmungen)
34 Ansichten62 Seiten
El documento habla sobre procesos y hilos en sistemas operativos. Explica que un proceso implica la asociación de recursos como registros, memoria y archivos agrupados en una unidad de ejecución. También describe la imagen de un proceso, la multiprogramación de procesos, los mecanismos para interrumpir un proceso, y las causas para crear, terminar o suspender un proceso.
El documento habla sobre procesos y hilos en sistemas operativos. Explica que un proceso implica la asociación de recursos como registros, memoria y archivos agrupados en una unidad de ejecución. También describe la imagen de un proceso, la multiprogramación de procesos, los mecanismos para interrumpir un proceso, y las causas para crear, terminar o suspender un proceso.
El documento habla sobre procesos y hilos en sistemas operativos. Explica que un proceso implica la asociación de recursos como registros, memoria y archivos agrupados en una unidad de ejecución. También describe la imagen de un proceso, la multiprogramación de procesos, los mecanismos para interrumpir un proceso, y las causas para crear, terminar o suspender un proceso.
Intenta no volverte un hombre de xito, sino volverte un hombre de valor.
Albert Einstein Procesos e hilos
1 3.1 GENERALIDADES 3.1.1 Objetivos del mdulo administrador de procesos Creacin, eliminacin y organizar de procesos e hilos Planificacin. asignar la CPU a los procesos Comunicacin entre procesos e hilos Sincronizacin. 3.1.2 Concepto de proceso Un proceso implica la asociacin de un conjunto de recursos del sistema como registros de CPU, reas de memoria, archivos, buffer de E/S agrupados en una unidad de ejecucin llamada proceso. El proceso es diferente de programa, el programa es similar a la receta de cocina y el proceso es la elaboracin de la receta, un proceso es un programa en ejecucin. Para ilustrar el concepto consideremos las actividades que realiza un mecnico que arregla todo tipo de autos: el mecnico equivale al procesador, los manuales al programa, las herramientas y repuestos equivale al los recursos del computador. Las actividades que realiza el mecnico son anlogas al concepto de proceso, el mecnico puede encontrarse en estado de reparando un campero, pero se presenta una urgencia de reparar un automvil, que se considera un trabajo rpido y sencillo, entonces el mecnico cambia de actividad (cambio de contexto) deja de reparar el campero y cambia a repara el auto. La imagen del proceso esta formada por el segmento de cdigo, el segmento de datos, la pila del proceso, las entradas a la tabla de proceso y tambin puede incluir parte de la imagen de otros procesos como por ejemplo las reas compartidas del sistema operacional (pila del sistema operacional, cdigo del sistema operacional compartido) es el caso de los procesos del sistema Unix VAX y el Windows XP. Los procesos del sistema SO corren en modo supervisor Ejemplo: los procesos para acceder a los dispositivos de E/S. Procesos del usuario son los que ejecutan los usuarios programadores o usuarios de aplicaciones, corren en un modo restringido de privilegios, no se puede utilizar todo el repertorio de instrucciones de la CPU. En el procesador 80386 de Intel existen varios niveles o anillos de seguridad: nivel 0 a nivel 3 los programas que corren en nivel 0 estn en modo supervisor y pueden ejecutar todo el repertorio de instrucciones del procesador los que corren en nivel 3 son del usuario y estn restringidos a un grupo de instrucciones por ejemplo a nivel 3 no es permitido ejecutar las instrucciones de E/S del assembler La siguiente lista en pseudocdigo assembler es un ejemplo de algunas instrucciones privilegiadas: Procesos e hilos
2 STINT: activar las interrupciones HINT: desactivar las interrupciones HLT: detener el procesador LDT: cargar registros del vector de interrupciones LMSW: cargar la palabra de estado CLTS: borrar flag de tarea conmutada 3.1.3 Imagen de un proceso Un proceso es la abstraccin de un programa en ejecucin. la imagen del proceso est compuesta por cuatro segmentos: cdigo, datos, pila, datos del bloque de control del proceso (BCP) llamado tambin la tabla de procesos; la imagen del proceso no es necesariamente una imagen continua en la RAM, dependiendo del administrador de la memoria estos segmentos que constituyen la imagen pueden localizarse en diferentes sitios de la RAM, adems, si un proceso se encuentra paginado en la RAM solo algunas pginas de la imagen se encuentran en la memoria principal.
Figura. Imagen de un proceso 3.1.4 Multiprogramacin de procesos Una CPU en un instante de tiempo ejecuta una sola instruccin de un programa, pero en un intervalo t (Quantum o rodaja de tiempo) ejecuta n instrucciones del mismo proceso es lo que se denomina traza de instrucciones del proceso, La CPU conmuta continuamente entre procesos dando la ilusin de paralelismo en la ejecucin pero en realidad es un pseudoparalelismo. En un ambiente de multiprogramacin la CPU ejecuta varios procesos otorgando a cada uno una fraccin de tiempo; la CPU conmuta entre procesos ejecutando la traza de instrucciones para atender a todos los usuarios dando la apariencia de paralelismo, una traza es el conjunto de instrucciones que la CPU ejecuta durante una rodaja de tiempo llamada Quantum ( aproximadamente 100 ms) el proceso puede cambiar de estado, cuando se termina el Q del proceso la rutina que atiende esta interrupcin hace que el control pase al planificador el cual mediante un algoritmo de polticas de planificacin selecciona el nuevo proceso a ejecucin en la CPU. Procesos e hilos
3
Figura. Multiplexacin de procesos en el tiempo
El modelo de procesos implica una asignacin de CPU a trazas de programa durante un Q de tiempo consecutivamente. p1-tp-p2-tp-p3-tp-p4-tp donde tp representa la traza de instrucciones del planificador. Q-tp-Q-tp-Q-tp-Q es otra forma de representar el modelo cuando los procesos consumen todo el Quantum (procesos limitados por CPU). El trmino multiplexacin en informtica se refiere a compartir la cpu entre varios procesos mediante rodajas de tiempo llamada Quantum 3.1.5 Mecanismos para la interrupcin de un proceso que se est ejecutando
Interrupcin externa Terminacin de la rodaja de tiempo. interrupcin generada por el reloj, el proceso pasa a la cola de listo Interrupcin de un dispositivo de E/S, el proceso pasa a la cola de bloqueados Fallo de pgina. el proceso pasa ha estado bloqueado mientras se trae a la RAM la pgina solicitada. Trap un trap est asociado a una condicin de error en la instruccin que se est procesando, el SO determina si el error es irreparable y elimina el proceso o si se puede hacer algn procedimiento para reparar el error.
Llamadas al sistema Cuando se ejecuta una instruccin de E/S el proceso genera una llamada al sistema operativo, en algunos casos esta llamada implica que se produzca una interrupcin por cambio de contexto algunas llamadas al sistema no implica un cambio de contexto sino un cambio de modo, el procesador continua con el mismo proceso pero Procesos e hilos
4 transfiere el control al SO y luego retorna al proceso. Ejemplo: Un mensaje corto por la terminal no implica un cambio de contexto pero si un cambio de modo 3.1.6 Cambio de modo Un proceso puede cambiar de modo usuario a modo Kernel sin cambiar su estado de ejecucin, por ejemplo cuando el proceso invoca al SO mediante las llamadas al sistema para ejecutar un servicio o rutina del SO cambia a modo Kernel, pero luego retorna al proceso y vuelve a modo usuario, en este cambios de modo el proceso mantiene el procesador es decir mantiene el estado de ejecucin; en otros casos, las llamadas al sistema implican un cambio de contexto y liberacin de la CPU. 3.1.7 Causas para crear un proceso Desde un terminal en forma interactiva el usuario crea procesos cuando ejecuta comandos, cada comando implica la creacin de un proceso Cuando se arranca el sistema operativo, se inician los procesos denominados demonios, los cuales se caracterizan porque no generan salidas a la terminal y terminan cuando se desactiven los servicios que estos representan. El sistema operativo puede crear nuevos procesos segn los servicios que se les solicite. Un programa de usuario puede crear procesos de usuario, en Linux se crean procesos invocando la llamada al sistema fork(). El cron genera nuevos procesos en forma automtica segn la programacin y calendario establecido. 3.1.8 Causas de terminacin de un proceso Terminacin normal. El procesos mediante una llamada al sistema comunica que ha terminado normalmente exit. Lmite de tiempo excedido. Los tiempos pueden incluir tiempo total del proceso, tiempo de uso de CPU, el proceso se ha pasado del lmite de tiempo permitido. Memoria insuficiente. No existe memoria virtual y el proceso no cabe en la RAM. Violacin de memoria. trata de acceder lugares de memoria restringidos o protegidos. Error de proteccin. tratar de escribir en ficheros protegidos contra escritura. Falla en una operacin de E/S. un dispositivo defectuoso. Instruccin invlida. se trata de ejecutar una instruccin en un archivo de datos, esto ocurre al tratar de ejecutar un archivo que contiene datos o saltar a ejecutar instrucciones al rea dentro del rea de datos. Instruccin privilegiada. se trata de ejecutar instrucciones del modo Kernel. Datos errneos. los datos no coinciden con el tipo especificado. Eliminacin del padre del proceso hijo. se eliminan todos los descendientes Procesos e hilos
5 3.1.9 Causas para la suspensin de un proceso El SO suspende el proceso para liberar memoria RAM, el proceso suspendido pasa a la memoria virtual en el disco y permanece en estado inactivo el cual no compite por la CPU. El SO decide suspender procesos que llevan mucho tiempo en la RAM y no hacen nada, es decir no entran a estado de ejecucin porque esperan por un evento que posiblemente nunca llegar. Procesos que funcionan con un temporizador para ejecutarse peridicamente y luego suspenderse, es el caso de los monitores de estadsticas del sistema, cada intervalo de tiempo se ejecutan y luego se suspende. Por solicitud del usuario, para efectos de depuracin del proceso ( debug ). 3.1.10 Estructura de los procesos En algunos sistemas operativo Linux los procesos se organizan en jerarqua en otros como Windows se organizan como objetos, usando el comando pstree en Linux listamos en pantalla esta forma jerrquica de todos los procesos, el proceso padre de todos se llama init que se ejecuta al momento de arranque, despus de que se verifican los dispositivos y se carga el sistema de archivos raz.
Figura. Estructura de procesos 3.1.11 Duracin de los procesos La duracin depende del tipo , existen varios tipos de procesos: procesos relacionados con los servicios, procesos de comandos bsicos, procesos de simulaciones matemticas, procesos comerciales etc. ; en general existen procesos de corta duracin, es decir, menos de un Quantum de tiempo por ejemplo algunos comandos bsicos ls, cat, ps; procesos de duracin media y procesos largos que gastan varios Q e incluso horas das, meses, aos de CPU; los procesos que consumen mucha CPU se les denomina procesos limitados por CPU, los procesos que consumen mucha entrada salida se les denomina procesos limitados por E/S. 3.1.12 Tabla de control de los procesos Es la estructura de datos ms importante para la administracin de los procesos, en esta tabla o BCP (Bloque de control para los procesos) se almacena toda la informacin sobre la identificacin de un proceso, el valor de los registros de la CPU para el respectivo proceso, Procesos e hilos
6 el estado, la prioridad, el tiempo de ejecucin etc... es de anotar que la tabla de procesos desde el punto de vista de un programador es un arreglo de estructuras y por tal motivo se encuentra en la RAM, para cada proceso existe una entrada en el arreglo. 3.1.13 Contenido de la tabla de procesos
La siguiente informacin relativa a los procesos se encuentra disponible en la tabla de procesos: Identificacin. PID (process Identification) un nmero que identifica el proceso PPID ( identificacin del padre ) un nmero que identifica el proceso padre UID ( nmero de identificacin del usuario dueo del proceso) Relacionadas con el procesador. PC contador de programa PSW palabra de estado del programa (Program Status Word) Registros de usuario. los registros de CPU que pueden ser ledos y modificados por el programador Puntero de Pila. cada proceso contiene una o mas pilas o estructuras LIFO ( last input first output ) para guardar las direcciones de retorno de las subrutinas y los valores del paso de parmetros. Relacionadas con el estado y la planificacin. Estado del proceso. se almacena una letra que identifica el estado del proceso ejemplo: en ejecucin (Run), listo (Ready) , bloqueado (Sleep), Suspendido- Bloqueado (bloqueado en la swap B/S), Suspendido_Listo (listo en la swap B/L) NoInterrumplible (D), zombie (Z), es el principal de la jerarqua en esta sesin (Rs) es un hilo (Rl) Prioridad. Es un nmero que determina la prioridad para que los procesos se les otorgue la CPU, por el planificador del SO tiempo. de uso de la CPU, tiempo que ha estado bloqueado esperando un evento o en alguna cola. Procesos e hilos
7 Relacionadas con la comunicacin. Mensajes, banderas, seales asociadas a la comunicacin entre procesos Relacionada con la memoria: Puntero al segmento de cdigo puntero al segmento de datos puntero al segmento de pila puntero a la cola de listos puntero a la cola de bloqueados puntero a la cola suspendidos Relacionada con archivos. fd ( file descriptor o nmero que identifica un archivo abierto por el proceso) apuntador al ultimo registro en proceso
3.1.14 Representacin de los estados de los procesos
Figura. Modelo de dos estados
Procesos e hilos
8
Figura. Modelo de tres estados
Figura. Modelo de cinco estados
3.1.15 Campos importantes del registro de control psw (palabra de estado del proceso) La psw es dependiente del tipo de procesador, generalmente es un registro de 32 bits que contiene flags ( banderas) que determinan el comportamiento algunas de estas banderas se relacionan en la siguiente tabla:
FLAG del estado de la CPU KF modo Kernel /modo usuario CF la CPU acepta la instruccin CPUID ( informacin sobre familia, modelo, vendedor del CPU ) identifica el procesador del PC. Ver pdf sobre CPU instruccin con ejemplos en lenguaje assembler y C. Procesos e hilos
9 AF indicador de alineacin de frontera de palabra PF cuando se activa, en modo protegido se genera una excepcin por cada acceso a dispositivos de E/S VF enciende una mquina virtual DOS para el procesador Pentium, la CPU trabaja como una CPU 8086 TF indicador de trap causa una interrupcin despus de cada instruccin con el objeto de depuracin del programa. IF permite activar o desactivar las interrupciones VIP cuando se est en modo virtual (mquina DOS) indica que una o ms interrupciones estn pendientes de atender. resultado de operaciones CF bit de acarreo por una operacin de desplazamiento OF bit de Overflow PF bit de paridad SF bit de signo como resultado de una operacin aritmtica o lgica ZF indica que el resultado de una operacin aritmtica o lgica es cero
Los campos de la tabla ilustran sobre la importancia de este registro para la administracin del sistema y de los programadores, pues dependiendo de los valores de estos FLAGs se determina el estado de la mquina y de los procesos, no sobra decir que estos campos solo pueden ser modificados por el SO por medio de instrucciones especiales en modo Kernel. 3.1.16 Descripcin de los estados Ejecucin (R). El proceso que tiene la CPU Listo (L)(R). El proceso que dispone de todos los recurso, listo para que se le asigne el procesador Procesos e hilos
10 Bloqueado (S). Bloqueado por una operacin de E/S, espera un evento para pasar a estado de listo, evento que sucede cuando se cumple la solicitud que lo mantiene en bloqueo, por ejemplo cuando se cumple una solicitud de E/S. Nota: la S se interpreta como Sleep Suspendido-Bloqueado(B/S). El procesos fue sacado de la RAM y se encuentra en memoria virtual, este estado se presenta cuando el sistema detecta que falta espacio en la RAM para almacenar los procesos; Nota: B significa que reside en la swap y S en estado de bloqueado o sleep Suspendido-Listo (B/L). Es el mismo estado de listo solo que el proceso est en memoria virtual 3.1.17 Relacin entre procesos y el sistema operativo
Basados en el concepto de que un SO es un conjunto de programas, libreras, mdulos; se trata de responder la pregunta si el sistema operativo se debe considerar como un proceso. existen varios enfoques: Enfoque tradicional El sistema operativo no se considera como un proceso, es un bloque independiente o ncleo que siempre reside en la RAM, los procesos cuando requieren servicios del sistema conmutan al modo Kernel y se produce un cambio de contexto.
Figura. El sistema operativo tradicional
Como procesos de usuario El sistema operativo forma junto con los procesos de los usuarios una sola imagen, cuando el proceso del usuario solicita un servicio se cambia de modo usuario a modo Kernel pero no se cambia de contexto.
Procesos e hilos
11
Figura. El sistema operativo como procesos de usuario
Sistemas operativos modulares El sistema operativo se organiza como una coleccin de procesos del sistema (kernel ) y de mdulos que pueden ser de dos tipos: mdulos estticos que se definen en el momento de la compilacin del Kernel o mdulos de carga dinmica que se van incluyendo cuando se solicitan En el caso del SO Linux generalmente los mdulos del kernel corresponden a los manejadores de dispositivos (drivers), sistemas de archivos (fileSystem) y las rutinas de llamadas al SO ( system call). Los mdulos de carga dinmica facilitan al SO actualizarse incluyendo nuevas caractersticas y nuevos dispositivos sin necesidad de reiniciar el sistema.
Figura. Sistema operativo modular
3.1.18 Computacin de alto rendimiento Los computadores para proceso en paralelo se basan en dos arquitecturas: memoria compartida memoria distribuida.
Memoria compartida. varios procesadores comparten memoria RAM a travs de un solo bus de alta velocidad tradicionalmente se conocen como mquinas vectoriales tales como la cray XMP en terminologa moderna mquinas SIMD (Single instruccin Multiple Data) que se ha materializado con las extensiones MMX, SSE ( streaming Single instruccin Multiple Data Set). En estos sistemas existe una solo board con multiples procesadores y una RAM compartida Memoria distribuida. Varios nodos PCs con sus propias memorias RAM y procesador ejecutan procesos en paralelo y se comunican a travs de una red de alta velocidad; est arquitectura corresponde MIMD (Multiple Instruccin Multiple Data) Comentario [Y1]: es necesario cambia la figura para que corresponda a la defincicin: cambia la palabra CONMUTACION DE PROCESOS POR KERNEL - MODULOS CAMBIAR S1 S2 SN PO R P5 P6 PN Procesos e hilos
12
Programacin en paralelo. En computacin cientfica existen problemas de alta complejidad que requieren enormes velocidades de clculo y grandes capacidades de memoria RAM que son imposibles de satisfacer con un computador mono-procesador. Ejemplos: Las simulaciones del movimiento molecular; simular un segundo del movimiento de un grupo de tomos tardara miles de aos en un PC normal Descifrar el cdigo gentico implica procesos de secuenciacin y comparacin de patrones y procesamiento de imgenes son imposibles de lograr si no se hace uso del proceso en paralelo y la computacin de alto rendimiento. Acceso a bibliotecas digitales realizando bsquedas en contenidos de libros y revistas. Comprobacin del el tiempo para descifrar una determinada clave de seguridad de 32, 64, 12 bits
Para hacer uso de la programacin en paralelo se requieren libreras que realizan el paso de mensajes entre diferentes programas que corren en paralelo en diferentes procesadores, una de las ms usadas es MPI( Message Passing Interface)
Procesos e hilos
13 3.2 HILOS O HEBRAS (THREADS) 3.2.1 Definiciones de los Hilos
Definiciones de los Hilos Proceso se refiere a la unidad bsica para agrupar recursos del computador como el procesador, memoria, dispositivos de E/S, archivos, seales, pila, etc. Los hilos son llamados procesos ligeros principalmente porque la conmutacin entre hilos es ms rpida que la conmutacin entre procesos, un hilo es del orden de 10 a 400 veces ms rpido dependiendo si los hilos se implementan a nivel de kernel o a nivel de usuario El concepto de hilo se asocia a unidades de ejecucin, el de procesos al de agrupacin de recursos En un proceso pueden existir uno o ms hilos compartiendo el espacio de direcciones del proceso, un proceso que posee n hilos a nivel de kernel compartiendo un buffer en memoria puede eficientemente atender solicitudes de datos para los diversos hilos sin bloquear el proceso que los contiene, cada hilo se puede asignar a una solicitud e incluso en un procesador diferente aumentando la eficiencia Ejemplo: un servidor WEB es ms eficiente si se programa atendiendo cada solicitud web en un hilo diferente
Resumiendo el concepto de hilos se asocia con unidad de ejecucin del proceso, compartir memoria entre hilos de un proceso, trabajo colaborativo, , el hilo permite dividir un proceso en varias tareas que pueden corren en forma paralela; el concepto de proceso asocia recursos a uno o varios hilos de ejecucin. 3.2.2 Caractersticas de los Hilos El hilo se considera como la unidad de ejecucin, cada hilo posee datos propios referentes al estado de la CPU como su pc, psw, apuntador de pila del usuario, apuntador pila del Kernel es decir su propia tabla de hilos,. Comparten el mismo espacio de direcciones de memoria de un proceso en lo referente al segmento de cdigo y segmento de datos un hilo uede crear otros hilos. Se crean para trabajar en forma colaborativa dentro de un proceso, es decir no existe proteccin de sus reas de memorias entre ellos, el programador debe ser consciente de la lgica de colaboracin. Se pueden organizar en varias formas: o jerrquica. un hilo maestro - varios hilos esclavos o entubamiento. tubera de hilos similar a tubera de procesos o grupos. Los hilos a nivel de kernel son apropiados para el procesamiento paralelo sin que se pierda el concepto de proceso secuencial, es decir as como los procesos se bloquean cuando ejecutan instrucciones de E/S, los hilos a nivel de kernel tambin. Procesos e hilos
14 3.2.3 Imagen de un proceso con hilos
Figura. Imagen de un proceso con varios hilos 3.2.4 Ventajas y desventajas de los hilos
Ventajas de hilos Desventajas de los hilos 1. Son ms rpidos en la conmutacin, creacin y eliminacin. 1. Cuando un hilo se bloquea, el proceso y el resto de hilos tambin se van a bloqueo. se corrige implementando tcnicas conocidas como jacketing que consiste en convertir una llamada bloqueante en no bloqueante. 2. Comparten los datos sin necesidad de mecanismos de comunicacin tales como memoria compartida, mensajes u otros porque el segmento de datos del proceso es el mismo para todos los hilos 2. Cuando los hilos se implementa a nivel de usuario, una aplicacin multihilo no puede realizar multiproceso 3. Se adaptan mejor a las aplicaciones que requieren procesamiento paralelo usando varios procesadores.
4. La planificacin de los hilos a nivel de usuario puede hacerse a nivel de la aplicacin independiente de la planificacin del Kernel
Procesos e hilos
15 3.2.5 Tabla latencias entre hilos y procesos [STAL 2005 pag. 169]
hilos a nivel usuario Hilos en el Kernel procesos creacin 34 s 948 s 11300 s bloqueo 37 s 441 s 1840 s
3.2.6 Aplicaciones de los Hilos
Los hilos se pueden utilizar para ejecutar tareas simultneas en paralelo compartiendo un espacio de direcciones. Es 100-400 veces ms rpido realizar una conmutacin de hilos que una de procesos; por tal razn es ptimo programar con hilos aplicaciones que manejen numerosa actividad de entrada salida. Ejemplo1: Un servidor de Web, recibe muchas peticiones para localizar pginas Web esto es E/S, el servidor puede generar un hilo por cada solicitud y todos ellos comparten un cach de pginas. Si el hilo encuentra lo que busca en la cach retorna la peticin al usuario, de lo contrario inicia un proceso de bsqueda y se bloquea para que otro hilo procese otra solicitud de pgina web. Ejemplo2: Una pgina Web generalmente contiene texto, imgenes y sonido, vdeo; se puede programar la lectura de la pgina usando un hilo para procesar cada contenido compartiendo el rea del usuario, si existen varios procesadores cada uno puede ejecutar una de estas tareas realizando procesamiento paralelo; si se trata de un solo procesador es mucho mas rpida la conmutacin entre hilos que entre procesos Ejemplo3: Las aplicaciones de procesamiento de texto como Word, openOffice se pueden programar para generar las copias de seguridad corriendo como hilos en segundo plano; si se omiten los hilos cada vez que se realiza la copia de respaldo se produce una espera para el usuario, con hilos en segundo plano el usuario no alcanza a percibir el cambio de modo entre la tarea interactiva y la tarea en segundo plano 3.2.7 Implementacin de Hilos 3.2.7.1 Hilos a nivel usuario. ULT (User Level Thread)
Procesos e hilos
16 Los hilos se ejecutan encima de una capa software ( biblioteca ), en esta capa se manejan las diferentes llamada relacionada con la creacin y administracin de los hilos como por ejemplo thread_create y otras, tambin este software debe mantener su propia tabla de hilos, que permite salvar los registros y otros datos del hilo relacionados con la cpu. El Kernel ignora la existencia de hilos y contina manejando el proceso como una sola unidad solo existe a nivel de kernel la tabla de procesos. Ventajas: Los subprocesos pueden tener sus propios algoritmos de calendarizacin. Se pueden implementar en sistemas operativos que no administren hilos. Desventajas: Un hilo que se bloquea por una operacin de E/S Ejemplo : read bloquea a los otros hilos del proceso. Un hilo puede ejecutarse en forma indefinida y bloquea a los otros, ya que no estn controlados por la interrupcin de reloj del sistema. En aplicaciones las que los hilos realizan gran cantidad de llamadas al sistema. ( las aplicaciones limitadas por E/S ), cada llamada se convierte en un cambio de contexto, entonces la capa de software que administra los hilos debera convertir las llamadas de E/S bloqueantes en llamadas no bloqueantes ( tcnica conocida como jacketing) para conservar las ventajas de velocidad de conmutacin de hilos sin bloquear todo el proceso 3.2.7.2 Hilos nivel Kernel. KLT (Kernel Level Thread)
El Kernel administra los hilos, lleva la tabla de procesos normal pero aade un tabla para hilos, cuando un hilo termina el Kernel decide si continua con otro hilo del mismo proceso o con un hilo de otro proceso. Su desventaja en el costo en tiempo cuando se hacen llamadas al sistema para manejar los hilos, pues la conmutacin de hilos a nivel de Kernel es mayor que a nivel de hilos usuario. 3.2.7.3 Esquemas Hbridos Existe la administracin de hilos a nivel de Kernel y a nivel de usuario. Los hilos a nivel de Kernel se multiplexan en hilos a nivel de usuario. Esquema hilos a nivel de usuario e hilos a nivel de Kernel:
Procesos e hilos
17
Figura. Hilos a nivel de usuario
Figura. Hilos a nivel de Kernel
Figura. Hilos hbridos
3.2.8 Los hilos en diferentes Sistemas Operativos (Unix Linux Windows Solaris )
Procesos e hilos
18 Unix. Los sistemas tradicionales de Unix no implementan hilos, manejan solo un hilo o proceso a nivel de Kernel; para implementar hilos a nivel de usuario recurren a bibliotecas de hilos como la pthread con la que se pueden administrar varios hilos a nivel de usuario pero el Kernel solo maneja un proceso; los sistemas modernos Unix implementan multi- hilos a nivel de ncleo. Linux. No distingue procesos de hilos es un caso especial, pero implementa los conceptos de hilos considerando que todos los procesos que comparten el mismo espacio de direcciones virtuales son considerados como hilos excepto que no se comparte la pila de usuario, la entrada a la BCP; normalmente los procesos en Unix se crean con la instruccin fork() la cual genera un duplicado de la imagen del proceso padre; para crear un proceso se usa en Linux la llamada al sistema clone con argumentos para indicar que se comparte todos los recursos como memoria virtual, archivos, tabla de seales etc..; cuando los dos procesos comparten la MV se consideran como hilos de un mismo proceso, cuando se produce un cambio de contexto el kernel del sistema verifica si el proceso nuevo apunta al mismo espacio de direcciones de MV en tal caso no realiza llamada al sistema para cambiar de proceso, simplemente redirige el PC a la nueva direccin de memoria, evitando de esta forma el cambio de contexto pero al mismo tiempo administrando para cada hilo su propio BCP Para crear u proceso tradicional en Linux se usa la llamada clone sin argumentos. Solaris. Implementa hilos hbridos, multi-hilo a nivel de usuarios, multi-hilo a nivel del ncleo. Mediante la implementacin de procesos ligeros que realizan la asociacin entre hilos a nivel de usuario e hilos a nivel del ncleo. Windows. Maneja procesos e hilos como objetos, es un sistema multi-hilo a nivel de ncleo, cada procesos puede manejar varios hilos y cada uno ser asignado a procesadores diferentes realizando programacin en paralelo.
Procesos e hilos
19 Ejercicios Represente esquemticamente el concepto de hilo. Qu significa hacer un cambio de contexto entre hilos. En el siguiente esquema trabaja con hilos, realice el esquema sin hilos.
Escriba cuales datos del proceso son compartidos entre hilos y cuales no. Escriba los estados de un hilo. a nivel usuario tiene sentido un hilo en estado de suspendido (B) en decir que el hilo sea sacado de la RAM y este en la memoria virtual? Elabore una tabla con las ventajas y desventajas de tener hilos a nivel de usuario, hilos a nivel de Kernel. Que importancia tiene la llamada al sistema clone ? Escriba un ejemplo de una aplicacin que use hilos emergentes. (hilos que se crean en respuesta a una solicitud de E/S). Ej. en una servidor de correo; cada vez que se solicita un correo el servidor dispara un hilo emergente para atender la solicitud y cuando la cumpla lo destruye. Explique un procedimiento para convertir una aplicacin de un solo hilo (mono-hilo) en una aplicacin multi-hilo a nivel de usuario? [R. No es tarea fcil, existen inconvenientes de conflictos de competencia a nivel de los hilos que se puedan crear especialmente con las variables globales, con la pila , con las seales, etc. como el Kernel no conoce de la existencia de hilos le puede quitar la CPU a un hilo cuando las transacciones no se han completado ocasionando un conflicto de competencia. Ej: una seal de alarma de un hilo puede ser alterada por otro hilo que establezca un nuevo valor de seal de alarma sin que se haya cumplido la seal anterior. Procesos e hilos
20 3.3 PLANIFICACIN DE PROCESOS E HILOS El planificador de procesos es el mdulo del sistema operativo que asigna la CPU a los procesos de acuerdo a determinadas polticas. En los sistemas por lotes el planificador era muy simple aplicaba FIFO selecciona un el primer programa y a continuacin el siguiente. 3.3.1 Criterios de un buen planificador Equidad. Cada proceso tenga su tiempo justo. Eficiencia. Mantener ocupada la CPU un 100% en procesos del usuario. Rendimiento ( Throughput ) Maximizar el nmero de trabajos por hora. Minimizar cambios de contexto. Aumenta la eficiencia pero hay que tener cuidado de no perjudicar a los usuarios interactivos o usuarios con mucha E/S Minimizar tiempo de respuesta: Minimizar el tiempo de respuesta para usuarios interactivos; el tiempo no debe sobrepasar ciertos lmites por Ej. 5 ms Predecibilidad. El planificador debe disearse para que en todo momento se pueda conocer su comportamiento futuro Previsibilidad. Es una medida que indica la estabilidad del sistema es decir garantizar los tiempos de respuesta incluso cuando hay sobrecarga, se trata de evitar la variabilidad del sistema. El diseador debe ser consciente de que cada proceso es nico e impredecible. Algunos gastan ms CPU y otros gastan ms E/S; IMPORTANTE: de ninguna forma es posible predecir y precisar cundo y en que parte del proceso se suceder la interrupcin por cambio de contexto . 3.3.2 Tiempos de los procesos Tiempo de estancia o de servicio (T) turnaround time: Tiempo que gasta el proceso en el sistema desde que inicia hasta que termina, incluye el tiempo de proceso, el tiempo de espera y tiempo de carga. Tiempo de ejecucin (R): Tiempo de servicio menos el tiempo que gasta en la cola de listos, es el tiempo equivalente a un ambiente de mono-programacin. es igual a T-E es decir incluye el tiempo en estado de bloqueo. Tiempo de espera (E) tiempo que gasta en cola de listos, es equivalente al tiempo de servicio menos el tiempo de ejecucin.(T-R) Tiempo de procesador. (P) tiempo de uso de la CPU. Procesos e hilos
21 Tiempo de respuesta (response time): El tiempo de respuesta a una peticin de E/S depende de la velocidad de los dispositivos de E/S. ndice de servicio: Es la relacin entre el tiempo de ejecucin R y el tiempo de servicio T ( R/T ); si el ndice se aproxima a uno 1 significa que no paso mucho tiempo en cola de listos; si el ndice se aproxima a cero 0 significa que el proceso paso gran parte del tiempo en la cola de listos y la multiprogramacin es muy desfavorable para ese proceso, sera recomendable que este se ejecutara en otro ambiente por ejemplo de multiproceso o incluso de mono-programacin. En este caso la relacin E/T se aproxima a 1 indicando que pas la mayor parte del tiempo en cola de listos 3.3.3 Tipos de planificadores Planificador de admisin ( a largo plazo ). Define las polticas que determinan el orden de entrada de los procesos al sistema. Ejemplo: en un procesamiento por lotes se puede establecer una poltica FIFO. Planificador de memoria (mediano plazo). Selecciona los trabajos que han de pasar de la memoria RAM a la memoria SWAP cuando se necesita memoria RAM para otros procesos, teniendo en cuenta los siguientes factores Tiempo que el proceso ha permanecido en memoria RAM bloqueado esperando algn evento Tiempo transcurrido desde que el proceso fue intercambiado. Tamao del proceso Prioridad. Planificador de la CPU ( a corto plazo ) Selecciona de la cola de listos a cual proceso se le asigna la CPU aplicando los algoritmos de planificacin.
Procesos e hilos
22 Figura. Planificador de la CPU
3.3.4 Algoritmos de planificacin o calendarizacin Planificacin no interactiva FIFO Primero el ms corto Tiempo restante ms corto
Planificacin Interactiva. Turno Circular (Round Robin ) Prioridades Colas mltiples. Proceso mas corto primero Calendarizacin garantizada Calendarizacin por lotera Calendarizacin considerando el nmero de procesos del usuario. 3.3.4.1 Fifo El primer procesos en llegar es primero en ser atendido ( FIFO ); se va formando una lista de procesos sin importar prioridades, duracin, etc es un planificador elemental y se usa para procesamiento por lotes o batch.
Figura. El primer proceso en llegar es el primero en salir
3.3.4.2 Primero el ms corto Es un mtodo apropiado para los sistemas batch que garantiza mximo rendimiento. Ejemplo: Suponga que todos los procesos inician al mismo tiempo y sus tiempos de ejecucin son: A= 8; B=3; C=6; D=4 unidades de tiempo Segn el orden en que se procesen los trabajos se obtendran los siguientes tiempos de respuesta:
Comentario [Y2]: para ser consistentes con la grafica anterior: cambiar B por S E por R S/L por (B/L) S/B por (B/S)
la B significa estado suspendido (Swap) Procesos e hilos
23 FIFO Primero el mas corto Turno Circular RR A B C D tiempo promedio en RR A 8 21 8 3 6 4 21 B 11 3 7 2 5 3 10 C 17 13 6 1 4 2 19 D 21 7 5 3 1 15 4 2 3 1 2 1 Total 57 44 65 Promedio 14.25 11 16.25
El promedio indica que se despacho un mayor nmero de trabajos o que los trabajos en promedio esperaron menos tiempo para terminar Colocando los trabajos cortos en tiempo de ejecucin de primeros en sistemas por lotes se obtiene el mejor rendimiento Demostracin: para un trabajo A que gasta a de tiempo, un trabajo B que gaste b de tiempo, un trabajo C que gaste c de tiempo y un trabajo D que gaste d de tiempo se tiene que el promedio es: Promedio = (a+(a+b)+(a+b+c)+(a+b+c+d)) = (4a+3b+2c+d)/4 Observando los coeficientes se concluye que al ordenarlos de menor a mayor se obtiene el tiempo promedio ms pequeo si se cumple: a<b<c<d Pronstico de tiempo aplicando el mtodo del envejecimiento. Para calcular los tiempos de ejecucin a procesos interactivos que no se conoce a priori su duracin, se aplica el mtodo del envejecimiento. Si el proceso P1 gasta en ejecucin inicialmente t 0 y posteriormente t 1 con estos dos datos de inicio se puede realizar un pronstico t* 2 aplicando la siguiente formula t* 2 = a*t 0 + (1 - a)*t 1 . siendo a un factor 0<=a<=1. Procesos e hilos
24 si a=1/2 entonces, t* 2 =(t 0 /2)+(t 1 /2) = ( t 0 + t 1 )/ 2 coincide con el promedio aritmtico.
Ejercicio Aplicando el mtodo del envejecimiento calcule el tiempo pronosticado para t6 suponiendo un factor de a = 1/2 y los siguientes tiempos de ejecucin en ms. t 0 =1; t 1 =3; t 2 =4; t 3 =3; t 4 =2; t 5 =5 Una frmula general recursiva para el mtodo del envejecimiento la podemos escribir de la siguiente manera: t* n = a*T(n-1) + (1-a)*t(n-1) n > 0 t* n = Tiempo pronosticado T(n-1) = Tiempo histrico acumulado de pronsticos anteriores t(n-1) = Tiempo real segn ltima medida anterior al que se est pronosticando Para calcular el primer pronostico t * 1 supongo que el tiempo histrico es el mismo tiempo real y realizo el primer clculo as: t * 1 = t 0 el primer pronstico es la primera media real Para calcular el segundo pronstico: t * 2 = pronstico anterior ( histrico ) * (1/2) + ejecucin anterior * (1/2) t * 2 = 1 * (1/2) + 3 (1/2) = 2
Procesos e hilos
25 As sucesivamente hasta pronosticar el tiempo 6. n t n t * n pronstico 0 1 primer tiempo 1 3 t 1 * = t 0 = 1 primer pronstico 2 4 t 2 * = 1*(1/2)+ 3 *(1/2) = 2 segundo pronstico 3 3 t 3 * = 2*1/2 + 4*1/2 = 3 4 2 t 4 * = 3*1/2 + 3*1/2 = 3 5 5 t 5 * = 3*1/2 + 2*1/2 = 2.5 6 t 6 * = 2.5*1/2 + 5*1/2 = 4
Resumiendo: para calcular un tiempo pronostico t* n se debe conocer los dos primeros tiempos reales t 0 t 1 ; comenzar a calcular el t* 2 pronstico aplicando la formula t * 2 = a * t 0 + (1-a)*t 1 que sera el pronstico de lo que sera la tercera medida luego llega la tercera medida real; entonces se continua de esta forma sucesivamente hasta llegar a calcular t* n aplicando la formula: t* n = a*T(n-1) + (1-a)*t(n-1) n > 0 El factor a determina la importancia del promedio de tiempo histrico o de la ltima medida real; si a tiende a cero importa mucho ms la ltima medida para el pronstico. Una posible aplicacin de este algoritmo es para procesos interactivos se puede calcular el tiempo que gastar el proceso haciendo un pronstico segn el mtodo del envejecimiento y aplicar algoritmo de planificacin seleccionando el ms corto primero. 3.3.4.3 Turno circular (round robin rr)
Es el algoritmo que ms se usa en multiprogramacin, existe una lista FIFO de procesos en estado de listo; en cada interrupcin de reloj (20 ms) se verifica si ya se cumpli el tiempo del Q para el proceso que tiene el procesador, se le quita, se pasa a la cola de listos y se procede a asignar la CPU al siguiente de la lista FIFO; si el proceso ejecuta una operacin de E/S antes de terminar su Q se enva a la cola de bloqueados; si es un proceso muy corto y termina antes del Q se asigna inmediatamente la CPU al siguiente proceso de la lista. Con un Q muy pequeo se aumenta el nmero de cambios de contexto y se desmejora la eficiencia, con un Q muy grande favorece a los procesos largos pero se desfavorece los cortos. La frmula de la eficiencia = Q/Q+S donde S es el tiempo de cambio de Procesos e hilos
26 contexto. Ejemplo: con un Q = 100 ms y un cambio de contexto de 10 ms e= 100/120 = 90.91% Ineficiencia= 10/110 = 9.09%
Figura. Cada proceso cumple un Q de tiempo y se procede a asignar la CPU al siguiente de la lista FIFO, el proceso que abandona la CPU queda en cola nuevamente en la lista 3.3.4.4 Primero el de tiempo ejecutado ms corto
Cuando se planifica los procesos que estn en estado de listos, el planificador verifica el tiempo de ejecucin de cada proceso con respecto al Q; se asigna el procesador en el orden de primero los mas cortos ( t << Q ) que posiblemente correspondan a procesos que iniciaron y posteriormente ejecutaron alguna E/S; este algoritmo es una variacin de turno circular dando prioridad a los procesos limitados por E/S y como consecuencia eliminando el orden de una lista FIFO; el inconveniente es que se requiere llevar una contabilizacin de los tiempo de ejecucin 3.3.4.5 Prioridades Todos los procesos mantienen un nmero que representa su prioridad, se asigna la CPU al de ms alta prioridad; en cada interrupcin de reloj, se disminuye la prioridad del proceso. Asignacin esttica de la prioridad. El administrador del sistema puede manejar las prioridades en forma esttica usando algn comando del sistema en Unix existe el comando nice que permite subir o bajar prioridades; solo el usuario root puede aumentar la prioridad de los procesos. Ejemplo: Analicemos la asignacin de prioridades en un centro de cmputo: A los procesos donde se corren aplicaciones crticas por tiempo se les asigna una prioridad de 100 (prioridad mxima). Ejemplo: Procesos de mantenimiento 100. Procesos de ingenieros 80. Procesos de programadores 70. Procesos de edicin y grabacin 50. Procesos e hilos
27
Asignacin dinmica. La prioridad es asignada automticamente por el sistema. A los procesos que tienen bastante E/S (limitados por E/S) se les debe dar la mxima prioridad y a los procesos que consuman mucha CPU ( limitados por CPU) la mnima. Una formula para calcular la prioridad del proceso es: p = 1/f donde f=(tiempo real)/(quantum). es la relacin del tiempo que ha consumido de CPU con respecto al Q asignado, para los procesos cortos f tienden a cero y los largos >=1. Los procesos con f pequeo automticamente tienen mayor prioridad porque generan un p grande. 3.3.4.6 Colas mltiples con Q diferentes Es la poltica de dar progresivamente ms CPU a los procesos limitados por CPU (procesos que consumen mucha CPU). Un proceso que este en la clase ms alta comienza con Q, el proceso de la siguiente clase con 2Q, y as sucesivamente, cuando un proceso ocupa todo su Q, es movido a una clase superior. Por ejemplo, en un proceso que necesita 100 Q en el mtodo de planeacin cclica requerira 100 cambios de contexto, mientras que por el mtodo de colas mltiples solo 7. Q, 2Q, 4Q, 8Q, 16Q, 32Q, 64Q
Ejercicio Analice un proceso que empiece con bastante CPU y que luego se convierte en interactivo entonces utiliza poca CPU. ( t << Q ). Procesos e hilos
28
3.3.4.7 Calendarizacin garantizada Si existen n procesos cada uno tiene derecho 1/n de tiempo de CPU, el sistema calcula una relacin de cuanto ha consumido de lo que se le ha asignado: tiempo de procesador / tiempo asignado (t p /t a ). Se asigna la CPU a los que posean un ndice de relacin bajo. Ejemplo: si en un perodo 1 seg = 1000 ms se hace la planificacin para cuatro procesos, a cada uno se le asigna 250 ms de CPU, para comenzar se elige un proceso al azar, en las siguientes iteraciones se calcula la relacin t p /t a y se asigna la CPU segn el menor ndice. Un proceso muy largo puede perjudicarse con esta poltica, pues siempre favorece a los procesos cortos muy interactivos o de mucha E/S. 3.3.4.8 Calendarizacin por lotera Se basa en entregar a cada proceso un nmero, posteriormente en cada interrupcin del reloj aproximadamente cada 20 ms se hace un sorteo y se asigna tiempo de CPU al ganador hasta que llegue la siguiente interrupcin; la prioridad de los procesos se puede administrar asignando varios nmeros de lotera (m) a un proceso, si existen (n) nmeros de lotera la prioridad se calcula dividiendo m por el total de nmeros. p = m/n. Ejemplo: con 100 nmeros para repartir entre x procesos x < = n, p= 20/100 equivale a asignarle a un proceso 20 boletos para una prioridad del 20%. Al resto se le asignan boletos de acuerdo a la prioridad teniendo en cuenta que 1 (un boleto) representa 1% de probabilidad de obtener la CPU. Cmo resolver el problema si existen ms de 100 procesos en el sistema? 3.3.4.9 Calendarizacin que tiene en cuenta el nmero de procesos por usuario En los planificadores corrientes un usuario puede tener ms procesos que otro, por ejemplo el usuario A tiene 4 procesos ( p1, p2, p3, p4 ) en el sistema y el usuario B solo uno ( p5), en un planificador por turno circular se asignara: p1, p2, p3,p4,p5 en la primera ronda y as sucesivamente para las dems rondas; consideremos el caso en que cada usuario debe tener el 50% del CPU independiente del nmero de procesos: el planificador debera asignar la CPU as: p1,p5,p2,p5,p3,p5,p4,p5 y as sucesivamente. Procesos e hilos
29 3.3.4.10 Calendarizacin sistemas de tiempo real
Un sistema de tiempo real se caracteriza porque adems de cumplir con los requerimientos funcionales derivados del anlisis y diseo se deben cumplir requerimientos de tiempo. El sistema debe responder en tiempos menores o iguales al umbral de tiempo especificado en el diseo, generalmente son sistemas de tiempo real los sistemas de control en una fbrica automatizada, los sistemas multimedia, los sistemas que controlan aparatos de rayos X, en general todos los sistemas informticos deben responder en un tiempo segn las especificaciones pero en los sistemas de tiempo real se caracterizan porque los tiempos son del orden de ms o s, pasado este umbral el sistema falla en su totalidad. Los sistemas de tiempo real pueden ser crticos o no crticos, en los primeros cuando no se cumplen los requisitos de tiempo el sistema falla comprometiendo daos fsicos o vidas de personas, ejemplo control de la emisin de rayos X por medio de un software; en otros sistemas de tiempo real cuando no se cumple el tiempo especificado el sistema funciona parcialmente bien ejemplo: televisin digital. Los sistemas de tiempo real son de propsitos especficos y en general son controlados por un micro-controlador, pero algunos sistemas operativos de propsito general tambin consideran algoritmos de planificacin en tiempo real por ejemplo un sistema Linux se puede configurar para tiempo real. Para alguno procesos en tiempo real se debe tener en cuenta la periodicidad con que suceden los eventos y el tiempo que se gasta en atenderlos segn la siguiente formula: Si hay n procesos ejemplo: n pelculas de vdeo y cada evento se sucede con un periodo Tj y el procesador gasta Qj de CPU en cada evento, para que se cumpla el requisito de tiempo real, la relacin Qj / Tj no puede ser mayor que uno para todos los eventos que atiende el sistema; si Qj = Tj significa que el sistema solo tiene capacidad para atender un evento en el perodo Tj. La sumatoria de estas relaciones para los n procesos debe ser menor o igual a 1. Ej: si un servidor de multimedia atiende una pelcula donde el requisito de tiempo es 25 cuadros por segundo esto implica 1 cuadro cada 1/25 de segundo, es decir un cuadro cada 40 ms (periodo). Si el servidor tiene capacidad de procesar el cuadro en menos de 40 ms, puede atender otros eventos de tiempo real. Ejemplo: Si un servidor tiene capacidad de procesar cada cuadro en 10 ms, cuantas pelculas en tiempo real puede atender? verificamos hasta que valor de n se cumple que la sumatoria de Qj / Tj 10/40 +10/40 +10/40 + 10/40 entonces para cumplir el requisito de tiempo real de 25 cuadros por segundo este servidor solo puede responder 4 pelculas simultneamente.
3.3.4.11 Calendarizacin de hilos
Los algoritmos son los mismos que para la planificacin de procesos, se debe hacer diferencia si es planificacin a nivel de usuario o planificacin de hilos a nivel de Kernel. A nivel usuario los hilos comparten el tiempo del Quantum y es responsabilidad del software Procesos e hilos
30 aplicar polticas no apropiativas (los hilos no monopolicen la CPU) debido a que no existe un control de Quantum del hilo por el SO. Si los hilos son manejados a nivel del Kernel, el sistema puede asignar el Quantum a nivel de hilos independientes del proceso, pero las conmutaciones entre hilos son lentas, requieren de todo un cambio de contexto completo; una ventaja es que a nivel de Kernel si un hilo se bloquea por espera de E/S, no bloquea el resto del proceso.
Procesos e hilos
31
Ejercicios 1. Investigue como es el algoritmo de planificacin de Linux. a Cules procesos les otorga mayor prioridad: a los limitados por E/S o a los limitados por cpu 2. Complete la siguiente tabla calculando e interpretando el significado de los tiempos de estancia(T), tiempo de espera (E) y el ndice de servicio (estancia/ejecucin). que significa E=0; ndice de servicio=1?
3. Demuestre que en procesos limitados por cpu por Ejemplo: cinco procesos con tiempos T1 , T2, T3, T4, T5 de ejecucin, planificar usando el mtodo ms corto es ms eficiente ( el tiempo promedio del sistema es el menor) . Calcule el tiempo promedio de retorno para cada proceso y luego el tiempo promedio de retorno del sistema. hacer las deducciones basados en los coeficientes de la frmula para el tiempo de retorno. 4. Calcule el tiempo promedio de retorno de cada proceso, y el tiempo promedio de retorno de todos los procesos para tres procesos que gastan A=6, B=2, C=8 ms; sus prioridades son 3,4,2 respectivamente siendo 4 la mxima prioridad; desprecie el tiempo de cambo de contexto el orden de llegada es A,B,C suponga que todos llegan al mismo tiempo a. FIFO b. Primero el mas Corto. Comentario [Y3]: revisar que la tabla quede uniforme Procesos e hilos
32 c. Prioridades. d. Turno Circular. Calendarizacin garantizada. Suponga en el literal c, que debido a que son procesos limitados por E/S, en un corte del planificador A solo ha consumido el 30% del Q prometido, B 50% y C 20% . Calcular cual es el prximo proceso que toma la CPU para este caso especfico. 5. Usando el mtodo de calendarizacin por lotera, si existen 400 procesos cuantos boletos se le deben asignar a un proceso para que su prioridad sea del 20%.. Un boleto que % de prioridad representa ? 6. Describa un algoritmo de planificacin que tenga en cuenta el nmero de procesos por usuario, es decir, un porcentaje fijo de CPU segn usuario. ( Buscar algoritmo por porcin equitativa) Ej: si se establece como poltica asignarle la CPU 50% a un usuario y 50% a otro, entre dos usuarios, si el usuario A tiene 3 procesos y el B tiene 1 proceso entonces, el planificador debera ordenar el trabajo de la siguiente manera: A1, B1, A2,B1, A3,B1, A1, B1.. 7. Calcule la eficiencia de una CPU que con un Q=100 ms y el tiempo de cambio de contexto 5 ms. 8. calcule la ineficiencia de una CPU con un Q=100 ms y cambio de contexto de 20 ms. 9. Las mediciones en cierto sistema han revelado que los procesos se ejecutan en promedio en un tiempo T antes de bloquearse por E/S. una cambio de contexto requiere un tiempo S, con planificacin de turno circular de una formula para la eficiencia de la CPU en cada uno de los siguientes casos: a. Q= b. Q > T c. S < Q < T d. Q tiende a cero. 10. Cuatro trabajos por lotes ( A-D) llegan casi al mismo tiempo, sus tiempos estimados de ejecucin son de 4, 2, 5, 3 ; sus prioridades son de 3,4,2,1 siendo 4 la ms alta, para cada uno de los siguientes algoritmos calcule el Procesos e hilos
33 tiempo de retorno de cada proceso y el tiempo promedio de retorno de los procesos, ignore el tiempo por cambio de contexto. a. Planificacin por prioridades b. Fifo el primer trabajo que llega es el que consume 4 unidades de tiempo c. Primero el trabajo ms corto d. Turno circular. 11. Haga conclusiones sobre los servidores multimedia y como debe ser el planificador de tiempo real. 12. Analice el problema de los 25 cuadros/seg de requisito de tiempo real no estricto para una pelcula as: a. Qj es 80 ms b. Qj es 10 ms c. Qj es 20 ms. d. Considere el caso donde Qj es diferente para cada pelcula.
Procesos e hilos
34
3.4 COMUNICACIN ENTRE PROCESOS
En Unix existen unos mecanismos estndar de comunicacin entre procesos independientes llamados IPC (Interproccess communication); existen los IPC System V, ya obsoletos, se reemplazaron por IPC POSIX. La comunicacin para procesos locales se realiza por medio de las siguientes estructuras de datos que residen en la memoria del Kernel: memoria compartida ( tuberas de Unix ) semforos mensajes // mediante el protocolo solicitud/respuesta usando las llamadas al sistema send receive seales socket de dominio UNIX
sistemas distribuidos mensajes // usando protocolo TCP/IP Socket de dominio Internet RPC (Remote Procedure Call) llamada a procedimientos remotos Java RMI (Java Remote Method Invocation) pueden invocarse objetos remotos y sus mtodos Web Services conjunto mensajes y protocolos para comunicarse entre aplicaciones, incluyen estndares como SOAP(Simple Object Access protocol), WSDL (Web Services Description Language )
3.4.1 Memoria compartida
Es un segmento de memoria asignada por el Kernel para propsitos de intercambiar informacin entre procesos. El segmento de memoria puede ser asociado (mapeado) por otros procesos en sus respectivos espacios de direcciones; cualquier cambio que se realice en el segmento compartido automticamente se refleja en el espacio de direcciones de los d procesos que lo comparten. Ejemplo en IPC System V la llamada para crear un segmento compartido es: int shmget ( key_t , int size, int flag) flag puede ser IPC_CREAT o IP_EXCL. Posteriormente los procesos pueden adosar (pegar, unir) este segmento de memoria a su propio espacio de direcciones mediante la llamada: Procesos e hilos
35 char *shmat( int sumid, char *shmaddr, flag) 3.4.2 Mensajes Una lista de mensajes es almacenada dentro del Kernel y reconocida por los procesos de usuario por medio de un identificador. Ejemplo: la funcin para crear una lista de mensajes es: msgget( key_t, int flags); existen otras funciones que permiten escribir y recuperar mensajes de la lista como msgctl(), msgrcv() para obtener un mensaje. Ejercicio Examinar en Linux los comandos ipcs, ipcrm, msgrcv. leer en Linux usando los comandos: man ipcs man ipcrm 3.4.3 Semforos Los semforos controlan el acceso a los recursos compartidos, es decir sincronizan los procesos que compiten por un recurso para que solo un proceso en un instante del tiempo tenga acceso 3.4.4 Sockets Junto con los mensajes constituyen mecanismos de comunicacin entre procesos de bajo nivel, en los que el programador debe especificar el protocolo, los tipos de datos etc. Un socket es una abstraccin que representa un extremo de la comunicacin bidireccional entre dos procesos; cuando dos procesos necesitan comunicarse por Internet, cada uno crea un socket por el cual se enva y se reciben datos. Los sockets se clasifican en dominios: Dominio UNIX (PF_UNIX) para comunicacin entre procesos en la misma computadora. Dominio Internet (PF_INET) para comunicacin a travs de TCP/IP. Tipos de socket: Sockets stream. La comunicacin es orientada a la conexin, cuando el socket es para Internet corresponde a protocolo TCP/IP que es un protocolo confiable y orientado a la conexin. Sockets datagrama. No orientado a la conexin, no confiable. Para enviar y recibir datos a travs de la red, primero se debe establecer una conexin, definiendo la IP y el puerto; posteriormente se envan y reciben datos con las funciones: int write( int socket, char *mensaje, int longitud) int send( int socket, char *mensaje, int longitude, int flags) Para recibir los mensajes: Procesos e hilos
36 int read (int socket, char *mensaje, int longitud) Int recv( int socket, char *mensaje, int longitude, int flags) Los sockets utilizan las operaciones listen para preparar la conexin y la operacin accept (el proceso se bloquea esperando) para aceptar peticiones; los clientes utilizan la operacin connect. Secuencia de operaciones cuando se trabaja con un socket en un servidor a. Se crea el socket. b. Se le asigna una direccin IP c. Se prepara para recibir conexiones usando listen d. Se bloquea esperando peticiones de los clientes mediante la llamada a accept e. Lee mensajes del cliente usando read f. Procesa la informacin g. Devuelve resultados cliente mediante write h. Cierra el descriptor de socket abierto mediante close i. Vuelve a d 3.4.5 RPC. (Remote Procedure Call) Las llamadas a procedimientos remotos constituyen mecanismos de comunicacin de alto nivel, lo mismo que CORBA (Common Object Request Broker Arquitectura) o RMI de Java son el ncleo de muchos sistemas distribuidos. Algunos sistemas de paso de mensajes estn estructurados para que un proceso cliente enve una solicitud de servicio a un proceso servidor seguido por una respuesta que el servidor enva al cliente. Este sistema es muy similar a llamar a un procedimiento y esperar que este termine y devuelva la respuesta. El modelo de llamadas a procedimientos remotos contempla las siguientes etapas: 1). El cliente enva el mensaje al servidor. 2). El cliente se bloquea para esperar respuesta. 3). El servidor que estaba bloqueado recibe el mensaje, se desbloquea, realiza la operacin y enva un mensaje al cliente. 4). El cliente recibe el mensaje y se desbloquea. La secuencia es la siguiente:
Procesos e hilos
37
Figura. Llamadas a procedimientos remotos
Los procedimientos extremos tanto del servidor como del lado del cliente, realizan la funcin de comunicacin en una red distribuida permitiendo los RPC a los programadores realizar llamadas a procedimientos remotos como si fueran llamadas locales
3.5 CONFLICTOS DE COMPETENCIA Y SINCRONIZACIN DE PROCESOS 3.5.1 Conceptos
Cuando varios procesos simultneamente acceden a un recurso compartido para actualizar datos es posible que se produzcan errores en las actualizaciones de los datos generados por los conflictos de competencia. Ejemplos de recursos compartidos son un buffer de memoria, un campo de datos de un archivo compartido, un vector, una variable global etc. 3.5.2 Condiciones de competencia (race conditions)
Los conflictos de competencia los encontramos en situaciones de la vida diaria como comer cuando se sirve en un solo plato para varios comensales, hablar por un micrfono cuando se compite por este entre varias personas para diferentes propsitos, compartir un libro entre varios estudiantes en un mismo tiempo; actualizar simultneamente el saldo de una cuenta de donaciones como respuesta solidaria a una calamidad. Procesos e hilos
38
Figura.
En un ambiente de multiprogramacin los procesos comparten diversos recursos como la memoria, los dispositivos E/S, los archivos, el procesador. El siguiente ejemplo con base en el SPOOL (Simultaneous Peripheral Operation On Line) que simula una impresora virtual en disco y es accedida por muchos procesos para colocar sus archivos de impresin; el proceso spool los va despachando uno a uno.
Figura. El spool va despachando los procesos uno a uno
En el grfico anterior las variables: IN apunta a la prxima ranura disponible en el spool OUT prximo archivo a imprimir, el archivo 3 Eventos: Un proceso A necesita imprimir un archivo X. Se lee la variable IN con un valor de 3 Procesos e hilos
39 antes de que pueda colocar el archivo X en el buffer del spool y aumentar el contador de IN en 1; el proceso es interrumpido por el scheduler del SO y el control es pasado a un proceso B que tambin necesita imprimir. el proceso B lee la variable IN=3 se coloca el archivo Y en la ranura 3, se incrementa IN=IN+1. posteriormente el planificador pasa el control nuevamente al proceso A a modo listo para entrar a ejecucin el proceso A coloca el archivo X en la ranura 3, borrando lo que ya haba colocado el proceso B es decir borrando el archivo Y Como consecuencia el archivo X queda sobre el archivo Y, el archivo Y no saldr por impresora, simplemente desaparece del SPOOL. Ejercicio Analizar los conflictos de competencia para los siguientes casos:: conteo de votos cuenta bancaria compartida por varios usuarios. Conteo de votos en sistemas de elecciones. Suponga un sistema de elecciones computarizado para elegir tres candidatos (X,Y,Z) a director de una escuela de sistemas; el software se encuentra en un sistema centralizado actualizando un registro de base de datos compartido para registrar el conteo de votos por cada candidato, existen 5 terminales distribuidas en el Campus Universitario donde los estudiantes pueden realizar su votacin, los estudiantes al inicio del da, votan con intervalos de tiempo grandes de 10 minutos; pero finalizando la votacin pueden suceder votos casi simultneamente. Detecte que conflicto de competencia se puede generar cuando la votacin es casi simultnea? Actualizacin de una cuenta bancaria compartida. Suponga que a nivel nacional se dispone de una cuenta bancaria para realizar donaciones de solidaridad en caso de una emergencia. Si una persona dona $50, luego otra dona $100 y una ltima $ 150. Cules pueden ser los resultados del acumulador si la cuenta en la BD es compartida para actualizacin por varios usuarios simultneos? 3.5.3 Regin crtica de un proceso Se entiende por regin crtica la parte del programa (traza de programa) donde se accede el recurso compartido, un programa puede dividirse en tres regiones, la primera que define Procesos e hilos
40 el interfaz con el usuario ( captura de datos), la segunda que realiza clculos y accede a recursos compartidos, la tercera que define la interfaz de salida; entonces la parte del programa donde se accede el recurso compartido se denomina regin crtica; es recomendable que el tamao de esta traza de instrucciones sea de un nmero muy pequeo para no bloquear durante un tiempo muy largo al resto de procesos que compiten por el recurso compartido.
Figura. Las tres partes de la seccin critica de un programa 3.5.4 Exclusin mutua
Un mecanismo para evitar que dos o ms procesos se encuentren dentro de la regin crtica en forma simultnea y garantizar que solo un proceso puede acceder al recurso compartido en un instante de tiempo. La tcnica de semforos es un mecanismo que garantiza exclusin mutua porque involucra operaciones atmicas para la actualizacin mientras que la variable cerrojo no garantiza exclusin mutua porque actualiza como una variable normal. Ejemplo: piense en una cabina telefnica donde solo puede estar hablando una sola persona, pero que puede ser usada por muchos usuarios; un mecanismo de exclusin consiste en que la persona que entra a la cabina impide el acceso de otra cerrando la puerta con un seguro; otro mecanismo es que un operador administre el acceso e impida que dos usuarios estn dentro de la cabina 3.5.5 Soluciones al conflicto de competencia
Esta solucin se basa en implementar operaciones atmicas cuando se accede a los recursos compartidos; una operacin atmica implica que se ejecute una transaccin (conjunto de varias instrucciones) como una totalidad. En una transaccin se ejecutan todas las instrucciones o en caso de una interrupcin esta se bloquea o se anula y se comienza otra; si el grupo de instrucciones llega a ser interrumpido por el planificador o fallas en el fluido elctrico, el mecanismo que implementa la operacin atmica no permite Procesos e hilos
41 que otro proceso ejecute la transaccin hasta que el proceso inicial la termine; Si un proceso inicio una transaccin para entrar en una regin crtica (RC) y es interrumpido por el planificador de procesos otro proceso no puede entrar a la RC hasta que el proceso que inicio la transaccin la termine
3.5.6 Soluciones en las que el proceso espera consumiendo recurso de CPU
3.5.6.1 Variable cerrojo
Figura. Variable que controla la entrada a la seccin critica
La variable cerrojo consiste en colocar un switch (SW) que controle la entrada a la seccin crtica, Ejemplo: Suponga que varios procesos ejecutan una rutina compartida para actualizar una variable global llamada cuenta y solo se puede actualizar cuando el SW esta en 0.
Procesos e hilos
42 Rutina de sincronizacin
sincro () { If ( SW =0 ) then { SW=1; cuenta = cuenta + 1; otras instrucciones.; .
. SW=0; return; }; else return; }
Ejercicio: En el cdigo anterior analice: Cul es la transaccion cuando los procesos acceden en forma distante en tiempo como es el comportamiento de SW que actua como variable cerrojo? cuando los procesos acceden en forma simultnea como es el comportamiento de SW que actua como variable cerrojo? qu puede suceder cuando varios procesos ejecutan la rutina sincro() simultneamente? Que sucede si el Quantum del proceso se termina despus de validar la entrada pero antes de asignar SW=1? concluya si la variable cerrojo SW garantiza exclusin mutua?
3.5.6.2 Alternacin estricta
Analice el siguiente algoritmo que sincroniza dos procesos para acceder a un recurso compartido. Los procesos se alternan el tiempo de CPU (ejecucin) segn el quantum del sistema, en este ejemplo turno es la variable de sincronizacin, solo administra dos valores 0 y 1; el proceso X entra a su RC cuando turno es 0
Procesos e hilos
43
Figura. Los procesos se alternan segn el quantum del sistema.
Programa X
while (true) { while (turno = 0); /*seccin_crtica (); { cuenta= cuenta +1; turno = 1 /*seccin_no_crtica(); Intruccion1; Instruccin2; Instruccin-N; }
Programa Y
while (true) { while (turno = 1); /*seccin_crtica (); cuenta= cuenta +1; turno = 0 /*seccin_no_crtica(); Intruccion1; Instruccin2; Instruccin n; }
Comentario [Y4]: tomado de Tanenbaum Procesos e hilos
44
3.5.6.3 Solucin de Peterson
#define FASE 0 #define TRUE 1 #define N 2 int turno; int interezado[N];
Entrada_region (proceso) int proceso; { int otro; otro=1-proceso; interzado[proceso]=true; turno=proceso
/* Instruccin de espera; no hace nada */ while (turno== proceso && interezado [otro]==TRUE) }Salida_region (proceso) int proceso; { interezado[proceso]=FALSE;}
3.5.6.4 Instruccin TSL
Lo que hace la instruccin TSL, con ayuda del hardware, es permitir que un proceso verifique la entrada a la regin crtica y posteriormente cierre los cerrojos todo en una sola transaccin indivisible o atmica. La transaccin consiste de las siguientes dos instrucciones realizadas atmicamente: 1). Leer una palabra de memoria [flag] y guardarla en un registro de la cpu [registro] 2). Colocar 1 en flag.
La instruccin TSL hace toda esta transaccin en forma atmica sin interrupcin del proceso, si existen otras CPUs caso de multiprocesadores, los buses se bloquean para garantizar la indivisibilidad.
Comentario [Y5]: tomado de Tanenbaum Procesos e hilos
45
Figura. TSL solo un proceso puede pasar
enter_regin() tsl registro, flag /* Copia el valor de flag al registro y coloca atmicamente flag en 1 */ cmp registro /* compara el flag para verificar que estaba en cero */ jnz enter_regin /* si no era cero se queda en el loop de lo contrario entra en la regin crtica/* / regin crtica*/ Intruccion1; Intruccion2; Intruccion3; /* pueden acceder y actualizar recursos compartidos */
. Intruccion-n; return
salir_regin:
move flag 0 /* almacena cero en el flag */ return
La siguiente tabla ilustra los estados del algoritmo TSL; existen dos estados segn valores de flag y registro que no bloquean al proceso que ejecuta TSL y otros dos estados que conducen a un b loqueo del proceso que ejecuta TSL
Comentario [Y6]: tomado de Tanembaum Procesos e hilos
46 Estado flag registro no bloqueante 0 0 bloqueante 1 0 bloqueante 1 1 no bloqueante 0 1
3.5.7 Soluciones en las que el proceso espera en estado bloqueado
3.5.7.1 Semforos Dijkstra introdujo la idea de llevar la cuenta del nmero de procesos bloqueados esperando entrar a la seccin crtica, un semforo es como una variable que controla el nmero de procesos que acceden al recurso compartido. Las operaciones sobre las variables tipo semforo son down y up. down en una operacin atmica que disminuye en 1 el valor del semforo, si el valor antes de disminuir era cero o negativo down bloquea el proceso. Una vez la operacin sobre un variable semforo comienza, ningn otro proceso puede acceder al semforo hasta cuando la operacin se concluya; el mecanismo de semforos implementa operaciones atmicas mediante una llamado al sistema desactivando brevemente el mecanismo de interrupciones. up realiza dos acciones atmicamente: a) incrementa el valor del semforo en 1 b) despierta alguno de los procesos bloqueados por ese semforo. Cuando varios procesos estn bloqueados por un semforo, la operacin up aleatoriamente desbloquea a uno de ellos y el semforo sigue en cero hasta que todos se desbloquean Si existen varias CPUs, cada semforo debe protegerse para asegurarse de que solo una CPU examine el semforo. Los semforos cuyo valor inicial definido por el programador es igual a uno (1), se llaman semforos binarios y garantizan la exclusin mutua para uno o ms procesos.
Procesos e hilos
47
Algoritmo del productor - consumidor usando tres semforos
PRODUCTOR CONSUMIDOR
coloca productos
retira productos
bloqueado
retira productos
retira el ultimo elemento y desbloquea el productor coloca productos
bloqueado coloca el primer elemento y desbloquea el consumidor
Procesos e hilos
48
#define N 100 /* numero de celdas */ typedef int semaphore; semaphore mutex = 1; /* controla el acceso a la regin crtica */ semaphore vacos = N; /* cuenta las celdas vacas */ semaphore ocupados = 0; /* cuenta las celdas ocupadas */
La condicin de bloqueo se produce cuando hay 0 vacos o cuando hay N ocupados; adems, el productor necesita que el buffer de datos este protegido y no sea posible que dos procesos coloquen simultneamente elementos al buffer.
productor() { int item; produce_item(&item); down(vacos); down (mutex); enter_item (item); /* coloca un elemento en el buffer */ up (mutex) up (llenos) }
Antes de entrar a la seccin crtica el consumidor hace un down sobre el semforo que protege la seccin crtica (mutex) y despus de salir hacen el up sobre el mismo semforo.
consumidor() { down (llenos); down (mutex); remove_item (&item) /*elimina un elemento en el buffer */ up (mutex) up (vacos) }
Procesos e hilos
49
3.5.7.2 Barreras
En algunos casos en necesario hacer la sincronizacin entre varios procesos que realizan tareas correspondientes a una etapa o fase; cuando todos los procesos terminen una etapa se puede continuar con la siguiente fase; para este tipo de sincronizacin se usan las barreras. Los procesos que pertenecen a un grupo se sincronizan haciendo una llamada a un procedimiento de biblioteca por ejemplo barrier; mientras falte un proceso del grupo por hacer la llamada a barrier los dems procesos que ya han tocado la barrera permanecen bloqueados. La barrera los desbloquea cuando todos los procesos la han invocado Ejemplo sumatoria de los elementos de una matriz enorme Para realizar la sumatoria de los elementos de la matiz se recurre a la programacin en paralelo realizando descomposicin en el dominio de los datos, es decir, la matriz se descompone en n sum-matrices generando n sumas realizadas por procesadores independientes, el resultado final se obtiene cuando todos los procesadores hayan terminado su tarea. En la siguiente figura a, b, c, d, e representan los procesos corriendo en paralelo, R representa el proceso que realiza la sumatoria global de los diferentes resultados parciales.
3.5.7.3 Mensajes
Transmisin de mensajes Procesos e hilos
50 Los mensajes son apropiados para los sistemas distribuidos, los mensajes son enviados y recibidos mediante un formato en el que se debe especificar el tipo de mensaje, proceso que enva, proceso que recibe, datos y otros campos de control. Estructura de los mensajes La estructura de un mensaje depende de las tareas, por ejemplo en las tareas de disco:
SOLICITANTE
CONTESTACION
SEND y RECIBE son primitivas para comunicacin entre procesos, en realidad son llamadas al sistema y pueden colocarse en una librera de procedimientos sin que dependan del compilador. Este protocolo llamado protocolo de Solicitud/Respuesta es una simplificacin del protocolo TCP/IP no necesita realizar enrutamiento y los encabezados de los formatos para la transmisin de los mensajes son livianos comparados con el protocolo de redes, en razn a que fueron diseados para redes LAN que son ms veloces que las WAN que generalmente usan el protocolo TCP/IP. Capas que implementa el protocolo Solicitud/Respuesta MODELO SOLICITUD/RESPUESTA MODELO OSI nivel aplicacin nivel presentacin SOLICITUD/RESPUESTA nivel de sesin nivel transporte Procesos e hilos
51 nivel de red ENLACE nivel de enlace FISICA nivel fsico
La sintaxis de estas primitivas son: send (destino, &mensaje); /* Enva un mensaje al destino */ receive (fuente, &mensaje); /* recibe un mensaje de fuente */ 3.5.8 Aspectos de diseo en la transmisin de mensajes
El paso de mensajes origina otros problemas diferentes a los semforos, especialmente si el paso se hace a travs de una red. Los mensajes se pueden perder en la transmisin, es necesario confirmar los mensajes recibidos mediante una seal de reconocimiento ACK. La confirmacin tambin se puede perder y se hacen necesarios los duplicados. Se necesita distinguir entre un mensaje nuevo y uno retransmitido. Se necesitan sistemas de identificacin. proceso-maquina-dominio. Se genera problemas de seguridad: autenticacin (login con criptografa por Ejemplo usando algoritmos de clave pblica-clave privada. Se requiere eficiencia en la velocidad del paso de mensajes. La ventaja radica en que ni los procesos clientes ni los servidores deben conocer los detalles del paso de mensajes, este mecanismo es implementado por el sistema y los usuarios solo deben conocer como se usan las primitivas send y receive. Algunas desventajas son: Los problemas que pueden presentarse en el paso de mensajes por incompatibilidad en los registros de las maquinas; las diferentes marcas de procesadores usan tamaos y semntica de registros diferente. El problema de la semntica errnea, donde el cliente no sabe si el servidor abort antes o despus de realizar la operacin, en caso de tener que repetir el mensaje.
Procesos e hilos
52
Problema del productor - consumidor con paso de mensajes
#define N 100 /* numero de slots en el buffer */
Solo pueden enviarse hasta N mensajes, los mensajes que no son recibidos son colocados en un buffer por el sistema operativo.
productor() { int item; message m; /* buffer del tamao del mensaje */ while (true) { produce_item (&tem) /* genera algo para colocar en el buffer */ receive (consumidor, &m); /* espera a que llegue uno vaco */ build_mensaje (&m, item) /* construye el mensaje*/ send (consumer, &m) /* enva item al consumidor */ } } consumidor() { int item, i; message m; for (i=0; i<N; i+1) send (productor, &m) /*enva N vacos */ while (true) { receive (productor, &m) /*recibe mensaje del productor */ extract_item(&m, &item) /*saca el mensaje del item */ consume_item (item) /* hace algo con el item */ send (productor, &m) /* enva respuesta vaca */ } }
En esta secuencia el consumidor arranca enviando N mensajes vacos, cuando el productor tiene algo, coge un mensaje vaco lo llena y lo regresa al consumidor; si el productor trabaja ms rpido se bloquea y queda en espera de un sobre vaco, si el consumidor trabaja ms rpido se bloquea y queda esperando sobres llenos. Procesos e hilos
53 Cuando un proceso A enva un mensaje a un proceso B puede ocurrir: 1). A enva el mensaje a B y B lo esta esperando, entonces el mensaje se copia en el buffer de transmisin. Estar esperando significa haber ejecutado la primitiva receive. 2). A enva el mensaje a B y B no lo esta esperando, entonces A se bloquea. 3). B se prepara para recibir un mensaje y A no lo ha enviado, entonces B se bloquea. 3.5.9 Direccionamiento de los mensajes
Figura. Los mensajes son recibidos, guardados y eliminados del Buzn
Se pueden aplicar dos mtodos, en el primero los mensajes se envan directamente a los procesos, en el segundo Los mensajes son recibidos, guardados y eliminados de un MAILBOX (Buzn). Cuando un proceso enva un mensaje al mailbox este es guardado y el proceso continua realizando otra tarea, es un mecanismo asncrono; si el buzn esta lleno el proceso se bloquea en espera de un espacio en el buzn. Otro enfoque es eliminar el buzn o buffer y emplear otro mtodo llamado citas. Si un send es enviado antes de un receive, el proceso es bloqueado hasta que suceda el receive, en ese instante se procesa el mensaje sin necesidad de buffer. Si primero se hace un receive el proceso es bloqueado hasta cuando ocurra un send; con el mtodo de citas los procesos se bloquean hasta cuando se produce el send o receive correspondiente. Una cita es como un encuentro entre dos personas, para que se produzca un intercambio de informacin el que lleva el mensaje y el que lo recibe deben estar de acuerdo en cuanto al sitio y hora del encuentro, de lo contrario la cita no se da o se generan esperas por parte de alguno de los participantes; un mailbox es como un correo electrnico totalmente asncrono, los mensajes se depositan y retiran de en un buzn en cualquier momento. 3.5.10 Problemas clsicos Filsofos cenando. Lectores Escritores. El barbero Dormiln.
Procesos e hilos
54 Ejercicios 1. Analice el algoritmo de alternacin estricta: a. Identifique cuales son las variables globales y cual variable controla la sincronizacin? b. Que podra suceder cuando la seccin crtica de un proceso es relativamente grande con respecto al otro. c. Se puede aplicar este algoritmo para sincronizar varios procesos? 2. Usando la instruccin TSL, escriba un pseudocdigo para resolver el problema de actualizar un conteo de votos para candidatos a una eleccin de director. 3. Suponga que no existe la Instruccin TSL, pero que existe la Instruccin INTER; que intercambia valores entre flag y registro en forma atmica; modifique el algoritmo TSL para que implemente exclusin mutua usando la instruccin INTER. 4. Para la solucin de Peterson haga un seguimiento a este algoritmo con dos procesos que actualicen un campo compartido llamado cuenta y compruebe si efectivamente funciona la exclusin mutua. 5. Usando semforos implemente el problema de actualizar una cuenta bancaria que contabiliza las donaciones para una obra de beneficencia social. 6. Implemente el mecanismo de interrupcin de dispositivos de E/S usando semforos. Sugerencia: para cada dispositivo asigne un semforo iniciado en 0 y justo despus de arrancar el dispositivo de E/S haga un down al semforo para colocar el driver en espera de sucesos de E/S para ese dispositivo; el dispositivo se despierta mediante mensajes up que le enva el sistema para atender operaciones de E/S. 7. Encuentre dos aplicaciones de procesamiento paralelo donde se apliquen barreras. 8. Usando semforos haga una simulacin de la barrera de la figura de la seccin 3.3.6 9. El siguiente cdigo representa el problema de los lectores y los escritores; muchos lectores pueden acceder a la base de datos simultneamente, pero solo puede estar un escritor en la B.D. db representa el semforo binario que garantiza exclusin mutua a los escritores. mutex es un semforo binario para proteger de conflictos de competencia las operaciones de actualizacin de los contadores, el cdigo permite que los lectores monopolicen el acceso, es decir que solo cuando no existan lectores pueda ingresar un escritor.
Procesos e hilos
55 typedef int semaphore; semaphore mutex = 1; semaphore db=1 int rc = 0;
Cmo se podra modificar el cdigo anterior de los lectores y escritores accesando una base de datos para dar igual prioridad a los lectores y a los escritores? a. Quitar el semforo mutex b. Colocar un semforo mutex a los escritores c. Colocar un contador de escritores d. Quitar el semforo mutex y el contador de lectores e. Ninguna 10. Busque en un libro el algoritmo del barbero-dormiln, estdielo y analice el problema de sincronizacin. 11. Escribir un programa en bash, para comprobar el conflicto de competencia; mediante un script que llame a otros 5 scripts, donde se actualice la misma variable global llamada TOTAL; el usuario debe conocer a priori el resultado Procesos e hilos
56 correcto. Suponga que cada scrip mediante un for de 1 a 1000 incrementa la variable TOTAL en 1; si son 5 procesos el resultado ser ((1000)(1000+1)/2)*5 si no existe conflicto de competencias; Sugerencia: cree 5 scripts y un sexto que los invoque en modo background; es decir les coloca un & despus de invocarlos. 12. Escriba dos guiones shell, cada uno incrementa en 1 el valor de una un contador que se encuentra en un archivo llamado cuentas; el valor inicial es 0, escriba el resultado de cada actualizacin despus de que los dos procesos la realicen, detecte cuando hay conflicto de competencia e imprima el resultado errneo y despus de cuantos intentos se present. Nota: para evitar el conflicto use In file file.lock.
Procesos e hilos
57 LECTURAS 3.5.11 Memoria compartida en C para Linux La memoria compartida, junto con los semforos y las colas de mensajes, son los recursos compartidos que pone Unix a disposicin de los programas para que puedan intercambiarse informacin. En C para Unix es posible hacer que dos procesos (dos programas) distintos sean capaces de compartir una zona de memoria comn y, de esta manera, compartir o comunicarse datos. La forma de conseguirlo en un programa es la siguiente: En primer lugar necesitamos conseguir una clave, de tipo key_t, que sea comn para todos los programas que quieran compartir la memoria. Para ello existe la funcin key_t ftok (char *, int). A dicha funcin se le pasa un fichero que exista y sea accesible y un entero. Con ellos construye una clave que nos devuelve. Si todos los programas utilizan el mismo fichero y el mismo entero, obtendrn la misma clave.
Es habitual como primer parmetro pasar algn fichero del sistema que sepamos seguro de su existencia, como por ejemplo "/bin/ls", que es el "ls" del Unix.
Para el entero, bastara con poner un #define en algn fichero.h de forma que todos los programas que vayan a utilizar la memoria compartida incluyan dicho fichero y utilicen como entero el del #define Una vez obtenida la clave, se crea la zona de memoria. Para ello est la funcin int shmget (key_t, int, int). Con dicha funcin creamos la memoria y nos devuelve un identificador para dicha zona.
Si la zona de memoria correspondiente a la Clave key_t ya estuviera creada, simplemente nos dara el identificador de la memoria (siempre y cuando los parmetros no indiquen lo contrario). o El primer parmetro es la clave key_t obtenida anteriormente y que debera ser la misma para todos los programas. o El segundo parmetro es el tamao en bytes que deseamos para la memoria. o El tercer parmetro son unos flags. Aunque hay ms posibilidades, lo imprescindible es: Procesos e hilos
58 9 bits menos significativos, son permisos de lectura/escritura/ejecucin para propietario/grupo/otros, al igual que los ficheros. Para obtener una memoria con todos los permisos para todo el mundo, debemos poner como parte de los flags el nmero 0777. Es importante el cero delante, para que el nmero se interprete en octal y queden los bits en su sitio (En C, cualquier nmero que empiece por cero, se considera octal). El de ejecucin no tiene sentido y se ignora. IPC_CREAT. Junto con los bits anteriores, este bit indica si se debe crear la memoria en caso de que no exista. Si est puesto, la memoria se crear si no lo est ya y se devolver el identificador. Si no est puesto, se intentar obtener el identificador y se obtendr un error si no est ya creada. En resumen, los flags deberan ser algo as como 0777 | IPC_CREAT El ltimo paso poder usar la memoria consiste en obtener un puntero que apunte la zona de memoria, para poder escribir o leer en ella. Declaramos en nuestro cdigo un puntero al tipo que sepamos que va a haber en la zona de memoria (una estructura, un array, tipos simples, etc.) y utilizamos la funcin char * shmat (int, char *, int). o El primer parmetro es el identificador de la memoria obtenido en el paso anterior. o Los otros dos bastar rellenarlos con ceros. o El puntero devuelto es de tipo char *. Debemos hacerle un "cast" al tipo que queramos, por ejemplo, (mi_estructura *)shmat (...); Esta funcin lo que en realidad hace, adems de darnos el puntero, es asociar la memoria compartida a la zona de datos de nuestro programa, por lo que es necesario llamarla slo una vez en cada proceso. Si queremos ms punteros a la zona de memoria, bastar con igualarlos al que ya tenemos.
Ya estamos en condiciones de utilizar la memoria. Cualquier cosa que escribamos en el contenido de nuestro puntero, se escribir en la zona de memoria compartida y ser accesible para los dems procesos. Una vez terminada de usar la memoria, debemos liberarla. Para ello utilizamos las funciones int shmdt (char *) e int shmctl (int, int, struct shmid_ds *)
La primera funcin desasocia la memoria compartida de la zona de datos de nuestro programa. Basta pasarle el puntero que tenemos a la zona de memoria compartida y llamarla una vez por proceso.
La segunda funcin destruye realmente la zona de memoria compartida. Hay que pasarle el identificador de memoria obtenido con shmget(), un flag que indique que Procesos e hilos
59 queremos destruirla IPC_RMID, y un tercer parmetro al que bastar con pasarle un NULL A esta funcin slo debe llamarla uno de los procesos. Hasta ahora se indicado lo mnimo y ms bsico para poder utilizar memoria compartida. Hay ms funciones que permiten hacer ms cosas con la memoria compartida. Adems, para un uso ms "serio" y "correcto", sera necesario aadir algo como semforos. Por ejemplo, si los datos que deseamos compartir son muy grandes, es bastante probable que mientras un proceso intenta escribir en la memoria, otro est leyendo. Si lo intentan de forma totalmente descontrolada y a la vez, los datos que leen pueden ser incoherentes (hay otro que est escribindolos en ese momento y todava no ha terminado). Para evitar esto existen los semforos. Se pondra un semforo para acceder a la memoria, de forma que cuando un proceso lo est haciendo, el semforo se pone "rojo" y ningn otro proceso puede acceder a ella. Cuando el proceso termina, el semforo se pone "verde" y ya podra acceder otro proceso. 3.5.11.1 Comandos de Unix tiles Unos comandos de UNIX que nos pueden resultar de utilidad son ipcs e ipcrm. ipcs nos da un listado de recursos compartidos que estn creados en ese momento, es decir, listado de memorias compartidas como las que hemos tratado en esta pgina, de semforos y de colas. ipcrm nos permite eliminar algunos de estos recursos. Si paramos el programa con un Ctrl-C o simplemente sale de forma anormal, el recurso (la memoria compartida) no se libera y queda en el sistema. La forma de borrarla sera con este comandos. Es bastante normal mientras desarrollamos y depuramos nuestro programa que se nos caiga, lo abortemos, etc. El nmero de memorias compartidas que podemos crear est limitado en UNIX, as que a la cuarta o quinta prueba empezaremos a obtener errores de que no se pueden crear las memorias. ipcrm nos permite eliminar las memorias que se nos han quedado "pendientes" en nuestras pruebas. 3.5.11.2 El Ejemplo Aqu hay dos fuentes de ejemplo en C sobre UNIX de memoria compartida p1.c y p2.c. Son dos programas que comparten memoria. El primero crea la memoria de tamao 100 int y empieza a escribir en el primero entero, con espera de un segundo, los nmeros del 1 Procesos e hilos
60 al 10. Es segundo programa lee, a intervalos de un segundo, el nmero guardado en el primer entero y lo muestra en pantalla. Para ejecutarlos, compilarlos en primer lugar con make p1 p2 (no es necesario fichero Makefile) o bien con g++ p1.c -o p1 y g++ p2.c -o p2. Luego en dos shell distintas, ejecutar en la primera p1 y en la segunda p2 Desde que arrancamos p1 tenemos unos diez segundos para arrancarp2 y ver el efecto deseado.