TemaTema 4: Gestión de 4: Gestión de …dsa-research.org/teresa/SO/Clases/GESTION DE...

52
15/12/2009 1 Tema Tema 4: Gestión de 4: Gestión de procesos procesos Procesos Procesos Capítulo Capítulo 4: Gestión de 4: Gestión de procesos procesos Procesos Procesos Procesos ligeros ( Procesos ligeros (threads threads) Políticas y algoritmos de planificación Políticas y algoritmos de planificación Señales y excepciones Señales y excepciones Temporizadores Temporizadores Servidores y demonios Servidores y demonios Servicios POSIX Servicios POSIX Servicios POSIX Servicios POSIX

Transcript of TemaTema 4: Gestión de 4: Gestión de …dsa-research.org/teresa/SO/Clases/GESTION DE...

15/12/2009

1

TemaTema 4: Gestión de 4: Gestión de procesosprocesos

ProcesosProcesos

CapítuloCapítulo 4: Gestión de 4: Gestión de procesosprocesos

ProcesosProcesosProcesos ligeros (Procesos ligeros (threadsthreads))Políticas y algoritmos de planificaciónPolíticas y algoritmos de planificaciónSeñales y excepcionesSeñales y excepcionesTemporizadoresTemporizadoresServidores y demoniosServidores y demoniosServicios POSIXServicios POSIXServicios POSIXServicios POSIX

15/12/2009

2

Concepto de ProcesoConcepto de Proceso

ProcesosProcesos

ppMultitareaMultitareaInformación del proceso (BCP)Información del proceso (BCP)Creación de procesosCreación de procesosTerminación de procesosTerminación de procesosEstados de los procesosEstados de los procesosCambio de contextoCambio de contextoPlanificaciónPlanificación

Concepto de proceso IConcepto de proceso I

PROGRAMA: PROGRAMA: Archivo ejecutable en un dispositivo de Archivo ejecutable en un dispositivo de almacenamiento permanente (ej. disco)almacenamiento permanente (ej. disco)

PROCESO: PROCESO: Un programa en ejecución, reside en MP y Un programa en ejecución, reside en MP y según se ejecuta modifica su contextosegún se ejecuta modifica su contexto

Desde el punto de vista del usuario:Desde el punto de vista del usuario:código + estructuras de datoscódigo + estructuras de datosEl sistema operativo le asigna recursos y controla su ejecuciónEl sistema operativo le asigna recursos y controla su ejecución

Desde el punto de vista del sistema operativo:Desde el punto de vista del sistema operativo:Técnicas de multiplexado (planificación)Técnicas de multiplexado (planificación)Caracterización de un proceso: tabla o bloque de control deCaracterización de un proceso: tabla o bloque de control deprocesos (BCP). En Linux: procesos (BCP). En Linux: task_structtask_structCada proceso posee un espacio de direccionamiento virtualCada proceso posee un espacio de direccionamiento virtualIndependienteIndependiente

15/12/2009

3

Jerarquía de procesosJerarquía de procesos

Árbol típico de procesos en Árbol típico de procesos en SolarisSolarisJerarquía de procesos

Proceso hijo

Proceso padreProceso padre

Proceso hermano

Proceso abuelo

Vida de un proceso

Crea

Ejecuta

Muere o termina

Ejecución del proceso

Batch

Interactivo

Grupo de procesos

Entorno del procesoEntorno del proceso

Tabla NOMBRETabla NOMBRE--VALOR que se pasa al proceso en su creación VALOR que se pasa al proceso en su creación

Se incluye en la pilaSe incluye en la pila

Se establece:Se establece:

Por defecto (se copia la del padre)Por defecto (se copia la del padre)

Mediante mandatos del Mediante mandatos del shellshell ((exportexport))

Mediante API del SO (Mediante API del SO (putenvputenv, , getenvgetenv))

Ejemplo:Ejemplo:

PATH=/PATH=/usrusr//binbin:/home/pepe/:/home/pepe/binbin

TERM=vt100TERM=vt100

HOME=/home/pepeHOME=/home/pepe

PWD=/home/pepe/libros/primeroPWD=/home/pepe/libros/primero

TIMEZONE=METTIMEZONE=MET

15/12/2009

4

ConceptosConceptos

Usuario: Persona autorizada a utilizar un sistemaUsuario: Persona autorizada a utilizar un sistema

Se identifica en la autenticación mediante:Se identifica en la autenticación mediante:

Código de cuentaCódigo de cuenta

Cl (Cl ( dd))Clave (Clave (passwordpassword))

Internamente el SO le asigna el “Internamente el SO le asigna el “uiduid” (” (useruser identificationidentification))

SuperSuper--usuariousuario

Tiene todos los derechosTiene todos los derechos

Administra el sistemaAdministra el sistema

Grupo de usuariosGrupo de usuarios

Los usuarios se organizan en gruposLos usuarios se organizan en grupos

AlumnosAlumnos

ProfesoresProfesores

Todo usuario ha de pertenecer a un grupoTodo usuario ha de pertenecer a un grupo

Bases de la MultiprogramaciónBases de la Multiprogramación

Paralelismo real entre E/S y UCP (DMA)

Alternancia en los procesos de fases de E/S y de procesamiento

La memoria almacena varios procesosLa memoria almacena varios procesos

Procesamiento

Entrada/salidaTiempo

15/12/2009

5

Ejemplo de ejecución en un sistema Ejemplo de ejecución en un sistema multitarea. Proceso nulomultitarea. Proceso nulo

Proceso A

ProcesamientoEntrada/salidaListoSOProceso nulo

Tiempo

Proceso B

Proceso C

Procesador

••Estados de los procesos: Estados de los procesos: ejecución, bloqueado, listo

ConceptosConceptos

••Multitarea:Multitarea: varios procesos activos a la vez

••Multiusuario:Multiusuario: soporta varios usuarios en varias terminalesp

••Tiempo compartido: Tiempo compartido: reparto “equitativo” del tiempo de CPU entre varios usuarios

••PlanificadorPlanificador (sheduler): seleciona el siguiente proceso a ejecutar

••ActivadorActivador (dispacher): Prepara la ejecución del proceso planificado -> cambio de contextoplanificado -> cambio de contexto

••Grado de multiprogramación: Grado de multiprogramación: nº de procesos activos

•Con BCP vigente

•Necesidades de memoria principal: Memoria virtual

15/12/2009

6

Ventajas de la multitareaVentajas de la multitarea

•Facilita la programación, dividiendo los programas en procesos (modularidad)

•Permite el servicio interactivo simultáneo de varios usuarios de forma eficiente

•Aprovecha los tiempos que los procesos pasan esperando a que se completen sus operaciones de E/Sa que se completen sus operaciones de E/S

•Aumenta el uso de la CPU

Concepto de proceso IIConcepto de proceso IIINFORMACIÓN DEL PROCESO (BCP):INFORMACIÓN DEL PROCESO (BCP):

Imagen de memoria (Imagen de memoria (corecore imageimage))

Estado del procesador Estado del procesador (registros del modelo de programación)(registros del modelo de programación)

Bloque de control del proceso BCPBloque de control del proceso BCP Estado actual del procesoEstado actual del procesoIdentificación “Identificación “pidpid”, ”, ppidppidUidUid,, gidgid.. euid,egideuid,egidUidUid, , gidgid. . euid,egideuid,egidPrioridad del procesoPrioridad del procesoRegistros de procesador cuando el proceso no está en ejecuciónRegistros de procesador cuando el proceso no está en ejecuciónPuntero a la zona de memoria: Segmentos de memoriaPuntero a la zona de memoria: Segmentos de memoriaRecursos asignados: Ficheros abiertos, Temporizadores, Señales, Recursos asignados: Ficheros abiertos, Temporizadores, Señales, Semáforos, PuertosSemáforos, PuertosUn puntero al siguiente BCPUn puntero al siguiente BCP

15/12/2009

7

Memoria de un procesoMemoria de un proceso

Contexto de usuario

Contexto del nucleo

PilaPilaFFFFFFFF

HeapHeap

Registrosgenerales

Registrosespeciales

TextoTexto

DatosDatos

00000000

HeapHeap

PC

SP

Estado

ProcessProcess Control Block (PCB)Control Block (PCB)

Planificación y estadoPlanificación y estado

Id de proceso y padreId de proceso y padrep y pp y p

uid,guiduid,guid, , euideuid, , egidegid

registros CPUregistros CPU

descripción de la memoriadescripción de la memoria

recursos asignadosrecursos asignados

puntero de pilapuntero de pila

recursos asignadosrecursos asignados

……

punteros para formar listaspunteros para formar listas

señales, mensajes, …señales, mensajes, …

15/12/2009

8

El SO mantiene estructuras de El SO mantiene estructuras de datos asociadas a los procesosdatos asociadas a los procesos

Mapa de memoriadel Proceso A

Tablas SO

Mapa de memoriadel Proceso B

Mapa de memoriadel Proceso C

Tablas del sistema operativo

Tabla de procesosBCP Proceso BBCP Proceso A BCP Proceso C

- Estado (registros)- Estado (registros) - Estado (registros)

Mapa deMemoria

- Tabla de memoria- Tabla de E/S: drivers de bloques, de caracteres- Tabla de ficheros, de montajes

- Identificación- Control

- Identificación- Control

- Identificación- Control

Tablas del sistema operativoTablas del sistema operativo

Tabla de procesos (tabla de BCP)

Tabla de memoria: información sobre el uso de la memoria.

Tabla de E/S: guarda información asociada a los periféricos y a las operaciones de E/S

Tabla de fichero: información sobre los ficheros abiertos.

C i i i l i i f ió l BCPCriterios para incluir o no una información en el BCP: Eficiencia Compartición

15/12/2009

9

Información fuera del BCPInformación fuera del BCP

Se considera del BCP

Por eficienciaPor eficiencia: Tabla de páginasp g

Describe la imagen de memoria del proceso en sistemas con MV

Tamaño variable -> El BCP contiene el puntero a la tabla de páginas

(La compartición de memoria requiere que sea externa al BCP)

Por compartición: Por compartición: Punteros de posición de los ficheros

En la tabla de ficheros abiertos del BCP no se pueden compartir

Si se asocian al nodo-i se comparte siempre

Se ponen en una estructura común a los procesos y se asigna uno nuevo en cada servicio OPEN

Memoria Virtual de un proceso Memoria Virtual de un proceso

Memoriai t l

Memoriaprincipal

RIED

virtual

Disco

Tabla depáginas

Una tabla deá i

Código

Datos

Pila

Tamaño

páginas por proceso

Preasignación de zona de intercambio: Todas las páginas están en disco, algunas están copiadas en marcos de página.

La información de traducción está en la tabla de páginas

15/12/2009

10

Creación de procesos ICreación de procesos I

Mapa dememoria Tabla de procesos

Objetoejecutable

Bibliotecasistema

memoria

Imagendel proceso

Tabla de procesos

BCP

Ca

rga

do

r

Creación de procesos IICreación de procesos II

El proceso padre crea un proceso, que a su vez, crea El proceso padre crea un proceso, que a su vez, crea otros procesos, formando un árbol de procesosotros procesos, formando un árbol de procesos

EsquemasEsquemas de de comparticióncompartición de de recursosrecursos::A.A. El padre y el El padre y el hijohijo compartencomparten todostodos los los recursosrecursosB.B. El El hijohijo compartecomparte unsubconjuntounsubconjunto de los de los recursosrecursos

del padredel padreC.C. El padre y el El padre y el hijohijo no no compartencomparten recursosrecursos

EjecuciónEjecuciónjj El El hijohijo compartecomparte un un subconjuntosubconjunto de los de los recursosrecursos

del padredel padre El padre El padre esperaespera hastahasta queque el el hijohijo terminetermine

15/12/2009

11

EspacioEspacio de de direccionesdirecciones

ElEl hijohijo hacehace unauna réplicaréplica del padredel padre

Creación de procesos IIICreación de procesos III

El El hijohijo hacehace unauna réplicaréplica del padredel padre El El hijohijo cargacarga un un programaprograma en en susu espacioespacio de de

direccionesdirecciones

EjemposEjempos UNIXUNIX

La La lamadalamada al al sistemasistema forkfork creacrea un un procesoproceso nuevonuevo La La lamadalamada al al sistemasistema execexec, , despuésdespués de de forkfork, ,

reemplazareemplaza el el espacioespacio de de direccionesdirecciones del del procesoprocesocon un con un nuevonuevo códigocódigo de de programaprograma

Terminación de procesosTerminación de procesos

El proceso ejecuta la última sentencia y pide al SOEl proceso ejecuta la última sentencia y pide al SOSu eliminación (Su eliminación (exitexit):):

DevuelveDevuelve lala salidasalida desdedesde elel hijohijo al padre (viaal padre (via waitwait))DevuelveDevuelve la la salidasalida desdedesde el el hijohijo al padre (via al padre (via waitwait)) LiberaLibera los los recursosrecursos asignadosasignados

El padre El padre puedepuede abortarabortar la la ejecuciónejecución del del hijohijo:: El El hijohijo excedeexcede sussus recursosrecursos La La tareatarea asignadaasignada al al hijohijo yaya no se no se necesitanecesita CuandoCuando el padre el padre terminatermina

AlgunosAlgunos SSOO no SSOO no permitenpermiten continuarcontinuar al al hijohijocuandocuando el padre ha el padre ha terminadoterminado

TodosTodos los los hijoshijos terminanterminan en en cascadacascada

15/12/2009

12

RealciónRealción padrepadre--hijo en procesoshijo en procesos

padrepadre

hijohijo

reanudareanudaFork()Fork()

Exec()Exec() Exit()Exit()

Wait()Wait()

Estados de los procesos IEstados de los procesos I

Cuando un proceso se ejecuta, cambia su estado:Cuando un proceso se ejecuta, cambia su estado:

EjecuciónEjecución: : Se Se ejecutanejecutan laslas instrucionesinstruciones del del códigocódigo del del procesoproceso

BloqueadoBloqueado: : El El procesoproceso esperaespera la la ocurrenciaocurrencia de un de un eventoevento

ListoListo: : El El procesoproceso esperaespera queque se le se le asigneasigne tiempotiempo de CPU de CPU paraparaejecutarseejecutarse

Zombie: Zombie: El El procesoproceso ha ha terminadoterminado susu ejecuciónejecución pero aún tiene pero aún tiene una entrada en la tabla de procesos una entrada en la tabla de procesos (UNIX)(UNIX)

15/12/2009

13

Estados de los procesos IIEstados de los procesos II

Diagrama de estados de los procesos:Diagrama de estados de los procesos:

se interrumpese interrumpe

terminatermina

ListoListo EjecuciónEjecución

ZombieZombie

Espera E/S Espera E/S o un evento o un evento

se planificase planificaTermina la E/S Termina la E/S

o elevento o elevento

BloqueadoBloqueado

Cambio de contexto ICambio de contexto I

15/12/2009

14

Cambio de contexto IICambio de contexto II

Se produce por una interrupción.

Cambio de contexto es el conjunto de dos operaciones:Se pasa a ejecutar la rutina de tratamiento de interrupciónp j pSe salva el estado del procesador en el correspondiente BCP

Planificador: decide el siguiente proceso a ejecutar.Activador: pone a ejecutar un proceso.

Copia el estado del BCP a los registros

Termina con una instrucción RETI (retorno de interrupción)R tit l i t d t d (bit d i l d j ió )Restituye el registro de estado (bit de nivel de ejecución)Restituye el contador de programa (para el nuevo proceso).

El El tiempotiempo de de cambiocambio de de contextocontexto suponesupone unauna sobrecargasobrecarga; el ; el sistemasistema no no realizarealiza trabajotrabajo útilútil durantedurante esteeste tiempotiempo

El El tiempotiempo de de cambiocambio de de contextocontexto dependedepende del del soportesoporte hardwarehardware

Cambio de contexto IIICambio de contexto III

Registrosespeciales

PC

SP

Registrosgenerales

especialesTabla de procesos

Est

ado BCP Proceso BBCP Proceso A BCP Proceso N

Información deControl

Información deControl

Información deControl

Información deidentificación

Información deidentificación

Información deidentificación

Estado(registros)

Estado(registros)

Estado(registros)

SP

Estado

Control Control Control

15/12/2009

15

Planificación de procesos IPlanificación de procesos I

C lC l t b jt b j (j b)(j b) tt t dt d ll d ld l

Los procesos migran entre varias colas:Los procesos migran entre varias colas:

Cola Cola trabajostrabajos (job):(job): soportasoporta todostodos los los procesosprocesos del del sistemasistema

Cola Cola ListosListos ((ready)ready): : soportasoporta todostodos los los procesosprocesos quequeresidenresiden en en memoriamemoria, , preparadospreparados parapara ser ser ejecutadosejecutados

Colas Colas BloqueadosBloqueados: : soportan los procesos que esperan soportan los procesos que esperan por un dispositivo de E/Spor un dispositivo de E/Sp pp p

Planificación de procesos Planificación de procesos II:II:Colas de listos y bloqueadosColas de listos y bloqueados

15/12/2009

16

Planificación de procesos IIIPlanificación de procesos III

Llamadas al sistema ILlamadas al sistema Ipidpid = = forkfork()()Crea un proceso idéntico al padreCrea un proceso idéntico al padre

int execl(const char *path, const char *arg, ...)int execlp(const char *file const char *arg )int execlp(const char *file, const char *arg, ...)int execvp(const char *file, char *const argv[])Reemplaza la imagen del proceso (Reemplaza la imagen del proceso (código+entornocódigo+entorno))

exitexit(status)(status)Termina la ejecución del proceso y devuelve el estadoTermina la ejecución del proceso y devuelve el estado

pidpid = = waitpidwaitpid((pidpid, &, &statlocstatloc, , optionsoptions))E l t i ió d hijE l t i ió d hijEspera la terminación de un hijoEspera la terminación de un hijo

pid_tpid_t getpidgetpid((voidvoid))Devuelve el identificador del proceso.Devuelve el identificador del proceso.

pid_tpid_t getppidgetppid((voidvoid))Devuelve el identificador del proceso padre.Devuelve el identificador del proceso padre.

15/12/2009

17

Llamadas al sistema. Llamadas al sistema. ForkFork##includeinclude <<syssys//types.htypes.h>>pidpid = = forkfork((voidvoid))Crea un proceso idéntico al padreCrea un proceso idéntico al padre

Devuelve:Devuelve:– El identificador de proceso hijo al proceso padre y 0 al hijo– -1 el caso de error

Descripción :– Crea un proceso hijo que ejecuta el mismo programa que el padre– Hereda los ficheros abiertos (se copian los descriptores).– Las alarmas pendientes se desactivan.

Llamadas al sistema. Llamadas al sistema. ForkFork

Mapa dememoria

Imagen delproceso A Tabla de procesos

BCPA

Mapa dememoria

El proceso A hace un fork y crea el proceso hijo B

Imagen delproceso B

Tabla de procesos

BCPA

BCPB

memoria

Imagen delproceso A

Nuevo PIDNueva descripción de memoriaDistinto valor de retorno (0 en el hijo)

15/12/2009

18

Llamadas al Llamadas al sistema.Execsistema.Exec

int execl(const char *path, const char *arg, ...)int execlp(const char *file, const char *arg, ...)int execvp(const char *file, char *const argv[])Reemplaza la imagen del proceso (Reemplaza la imagen del proceso (código+entornocódigo+entorno))Reemplaza la imagen del proceso (Reemplaza la imagen del proceso (código entornocódigo entorno))

Argumentos:path, file: nombre del archivo ejecutablearg: argumentos

Descripción:Devuelve -1 en caso de error, en caso contrario no retorna.Cambia la imagen de memoria del proceso.El mismo proceso ejecuta otro programa.Los ficheros abiertos permanecen abiertosLos ficheros abiertos permanecen abiertosLas señales con la acción por defecto seguirán por defecto,las señales con manejador tomarán la acción por defecto.

Llamadas al Llamadas al sistema.Execsistema.Exec

Mapa dememoria

ITabla de procesos

El hImagendel proceso BCP

Mapa dememoria

Tabla de procesos

BCP

El proceso hace un exec

Se borra la imagen de memoriaSe borra la descripción de la memoria y registrosSe conserva el PID

Objetoejecutable

Bibliotecasistema

Mapa dememoria

Imagendel proceso

Ca

rga

do

r

Tabla de procesos

BCP

Se carga la nueva imagenSe pone PC en dirección de arranqueSe conservan los fd

15/12/2009

19

Llamadas al sistema. Llamadas al sistema. ExitExit y y WaitWaitintint exitexit((intint status)status)

Argumentos:– Código de retorno al proceso padre

Descripción:Descripción:– Finaliza la ejecución del proceso.– Se cierran todos los descriptores de ficheros abiertos.Se liberan todos los recursos del proceso

pidpid = = waitpidwaitpid((pidpid, &, &statlocstatloc, , optionsoptions))Espera la terminación de un hijoEspera la terminación de un hijo

Argumentos:g– Devuelve el código de terminación del proceso hijo.

Descripción:– Devuelve el identificador del proceso hijo o -1 en caso de error.– Permite a un proceso padre esperar hasta que termine un proceso hijo.

Devuelve el identificador del proceso hijo y el estado de terminación del mismo.

Llamadas al sistema. Llamadas al sistema. ExitExit y y WaitWait II

El padre muere: INIT acepta los hijos

exit()

Init

Proceso Afork()

Init

Proceso A

Init

Proceso A

wait()Init

wait()Init

Proceso B Proceso B exit()Proceso BProceso B

15/12/2009

20

Llamadas al sistema. Llamadas al sistema. ExitExit y y WaitWait IIII

Zombie: el hijo muere y el padre no hace wait

wait()

Init

Proceso A

Init

Proceso A

Init

Proceso A

Init

Proceso A

Init

Proceso Afork()

Proceso B exit()Proceso B

zombieProceso B

zombieProceso B

Código C para crear un procesoCódigo C para crear un proceso

int main(){

pid t pid;

Llamadas al Llamadas al sistema.Ejemplosistema.Ejemplo

pid_t pid;pid = fork(); /* crea un procesoif (pid < 0) { /* error

fprintf(stderr, "Fork ha fallado");exit(-1);

}else if (pid != 0) { /* Es el padre

…. /* Código del padrewait(NULL); /* Espera el fin del hijoexit(0); /* El padre termina

} else { /* Es el hijo

execlp ("/bin/ls", "ls", NULL); /* Ejecutar código}

}

15/12/2009

21

ConceptoConcepto de threadde thread

ThreadsThreads

ConceptoConcepto de threadde threadModelosModelos multithreadmultithreadDiseñoDiseño con threadscon threadsThreads en Linux Threads en Linux Threads en JavaThreads en JavaPthreadsPthreads (POSIX threads)(POSIX threads)

Concepto de Concepto de threadthread II

códigocódigo datosdatos datosdatosficherosficheros códigocódigo ficherosficheros

Proceso sencillo y multithread:Proceso sencillo y multithread:

pilapila

registrosregistros

pilapila

registrosregistros

pilapila

registrosregistros

threadthread threadthread

códigocódigo datosdatos datosdatosficherosficheros

registrosregistros pilapila

códigocódigo ficherosficheros

registrosregistrosregistrosregistrosregistrosregistros

pilapilapilapilapilapila

Proceso con un único threadProceso con un único thread Proceso con varios threadsProceso con varios threads

15/12/2009

22

Estados de los Estados de los threadsthreads

• Por thread– Contador de programa, Registros– Pila– Procesos ligeros hijos– Estado (ejecutando, listo o bloqueado)

• Por proceso– Espacio de memoria– Variables globales– Ficheros abiertos– Procesos hijos

Proceso Bloqueado por acceso a discoBloqueado por comunicación

Procesos hijos– Temporizadores– Señales y semáforos– Contabilidad

Procesos ligeros

Activo

Tipos de Tipos de ThreadsThreads

Threads-kernel (ULT):Gestión the thread en el kernel

Conocidos y gestionados por el núcleo del sistema operativo. y g p pEj, libpthread en Linux o threads en WindowsNT

Threads de usuario (KLT): Gestión the threads a nivel biblioteca de usuario

Conocidos y gestionados por el lenguaje (ej, Java) o una biblioteca de funciones de usuario sin que el núcleo del sistema operativo los conozcaEj Mach c threads fibras de WindowsNTEj, Mach c-threads, fibras de WindowsNT

Threads mixtosConocidos y gestionados por una biblioteca de funciones de usuario que recurre al núcleo del sistema operativo para implementarlos vinculación o binding según distintas relaciones: 1 a 1, o varios a 1.

15/12/2009

23

Modelos de vinculación de Modelos de vinculación de ThreadsThreads II

ManyMany--toto--One:One: variosvarios threads de threads de usuariousuario soportadossoportados en un en un thread del kernelthread del kernel

Solaris Green ThreadsSolaris Green ThreadsGNU Portable ThreadsGNU Portable Threads

OneOne--toto--One:One: cadacada thread thread de de usuariousuario estáestá soportadosoportado en un en un th d d l k lth d d l k l

ThreadsThreads de usuariode usuario

Thread del kernelThread del kernelKK

thread del kernelthread del kernelWindows NT/XP/2000Windows NT/XP/2000LinuxLinuxSolaris Solaris posterioresposteriores a v9 a v9

Threads de usuarioThreads de usuario

Threads del kernelThreads del kernelKK KKKKKK

Modelos de vinculación de Modelos de vinculación de ThreadsThreads IIII ManyMany--toto--Many:Many: variosvarios threads de threads de usuariousuario soportadossoportados en en variosvariosthread del kernelthread del kernel

Solaris v9Solaris v9Windows NTWindows NT ThreadsThreads de usuariode usuario

Dos Dos nivelesniveles:: similar a M:M similar a M:M peropero cadacada thread thread de de usuariousuario se se puedepuede enlazarenlazar con un con un thread del kernelthread del kernel

Solaris v8Solaris v8

ThreadThread del del kernelkernelKKKK KK

Solaris v8Solaris v8

KK

ThreadsThreads de usuariode usuario

ThreadThread del del kernelkernelKKKK KK

15/12/2009

24

ParalelizaciónParalelización utilizando utilizando threadsthreads

Procedimiento 1

P F Ejecución

Procedimiento 2

P F

P di i t 2

Esperaen E/S

P F

Procedimiento 1

Ejecuciónparalela

jecuc óserie

Esperaen E/S

P F

Esperaen E/S

P F

Procedimiento 2p

ProcesamientoEsperaen E/S

P F

ThreadsThreads en el diseño de servidores en el diseño de servidores

Trabajadorabajado

P tNúcleo S

olic

itu

des

P tNúcleo S

olic

itu

des

P tNúcleo

Distribuidor

So

licit

ud

es

PuertoNúcleo S Puerto

Núcleo SPuertoNúcleo S

15/12/2009

25

Diseño con Diseño con threadsthreads

• Proceso varios threads– Paralelismo y variables

compartidas

• Proceso con un solo thread– No hay paralelismo

• Llamadas al sistema compartidas– Llamadas al sistema

bloqueantes por thread– Permite división de tareas– Aumenta la velocidad de

ejecución del trabajo– Programación concurrente

• Simplicidad vs exclusión

• Llamadas al sistema bloqueantes

– Paralelismo gestionado por el programador

• Llamadas al sistema no bloqueantes

• Múltiples procesos cooperando• Imaginar otra llamada al

mismo código• Mutex• Variables globales

p p p– Permite paralelismo

gestionado por el SO– No comparten variables– Mayor sobrecarga de

ejecución

Linux Linux ThreadsThreads

Linux se Linux se refiererefiere a los threads a los threads comocomo ““tareastareas” (” (taskstasks) )

La La creacióncreación de threads se de threads se realizarealiza mediantemediante la la llamadallamada al al sistemasistemaclone()clone()

Linux Linux ThreadsThreads

clone()clone()

clone()clone() permitepermite a la a la tareatarea hijahija compartircompartir el el espacioespacio de de direccionesdireccionesde la de la tareatarea padre (padre (procesoproceso))

Java threads se Java threads se puedenpueden crearcrear::

Java Java ThreadsThreads

ExtendiendoExtendiendo la la claseThreadclaseThreadImplementandoImplementando el el interfazinterfaz RunnableRunnable

Los threads en Java los Los threads en Java los gestionagestiona::La JVM: green threadsLa JVM: green threadsEl SO: El SO: correspondenciacorrespondencia 1 a 1.1 a 1.

15/12/2009

26

PThreadsPThreads

El API del standardEl API del standard POSIXPOSIX (IEEE 1003 1c)(IEEE 1003 1c) parapara El API del standard El API del standard POSIXPOSIX (IEEE 1003.1c)(IEEE 1003.1c) paraparacreacióncreación y y sincronizaciónsincronización de threads de threads

Este API Este API especifícaespecifíca el el comportamientocomportamiento de la de la bibliotecabiblioteca de thread, la de thread, la implementaciónimplementación seráserá el el desarrollodesarrollo de de laslas especificacionesespecificaciones de de estaesta bibliotecabiblioteca

Es Es muymuy normal en SSOO normal en SSOO tipotipo UNIX (Solaris, Linux, UNIX (Solaris, Linux, yy pp ( , ,( , ,Mac OS X)Mac OS X)

Servicios POSIX para Servicios POSIX para threadsthreads

int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*func)(void *), void *arg)

Crea un thread que ejecuta "func" con argumento "arg" y atributos "attr".Los atributos permiten especificar: tamaño de la pila prioridad política deLos atributos permiten especificar: tamaño de la pila, prioridad, política de planificación, etc. Existen diversas llamadas para modificar los atributos.

int pthread_join(pthread_t thid, void **value)Suspende la ejecución de un thread hasta que termina el thread con identificador "thid". Devuelve el estado de terminación del thread.

int pthread_exit(void *value)Permite a un thread finalizar su ejecución, indica el estado de terminación.

pthread_t pthread_self(void)Devuelve el identificador del thread que ejecuta la llamadaDevuelve el identificador del thread que ejecuta la llamada.

int pthread_attr_setdetachstate(pthread_attr_t *attr, int detachstate)Establece el estado de terminación de un thread.Si "detachstate" = PTHREAD_CREATE_DETACHED el thread liberara sus recursos cuando finalice su ejecución.Si "detachstate" = PTHREAD_CREATE_JOINABLE no se liberarn

los recursos, es necesario utilizar pthread_join().

15/12/2009

27

Jerarquía de Jerarquía de threadsthreads threadsthreads

Proceso ligero A

No independ.

p_create

p_createp_create

Proceso ligero B

Proceso ligero D

Proceso ligero C

p_join

p_exit

p_exit

p_exitligero B

Programa de ejemplo IPrograma de ejemplo I

#include <stdio.h>#include <pthread.h>#define MAX_THREADS 10void func(void) {void func(void) {

printf("Thread %d \n", pthread_self());pthread_exit(0);

}main() {

int j;pthread_attr_t attr;pthread_t thid[MAX_THREADS];pthread attr init(&attr);pthread_attr_init(&attr);for(j = 0; j < MAX_THREADS; j ++)

pthread_create(&thid[j], &attr, func, NULL);for(j = 0; j < MAX_THREADS; j ++)

pthread_join(thid[j], NULL);}

15/12/2009

28

Programa de ejemplo IIPrograma de ejemplo II

#include <stdio.h>#include <pthread.h>#define MAX_THREADS 10

void func(void) {printf("Thread %d \n", pthread_self());

pthread_exit(0);}

main() {int j;pthread_attr_t attr;pthread_t thid[MAX_THREADS];

pthread_attr_init(&attr);pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED);

for(j = 0; j < MAX_THREADS; j ++)pthread_create(&thid[j], &attr, func, NULL);

sleep(5);}

PlanificaciónPlanificación a a mediomedio y largo y largo plazoplazoPlanificaciónPlanificación a a cortocorto plazoplazoFIFO ó FCFSFIFO ó FCFS

PlanificaciónPlanificación

FIFO ó FCFSFIFO ó FCFSSJF, SRTFSJF, SRTFPrioridadesPrioridadesRoundRound--robinrobinTiempo realTiempo realPlanificaciónPlanificación de de PthreadsPthreadsPlanificaciónPlanificación en POXISen POXISPlanificaciónPlanificación en POXISen POXISPlanificaciónPlanificación en Linux en Linux PlanificaciónPlanificación en Windowsen Windows--NTNTServiciosServicios POXIS POXIS parapara planificaciónplanificación

15/12/2009

29

• Planificación

– A largo plazo (añadir procesos a ejecutar)

– A medio plazo (añadir procesos a RAM desde disco)

A t l ( é ti l UCP)

Planificación de la CPU Planificación de la CPU

– A corto plazo (qué proceso tiene la UCP)

– Planificación de E/S

• Tipos de planificación

– Sin expulsión: el proceso conserva la UCP mientras desee.

– Con expulsión: el SO quita la UCP al proceso

Exige un reloj que interrumpe periódicamenteExige un reloj que interrumpe periódicamente

• Colas de procesos

– Por prioridad

– Por tipo

Planificación a medio y largo plazoPlanificación a medio y largo plazo

Nuevos de estados de los procesos:Nuevos de estados de los procesos:

En En esperaespera (Bach): (Bach): EsperaEspera entrarentrar en el en el sistemasistema

SuspendidoSuspendido: : En En esperaespera de de asignaciónasignación de de memoriamemoriaSuspendidoSuspendido y y bloqueadobloqueadoSuspendidoSuspendido y y listalista

15/12/2009

30

Estados de los procesos IIEstados de los procesos II

Diagrama de estados de los procesos:Diagrama de estados de los procesos:

se admitese admite terminaterminase interrumpese interrumpe

se admitese admite

Espera E/S Espera E/S o un evento o un evento

se planificase planifica

En esperaEn espera

ListoListo EjecuciónEjecución

ZombieZombie

se expulsase expulsaa discoa discoSuspendidoSuspendido

y listoy listo

se recuperase recuperade discode disco

Termina la Termina la E/S o elE/S o elevento evento

BloqueadoBloqueadoSuspendidoSuspendido

yybloqueadobloqueado

Termina la Termina la E/S o elE/S o elevento evento

se expulsase expulsaa discoa disco

• Planificación a corto plazo: cuando un proceso:

1. Se bloquea

2 P d j t d li t

Planificación a corto plazo Planificación a corto plazo

2. Pasa de ejecutando a listo

3. Pasa de bloqueado a listo

4. Termina

• La planificación en los casos 1 y 4 es no expulsora (nonpreemptive)

• En el resto de casos es expulsora (preemptive)

15/12/2009

31

•• MÁXIMIZARMÁXIMIZAR

– Utilización de la CPU – que sea máxima

– Productividad bach (throughput) – # de procesos que se procesan porunidad de tiempo

Criterios de planificación Criterios de planificación

p

•• MÍNIMIZARMÍNIMIZAR

– Tiempo de respuesta (Turnaround) – tiempo en ejecutar un trabajo en particular

– Tiempo de espera – tiempo que un proceso pasa en la cola de listos

– Tiempo de respuesta interactivo– tiempo que pasa desde que se envíael trabajo hasta que se obtiene una respuesta

•• CONSEGUIRCONSEGUIR

– Reparto equitativo del procesador

– Cumplimiento de plazos (tiempo real)

– Calidad de servicio (sistemas multimedia)

•• FIFO ó FCFSFIFO ó FCFS

– Organización en una lista ordenada por tiempo de llegada

•• SJF, SRTFSJF, SRTF

– Organización en lista ordenada por tiempo previsto de ejecución

Algoritmos de planificación I Algoritmos de planificación I

• Bach: tiempo previsto para la ejecución de un proceso

• Interactivo: tiempo previsto para la próxima ráfaga de CPU

• Prioridades

– Fíjas o dinámicas

– Organización en una lista ordenada por prioridades calculadas

•• RoundRound--RobinRobin

– Organización en una lista circular con “quantos” de tiempo

Expropiación por agotamiento del quanto y replanificación– Expropiación por agotamiento del quanto y replanificación

• Lotería

– Se asigna a cada proceso un rango de valores y se genera un númeroa leatorio

• Tiempo real

– A plazo fijo: EDF (prioridades dinámicas)

– Periódicos: RMS (prioridades estáticas)

15/12/2009

32

Procesos T. cómputoP1 24P2 3P3 3

FIFO ó FirstFIFO ó First--Come, FirstCome, First--Served (FCFS) IServed (FCFS) I

P3 3

Suponiendo que los procesos llegan en el siguiente orden

P1 , P2 , P3

• El diagrama de Gantt es:

P1 P2 P3

• Tiempo de espera para: P1 = 0; P2 = 24; P3 = 27

• Tiempo medio de espera: (0 + 24 + 27)/3 = 17

24 27 300

Suponiendo que los procesos llegan en el siguiente orden

P2 , P3 , P1

FIFO ó FirstFIFO ó First--Come, FirstCome, First--Served (FCFS) IIServed (FCFS) II

2 , 3 , 1

• El diagrama de Gantt es:

P1P3P2

63 300

• Tiempo de espera para: P1 = 6; P2 = 0; P3 = 3

• Tiempo medio de espera: (6 + 0 + 3)/3 = 3

• Mucho mejor que el caso anterior

• Efecto Convoy: los procesos cortos detrás de los largos

15/12/2009

33

ShortestShortest--JobJob--First (SJF) Scheduling IFirst (SJF) Scheduling I

• Asocia a cada proceso el tiempo previsto de ejecución. Seleccionapara ejecutar el proceso con menor tiempo.

• Dos esquemas:

–– No No expulsorexpulsor (nonpreemptive) – una vez planificado sigue en la CPU hasta que completa su ráfaga de CPU.

–– ExpulsoExpulsor (preemptive) – si llega un nuevo proceso con un tiempo menor que el que se está ejecutanto, este último se expulda. También se llama

Shortest-Remaining-Time-First (SRTF)

•• SJF SJF eses óptimoóptimo – da el menor tirmpo de espera medio para un conjunto de procesos.

•• ProblemaProblema: : se debe suministrar el siguiente tiempo de ráfaga

-> estimación teniendo en cuenta las anteriores

Procesos T. llegada T. cómputo

P1 0.0 7

P 2 0 4

EjemploEjemplo de SJF no de SJF no expulsivoexpulsivo

P2 2.0 4

P3 4.0 1

P4 5.0 4

• SJF (no-expulsivo)

P1 P3 P2

73 160

P4

8 12

• Tiempo medio de espera = (0 + 6 + 3 + 7)/4 = 4

73 160 8 12

15/12/2009

34

Procesos T. llegada T. cómputo

P1 0.0 7

EjemploEjemplo de SJF de SJF expulsivoexpulsivo

P2 2.0 4

P3 4.0 1

P4 5.0 4

• SJF (expulsivo)

P1 P3P2 P4P2 P1

• Tiempo medio de espera = (9 + 1 + 0 +2)/4 = 3

42 110 5 7 16

PlanificaciónPlanificación basadabasada en en prioridadesprioridades II

• Se asocia un número de prioridad (entero) a cada proceso

• La CPU ejecuta el proceso de mayor prioridadLa CPU ejecuta el proceso de mayor prioridad

(menor entero mayor priodad)

– Expulsivo

– No expulsivo

• SJF es un planificador de prioridad, en el que la prioridad es el tiempo de cómputo de cada ráfaga de CPU (a menor ráfaga mayor

i id d)prioridad).

• Problema Inanición (starvation) – el proceso de menor prioridadpuede no ejecutarse nunca

•• SoluciónSolución Envejecimiento (aging) – a medida que pasa el tiempo, el proceso aumenta su prioridad

15/12/2009

35

PlanificaciónPlanificación basadabasada en en prioridadesprioridades IIII

• Establecimiento de prioridades:

•• InternoInterno: : uso de la memoria, bloqueos de E/S, duraciónestimada de la siguiente ráfaga de CPU

Procesos T. llegada T. Ráfaga estimado Prioridad

P1 0.0 7 3

P2 2.0 4 2

P3 4.0 1 1

P4 5.0 4 2

• Externo: coste, frecuencia, importancia,..

Procesos T. llegada Frecuencia Prioridad

P1 0.0 1 4

P2 2.0 3 2

P3 4.0 6 1

P4 5.0 2 3

Round Robin (RR)Round Robin (RR)

• Cada proceso tiene una unidad de tiempo de CPU (quantum), normalmente 10-100 milliseg. Cuando pasa el proceso es expulsado y puesto en la cola de Listosp

• Si hay n procesos en la cola de Listos, y el quantum es q, a cada proceso le toca 1/n del tiempo CPU en trozos de al menos q unidades de tiempo cada uno.

• Ningún proceso espera más de (n-1)q unidades de tiempo.

• Performance

– q grande FIFO

– q pequeño q debe ser grande respecto al tiempo de cambio de contexto (latencia) para que el overhead no sea demasiado grande

15/12/2009

36

EjemploEjemplo de RR con Quantum = 20de RR con Quantum = 20

Process Burst Time

P1 531

P2 17P3 68P4 24

• El diagrama de es:

P1 P2 P3 P4 P1 P3 P4 P1 P3 P3

• Normalemente , la media de turnaround es mayor que en SJF, pero mejor tiempo de respuesta

1340 20 37 57 77 97 117 121 154 162

El quantum y la El quantum y la latencialatencia de de cambiocambio de de contextocontexto

15/12/2009

37

El El tiempotiempo de Turnaround de Turnaround varíavaría con el Quantumcon el Quantum

Colas multilevel IColas multilevel I

• La cola de Listos se particiona en colas separadas :foreground (interactivo)background (batch)

• Cada cola tiene su propio algoritmo de planificación

– foreground – RR

– background – FCFS

• La planificación se aplica entre las colas:

– Planificación de prioridad fija; (se sirven todos de foreground y después de background) Se puede producir inanicióndespués de background). Se puede producir inanición.

– Rodaja de tiempo – cada cola tiene una cierta cantidad de tiempo de CPU time que se reparte entres sus procesos;

– ej.., 80% to foreground in RR y 20% to background in FCFS

15/12/2009

38

Colas multilevel IIColas multilevel II

• Tres colas:

– Q0 – RR con quantum de 8 milisegundos y FIFO

– Q1 – RR con quantum de 16 milisegundos y FIFO

Q FIFO

Colas multilevel con Colas multilevel con realimentaciónrealimentación

– Q2 – FIFO

• Planificación

– Un nuevo trabajo llega a la Q0 con planificación FIFO. Cuando gana la CPU, se ejecuta 8. Si no termina se mueve a Q1.

– En Q1 se sirve con FIFO y se le dan 16 m. Si no termina se mueve a Q1.

15/12/2009

39

PlanificaciónPlanificación en en TiempoTiempo realreal

•• TiempoTiempo real real duroduro o o críticocrítico (Hard real-time) – las tareas se debecomplentar dentro de un plazo preestablecido (con unas garantíasde tiempo)de tiempo)

– RMA: Asignas las prioridades según la frecuencia (tareasperiódicas e independientes). Garantiza que cumplen el plazopara una utilización del procesador < 70%

– EDF: Primero la tarea que antes cumpla en plazo (prioridadesdinámica). Más dificil de implementar que el anterior. La utilización del procesador puede ser del 100%

•• TiempoTiempo real real blandoblando o no o no críticocrítico (Soft real-time) – las tareascríticas deben teber prioridades más altas que las que no lson de tiempo real.

Tarea Cómputo Plazo= T Prioridad

1 4 10 1

2 4 15 2

PlanificaciónPlanificación en en TiempoTiempo real. RMS Ireal. RMS I

3 10 35 3

1

2

3tiempo

Tiempo de cómputo (C) Fin de periodo (T = Periodo )

15/12/2009

40

PlanificaciónPlanificación en en TiempoTiempo real. RMS IIreal. RMS II

Utilización del procesador pora una tarea i Ui = Ci

Ti

Utilization del procesador para n tareas U(n) = n(2 - 1)1n

Resultados:

• Si Ui ≤ U(n) el conjunto de tareas es planificableSi Ui ≤ U(n) el conjunto de tareas es planificable.

• If Ui > 1 el conjunto de tareas es no planificable.

• Si U(n) < Ui ≤ el conjunto de tareas es inconcluso

*si todas las tareas cumplen su plazo en el primer hiperperiodo el conjunto de tareas es planificable.

Tarea Cómputo Plazo= T Prioridad

1 4 10 1

2 4 15 2

PlanificaciónPlanificación en en TiempoTiempo real. RMS IIIreal. RMS III

3 10 35 3

U(3) = 3(21/3 – 1) = 0.779

Resultados:U1+2 = 0.667, planificanle.Sin embargo, 0.779 < 0.953 < 1

U1 = 4 / 10 = 0.4

U2 = 4 / 15 = 0 267Por lo que es inconcluso para 3.

Si las tareas cumplen el plazo en el primer HIPERPERIODO (35 en este caso)son planificables

U2 4 / 15 0.267

U3 = 10 / 35 = 0.286

Utotal = 0.953

15/12/2009

41

• Las prioridades se asignan de acuerdo a sus plazos:

El plazo más corto, la prioridad mayor;

PlanificaciónPlanificación en en TiempoTiempo real. EDFreal. EDF

El plazo más largo, la prioridad menor.

PlanificaciónPlanificación en POSIX Ien POSIX I

• Cada política de planificación lleva asociado un rango con al menos 32 niveles de prioridad.

• El planificador elegirá el proceso o thread con la prioridad más alta

• Políticas de planificación

– Para compartición de tiempo – prioridad variable

• Otra (SCHED_OTHER)

– Para tiempo real – prioridad fija, superior a SCHED_OTHER

• FIFO (SCHED_FIFO)

• Cíclica (SCHED_RR)

15/12/2009

42

PlanificaciónPlanificación SCHED_OTHER en LINUX SCHED_OTHER en LINUX • Funcionamiento general

– LINUX divide el tiempo de CPU en épocas (epoch)– En cada época cada proceso tiene un quantum de tiempo que se le

asigna al comenzar la época– Cuando un proceso agota su quantum se le expulsa y se selecciona

otro proceso ejecutable– Un proceso puede ser seleccionado múltiples veces mientras le

quede quantum• Por ejemplo, puede haber sido expulsado tras una E/S, propia o

ajena, y luego vuelto a asignar la CPU– La época termina cuando todos los procesos ejecutables han

agotado su quantumE t i l t l é• En ese momento, se reasigna los quantum para la época siguiente LINUX favorece los procesos que no han agotado su quantum en la época anterior

• La prioridad está relacionada con el quantum restante (a mayor quantum, mayor prioridad)

PlanificaciónPlanificación PthreadPthread

• Políticas de planificación a definir como en procesos.

• Ambitos de planificación:p

– PTHREAD_SCOPE_PROCESS: Planificación local

– La librería de threads decide que thread se ejecuta.

– PTHREAD_SCOPE_SYSTEM: Planificación global

– El kernel decide qué thread se ejecuta.

• Los atributos de planificación se pueden añadir mediante servicios a los atributos de creación de un thread:

• #include <pthread.h>– int pthread_attr_setscope(pthread_attr_t *attr, int scope);

– int pthread_attr_getscope(const pthread_attr_t *attr, int *scope);

– int pthread_attr_setschedpolicy(pthread_attr_t *attr, int policy);

– int pthread_attr_getschedpolicy(const pthread_attr_t *attr, int *policy);

15/12/2009

43

PlanificaciónPlanificación en Windows NT Ien Windows NT I

Iniciado Sit l lIniciado Situar en la colade listos

Reiniciado

Ejecuciónfinalizada

Esperaterminada

Fin de bloqueo

Seleccionado Expulsado

Pila del kernelen swap

Pila del

Listo

Finalizado

Bloqueado

Bloqueado

Cambio de contexto. Comienzo de ejecución

Seleccionadopara

ejecución

Expulsado

Expulsado

kernel en memoria

ReservaEjecución

Transición

PlanificaciónPlanificación en Windows NT IIen Windows NT II

Pt: PrioridadesPt: Prioridades relativas dethreads

Promoción dinámica:+n si se desbloquea (hasta 15)

Decaimiento dinámico:Decaimiento dinámico:-1 si agota el quantum (hasta Pt)

Anti-inanición:Si no se ha ejecutado en los últimos 3 segundos, adopta prioridad 15 para ejecutar 2*quantum

15/12/2009

44

Servicios POSIX para planificación IServicios POSIX para planificación I

• Modificar la prioridad de un proceso

#include <sched.h>

Modificar la prioridad de un proceso– int sched_setparam(pid_t pid, const struct_param

*param);

• Modificar la prioridad y la política– int sched_setscheduler(pid_t pid, const sched_param

*param);

• Obtener los parámetros de planificación de un proceso– int sched_getparam(pid_t pid, const struct_param

*param);

• Obtener la prioridad de un proceso– int sched_getscheduler(pid_t pid);

CapítuloCapítulo 4: Gestión de 4: Gestión de procesosprocesos

Señales y excepcionesSeñales y excepcionesTemporizadoresTemporizadoresServidores y Servidores y demoniosdemonios

15/12/2009

45

Señales ISeñales I

Señal: Mecanismo por el que un proceso puede ser notificado de, o afectado por, un evento que se produce en el sistema:

- excepciones detectadas por hardware- expiración de una alarma o temporizador- finalización de una operación de I/O asíncrona- llegada de un mensaje- invocación de la función kill() y similares-actividad del terminal, etc.

Número de señal:•Entero positivo que identifica una señal. •Existen también constantes predefinidas para dar nombre a las señales

Señales IISeñales II

• Las señales son interrupciones al proceso

• Envío o generación

– Proceso- Proceso (dentro del grupo) con el killProceso Proceso (dentro del grupo) con el kill

– SO - Proceso

SeñalProceso

Código

ProcesoFunción

tratamiento

15/12/2009

46

Señales IIISeñales III

UnaUna señalseñal se se puedepuede generargenerar parapara un un procesoproceso o o paraparaun thread.un thread.

CadaCada thread thread tienetiene unauna máscaramáscara de de señalesseñales, , queque define define laslas señalesseñales bloqueadasbloqueadas.. La La máscaramáscara se se heredahereda del padredel padre SeñalSeñal no no bloqueadabloqueada: se : se entregaentrega IgnorarIgnorar TerminarTerminar elel procesoprocesoTerminarTerminar el el procesoproceso EjecutarEjecutar manejadormanejador

SeñalSeñal bloqueadabloqueada: : quedaqueda pendiientependiiente hastahasta queque se se aceptaacepta con con sigwaitsigwait()()

Tratamiento de Tratamiento de señales Iseñales I

OpcionesOpciones parapara tratartratar unauna señalseñal::

EnviarEnviar la la señalseñal al thread al al thread al queque la la señalseñal se se refiererefiereqq EnviarEnviar la la señalseñal a a todostodos los threads del los threads del procesoproceso AsignarAsignar un thread un thread específicoespecífico parapara recibirrecibir todastodas laslas

señalesseñales del del procesoproceso

CadaCada señalseñal se se tratatrata mediantemediante un “un “manejadormanejador””

1.1. La La señalseñal se genera se genera porpor un un eventoevento particularparticular2.2. La La señalseñal se se envíaenvía al al procesoproceso3.3. La La señalseñal se se tratatrata

15/12/2009

47

• Hay muchos tipos de señales, según su origen

• SIGILL instrucción ilegal

• SIGALRM vence el temporizador

Tratamiento de Tratamiento de sseñales IIeñales II

• SIGALRM vence el temporizador

• SIGKILL mata al proceso

• El SO las transmite al proceso

– El proceso debe estar preparado para recibirla

• Especificando un procedimiento de señal con sigaction()

• Enmascarando la señal con sigprogmask()

– Si no está preparado acción por defectoSi no está preparado acción por defecto

• El proceso, en general, muere

• Hay algunas señales que se ignoran o tienen otro efecto

• El servicio pause() para el proceso hasta que recibe una señal

Señales. Señales. Ejemplo UnixEjemplo Unix/* Programa A. Fichero – Fichero padre.c* Manda ejecutar el programa B* Lee caracteres del terminal y cada vez que detecta “salto de linea”* envia una señal al proceso B*/#include <stdio.h>#include <signal h>#include <signal.h>#include <unistd.h>#include <stdlib.h>

pid_t resp;char buf[1];

main() {resp = fork();if (resp == 0)

if (execlp("./hijo","hijo", NULL) == -1) {perror("exec"), exit(1);

}

while (read(0, buf, 1) == 1) {if (buf[0] == '\n') {

kill(resp, SIGUSR2);}

}}

15/12/2009

48

Señales. Señales. Ejemplo UnixEjemplo Unix/* Programa B. Fichero hijo.c* Crea un fichero y escribe en él* una línea por cada señal que recibe, hasta un máximo de 5*/#include <fcntl.h>#include <signal.h>#include <stdlib h>#include <stdlib.h>

int fd, n=5;

void proc(int arg) {n--;return;

}

int main() {signal(SIGUSR2, proc);if ((fd = open("fichero", O_CREAT|O_TRUNC|O_WRONLY)) == -1) {

perror("open"); exit(1);}

while (n!= 0) {pause();write(fd, "Linea\n", 7);

}return 0;

}

ExcepcionesExcepciones

• Evento que ocurre durante la ejecución de un programa y que requiere la ejecución de un fragmento de código fuera del flujo normal de ejecución.

• Manejo de excepcion en Javatry {

Bloque donde puede producirse una excepción

}

catch {

Bloque que se ejecutará si se produce unaBloque que se ejecutará si se produce unaexcepción

en el bloque anterior

}

15/12/2009

49

TemporizadoresTemporizadores

• El SO mantiene un temporizador por proceso

– El proceso activa el temporizador con alarm()

• El SO envía una señal SIGALRM al proceso cuando vence su temporizador

Proceso servidorProceso servidor• Es un proceso que:

– Está pendiente de recibir órdenes de un proceso “cliente”

– Estructura de bucle infinito

PROCESOSERVIDOR

PROCESOSCLIENTES

RECURSO

– Uso de puertos de comunicación

• Servidor secuencial:– El servidor mismo ejecuta las órdenes

• Servidor paralelo:– Delega ejecución las órdenes a threads o procesos hijos

15/12/2009

50

Proceso servidor. FuncionamientoProceso servidor. Funcionamiento

Puerto A Puerto A Puerto A Puerto B

ServidorPadre

ServidorHijo

Cliente A Cliente A

a) b) c)

