SO-mod 3-Procesos - 2010

Anuncio
Procesos
Módulo 3
Departamento de Informática
Facultad de Ingeniería
Universidad Nacional de la Patagonia “San Juan Bosco”
Procesos
Concepto de Proceso
Planificación de Proceso
Operaciones sobre Procesos
Comunicaciones Interprocesos (IPC)
Ejemplos de Sistemas de IPC
Comunicación en un Sistema Cliente-
Servidor
JRA © 2008
Sistemas Operativos – Procesos
Objetivos
Introducir la noción de proceso – un programa
en ejecución, el cual conforma la base de toda
computación
Describir varias características de procesos,
incluyendo planificación, creación y
terminación, y comunicación
Describir la comunicación en sistemas cliente-
servidor
Sistemas Operativos – Procesos
JRA © 2008
Concepto de Proceso
Un SO ejecuta una variedad de programas:
Sistema Batch – jobs
Sistemas de Tiempo Compartido – programas de usuario
o tareas
Los términos job, tarea y proceso se usan con similar sentido.
Proceso – un programa en ejecución; la ejecución de los
procesos debe progresar en forma secuencial.
Un proceso incluye:
contador de programa
stack
sección de datos
JRA © 2008
Sistemas Operativos – Procesos
Procesos en Memoria
datos
texto
Sistemas Operativos – Procesos
JRA © 2008
Estado de los Procesos
En tanto que un proceso ejecuta, cambia de
estado
nuevo: el proceso es creado.
JRA © 2008
corriendo: las instrucciones están siendo
ejecutadas.
espera: el proceso está esperando que
ocurra algún evento.
listo: el proceso está esperando ser
asignado a la CPU.
terminado: el proceso ha finalizado su
ejecución.
Sistemas Operativos – Procesos
Diagrama de Estados de un Proceso
despacho
corriendo
listos
nuevo
interrup
exit
evento e/s
terminado
evento
completado
espera
Sistemas Operativos – Procesos
JRA © 2008
Diagrama de Estados de un Proceso
Diagrama con cinco estados
despacho
corriendo
listos
nuevo
interrup
evento
comp
react
susp
exit
evento e/s
terminado
espera
susp
react
Susp-esp
Susp-listo
evento comp
JRA © 2008
Sistemas Operativos – Procesos
Bloque de Control de Procesos (PCB)
Es una estructura de dato que contiene información
asociada con cada proceso.
Estado de Proceso
Contador de Programa
Registros de CPU
Información de planificación de CPU
Información de administración de memoria
Información contable
Información de estado E/S
PCB: Process Control Block
JRA © 2008
Sistemas Operativos – Procesos
Bloque de Control de Proceso (PCB)
JRA © 2008
Sistemas Operativos – Procesos
Conmutación de CPU de Proceso a Proceso
P-0
SO
interrupción o llamada al sistema
P-1
ejecución
salva estado en PCB-0
..
.
ocioso
carga estado de PCB-1
ocioso
interrupción o llamada al sistema
salva estado en PCB-1
..
.
ejecución
JRA © 2008
ejecución
ocioso
carga estado de PCB-0
Sistemas Operativos – Procesos
Colas de Planificación de Procesos
Cola de Job (o tareas) – conjunto de todos los
procesos en el sistema.
Cola de listos – conjunto de todos los procesos
residentes en memoria principal, listos y esperando
para ejecutar.
Colas de dispositivos – conjunto de procesos
esperando por una E/S en un dispositivo de E/S.
Migración de procesos entre las colas.
JRA © 2008
Sistemas Operativos – Procesos
Colas de listos y de Dispositivos de E/S
cola de
listos
inicio
cinta mag
unidad 0
inicio
reg
reg
PCB-4
PCB-7
PCB-0
PCB-14
PCB-5
reg
reg
reg
final
final
disco
unidad 0
inicio
terminal
unidad 0
inicio
final
reg
final
PCB-6
Sistemas Operativos – Procesos
JRA © 2008
Representación de Planificación de Procesos
cola de listo
i/o
join
cpu
cola I/O
ejecuta
hijo
req I/O
Expira tajada de tiempo
fork hijo
cola espera
cola recurso
JRA © 2008
Sistemas Operativos – Procesos
requiere
recurso
Planificadores de Procesos
Planificador de largo término ( o planificador
de jobs ) – selecciona que procesos deberían
ser puestos en la cola de listos.
Planificador de corto término (o planificador de
CPU ) – selecciona que procesos deberían ser
proximamente ejecutados y colocados en la
CPU.
Sistemas Operativos – Procesos
JRA © 2008
Planificación de mediano término
fuera de
swapping
procesos parcialmente
ejecutados al swapping
fin
cola de listos
E/S
JRA © 2008
entrada en
swapping
CPU
cola de
espera E/S
Sistemas Operativos – Procesos
Planificadores de Procesos (Cont.)
El planificador de corto término es invocado muy
frecuentemente (milisegundos) ⇒ (debe ser rápido).
El planificador de largo término es invocado poco
frecuentemente (segundos, minutos) ⇒ (puede ser muy
lento).
El planificador de largo término controla el grado de
multiprogramación.
Los procesos pueden ser descriptos como:
Procesos limitados por E/S – pasa mas tiempo
haciendo E/S que computaciones, ráfagas (burst) de
CPU muy cortas.
Procesos limitados por CPU – pasa mas tiempo
haciendo computaciones que E/S, ráfagas (burst) de
CPU muy largas.
Sistemas Operativos – Procesos
JRA © 2008
Cambio de contexto
Cuando la CPU conmuta a otro proceso, el sistema
debe salvar el estado del viejo proceso y cargar el
estado para el nuevo proceso vía un cambio de
contexto.
El contexto de un proceso está representado en el
PCB
El tiempo que lleva el cambio de contexto es
sobrecarga; el sistema no hace trabajo útil mientras
está conmutando.
El tiempo depende del soporte de hardware .
JRA © 2008
Sistemas Operativos – Procesos
Creación de Procesos
Procesos padres crean procesos hijos, lo cuales, a su
vez crean otros procesos, formando un árbol de
procesos.
Recursos compartidos
Padres e hijos comparten todos los recursos.
Hijo comparte un subconjunto de los recursos del
padre.
Padre e hijo no comparten ningún recurso.
Ejecución
Padres e hijos ejecutan concurrentemente.
Padres esperan hasta que los hijos terminan.
Sistemas Operativos – Procesos
JRA © 2008
Creación de Procesos (Cont.)
Espacio de direcciones
El hijo replica el del padre.
El hijo tiene un programa cargado en él.
Ejemplos de UNIX
JRA © 2008
La llamada a sistema fork crea un nuevo proceso
La llamada a sistema execve es usada después del
fork para reemplazar el espacio de memoria del
proceso con un nuevo programa.
Sistemas Operativos – Procesos
Creación de Procesos
padre
hijo
JRA © 2008
Sistemas Operativos – Procesos
Fork de Procesos en “C”
int main()
{
pid_t pid;
/* fork another process */
pid = fork();
if (pid < 0) { /* error occurred */
fprintf(stderr, "Fork Failed");
exit(-1);
}
else if (pid == 0) { /* child process */
execlp("/bin/ls", "ls", NULL);
}
else { /* parent process */
/* parent will wait for the child to complete */
wait (NULL);
printf ("Child Complete");
exit(0);
}
}
JRA © 2008
Sistemas Operativos – Procesos
Se reactiva
Un Arbol de Procesos en Solaris
JRA © 2008
Sistemas Operativos – Procesos
Árbol de Procesos en UNIX
JRA © 2008
Sistemas Operativos – Procesos
Terminación de Procesos
El proceso ejecuta la última sentencia y espera que el SO
haga algo (exit).
Los datos de salida del hijo se pasan al padre (via wait).
Los recursos de los procesos son liberados por el SO.
El padre puede terminar la ejecución del proceso hijo
(abort).
El hijo ha excedido los recursos alocados.
La tarea asignada al hijo no es mas requerida.
El padre está terminando.
El SO no permite a los hijos continuar si su padre
termina.
Terminación en cascada.
Sistemas Operativos – Procesos
JRA © 2008
Comunicación Interprocesos (IPC)
Los procesos en un sistema pueden ser independientes o
cooperativo
Los procesos cooperativos pueden afectar o ser afectados por
otros procesos, cuando incluyen datos compartidos
Razones para procesos cooperativos
Información compartida
Speedup de computación
Modularidad
Conveniencia
Los procesos cooperativos necesitan comunicación
interprocesos (IPC)
Dos modelos de IPC
JRA © 2008
Memoria compartida
Pasaje de Mensajes
Sistemas Operativos – Procesos
Modelos de Comunicación
Pasaje de mensajes
Memoria compartida
proceso A
proceso A
memoria compartida
proceso B
proceso B
kernel
kernel
Sistemas Operativos – Procesos
JRA © 2008
Procesos Cooperativos
Un proceso independiente no puede afectar ni ser
afectado por la ejecución de otro proceso.
Un proceso cooperativo puede afectar o ser afectado
por la ejecución de otro proceso.
Ventajas de los procesos cooperativos
JRA © 2008
Información compartida
Aceleración de la computación
Modularidad
Conveniencia
Sistemas Operativos – Procesos
Problema del Productor-Consumidor
Paradigma procesos cooperativos, el proceso
productor produce información que es
consumida por un proceso consumidor .
buffer
ilimitado - no tiene límites prácticos en
el tamaño del buffer.
buffer
limitado supone que hay un tamaño fijo
de buffer.
Sistemas Operativos – Procesos
JRA © 2008
Buffer limitado – Solución con memoria compartida
Datos compartidos
var n;
type item = … ;
var buffer. array [0..n–1] of item;
in, out: 0..n–1;
Proceso Productor
repeat
…
produce un item en nextp
…
while in+1 mod n = out do no-op;
buffer [in] :=nextp;
in :=in+1 mod n;
until false;
JRA © 2008
Sistemas Operativos – Procesos
Buffer limitado – Solución con memoria compartida
Datos compartidos
#define BUFFER_SIZE 10
typedef struct {
...
} item;
item buffer[BUFFER_SIZE];
int in = 0;
int out = 0;
Sistemas Operativos – Procesos
JRA © 2008
Buffer limitado (cont.)
Proceso Consumidor
repeat
while in = out do no-op;
nextc := buffer [out];
out := out+1 mod n;
…
consume un item en nextc
…
until false;
La solución es correcta, pero solo puede llenar el buffer hasta n–1.
JRA © 2008
Sistemas Operativos – Procesos
32
Buffer limitado - Productor
while (true) {
/* Produce un item */
while (((in = (in + 1) % BUFFER SIZE count) == out)
; /* no hace nada -- no hay buffers libres */
buffer[in] = item;
in = (in + 1) % BUFFER SIZE;
}
Sistemas Operativos – Procesos
JRA © 2008
Buffer limitado – Consumidor
while (true) {
while (in == out)
; // do nothing --/* nada a consumir */
/* remueve un item del buffer*/
item = buffer[out];
out = (out + 1) % BUFFER SIZE;
return item;
}
JRA © 2008
Sistemas Operativos – Procesos
Comunicación entre Procesos (IPC)
Mecanismo de los procesos para comunicarse y sincronizar
sus acciones.
Sistema de mensajes – los procesos se comunican uno con
otro sin necesidad de variables compartidas.
Las facilidades de IPC provee dos operaciones:
send(mensaje) – mensaje de tamaño fijo o variable
receive(mensaje)
Si P and Q desean comunicarse, necesitan:
Establecer un vínculo de comunicación entre ellos
Intercambiar mensajes via send/receive
Implementación de un vínculo de comunicación
lógico (p.e., propiedades lógicas)
físicol (p.e., memoria compartida, canal hardware)
Sistemas Operativos – Procesos
JRA © 2008
Preguntas sobre la Implementación
¿Cómo se establecen los vínculos?
¿Puede un vínculo ser asociado con mas de dos
procesos?
¿Cuántos vínculos puede haber entre cada par de
procesos que se comunican?
¿Cuál es la capacidad de un vínculo?
¿El vinculo puede aceptar tamaño de mensajes fijo o
variable?
¿Es vínculo unidireccional o bi-direccional?
JRA © 2008
Sistemas Operativos – Procesos
Comunicación Directa
Los procesos deben nombrar al otro explicitamente:
send (P, mensaje) – envía un mensaje al proceso
P
receive(Q, mensaje) – recibe un mensaje del
proceso Q
Propiedades del vínculo de comunicación
Los vínculos son establecidos automaticamente.
Un vínculo está asociado con exactamente un par
de procesos que se comunican.
Entre cada par existe exactamente un vínculo.
El vínculo puede ser unidireccional, pero es
usualmente bi-direccional.
Sistemas Operativos – Procesos
JRA © 2008
Comunicación Indirecta
Los mensajes son dirigidos y recibidos desde mailboxes
(también referidas como ports).
Cada mailbox tiene una única identificación.
Los procesos pueden comunicarse solo si comparten un
mailbox.
Propiedades de un vínculo de comunicación
El vínculo se establece solo si los procesos comparten un
mailbox común.
Un vínculo puede ser asociado con muchos procesos.
Cada par de procesos puede compartir varios vínculos de
comunicación.
JRA © 2008
Los vínculos pueden ser unidireccionales o bi-direccionales.
Sistemas Operativos – Procesos
Comunicación Indirecta (cont.)
Operaciones
crear un nuevo mailbox
enviar y recibir mensajes por medio del mailbox
destruir un mailbox
Las primitivas son definidas como:
send(A, mensaje) – envía un mensaje al mailbox A
receive(A, mensaje) – recibe un mensaje del
mailbox A
Sistemas Operativos – Procesos
JRA © 2008
Comunicación Indirecta (cont.)
Mailbox compartida
P1, P2, y P3 comparten el mailbox A.
P1, envía; P2 y P3 reciben.
¿Quién toma el mensaje?
Solución
Permitir que un vínculo está asociado a lo sumo con dos
procesos.
Permitir que un solo proceso a la vez ejecute la operación
receive.
Permitir que el sistema seleccione arbitrariamente el
receptor. El enviador es notificado quien fue el receptor
del mensaje.
JRA © 2008
Sistemas Operativos – Procesos
Sincronización
El pasaje de mensajes puede ser bloqueante o no
bloqueante.
Bloqueante es considerado sincrónico
Send bloqueante mantiene al enviador bloqueado hasta
que el mensaje es recibido
Receive bloqueante mantiene al receptor bloqueado
hasta que el mensaje esté disponible
No bloqueante es considerado asincrónico
JRA © 2008
Send no bloqueante: el emisor envía el mensaje y
continúa
Receive no bloqueante : el receptor recibe un mensaje
válido o nulo
Sistemas Operativos – Procesos
Buffering
La cola de mensajes asociada al vínculo se puede
implementar de tres maneras.
1. Capacidad – 0 mensajes
El enviador debe esperar por el receptor (rendezvous).
2. Capacidad limitada – longitud finita de n mensajes
El enviador debe esperar si el vínculo está lleno.
3. Capacidad ilimitada – longitud infinita
El enviador nunca espera.
JRA © 2008
Sistemas Operativos – Procesos
Ejemplos de Sistemas IPC - POSIX
Memoria compartida POSIX
El proceso primero crea un segmento de memoria compartida
segment id = shmget(IPC PRIVATE, size, S IRUSR | S
IWUSR);
El proceso que quiere acceder a la memoria compartida debe
adjuntarse a ella
shared memory = (char *) shmat(id, NULL, 0);
Ahora el proceso puede escribir en la memoria compartida
sprintf(shared memory, "Writing to shared memory");
Finalizado el proceso debe liberar a su espacio de direcciones del la
memoria compartida
shmdt(shared memory);
Sistemas Operativos – Procesos
JRA © 2008
Ejemplos de Sistemas IPC - Mach
La comunicación en Mach está basada en mensajes
Las llamadas a sistema son mensajes
Desde su creación cada proceso tiene dos mailbox –
Kernel y Notify
Se necesitan solo tres llamadas a sistema para
transferir mensajes
msg_send(), msg_receive(), msg_rpc()
Las mailbox necesarias para la comunicación, son
creadas vía:
port_allocate()
JRA © 2008
Sistemas Operativos – Procesos
Ejemplos de Sistemas IPC – Windows XP
Centrado en el pasaje de mensajes vía facilidades de llamadas a
procedimientos locales (local procedure call (LPC) )
Sólo funciona entre procesos sobre el mismo sistema
Usa pórticos (como mailboxes) para establecer y mantener
canales de comunicación
La comunicación funciona de la siguiente manera:
El
cliente abre un handle del pórtico del subsistema de
conexión
El
cliente envía una petición de conexión
El
servidor crea dos pórticos privados de comunicación y
retorna el handle de uno de ellos al cliente
El
cliente y el servidor usan el correspondiente handle del
pórtico para enviar mensajes o retornos y para “escuchar” por
réplicas
JRA © 2008
Sistemas Operativos – Procesos
Llamadas a Procedimientos Locales en Windows XP
JRA © 2008
Sistemas Operativos – Procesos
Comunicación Cliente-Servidor
Sockets
Llamadas a Procedimientos Remotors
(RPC:Remote Procedure Calls)
Invocación a Métodos Remotos (RMI:Remote
Method Invocation (Java))
Sistemas Operativos – Procesos
JRA © 2008
Sockets
Un socket es definido como un punto final de
comunicación.
Concatenación de dirección IP y pórtico
El socket 161.25.19.8:1625 se refiere al pórtico 1625 en
el host 161.25.19.8
La comunicación se lleva a cabo entre un par de
sockets.
JRA © 2008
Sistemas Operativos – Procesos
Comunicación por Sockets
JRA © 2008
Sistemas Operativos – Procesos
Llamadas a Procedimientos Remotos
(RPC: Remote Procedure Calls)
Las RPCs produce una llamada a procedimiento entre
procesos sobre un sistema de redes.
Stubs – proxy del lado del cliente y del lado del
procedimiento del servidor.
El stub del lado del cliente localiza el servidor y hace
marshall de los parámetros.
El stub del lado del servidor recibe este mensaje,
desempaca los parámetros y ejecuta el procedimiento
en el servidor.
JRA © 2008
Sistemas Operativos – Procesos
Ejecución de RPC
JRA © 2008
Sistemas Operativos – Procesos
Invocación de Métodos Remotos (RMI)
RMI es un mecanismo de Java similar a los RPCs.
RMI permite a un programa Java, sobre una máquina,
invocar un método sobre un objeto remoto.
JRA © 2008
Sistemas Operativos – Procesos
Marshalling de Parámetros
JRA © 2008
Sistemas Operativos – Procesos
Fin
Módulo 3
Departamento de Informática
Facultad de Ingeniería
Universidad Nacional de la Patagonia “San Juan Bosco”
Descargar