La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

S.O.I Temario Curso: 04/05 Horas INTRODUCCIÓN 4 PROCESOS Y THREADS 8

Presentaciones similares


Presentación del tema: "S.O.I Temario Curso: 04/05 Horas INTRODUCCIÓN 4 PROCESOS Y THREADS 8"— Transcripción de la presentación:

1 S.O.I Temario Curso: 04/05 Horas INTRODUCCIÓN 4 PROCESOS Y THREADS 8
GESTIÓN DE MEMORIA 8 ENTRADA/SALIDA 4 GESTIÓN DE FICHEROS 5 Gestión de Procesos

2 Tema 2. Procesos y Threads
Introducción Procesos Visión abstracta Esbozo de implementación Threads (Procesos ligeros) Comunicación entre procesos Condición de carrera Exclusión mutua y región crítica Implementación de la exclusión mutua Paso de mensajes Planificación de procesos Criterios Políticas Gestión de Procesos

3 INTRODUCCIÓN Interesa tener máquinas que ejecuten varios procesos al mismo tiempo 18 T1 T2 T3 t Aprovechar tiempos muertos E/S Soluciones elegantes concurrentes Más rapidez con más de una CPU pseudoparalelismo T1 T2 T3 t 13 CPU1 CPU2 Con multiprocesadores también interesa multiplexar las CPU’s Gestión de Procesos

4 PROCESOS (Visión abstracta: Recordar sus llamadas)
Dos relaciones típicas entre proceso Padre y proceso Hijo: Procesos independientes: La “shell” crea un proceso para ejecutar un programa de usuario “ls” ls.exe shell P ¿fork + exec? Debe cargarse el ejecutable en memoria ls Dotarle de registros, pila, etc. H Procesos cooperantes: Un servidor Web crea un proceso para atender una petición de un cliente web P ¿fork? El código ya está en memoria Parecido a Threads Dotarle de registros, pila, etc. H Gestión de Procesos

5 PROCESOS (Visión abstracta: Recordar sus llamadas)
Proceso de arranque y grupos de procesos id:rstate:action:process /etc/inittab P1 P2 P3 P4 P5 P6 P7 /etc/rc2.d /sbin/rc2 init login login as: Password: IBERIA> pcarazo: :/bin/tcsh /etc/passwd inetd tcsh Red grupo de procesos putty ? Gestión de Procesos

6 Esbozo de implementación
¿Cómo es el ciclo de vida de un proceso? CPU Creación P1 Terminación P2 P2 P4 P1 Expulsión P3 P4 P3 P3 P1 P3 P2 P3 P4 P3 P1 P1 P2 P4 ¿P3 termina? ¿P1.read(disco, )? ¿P4 read(cinta, ) ¿P2.sleep(5 )? ¿P3 mucha CPU? ¿P1 fin E/S? ¿Estados de un proceso? EnEjecución Preparado EnEspera o Bloqueado Activo Ejecu. Prep. Espera Gestión de Procesos

7 Diagrama de transición de estados de un Proceso
F.R. fork wait EnEjecución exit F.R. exit sleep wait wait sleep F.R. fork Preparado EnEspera exit F.R. Gestión de Procesos

8 Esbozo de implementación en términos más informáticos
El contexto de un proceso está distribuido en varias zonas CPU MP MSec S.O. Contexto de memoria (Código y Datos) MP/MSec Bloque de control (descriptor) del Proceso MP (S.O.) Contexto del procesador Reg/MP/MSec Ejecutándose Bloqueado pila Gestión de Procesos

9 Esbozo de implementación ( ¿Cuántos procesos? )
¿#Procesos ilimitado o un máximo predeterminado? maxProcesos: constant:=100; Reservado type idProceso is NATURAL range 0..maxProcesos; type descriptorProceso is record pid: ; end record; 584 ¿Correcto? procesos : array[1..maxProcesos] of descriptorProceso; 1 2 3 4 97 98 99 100 50 ejecutandose : idProceso; Gestión de Procesos

10 Esbozo de implementación ( ¿Cómo dar los PID’s? )
type descriptorProceso is record pid: idProceso; end record; ¿Problemas? 99 procesos en el sistema Hago ps y veo un proceso mío (57) Me dispongo a kill –9 57 Mi proceso termina antes del kill y se crea otro proceso con el código 57 1 2 3 4 97 98 99 100 50 1..100 Mejor espaciar más los códigos pid: NATURAL; Algo más complejo dar PID’s 0  Descriptor libre ¡ Mato a otro proceso ! Gestión de Procesos

