Gestión de procesos

Anuncio
15/12/2009
Tema 4: Gestión de procesos
Capítulo 4: Gestión de procesos
Procesos
Procesos ligeros ((threads
threads))
Políticas y algoritmos de planificación
Señales y excepciones
Temporizadores
Servidores y demonios
Servicios POSIX
1
15/12/2009
Procesos
Concepto
p de Proceso
Multitarea
Información del proceso (BCP)
Creación de procesos
Terminación de procesos
Estados de los procesos
Cambio de contexto
Planificación
Concepto de proceso I
PROGRAMA: Archivo ejecutable en un dispositivo de
almacenamiento permanente (ej. disco)
PROCESO: Un programa en ejecución, reside en MP y
según se ejecuta modifica su contexto
Desde el punto de vista del usuario:
código + estructuras de datos
El sistema operativo le asigna recursos y controla su ejecución
Desde el punto de vista del sistema operativo:
Técnicas de multiplexado (planificación)
Caracterización de un proceso: tabla o bloque de control de
procesos (BCP). En Linux: task_struct
Cada proceso posee un espacio de direccionamiento virtual
Independiente
2
15/12/2009
Jerarquía de procesos
Jerarquía de procesos
Proceso hijo
Proceso padre
Proceso hermano
Proceso abuelo
Vida de un proceso
Crea
Ejecuta
Muere o termina
Ejecución del proceso
Batch
Interactivo
Grupo de procesos
Árbol típico de procesos en Solaris
Entorno del proceso
Tabla NOMBRENOMBRE-VALOR que se pasa al proceso en su creación
Se incluye en la pila
Se establece:
Por defecto (se copia la del padre)
Mediante mandatos del shell (export
export))
Mediante API del SO ((putenv
putenv,, getenv)
getenv)
Ejemplo:
PATH=/usr//bin
PATH=/usr
bin:/home/pepe/
:/home/pepe/bin
bin
TERM=vt100
HOME=/home/pepe
PWD=/home/pepe/libros/primero
TIMEZONE=MET
3
15/12/2009
Conceptos
Usuario: Persona autorizada a utilizar un sistema
Se identifica en la autenticación mediante:
Código de cuenta
Cl
Clave
((password
password)
d)
Internamente el SO le asigna el “uid
“uid”
” (user
(user identification
identification))
Super-usuario
SuperTiene todos los derechos
Administra el sistema
Grupo de usuarios
Los usuarios se organizan en grupos
Alumnos
Profesores
Todo usuario ha de pertenecer a un grupo
Bases 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 procesos
Procesamiento
Entrada/salida
Tiempo
4
15/12/2009
Ejemplo de ejecución en un sistema
multitarea. Proceso nulo
Proceso A
Proceso B
Procesamiento
Entrada/salida
Listo
SO
Proceso nulo
Proceso C
Procesador
Tiempo
•Estados de los procesos: ejecución, bloqueado, listo
Conceptos
•Multitarea: varios procesos activos a la vez
p
varios usuarios en varias terminales
•Multiusuario: soporta
•Tiempo compartido: reparto “equitativo” del tiempo de
CPU entre varios usuarios
•Planificador (sheduler): seleciona el siguiente proceso a
ejecutar
•Activador (dispacher): Prepara la ejecución del proceso
planificado -> cambio de contexto
•Grado de multiprogramación: nº de procesos activos
•Con BCP vigente
•Necesidades de memoria principal: Memoria virtual
5
15/12/2009
Ventajas 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/S
•Aumenta el uso de la CPU
Concepto de proceso II
INFORMACIÓN DEL PROCESO (BCP):
Imagen de memoria (core
(core image)
image)
Estado del procesador
(registros del modelo de programación)
Bloque de control del proceso BCP
 Estado actual del proceso
