La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Gestión de Procesos1 Horas 1INTRODUCCIÓN4 2PROCESOS Y THREADS8 3GESTIÓN DE MEMORIA8 4ENTRADA/SALIDA4 5GESTIÓN DE FICHEROS5 S.O.ITemarioCurso: 04/05.

Presentaciones similares


Presentación del tema: "Gestión de Procesos1 Horas 1INTRODUCCIÓN4 2PROCESOS Y THREADS8 3GESTIÓN DE MEMORIA8 4ENTRADA/SALIDA4 5GESTIÓN DE FICHEROS5 S.O.ITemarioCurso: 04/05."— Transcripción de la presentación:

1 Gestión de Procesos1 Horas 1INTRODUCCIÓN4 2PROCESOS Y THREADS8 3GESTIÓN DE MEMORIA8 4ENTRADA/SALIDA4 5GESTIÓN DE FICHEROS5 S.O.ITemarioCurso: 04/05

2 Gestión de Procesos2 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

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

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

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

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

7 Gestión de Procesos7 Diagrama de transición de estados de un Proceso PreparadoEnEjecuciónEnEspera fork exit wait sleep F.R.

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

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

10 Gestión de Procesos10 Esbozo de implementación ( ¿Cómo dar los PIDs? ) 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 ¡ Mato a otro proceso ! Mejor espaciar más los códigos pid: NATURAL; Algo más complejo dar PIDs 0 Descriptor libre

11 Gestión de Procesos11 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; CPU queda libre. ¿A qué Pi se la doy? Recorro procesos buscando uno que esté preparado Lento e injusto 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; sig: IdProceso; ejecutandose: idProceso;

12 Gestión de Procesos12 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, 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:

13 Gestión de Procesos13 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

14 Gestión de Procesos14 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;

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

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

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

18 Gestión de Procesos18 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 forkexec ls.exe Facilita protección Pi Pj, pero: Creación laboriosa Cambio de contexto pesado (procesador + entorno) TLBs, 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

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

20 Gestión de Procesos20 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 ?

21 Gestión de Procesos21 Threads ( Ejemplo de uso ) #include 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 *B (void *basura) { datoB = 2000; sleep (5); printf (datoA=%d\n, datoA); pthread_exit (NULL); } void *A (void *basura) { datoA = 1000; sleep (5); printf (datoB=%d\n, datoB); pthread_exit (NULL); }

22 Gestión de Procesos22 pthread_create pthread_join pthread_exit pthread_self 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!

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

24 Gestión de Procesos24 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 BatirPelarPelar HuevosCebollasPatatas 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

25 Gestión de Procesos25 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 ¡Que buen negocio! ¡Me tangan!

26 Gestión de Procesos26 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 = Ingreso de Taxista 2 = Total recaudacion =

27 Gestión de Procesos27 Ingreso 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

28 Gestión de Procesos28 3: cuenta := cuenta + importe Condiciones de Carrera (El problema) 3.1: PUSH importe 3.2: PUSH cuenta 3.3: ADDP 3.4: POP cuenta 3.1, 3.2 T1 T cuenta T1.importe T1.SP 3.1, T2.importe T2.SP 3.3, cuenta 3.3, cuenta ¿problema?

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

30 Gestión de Procesos30 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

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

32 Gestión de Procesos32 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 entrartst.bRCT bnzentrar move.b#$FF,RCT pushimporte pushcuenta addp popcuenta salirmove.b#$00,RCT RCTdc.b0 ¡ No funciona !

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

34 Gestión de Procesos34 Implementación de la Exclusión Mutua ( Un cerrojo seguro? ) El Hw ayuda con una instrucción atómica que consulta y cambia valor tas.bcerrojo, valor tst.bcerrojo move.bvalor,cerrojo Algoritmos: Dekker, Dijkstra, Knuth, Peterson, entrartas.bRCT,#$FF bnzentrar pushimporte pushcuenta addp popcuenta salirmove.b#$00,RCT RCTdc.b0 F.R.¿Habrá problemas? No funciona en multiprocesador ya que TAS es ininterrumpible dentro de un procesador, pero supone dos accesos al bus: 1Lectura del cerrojo 2Modificación del cerrojo ¡SI!

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

36 Gestión de Procesos36 Implementación de la Exclusión Mutua ( TAS todavía falla! ) TAS PedirBus, Leer, PedirBus, Escribir P1 T1PB, L1, PB, E1 P2 T2PB, L2, PB, E2 ??? P1 P2 RCT L1, E1, L2, E2 T1 T2 L2, E2, L1, E1 T2 T1 L1, L2, E1, E2 T1 T2 tas.bRCT,#$FF bnzentrar PHPH tasl.bRCT,#$FF bnzentrar ¡ Todavía dos problemas ! Espera Activa Inversión de prioridades PLPL deadLock ¿ Qué hacer ? TASL TAS with Lock BusLock, Leer, Escribir, BusRelease ( El Hw nos ayuda )

37 Gestión de Procesos37 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) ¿Posible implementación (sin espera activa)? type pthread_mutext_t is record libre : BOOLEAN; cola : unaCola; end record; F RCTPiPj lock (RCT): inhibir interrupciones salvarEstado(ejecutandose) if RCT.libre then RCT.libre = FALSE elsemeter (ejecutandose, RCT); ejecutandose = planificar(); recuperarEstado(ejecutandose) rte /*Se habilitan interrupciones*/ Multiprocesador ? tasl

38 Gestión de Procesos38 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 + ImportenumeroMultas++ Subir (S_RCT)Subir (S_RCGC)

39 Gestión de Procesos39 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 ELSE Valor (P.Subir(S)) = Valor (S) + 1

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

41 Gestión de Procesos41 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;

42 Gestión de Procesos42 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)