ServidorPadre

ServidorPadre

Procesos cliente y servidor en máquinas distintas

Proceso servidor.Proceso servidor. Máquinas distribuidas Máquinas distribuidas

ClientePuerto

Servidorficheros

Servidorimpresión

Servidore_mail

SO SO SO SO

RED

15/12/2009

51

Procesos demoniosProcesos demonios

• Es un proceso que ejecuta:– En background (su padre no le espera)En background (su padre no le espera)

– No asociado a un terminal o proceso login

– Que espera que ocurra un evento

– Funciona como servior

– O que debe realizar una tarea de forma periódicas

• Características– Se arrancan al iniciar el sistemaSe arrancan al iniciar el sistema

– No mueren

– Están normalmente en espera de evento

– No hacen el trabajo, lanzan otros procesos o procesos ligeros

• Ejemplos:Telnetd, httpd, lpd

Servicios POSIX para Servicios POSIX para señales señales II

include <sys/types.h>#include <signal.h>g

Manipular conjuntos de señales:

int sigemptyset (sigset_t *set);int sigfillset (sigset_t *set);

int sigaddset (sigset_t *set, int signo);

int sigdelset (sigset_t *set, int signo);

int sigismember (const sigset_t *set, int signo);

Estas funciones no afectan de forma directa al comportamientodel sistema

15/12/2009

52

Servicios POSIX para Servicios POSIX para señales IIseñales II

Examinar y cambiar la acción asociada a una señal (armado):int sigaction (int sig, const struct sigaction *act, struct sigaction *oact);• si act es NULL, la acción actual no se cambia• si oact no es NULL, la acción actual se devuelve en *oact

Enviar una señal a un proceso:int kill (pid_t pid, int sig);

Enviar una señal a un thread:pthread kill(pthread t thread int sig)pthread_kill(pthread_t thread, int sig);

Aceptar una señal bloqueada:int sigwait (const sigset_t *set, int *sig);

Servicios POSIX para Servicios POSIX para señales IIIseñales III

Máscara de señales:int sigprocmask (int how, sigset_t *set, sigset_t *oset);• Permite modificar o examinar la máscara de señales de un proceso.

int sigpending (sigset_t *set);• Devuelve el conjunto de señales bloqueadas pendientes del proceso.

Espera de señales:int pause(void);• Bloquea al proceso hasta que llegue una señal.

Servicios de temporización:unsigned int alarm(unsigned int seconds);• Activa un temporizador

unsigned int sleep(unsigned int seconds);• El proceso se suspende en num de segundos.