11 Esbozo de implementación ( ¿Estados y su gestión? )
type unEstado is (ejecutandose, preparado, espLapso, espFinHijo, zoombie); type descriptorProceso is record pid: NATURAL; estado: unEstado; end record; 1 2 3 4 97 98 99 100 50 CPU queda libre. ¿A qué Pi se la doy? Recorro procesos buscando uno que esté preparado Lento e injusto sig: IdProceso; Si decido elegir al Pi que lleva más tiempo preparado, lo mejor cola FIFO type unaCola is record primero: idProceso := 0; ultimo: idProceso:= 0; end record; preparados: unaCola; ejecutandose: idProceso; Gestión de Procesos

12 Esbozo de implementación ( ¿Procesos bloqueados? )
espLapso => Muy parecido a preparados, sólo que es necesario indicar cuándo despertarles o cuánto falta para despertarles, ... 1 2 3 4 97 98 99 100 50 type descriptorProceso is record pid: NATURAL; estado: unEstado; sig: idProceso; lapso: NATURAL; end record; espLapso : unaCola; El campo sig me sigue sirviendo para encadenar Otras formas de implementarlo: 5 15 4 50 97 10 5 25 Gestión de Procesos

13 Esbozo de implementación ( ¿Procesos bloqueados? )
espFinHijo => El fin de un hijo sólo puede estar esperándolo su Padre. Puede no ser necesaria una cola. type descriptorProceso is record pid: NATURAL; padre: idProceso; estado: unEstado; sig: idProceso; lapso: NATURAL; end record; El Padre (P) hace wait (H): -- Localizar H en procesos => h if h.estado = zoombie then Liberar recursos del Hijo y continuar al Padre else -- hijo vivo p.estado:=espFinHijo; p.sig:=h; liberar CPU; Un Hijo(H) termina exit: If (p.estado = espFinHijo) & (p.sig = h) then liberar recursos Hijo y continuar Padre else h.estado := zoombie y liberar CPU Gestión de Procesos

14 Esbozo de implementación ( Concluyendo )
maxProcesos : constant := 100; type idProceso is NATURAL range 0..maxProcesos; type unEstado is (ejecutandose, preparado, espLapso, espFinHijo, zoombie); type descriptorProceso is record pid: NATURAL; padre: idProceso; estado: unEstado; sig: idProceso; lapso: NATURAL; SP: address; memoria: ; ficheros: ; tiempos: ; end record; type unaCola is record primero: idProceso := 0; ultimo: idProceso := 0; end record; procesos : array [1..maxProcesos] of descriptorProceso; ejecutandose: idProceso; preparados, espLapso: unaCola; Gestión de Procesos

15 Esbozo de implementación ( Otro ejemplo )
Campos en una entrada a la tabla de procesos Gestión de Procesos

16 Esbozo de implementación ( El Cambio de Contexto )
Llamada al Sistema Fin de Proceso Bien/Mal Interrupción Trap (E/S, F.R.) Mecanismo similar Causas? Supongamos como causa “Fin de Rodaja” ¿No hay procesos preparados? ejecu- tándose Pi Hw (1) Ens. (2) S.O. C/Modula/Ada (3) Ens. (4) Pj Planificador (1) Reconocimiento de la interrupción (3) 1 Recorrer dormitorio 2 Elegir siguiente proceso (2) Salvar reg (Pi) y conmutar de pila (4) Recuperar reg (Pj) y cederle control Dispatcher Gestión de Procesos

17 Esbozo de implementación ( El Cambio de Contexto )
Vector de Interrupciones S.O. divu d5,d0 DIV 0 INT 3 Cambio de contexto sleep(10) exit(0) TRAP #0 Se salva el SR y PC Gestión de Procesos

18 Threads ( Visión abstracta )
Modelo de procesos más común  Espacios de direcciones disjuntos Registros Código Datos, Pila Ficheros Pi Registros Código Datos, Pila Ficheros Pj fork exec ls.exe Facilita protección PiPj, pero: Creación laboriosa Cambio de contexto pesado (procesador + entorno) TLB’s, cachés, ... Comunicación vía mensajes más seguro pero más lento ¿Y si los procesos son cooperantes? Objetivo común Colaboración vs agresión Protección más laxa Pueden desear mantener datos comunes con los menores costes de tiempo Gestión de Procesos

19 Threads ( Visión abstracta )
Procesos Ligeros  Espacios de direcciones no disjuntos Registros Pila Código, Datos Ficheros Ti Tj Servidor de localización de utilidades C1 C2 Cn S consulta alta consulta BD utilidades ¡ Muy eficaz con multiprocesadores ! petición petición petición Soportados de dos formas: En el espacio del S.O. En el espacio del Usuario respuesta Biblioteca Gestión de Procesos