Identificación “pid
“pid”,
”, ppid
Uid
Uid,, gid
gid.. euid,egid
Prioridad del proceso
Registros de procesador cuando el proceso no está en ejecución
Puntero a la zona de memoria: Segmentos de memoria
Recursos asignados: Ficheros abiertos, Temporizadores, Señales,
Semáforos, Puertos
Un puntero al siguiente BCP
6
15/12/2009
Memoria de un proceso
Contexto
del nucleo
Contexto
de usuario
Registros
especiales
FFFF
Pila
Registros
generales
Heap
PC
Datos
Texto
SP
0000
Estado
Process Control Block (PCB)
Planificación y estado
Id de p
proceso y p
padre
uid,guid,, euid
uid,guid
euid,, egid
puntero de pila
registros CPU
descripción de la memoria
recursos asignados
punteros para formar listas
…
señales, mensajes, …
7
15/12/2009
El SO mantiene estructuras de
datos asociadas a los procesos
Mapa de memoria
del Proceso A
Mapa de memoria
del Proceso B
Tablas del sistema operativo
Mapa de memoria
del Proceso C
Tabla de procesos
Tablas SO
BCP Proceso A
BCP Proceso B
BCP Proceso C
- Estado (registros) - Estado (registros) - Estado (registros)
- Identificación
- Identificación
- Identificación
- Control
- Control
- Control
Mapa de
Memoria
- Tabla de memoria
- Tabla de E/S: drivers de bloques, de caracteres
- Tabla de ficheros, de montajes
Tablas 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.
Criterios
C
i i para iincluir
l i o no una iinformación
f
ió en ell BCP
BCP:
 Eficiencia
 Compartición
8
15/12/2009
Información fuera del BCP
Se considera del BCP
p g
Por eficiencia:
eficiencia Tabla de páginas
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: 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
RIED
Memoria
virtual
i t l
Memoria
principal
Código
Datos
Pila
Tamaño
Disco
Tabla de
páginas
Una tabla de
páginas
á i
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
9
15/12/2009
Creación de procesos I
Objeto
ejecutable
Bibliotec a
sistema
Cargador
Mapa de
memoria
Imagen
del proceso
Tabla de procesos
BCP
Creación de procesos II
 El proceso padre crea un proceso, que a su vez, crea
otros procesos, formando un árbol de procesos
 Esquemas de compartición de recursos
recursos::
A. El padre y el hijo comparten todos los recursos
B. El hijo comparte unsubconjunto de los recursos
del padre
C. El padre y el hijo no comparten recursos
 Ejecución
j
 El hijo comparte un subconjunto de los recursos
del padre
 El padre espera hasta que el hijo termine
10
15/12/2009
Creación de procesos III
 Espacio de direcciones
 El hijo hace una réplica del padre
 El hijo carga un programa en su espacio de
direcciones
 Ejempos UNIX
 La lamada al sistema fork crea un proceso nuevo
 La lamada al sistema exec,
exec, después de fork
fork,,
reemplaza el espacio de direcciones del proceso
con un nuevo código de programa
Terminación de procesos
 El proceso ejecuta la última sentencia y pide al SO
Su eliminación (exit
(exit):
):
 Devuelve la salida desde el hijo al padre (via wait
wait))
 Libera los recursos asignados
 El padre puede abortar la ejecución del hijo
hijo::
 El hijo excede sus recursos
 La tarea asignada al hijo ya no se necesita
 Cuando el padre termina
 Algunos SSOO no permiten continuar al hijo
cuando el padre ha terminado
 Todos los hijos terminan en cascada
11
15/12/2009
Realción padre
padre--hijo en procesos
padre
Wait()
Fork()
hijo
Exec()
reanuda
Exit()
Estados de los procesos I
Cuando un proceso se ejecuta, cambia su estado:
 Ejecución
Ejecución:: Se ejecutan las instruciones del código del proceso
 Bloqueado
Bloqueado:: El proceso espera la ocurrencia de un evento
 Listo
Listo:: El proceso espera que se le asigne tiempo de CPU para
ejecutarse
Zombie: El proceso ha terminado su ejecución pero aún tiene
una entrada en la tabla de procesos (UNIX)
12
15/12/2009
Estados de los procesos II
Diagrama de estados de los procesos:
termina
Zombie
se interrumpe
Ejecución
Listo
Termina la E/S
o elevento
se planifica
Espera E/S
o un evento
Bloqueado
Cambio de contexto I
13
15/12/2009
Cambio de contexto II
Se produce por una interrupción.
Cambio de contexto es el conjunto de dos operaciones:
Se p
pasa a ejecutar
j
la rutina de tratamiento de interrupción
p
Se 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)
Restituye
R tit
ell registro
i t de
d estado
t d (bit d
de nivel
i ld
de ejecución)
j
ió )
Restituye el contador de programa (para el nuevo proceso).
El tiempo de cambio de contexto supone una sobrecarga;
sobrecarga; el sistema no
realiza trabajo útil durante este tiempo
 El tiempo de cambio de contexto depende del soporte hardware
