Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
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.