20 Biblioteca pthread (API POSIX 1003.1c)
Threads ( “Linux” ) int __clone (int (*fn) (void *arg), void *child_stack, int flags, void *arg) Como fork sólo que crea un Thread “Específico de Linux” Thread soportado como tal por el S.O. (no portable) Biblioteca pthread (API POSIX c) int pthread_create (pthread_t * thread, atributos, funcion, argumentos) pthread_t pthread_self (void) int pthread_exit (void *estado) int pthread_join (pthread_t thread, void **estado) ¿ fork + threads ? Gestión de Procesos

21 Threads ( Ejemplo de uso )
#include <pthread.h> #include <stdio.h> int main (int argc, char *argv[]){ pthread_t tA, tB; int datoA=0; datoB=0; pthread_create(&tA, NULL, A, NULL); pthread_create(&tB, NULL, B, NULL); pthread_join (tA, NULL); pthread_join (tB, NULL); exit (0); } void *A (void *basura) { datoA = 1000; sleep (5); printf (“datoB=%d\n”, datoB); pthread_exit (NULL); } void *B (void *basura) { datoB = 2000; sleep (5); printf (“datoA=%d\n”, datoA); pthread_exit (NULL); } Gestión de Procesos

22 Threads ( En el espacio de usuario )
El S.O. no los soporta Cambio contexto rápido Distintos planificadores read, … ¡ Bloqueantes ! Falta de página ¡Planificación expulsora! pthread_create pthread_join pthread_exit pthread_self Gestión de Procesos

23 Threads ( En el espacio del S.O. )
? Gestión de Procesos

24 Comunicación entre Procesos
Los procesos cooperantes necesitan mecanismos para sincronizarse y comunicarse información de forma segura Sincronización  Ordenación temporal de la ejecución de procesos A antes que B Canal de Panamá Tortilla de patatas Batir Pelar Pelar Huevos Cebollas Patatas Mezclar, Añadir Sal y Freir Comunicación  Paso de información entre tareas Síncrona o Asíncrona Filtros Unix: who | wc | sed -e ‘s/ [ ]*/:/g’ | cut -d: -f2 Gestión de Procesos

25 Condiciones de Carrera
La falta de sincronismo entre procesos cooperantes da problemas Canal de Panamá  Barco encallado Tortilla de Patatas  No hay quien se la coma Uso de datos / recursos comunes  Inconsistencia El empresario y los taxistas: ¡Me tangan! ¡Que buen negocio! El Empresario y los taxistas: Vamos a escribir un programa que incorpore creación de procesos. El programa principal pretende comportarse como un empresario del taxi que dispone de un determinado número de asalariados que le trabajan los taxis. Creará tantos procesos como asalariados tenga. Los taxistas se dedican a recorrer las calles de Madrid buscando clientes y llevándoles a donde desean. El empresario simplemente espera a que todos los taxistas terminen su jornada de trabajo para ir a retirar del banco el dinero conseguido por sus asalariados. Un día, el empresario hace cuentas pormenorizadas y observa que le falta dinero, sospecha que algún taxista le roba y sin embargo son todos muy honrados. Gestión de Procesos

26 Condiciones de Carrera (Modelización en Pascal-FC)
program taxistas; const numTaxistas = 2; var cuenta : integer; process type taxista (t: integer); var taxista1, taxista2: taxista; begin cuenta := 0; cobegin taxista1(1); taxista2(2); coend; writeln (‘Total recaudacion = ‘, cuenta: 7) end. Ingreso de Taxista 1 = 27439 Ingreso de Taxista 2 = 27092 Total recaudacion = 47055 + 54531 Gestión de Procesos

27 Condiciones de Carrera (Modelización en Pascal-FC)
process type taxista (t: integer); (* constantes y variables *) begin recaudacion := 0; mio := 0; repeat for i:=1 to random (maxEspera) do null; importe := random (maxImporte); mio := mio + (importe div ratioTaxista); cuenta := cuenta + importe – (importe div ratioTaxista); recaudacion := recaudacion + importe until mio >= sueldoDia; writeln (‘Ingreso de Taxista’, t:2, ‘ =‘, recaudacion – mio); end; Buscar Cliente Hacer Carrera Ingreso Gestión de Procesos

28 Condiciones de Carrera (El problema)
3: cuenta := cuenta + importe 3.1: PUSH importe 3.2: PUSH cuenta 3.3: ADDP 3.4: POP cuenta T1 T2 5.000 cuenta 10.000 T1.importe 1.500 T2.importe 3.3 5.000 T2.SP 3.3 5.000 10.000 T1.SP 15.000 cuenta 15.000 6.500 cuenta ¿problema? 3.1, 3.2 3.3, 3.4 3.1, 3.2 3.3, 3.4 Gestión de Procesos