43 Gestión de Procesos43 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 P org P dst Enviar (P dst, msj)Recibir (P org, msj) Escribe Lee Primera aproximación a la sintaxis: void enviar (int Pdestino,void recibir (int Porigen, char * msj);char * msj); ¿Puede fallar enviar/recibir? ? ? int

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

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

46 Gestión de Procesos46 Paso de mensajes (Mensajes de longitud fija vs variable) Longitud Fija 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 El S.O. envía lo que diga la aplicación ¿Cómo? 110 Mensaje de 110 bytes En el propio mensaje enviar (Pdest, msj, 110) En la llamada

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

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

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

50 Gestión de Procesos50 Paso de mensajes (Comunicación Directa Características) Creación automática del enlace PoPd Necesidad de conocer los Pids de los procesos De Pi a Pj SÓLO un enlace en cada sentido ClienteServidor esPrimo? Hora? ClienteServidor ? Tipo de mensaje ¿Todo resuelto? ClienteServidor PPPPPPPH Un enlace asocia SÓLO a dos procesos

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

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

53 Gestión de Procesos53 Paso de mensajes (Comunicación Indirecta) bPeti PCPS 1 bPeti PC PS 1 PS m 1 M bPeti PC 1 PC n PS 1 PS m N M ¿Quién recibe? Indeterminismo Justicia Integridad bPeti PC 1 PC n PS N 1 ¿De quién recibí? PC n enviar (buzon, msj)recibir (buzon, msj) int recibir (buzon, msj) PC n

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

55 Gestión de Procesos55 Paso de mensajes (Comunicación Indirecta) type Buzones is private; functionCrear(nombreB: Nombres ) return Buzones; functionConectarse(nombreB: Nombres) return Buzones; procedureEnviar(b: in out Buzones; msj: Mensajes); procedureRecibir(b: in out Buzones; msj: out Mensajes); procedureDestruir(b: in out Buzones); Un modelo: Capacidad * * Propietario * Excepción buzonInexistente,... ¡ Problemática Destrucción ! Mensajes en el buzón Procesos bloqueados Referencias a buzones destruidos 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

56 Gestión de Procesos56 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 útil Tiempo inútil Tiempo de Espera ¿Tiempo de Respuesta? Pi Criterios difícilmente alcanzables: Favorecer Pi Perjudicar Pj

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

58 Gestión de Procesos58 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 Planificación de Procesos ( Políticas )

59 Gestión de Procesos59 Planificación de Procesos ( Por niveles ) Planificación a medio plazo Memoria Planificación a corto plazo CPU CPU I T2 T2T2 T3T3 T5T5 T 1, T 2, T 3, T 4, T 5, T 6 S.O. Entrada al sistema frecuencia alta frecuencia baja

60 Gestión de Procesos60 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) DC A B AD B CD B C A E/S Sencillo, pero Ausencia de política DCBA DCBA Tesp Tret 9 14 Tesp Tret 6 11 Efecto convoy {P E/S } n P UCP P E/S {P E/S } n-1 P UCP E/S T >> T <

61 Gestión de Procesos61 Planificación de Procesos ( Efecto convoy ) P UCP = {10UCP + 2E/S}*P E/S = {1UCP + 2 E/S}* P UCP P E/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 P UCP P E/S ??

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

63 Gestión de Procesos63 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 A(2) B(4) C(1) D(1) E(1) ¿Tiempo medio de espera? Planificación de Procesos ( Tiempo restante menor SRTN )

64 Gestión de Procesos64 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 aLa consume totalmente y se le expulsa Pi rodaja bLa usa parcialmente y abandona voluntariamente la UCP Pi sleep, wait, exit Política FIFO de gestión de la cola de preparados Dos cuestiones de diseño: 1¿Cómo elegir el tamaño de la rodaja? 2¿Cómo determinar el fin de rodaja? Ley del 80%

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

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

67 Gestión de Procesos67 Planificación de Procesos (Prioridades) Unos más importantes que otros: Cada Pi prioridad explícita 0 N N 0 mín máx expulsora P3P3 P7P7 P1P1 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 Sencillo pero inanición P3P3 P7P7 P1P1 P9P9 ¿ tiempo real ? no expulsora P3P3 P7P7 P1P1

68 Gestión de Procesos68 Planificación de Procesos (Prioridades dinámicas) aEvitar 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 ? bP E/S vs P UCP Favorece a los Pi ligados a E/S ¿Cuáles son P E/S ? ¿Todo el tiempo será P E/S ? P E/S aquellos que usen una parte menor de la rodaja de UCP Ejemplo con rodajas de 100 mseg: P1 usa 2 mseg de UCP P E/S P2 usa 25 mseg de UCP P UCP Prio (P1) = 100/2 = 50 Prio (P2) = 100/25 = 4 ¿Rango de prioridades [0..N]? Estáticas muy bajo 16 Dinámicas muy variable

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

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

71 Gestión de Procesos71 Planificación de Procesos ( Pi más corto siguiente SPN ) CPU preparados ¿Más corto? SJFSPN Tiempo de próxima posesión de UCP ? ¿Predicción? ( i ) i+1 = F ( t i, i ) i+1 = t i + (1- ) i y = 1/2 Predicción t i i

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

73 Gestión de Procesos73 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 Planificación de Procesos ( Política vs Mecanismo ) pthread_attr_setschedpolicy(…) => FIFO, RR, OTHERS

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

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


Descargar ppt "Gestión de Procesos1 Horas 1INTRODUCCIÓN4 2PROCESOS Y THREADS8 3GESTIÓN DE MEMORIA8 4ENTRADA/SALIDA4 5GESTIÓN DE FICHEROS5 S.O.ITemarioCurso: 04/05."

Presentaciones similares


Anuncios Google