Cambio de contexto III
Estado
Registros
especiales
Registros
generales
PC
SP
Tabla de procesos
BCP Proceso A
Estado
(registros)
BCP Proceso B
Estado
(registros)
BCP Proceso N
Estado
(registros)
Información de
identificación
Información de
identificación
Información de
identificación
Información de
Control
Información de
Control
Información de
Control
Estado
14
15/12/2009
Planificación de procesos I
Los procesos migran entre varias colas:
Cola
C l trabajos
t b j (job):
(j b) soporta
t todos
t d los
l procesos del
d l
sistema
 Cola Listos (ready)
ready):: soporta todos los procesos que
residen en memoria
memoria,, preparados para ser ejecutados
 Colas Bloqueados
Bloqueados:: soportan los procesos que esperan
por un dispositivo
p
p
de E/S
Planificación de procesos II:
Colas de listos y bloqueados
15
15/12/2009
Planificación de procesos III
Llamadas al sistema I
pid = fork
fork()
()
Crea un proceso idéntico al padre
int execl(const char *path, const char *arg, ...)
int execlp(const char *file,
*file const char *arg,
*arg ...))
int execvp(const char *file, char *const argv[])
Reemplaza la imagen del proceso ((código+entorno
código+entorno))
exit(status)
exit
(status)
Termina la ejecución del proceso y devuelve el estado
pid = waitpid
waitpid((pid,
pid, &
&statloc
statloc,, options)
options)
E
Espera
la
l terminación
t
i
ió de
d un hijo
hij
pid_t getpid(
getpid(void)
void)
Devuelve el identificador del proceso.
pid_t getppid(
getppid(void)
void)
Devuelve el identificador del proceso padre.
16
15/12/2009
Llamadas al sistema. Fork
#include <sys
sys//types.h>
types.h>
pid = fork
fork((void
void))
Crea un proceso idéntico al padre
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. Fork
Mapa de
memoria
Imagen del
proceso A
Tabla de procesos
BCP
A
El proceso A hace un fork y crea
el proceso hijo B
Mapa de
memoria
Imagen del
proceso A
Imagen del
proceso B
Tabla de procesos
BCP
A
BCP
B
Nuevo PID
Nueva descripción de memoria
Distinto valor de retorno (0 en el hijo)
17
15/12/2009
Llamadas al sistema.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 (código+entorno
((código
código+entorno)
código entorno)
entorno)
Argumentos:
path, file: nombre del archivo ejecutable
arg: 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 abiertos
Las 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 sistema.Exec
Mapa de
memoria
I
Imagen
del proceso
Tabla de procesos
El proc eso h
hac e un exec
BCP
Mapa de
memoria
Tabla de procesos
BCP
Se borra la imagen de memoria
Se borra la desc ripción de la memoria y registros
Se c onserva el PID
Objeto
ejecutable
Biblioteca
sistema
Cargador
Mapa de
memoria
Imagen
del proceso
Tabla de procesos
BCP
Se c arga la nueva imagen
Se pone PC en direcc ión de arranque
Se c onservan los fd
18
15/12/2009
Llamadas al sistema. Exit y Wait
int exit(
exit(int status)
Argumentos:
– Código de retorno al proceso padre
Descripción:
– Finaliza la ejecución del proceso.
– Se cierran todos los descriptores de ficheros abiertos.
Se liberan todos los recursos del proceso
pid = waitpid
waitpid((pid,
pid, &
&statloc
statloc,, options)
options)
Espera 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. Exit y Wait I
El padre muere: INIT acepta los hijos
Init
Init
Init
Proceso A
fork()
Proceso A
Proceso A
exit()
Proceso B
Proceso B
Init
wait()
Init
wait()
Proceso B
Proceso B
exit()
19
15/12/2009
Llamadas al sistema. Exit y Wait II
Zombie: el hijo muere y el padre no hace wait
Init
Init
Init
Init
Init
Proceso A
fork()
Proceso A
Proceso A
Proceso A
Proceso A
wait()
Proceso B
Proceso B
exit()
Proceso B
zombie
Proceso B
zombie
Llamadas al sistema.Ejemplo
Código C para crear un proceso
int main()
{
pid t pid;
pid_t
pid = fork();
if (pid < 0) {
fprintf(stderr, "Fork ha fallado");
exit(-1);
}
else if (pid != 0) {
….
wait(NULL);
exit(0);
}
else {
execlp ("/bin/ls", "ls", NULL);
}
}
/* crea un proceso
/* error
/* Es el padre
/* Código del padre
/* Espera el fin del hijo
/* El padre termina
/* Es el hijo
/* Ejecutar código
20
15/12/2009
Threads
Concepto de thread
Modelos multithread
Diseño con threads
Threads en Linux
Threads en Java
Pthreads (POSIX threads)
Concepto de thread I
Proceso sencillo y multithread:
código
registros
datos
ficheros
ficheros
código
datos
pila
registros
registros
registros
registros
registros
pila
pila
pila
thread
thread
Proceso con un único thread
Proceso con varios threads
21
15/12/2009
Estados de los threads
• 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
– Temporizadores
– Señales y semáforos
– Contabilidad
Proceso
Bloqueado por comunicación
Bloqueado por acceso a disco
Activo
Procesos ligeros
Tipos de Threads
Threads-kernel (ULT):
Gestión the thread en el kernel
Conocidos y g
gestionados p
por el núcleo del sistema operativo.
p
Ej, 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
conozca
Ej Mach c-threads,
Ej,
c threads fibras de WindowsNT
Threads mixtos
Conocidos 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.
22
15/12/2009
Modelos de vinculación de Threads I
 Many
Many--to
to--One: varios threads de usuario soportados en un
thread del kernel
Solaris Green Threads
GNU Portable Threads
Threads de usuario
K
Thread del kernel
 One
One--to
to--One: cada thread de usuario está soportado en un
thread
th
d del
d l kernel
k
l
Windows NT/XP/2000
Linux
Threads de usuario
Solaris posteriores a v9
K
K
K
K
Threads del kernel
Modelos de vinculación de Threads II
 Many
Many--to
to--Many: varios threads de usuario soportados en varios
thread del kernel
Solaris v9
Threads de usuario
Windows NT
K
K
K
Thread del kernel
 Dos niveles
niveles:: similar a M:M pero cada thread de usuario se
puede enlazar con un thread del kernel
Solaris v8
Threads de usuario
K
K
K
K
Thread del kernel
23
15/12/2009
Paralelización utilizando threads
Procedimiento 1
P
Procedimiento 2
F P
Espera
en E/S
jecuc ó
F Ejecución
Espera
en E/S
serie
Procedimiento 1
P
F
Espera
en E/S
Ejecución
paralela
p
P
Procedimiento
di i t 2
P
F
Espera
en E/S
Procesamiento
Threads en el diseño de servidores
Núcleo
P t
Puerto
Núcleo
P t
Puerto
S o lic itu d e s
P t
Puerto
S o lic itu d e s
Núcleo
S o lic itu d e s
Trabajador
abajado
Distribuidor
24
15/12/2009
Diseño con threads
• Proceso con un solo thread
– No hay paralelismo
• Llamadas al sistema
bloqueantes
– Paralelismo gestionado por
el programador
• Llamadas al sistema no
bloqueantes
• Múltiples
p
p
procesos cooperando
p
– Permite paralelismo
gestionado por el SO
– No comparten variables
– Mayor sobrecarga de
ejecución
Linux Threads
• Proceso varios threads
– Paralelismo y variables
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
• Imaginar otra llamada al
mismo código
• Mutex
• Variables globales
Linux Threads
 Linux se refiere a los threads como “tareas
tareas”
” ((tasks
tasks))
 La creación de threads se realiza mediante la llamada al sistema
clone()
 clone() permite a la tarea hija compartir el espacio de direcciones
de la tarea padre ((proceso
proceso))
Java Threads
Java threads se pueden crear:
crear:
Extendiendo la claseThread
Implementando el interfaz Runnable
Los threads en Java los gestiona
gestiona::
La JVM: green threads
El SO: correspondencia 1 a 1.
25
15/12/2009
PThreads
 El API del standard POSIX (IEEE 1003.1c)
1003 1c) para
creación y sincronización de threads
 Este API especifíca el comportamiento de la
biblioteca de thread, la implementación será el
desarrollo de las especificaciones de esta biblioteca
 Es muy
y normal en SSOO tipo
p UNIX ((Solaris,, Linux,,
Mac OS X)
Servicios POSIX para threads
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,
pila prioridad,
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 llamada
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().
26
15/12/2009
Jerarquía de threads threads
Proceso
ligero A
p_create
p_create
p_create
No independ.
Proceso
ligero D
Proceso
ligero B
Proceso
ligero C
p_exit
p_join
p_exit
Programa de ejemplo I
#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_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);
}
27
15/12/2009
Programa 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ón
Planificación a medio y largo plazo
Planificación a corto plazo
FIFO ó FCFS
SJF, SRTF
Prioridades
Round
Round--robin
Tiempo real
Planificación de Pthreads
Planificación en POXIS
Planificación en Linux
Planificación en Windows
Windows--NT
Servicios POXIS para planificación
28
15/12/2009
Planificación de la CPU
• Planificación
– A largo plazo (añadir procesos a ejecutar)
– A medio plazo (añadir procesos a RAM desde disco)
– A corto
t plazo
l
((qué
é proceso titiene lla 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ódicamente
• Colas de procesos
– Por prioridad
– Por tipo
Planificación a medio y largo plazo
Nuevos de estados de los procesos:
 En espera (Bach): Espera entrar en el sistema
 Suspendido
Suspendido:: En espera de asignación de memoria
Suspendido y bloqueado
Suspendido y lista
29
15/12/2009
Estados de los procesos II
Diagrama de estados de los procesos:
En espera
Suspendido
y listo
se expulsa
a disco
se interrumpe
Suspendido
y
bloqueado
Zombie
Ejecución
Listo
se recupera
de disco
Termina la
E/S o el
evento
termina
se admite
se planifica
Espera E/S
o un evento
Termina la
E/S o el
evento
se expulsa
a disco
Bloqueado
Planificación a corto plazo
• Planificación a corto plazo: cuando un proceso:
1. Se bloquea
2 Pasa
2.
P
d
de ejecutando
j
t d a lilisto
t
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)
30
15/12/2009
Criterios de planificación
•
MÁXIMIZAR
– Utilización de la CPU – que sea máxima
– Productividad bach (throughput) – # de procesos que se procesan por
unidad de tiempo
p
•
MÍ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ía
el trabajo hasta que se obtiene una respuesta
•
CONSEGUIR
– Reparto equitativo del procesador
– Cumplimiento de plazos (tiempo real)
– Calidad de servicio (sistemas multimedia)
Algoritmos de planificación I
•
•
FIFO ó FCFS
– Organización en una lista ordenada por tiempo de llegada
SJF, SRTF
– Organización en lista ordenada por tiempo previsto de ejecución
• 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
Round--Robin
Round
– Organización en una lista circular con “quantos” de tiempo
– 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úmero
a leatorio
Tiempo real
– A plazo fijo: EDF (prioridades dinámicas)
– Periódicos: RMS (prioridades estáticas)
31
15/12/2009
FIFO ó First
First--Come, First
First--Served (FCFS) I
Procesos T. cómputo
P1
24
3
P2
P3
3
Suponiendo que los procesos llegan en el siguiente orden
P1 , P2 , P3
• El diagrama de Gantt es:
P1
P2
0
24
P3
27
30
• Tiempo de espera para: P1 = 0; P2 = 24; P3 = 27
• Tiempo medio de espera: (0 + 24 + 27)/3 = 17
FIFO ó First
First--Come, First
First--Served (FCFS) II
Suponiendo que los procesos llegan en el siguiente orden
P2 , P3 , P1
• El diagrama de Gantt es:
P2
0
•
•
•
•
P3
3
P1
6
30
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
32
15/12/2009
Shortest--Job
Shortest
Job--First (SJF) Scheduling I
• Asocia a cada proceso el tiempo previsto de ejecución. Selecciona
para ejecutar el proceso con menor tiempo.
• Dos esquemas:
– No expulsor (nonpreemptive) – una vez planificado sigue en la
CPU hasta que completa su ráfaga de CPU.
– Expulso
Expulsor (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 es óptimo – da el menor tirmpo de espera medio para un
conjunto de procesos.
• Problema
Problema:: se debe suministrar el siguiente tiempo de ráfaga
-> estimación teniendo en cuenta las anteriores
Ejemplo de SJF no expulsivo
Procesos
P1
P2
P3
P4
• SJF (no-expulsivo)
T. llegada
T. cómputo
0.0
20
2.0
4.0
5.0
7
4
1
4
P1
0
3
P3
7
P2
8
P4
12
16
• Tiempo medio de espera = (0 + 6 + 3 + 7)/4 = 4
33
15/12/2009
Ejemplo de SJF expulsivo
Procesos
T. llegada
T. cómputo
0.0
2.0
4.0
5.0
7
4
1
4
P1
P2
P3
P4
• SJF (expulsivo)
P1
0
P2
2
P3
4
P2
5
P4
7
P1
11
16
• Tiempo medio de espera = (9 + 1 + 0 +2)/4 = 3
Planificación basada en prioridades I
• Se asocia un número de prioridad (entero) a cada proceso
• La 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
prioridad).
i id d)
• Problema  Inanición (starvation) – el proceso de menor prioridad
puede no ejecutarse nunca
• Solución  Envejecimiento (aging) – a medida que pasa el tiempo,
el proceso aumenta su prioridad
34
15/12/2009
Planificación basada en prioridades II
• Establecimiento de prioridades:
• Interno
Interno:: uso de la memoria, bloqueos de E/S, duración
estimada de la siguiente ráfaga de CPU
Procesos
T. llegada
T. Ráfaga estimado
Prioridad
P1
P2
P3
P4
0.0
2.0
4.0
5.0
7
4
1
4
3
2
1
2
• Externo: coste, frecuencia, importancia,..
Procesos
P1
P2
P3
P4
T. llegada
0.0
2.0
4.0
5.0
Frecuencia
1
3
6
2
Prioridad
4
2
1
3
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 Listos
p
• 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
35
15/12/2009
Ejemplo de RR con Quantum = 20
Process
P1
P2
P3
P4
• El diagrama de es:
P1
0
P2
20
37
P3
Burst Time
53
17
68
24
P4
57
P1
77
P3
97 117
P4
P1
P3
P3
121 134 154 162
• Normalemente , la media de turnaround es mayor que en
SJF, pero mejor tiempo de respuesta
El quantum y la latencia de cambio de contexto
36
15/12/2009
El tiempo de Turnaround varía con el Quantum
Colas 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)
background). Se puede producir inanición
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
37
15/12/2009
Colas multilevel II
Colas multilevel con realimentación
• Tres colas:
– Q0 – RR con quantum de 8 milisegundos y FIFO
– Q1 – RR con quantum de 16 milisegundos y FIFO
– 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.
38
15/12/2009
Planificación en Tiempo real
• Tiempo real duro o crítico (Hard real-time) – las tareas se debe
complentar dentro de un plazo preestablecido (con unas garantías
de tiempo)
– RMA: Asignas las prioridades según la frecuencia (tareas
periódicas e independientes). Garantiza que cumplen el plazo
para una utilización del procesador < 70%
– EDF: Primero la tarea que antes cumpla en plazo (prioridades
dinámica). Más dificil de implementar que el anterior. La
utilización del procesador puede ser del 100%
• Tiempo real blando o no crítico (Soft real-time) – las tareas
críticas deben teber prioridades más altas que las que no lson de
tiempo real.
Planificación en Tiempo real. RMS I
Tarea
1
2
3
Cómputo
4
Plazo= T
Prioridad
10
1
4
15
2
10
35
3
1
2
3
tiempo
Tiempo de cómputo (C)
Fin de periodo (T = Periodo )
39
15/12/2009
Planificación en Tiempo real. RMS II
Ci
Utilización del procesador pora una tarea i
Utilization del procesador para n tareas
Ui =
Ti
1
U(n) = n(2n - 1)
Resultados:
• Si  Ui ≤ U(n) el conjunto de tareas es planificable.
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.
Planificación en Tiempo real. RMS III
Tarea
Cómputo
1
2
3
4
Plazo= T
Prioridad
10
1
4
15
2
10
35
3
U(3) = 3(21/3 – 1) = 0.779
U1 = 4 / 10 = 0.4
U2 = 4 / 15 = 0.267
0 267
U3 = 10 / 35 = 0.286
Utotal = 0.953
Resultados:
U1+2 = 0.667, planificanle.
Sin embargo, 0.779 < 0.953 < 1
Por lo que es inconcluso para 3.
Si las tareas cumplen el plazo en el primer
HIPERPERIODO (35 en este caso)
son planificables
40
15/12/2009
Planificación en Tiempo real. EDF
• Las prioridades se asignan de acuerdo a sus plazos:
El plazo más corto, la prioridad mayor;
El plazo más largo, la prioridad menor.
Planificación en 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)
41
15/12/2009
Planificación 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 quantum
• En
E ese momento,
t se reasigna
i
los
l quantum
t
para la
l é
é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ón Pthread
• 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);
42
15/12/2009
Planificación en Windows NT I
Reiniciado
Iniciado
Sit
Situar
en lla cola
l
de listos
Finalizado
Fin de bloqueo
Bloqueado
Ejecución
finalizada
Espera
terminada
Bloqueado
Pila del kernel
en swap
Pila del
kernel en memoria
Transición
Listo
Seleccionado Expulsado
para
ejecución
Expulsado
Ejecución
Cambio de contexto. Comienzo de ejecución
Reserva
Planificación en Windows NT II
Pt: Prioridades
relativas de
threads
Promoción dinámica:
+n si se desbloquea (hasta 15)
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
43
15/12/2009
Servicios POSIX para planificación I
#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ítulo 4: Gestión de procesos
Señales y excepciones
Temporizadores
Servidores y demonios
44
15/12/2009
Señ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 II
• Las señales son interrupciones al proceso
• Envío o generación
– Proceso
Proceso- Proceso (dentro del grupo) con el kill
– SO - Proceso
Señal
Proceso
Código
Función
tratamiento
45
15/12/2009
Señales III
 Una señal se puede generar para un proceso o para
un thread.
 Cada thread tiene una máscara de señales,
señales, que define
las señales bloqueadas
bloqueadas..
 La máscara se hereda del padre
 Señal no bloqueada:
bloqueada: se entrega
 Ignorar
 Terminar el proceso
 Ejecutar manejador
 Señal bloqueada:
bloqueada: queda pendiiente hasta que se
acepta con sigwait()
sigwait()
Tratamiento de señales I
 Opciones para tratar una señal
señal::
 Enviar la señal al thread al q
que la señal se refiere
 Enviar la señal a todos los threads del proceso
 Asignar un thread específico para recibir todas las
señales del proceso
 Cada señal se trata mediante un “manejador
“manejador””
1. La señal se genera por un evento particular
2. La señal se envía al proceso
3. La señal se trata
46
15/12/2009
Tratamiento de señales II
• Hay muchos tipos de señales, según su origen
• SIGILL instrucción ilegal
• 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 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. Ejemplo 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>
<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);
}
}
}
47
15/12/2009
Señales. Ejemplo 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>
<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;
}
Excepciones
• 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 Java
try {
Bloque donde puede producirse una excepción
}
catch {
Bloque que se ejecutará si se produce una
excepción
en el bloque anterior
}
48
15/12/2009
Temporizadores
• 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 servidor
• Es un proceso que:
– Está pendiente de recibir órdenes de un proceso “cliente”
– Estructura de bucle infinito
– Uso de puertos de comunicación PROCESOS
CLIENTES
PROCESO
SERVIDOR
RECURSO
• Servidor secuencial:
– El servidor mismo ejecuta las órdenes
• Servidor paralelo:
– Delega ejecución las órdenes a threads o procesos hijos
49
15/12/2009
Proceso servidor. Funcionamiento
a)
b)
c)
Servidor
Padre
Servidor
Padre
Servidor
Padre
Servidor
Hijo
Puerto A
Puerto A
Puerto A
Puerto B
Cliente A
Cliente A
Proceso servidor. Máquinas distribuidas
Procesos cliente y servidor en máquinas distintas
Puerto
Cliente
Servidor
ficheros
Servidor
impresión
Servidor
e_mail
SO
SO
SO
SO
RED
50
15/12/2009
Procesos demonios
• Es un proceso que ejecuta:
–
–
–
–
–
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 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 señales I
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 comportamiento
del sistema
51
15/12/2009
Servicios POSIX para señ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,
pthread_kill(pthread_t
thread int sig);
sig)
Aceptar una señal bloqueada:
int sigwait (const sigset_t *set, int *sig);
Servicios POSIX para señ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.
52
Descargar