29 Exclusión mutua y Región crítica (La solución)
Integridad Datos Comunes Aquí cero, uno o más Pi RC Aquí como máximo un Pi Exclusión Mutua Los Pi indicarán cuándo EntranEnRC y cuándo SalenDeRC Gestión de Procesos

30 Exclusión mutua y Región crítica (La solución)
EntrarEnRC; cuenta := cuenta + importe – (importe div ratioTaxista); SalirDeRC; REQUISITOS En una misma Región Crítica no más de un proceso Sin supuestos: #µP, #Pi, velocidades relativas, ..... Ningún Pi fuera de su Región Crítica bloqueará a otros Pj Decisión de quién entra a una Región Crítica en un tiempo finito Gestión de Procesos

31 Implementación de la Exclusión Mutua
Mecanismos: Inhibición de interrupciones • Semáforos Cerrojos (espera activa) • Monitores Hw Sw Lenguaje S.O. Inhibición de interrupciones Taxistas InhibirInterrupciones cuenta := cuenta + importe PermitirInterrupciones DirecciónGeneralDeTráfico repeat aguardarAgazapados y ¡foto! InhibirInterrupciones numeroMultas++ PermitirInterrupciones until cubiertoCupo RC muy corta o pueden perderse interrupciones Exclusión total vs parcial Sólo válido en monoprocesador Peligroso en manos del usuario Útil dentro del propio S.O. Gestión de Procesos

32 Implementación de la Exclusión Mutua ( Cerrojos )
Una variable “cerrojo” por cada RC distinta que indica Libre/Ocupada Taxistas Entrar (RCTaxistas) cuenta := cuenta + importe Salir (RCTaxistas) Guardia Civil Entrar (RCDGT) numeroMultas++ Salir (RCDGT) while RCT = ocupada do null; RCT := ocupada cuenta := cuenta + importe; RCT := libre entrar tst.b RCT bnz entrar move.b #$FF,RCT push importe push cuenta addp pop cuenta salir move.b #$00,RCT RCT dc.b 0 ¡ No funciona ! Gestión de Procesos

33 Implementación de la Exclusión Mutua ( El cerrojo falla )
00 RCT FF RCT FF RCT T1.SR Z 1 T2 dentro RCT entrar tst.b RCT tst.b RCT bnz entrar move.b #$FF,RCT bnz entrar move.b #$FF,RCT ¡¡ T1 también dentro RCT !! Gestión de Procesos

34 Implementación de la Exclusión Mutua ( Un cerrojo seguro? )
Algoritmos: Dekker, Dijkstra, Knuth, Peterson, El Hw ayuda con una instrucción atómica que consulta y cambia valor tas.b cerrojo, valor tst.b cerrojo move.b valor,cerrojo entrar tas.b RCT,#$FF bnz entrar push importe push cuenta addp pop cuenta salir move.b #$00,RCT RCT dc.b 0 F.R. ¿Habrá problemas? No funciona en multiprocesador ya que TAS es ininterrumpible dentro de un procesador, pero supone dos accesos al bus: 1 Lectura del cerrojo 2 Modificación del cerrojo ¡SI! Gestión de Procesos

35 Implementación de la Exclusión Mutua ( Un cerrojo seguro! )
00 RCT FF RCT FF RCT FF RCT T1.SR Z 1 T2 tas.b RCT,#$FF bnz entrar T1 tas.b RCT,#$FF tas.b RCT,#$FF bnz entrar bnz entrar T2 no puede entrar en RC mientras está T1 T1 en RCT Gestión de Procesos

36 Implementación de la Exclusión Mutua ( TAS todavía falla! )
RCT TAS  PedirBus, Leer, PedirBus, Escribir P1  T1 PB, L1, PB, E1 P2  T2 PB, L2, PB, E2 ??? tas.b RCT,#$FF bnz entrar L1, E1, L2, E2 T T2 L2, E2, L1, E1 T T1 L1, L2, E1, E2 T T2 TASL “TAS with Lock”  BusLock, Leer, Escribir, BusRelease ( El Hw nos ayuda ) tasl.b RCT,#$FF bnz entrar PH deadLock ¡ Todavía dos problemas ! Espera Activa Inversión de prioridades PL ¿ Qué hacer ? Gestión de Procesos

37 Implementación de la Exclusión Mutua ( RC POSIX )
int pthread_mutex_lock (pthread_mutex_t *regionCritica) int pthread_mutex_unlock (pthread_mutex_t *regionCritica) Multiprocesador ? ¿Posible implementación (sin espera activa)? lock (RCT): inhibir interrupciones salvarEstado(ejecutandose) if RCT.libre then RCT.libre = FALSE else meter (ejecutandose, RCT); ejecutandose = planificar(); recuperarEstado(ejecutandose) rte /*Se habilitan interrupciones*/ type pthread_mutext_t is record libre : BOOLEAN; cola : unaCola; end record; tasl F RCT Pi Pj Gestión de Procesos

38 Implementación de la Exclusión Mutua ( Semáforos )
Soportado por el S.O. garantiza exclusión mutua sin espera activa type Semaforos is private; Inicializar (S: Semaforos; Valor: NATURAL); Bajar (S); -- Puede bloquear al proceso (Si Valor = 0) Subir (S); -- Puede desbloquear a UN proceso Operaciones Atómicas Dar soporte a RC con semáforos es fácil: Inicializar (S_RCT, 1) Inicializar (S_RCGC, 1) Bajar (S_RCT) Bajar (S_RCGC) Cuenta := Cuenta + Importe numeroMultas++ Subir (S_RCT) Subir (S_RCGC) Gestión de Procesos

39 Implementación de la Exclusión Mutua ( Semáforos )
Precisando la semántica: P.Bajar (S)  IF Valor(S) > 0 THEN Valor (P.Bajar(S)) = Valor(S) – 1 ELSE P deja UCP y se bloquea esperando P’.Subir(S) P.Subir(S)  IF Hay_algun_Pi_esperando_en (S) THEN Sacar a uno de ellos de espera INDETERMINISMO Proceso continuado Proceso que coge UCP JUSTICIA Valor (P.Subir(S)) = Valor (S) + 1 Gestión de Procesos

40 Implementación de la Exclusión Mutua ( Semáforos )
Esbozo de implementación: S Pi Pk Pj private type Semaforos is record valor : NATURAL; cola : unaCola; end record; ¿Dónde están los semáforos? Hacen falta operaciones del estilo: crear, conectarse, destruir procedure Inicializar (S : out Semaforos; valor : NATURAL) is begin S.valor := valor; end Inicializar; Exclusión mutua, Salvado estado Pi Dispatcher Gestión de Procesos

41 Implementación de la Exclusión Mutua ( Semáforos )
procedure Bajar (S: in out Semaforos) is begin if S.valor = 0 then encolar (ejecutandose, S.cola); planificar; else S.valor := S.valor - 1; endif; end Bajar; procedure Subir (S: in out Semaforos) is begin if S.cola.primero /= 0 then encolar (sacarProceso(S.cola), preparados); planificar; else S.valor := S.valor + 1; endif; end Subir; Gestión de Procesos

42 Implementación de la Exclusión Mutua ( Semáforos POSIX )
int sem_init (sem_t *S, int global, unsigned int valor) int sem_wait (sem_t *S) int sem_post (sem_t *S) int sem_destroy (sem_t *S) Gestión de Procesos

43 ¿Puede fallar enviar/recibir?
Paso de mensajes Debilidades del Sincronismo + Memoria Común: Primitivas de bajo nivel (Inhibir Interrupciones, TASL, Semáforos) Inviable en sistemas débilmente acoplados sin memoria común Solución: Envío y recepción de mensajes Porg Pdst Enviar (Pdst, msj) Recibir (Porg, msj) Escribe ----- ----- 11 Lee ----- 11 Primera aproximación a la sintaxis: ? void enviar ( int Pdestino, void recibir ( int Porigen, char * msj ); char * msj ); int ¿Puede fallar enviar/recibir? Gestión de Procesos

44 Paso de mensajes (muchas semánticas)
? ----- rec (Po, msj) env (Pd, msj) ¿Recibió Pd? Po Po ? Pd ¿Bloqueo? ¿Bloqueo? El bloqueo dependerá de la  |  de mensajes  msj  Se le entrega a Pd y continua  msj  Se bloquea a Pd hasta Independencia del enlace de comunicación No siempre Tiempo Real Tolerancia a Fallos Bloquear Bloquear un máximo No Bloquear int recibir ( int Porg, char * msj, int TmaxEsp) 7 Gestión de Procesos

45 Paso de mensajes (Cuestiones de Diseño)
Mensajes de longitud fija vs variable Capacidad de almacenamiento 0 ..  Envío por copia vs referencia Comunicación Directa vs Indirecta Simétrica vs Asimétrica Unidireccional vs Bidireccional Pi B Pj Pi Pj Gestión de Procesos

46 Paso de mensajes (Mensajes de longitud fija vs variable)
El S.O. siempre envía el total La aplicación distingue distintos msj. Simplifica la gestión de la capacidad de almacenamiento del canal Longitud Variable 110 Mensaje de 110 bytes En el propio mensaje El S.O. envía lo que diga la aplicación ¿Cómo? enviar (Pdest, msj, 110) En la llamada Gestión de Procesos

47 Paso de mensajes (Capacidad de almacenamiento 0..)
Ilimitada () Po Pd Nula (0) Po Pd Comunicación Asíncrona Comunicación Síncrona ¡Nunca Bloqueo! ¡Siempre Bloqueo! Po Pd Po Pd Espera a Pd.recibir Limitada (8) Po Pd Po Pd Cita “Rendez-vous” Hueco  Sin Bloqueo Po Pd Po Pd Bloqueo Sin Bloqueo Estado = Lleno ¡No hay Hueco! Po sabe que Pd recibió ¿Y aquí? Gestión de Procesos

48 Paso de mensajes (Envío por copia vs referencia)
Pd Escribir ----- 1 2 rec (Po, msj) env (Pd, msj) Leer ----- ¡ 2 copias extra por cada envío/recepción ! Envío por referencia Po Pd pedirBuffer env (Pd, msj) Escribir ----- liberarBuffer rec (Po, msj) Complejidad pedir/liberar Buffer ¿Y si no hay memoria común? ¿Seguridad? Leer ----- Gestión de Procesos

49 Paso de mensajes (Comunicación Directa)
Indicación explícita A qué proceso se desea enviar De qué proceso se desea recibir ¿ es primo? Cliente Servidor repeat repeat read (msjp.num); recibir ( Pc, &msjp); enviar (Ps, &msjp); enviar ( Pc, recibir (Ps, &msjr); respuesta(msjp)) imprimir (msjr.esPrimo) forever forever Simétrica Gestión de Procesos

50 Paso de mensajes (Comunicación Directa “Características”)
Creación automática del enlace Po Pd Necesidad de conocer los Pid’s de los procesos 15.731 1 Tipo de mensaje De Pi a Pj SÓLO un enlace en cada sentido Cliente Servidor esPrimo? Hora? ? Cliente Servidor ¿Todo resuelto? H P P P P P P P Cliente Servidor Un enlace asocia SÓLO a dos procesos Gestión de Procesos

51 Paso de mensajes (Un enlace asocia SÓLO a dos procesos)
repeat if recibir (PC1, &msjp ) then enviar (PC1, respuesta (msjp)); elsif recibir (PC2, &msjp ) then enviar (PC2, respuesta (msjp)); forever Servidor Inanición , 1 Mitigada? Espera Activa 50 Clientes???? ! Demasiadas pegas ¡ Gestión de Procesos

52 Paso de mensajes (Comunicación Directa Asimétrica)
Mejor admitir un recibir de cualquier proceso (no uno concreto) int recibir (char * msj) Pid del proceso remitente C1 C2 S int recibir (int * remitente, char * msj) equivalentes ¿Más de un servidor? repeat remitente := recibir (&msjp); enviar (remitente, respuesta (msjp)); forever Servidor C S1 S2 int enviar (char * msj) Pid del proceso que recibió??? Gestión de Procesos

53 Paso de mensajes (Comunicación Indirecta)
enviar (buzon, msj) recibir (buzon, msj) bPeti PC1 PCn PS1 PSm N  M bPeti PC PS 1  1 ¿De quién recibí? bPeti PC PS1 PSm 1  M bPeti PC1 PCn PS N  1 PCn Indeterminismo Justicia Integridad int recibir (buzon, msj) PCn ¿Quién recibe? Gestión de Procesos

54 Paso de mensajes (Comunicación Indirecta)
Los enlaces pueden ser Unidireccionales o Bidireccionales PC1 PS PC2 PC PS ¿ Problemas ? ¿ Y aquí ? Lo normal Unidireccionales: Lo más general: bPeti PC PS1 PS2 bResp B1 P2 P4 P5 B2 P3 P1 ¿ Código del Cliente y de los Servidores ? Varios Procesos Varios Buzones Todo dinámico Gestión de Procesos

55 Paso de mensajes (Comunicación Indirecta)
type Buzones is private; function Crear (nombreB: Nombres ) return Buzones; function Conectarse (nombreB: Nombres) return Buzones; procedure Enviar (b: in out Buzones; msj: Mensajes); procedure Recibir (b: in out Buzones; msj: out Mensajes); procedure Destruir (b: in out Buzones); Un modelo: Capacidad *  Propietario int msgget (key_t key, int msgflg) int msgsnd (int msqid, const void *msgp, size_t msgsz, int msgflg) ssize_t msgrcv (int msqid, void *msgp, size_t msgsz, long int msgtyp, int msgflg) int msgctl (int msqid, int cmd, struct msqid_ds *buf) Solaris Excepción  buzonInexistente, ... Mensajes en el buzón Procesos bloqueados Referencias a buzones destruidos ¡ Problemática Destrucción ! Gestión de Procesos

56 Planificación de Procesos ( Criterios )
Planificar  Elegir el siguiente Pi a ejecutar JUSTICIA EFICIENCIA RENDIMIENTO MINIMIZAR TIEMPOS Criterios Carga Sin CPU Ejecutándose Pi Tiempo de Retorno CPU Tiempo de Espera ¿Tiempo de Respuesta? Tiempo inútil Pi <cr> Tiempo útil Criterios difícilmente alcanzables: Favorecer Pi  Perjudicar Pj Gestión de Procesos

57 Planificación de Procesos ( PCPU vs PE/S )
Abandona voluntariamente la UCP Periodos largos de CPU ? Periodos cortos de CPU PE/S ¿Cómo reconocerlos? Gestión de Procesos

58 Planificación de Procesos ( Políticas )
Sistemas Batch No expulsores o expulsores con un quantum grande Reducen cambios de contexto y mejoran el rendimiento Por niveles, Primero en llegar primero en servir FCFS, Más corto el siguiente SJF, Tiempo restante menor SRTN Sistemas interactivos Expulsores: evita la monopolización de la CPU Round-Robin, prioridades, múltiples colas, Más corto el siguiente SPN (envejecimiento) Sistemas de tiempo real Monotónico en frecuencia Deadline más próximo el siguiente Gestión de Procesos

59 Planificación de Procesos ( Por niveles )
Planificación a medio plazo Memoria corto plazo CPU CPU IT2 T2 T3 T5 T1, T2, T3, T4, T5, T6 S.O. Entrada al sistema frecuencia alta frecuencia baja Gestión de Procesos

60 Planificación de Procesos ( Primero en llegar FCFS )
Sólo cuando un proceso abandona voluntariamente la CPU, la misma se asigna al proceso que lleva más tiempo preparado (FIFO) A D B C A E/S A D B C D C B Sencillo, pero  Ausencia de política {PE/S}n PUCP Tesp Tret 9 14 D C B A T < PE/S {PE/S}n-1 PUCP E/S T >> Tesp Tret 6 11 “Efecto convoy” Gestión de Procesos

61 Planificación de Procesos ( Efecto convoy )
PUCP = {10UCP + 2E/S}* PE/S = {1UCP + 2 E/S}* PUCP PE/S PUCP PE/S ?? CPU al 100%, pero tan sólo 30 unidades de tiempo en E/S CPU al 100% y además, 55 unidades de tiempo en E/S Gestión de Procesos

62 Planificación de Procesos ( El más corto primero SJF )
8 5 4 3 Objetivo: Minimizar Tesp/ret 8 5 4 3 CPU ¿Dónde esperan los procesos? ¿Óptimo? ¿Aplicable SJF en planificación a largo y a corto plazo? CPU preparados ¿Más corto? ¿Más corto? Sistemas interactivos Tiempo total de CPU Contraejemplo A(2) B(4) C(1) D(1) E(1) Lo declara el usuario Si engaña  KILL Gestión de Procesos

63 Planificación de Procesos ( Tiempo restante menor SRTN )
Variante expulsora del SJF. Cuando llega un trabajo nuevo, comparar su petición de tiempo con el tiempo que le queda al actual. Seleccionar el menor. Favorece a los trabajos nuevos C(1) D(1) E(1) A(2) B(4) ¿Tiempo medio de espera? Gestión de Procesos

64 Planificación de Procesos (Round Robin)
“Todos iguales”: Turno Rotatorio o Rodajas de Tiempo A cada Pi que pasa a ejecución se le dá una rodaja “cuanto” de tiempo La consume totalmente y se le expulsa Pi rodaja La usa parcialmente y abandona voluntariamente la UCP Pi sleep, wait, exit Ley del 80% Política FIFO de gestión de la cola de preparados Dos cuestiones de diseño: ¿Cómo elegir el tamaño de la rodaja? ¿Cómo determinar el fin de rodaja? Gestión de Procesos

65 Planificación de Procesos (Round Robin)
¿Cómo elegir el tamaño de la rodaja? Sea Tcc = 5 mseg (mucho) Rodaja pequeña 20 mseg => Burocracia del 20% UCP útil Mejor interactividad Rodaja grande 500 mseg => Burocracia del 1% Respuesta lenta a usuarios interactivos ¿Degenera en FCFS? Ejemplo: P1, P2, P3 => 24, 3 y 3. Rodajas 4 vs 12 y Tcc = 0,5 P1 33,5 P1 P2 P3 P1 Valores comunes: mseg P1 P2 P3 31,5 Gestión de Procesos

66 Planificación de Procesos (Round Robin)
¿Cómo determinar el fin de rodaja? ¿Somos justos con P3? Una interrupción periódica Dar 2 rodajas Resetear interrupción P1 P2 P3 P4 sleep F(int) en [1µseg..20mseg] ¿viable? Sumar ticks de una interrupción más frecuente P1 P2 sleep P3 P4 Gestión de Procesos

67 Planificación de Procesos (Prioridades)
mín máx “Unos más importantes que otros”: Cada Pi prioridad explícita expulsora P3 P7 P1 no expulsora P3 P7 P1 UCP siempre ejecuta Pi más prioritario UCP libre  ejecutar Pi más prioritario Igualdad de prioridad  FCFS, Round Robin Prioridades estáticas vs dinámicas P3 P7 P1 P9 Sencillo pero inanición ¿ tiempo real ? Gestión de Procesos

68 Planificación de Procesos (Prioridades dinámicas)
Evitar la inanición: Disminuir la prioridad a medida que se usa la UCP Aumentar la prioridad si se está tiempo en preparados ¿ Favorece a los trabajos cortos ? PE/S vs PUCP Favorece a los Pi ligados a E/S PE/S aquellos que usen una parte menor de la rodaja de UCP ¿Cuáles son PE/S? ¿Todo el tiempo será PE/S? Ejemplo con rodajas de 100 mseg: P1 usa 2 mseg de UCP  PE/S P2 usa 25 mseg de UCP  PUCP Prio (P1) = 100/2 = 50 Prio (P2) = 100/25 = 4 Estáticas muy bajo  16 Dinámicas muy variable ¿Rango de prioridades [0..N]? Gestión de Procesos

69 Planificación de Procesos (Múltiples colas)
“Mezcla de políticas”: Cada Pi asociado a una cola de forma estática Prioridad 3 2 1 ¿Expulsora? FCFS Quantum 4 8 16 Round Robin Dos elecciones: Seleccionar cola Seleccionar proceso dentro de la cola Gestión de Procesos

70 Planificación de Procesos (Múltiples colas realimentadas)
“Mezcla de políticas”: Cada Pi asociado a una cola de forma dinámica Menos Cambios de Contexto Favorecer selectivamente PE/S Prioridad 4 3 2 1 1 + Rodajas Variables Prioridad 3 Terminal 2 E/S 1 Rodaja corta 0 Rodaja larga 2 4 8 16 Consumir rodajas: Bajar de prioridad Rodajas para Pi  1, 2, 4, 8, 16 Gestión de Procesos

71 Planificación de Procesos ( Pi más corto siguiente SPN )
CPU preparados ¿Más corto? SJF SPN Tiempo de próxima posesión de UCP ? Predicción ¿Predicción? (i)  i+1 = F (ti, i) i+1 =  ti + (1- ) i y  = 1/2 ti  i  10 8 6 4 5 13 9 11 12 6 4 Gestión de Procesos

72 Planificación de Procesos ( Sistemas de Tiempo Real )
Hard real time vs Soft real time Eventos: periódicos vs aperiódicos Dado m eventos periódicos evento i ocurre en el periodo Pi y precisa Ci segundos El sistema es planificable si (Leer las secciones 7.4.2, y 7.4.4) Gestión de Procesos

73 Planificación de Procesos ( Política vs Mecanismo )
Separar qué se puede hacer de cómo hacerlo Un proceso puede saber cuáles de sus threads hijos son los más importantes y asignarles prioridad Algoritmo de planificación parametrizado Mecanismo en el kernel Los procesos de usuario ponen el valor de los parámetros Los procesos de usuario indican la política pthread_attr_setschedpolicy(…) => FIFO, RR, OTHERS Gestión de Procesos

74 Planificación de Threads ( Espacio de usuario )
Quantum por proceso de 50 mseg Cada thread ejecuta 5 mseg de ráfaga de CPU Gestión de Procesos

75 Planificación de Threads ( Espacio de kernel )
FIN Quantum por proceso de 50 mseg Cada thread ejecuta 5 mseg de ráfaga de CPU Gestión de Procesos


Descargar ppt "S.O.I Temario Curso: 04/05 Horas INTRODUCCIÓN 4 PROCESOS Y THREADS 8"

Presentaciones similares


Anuncios Google