Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Horas
1 INTRODUCCIÓN
5…
2 PROCESOS Y THREADS
3 GESTIÓN DE MEMORIA
Gestión de Procesos 4
PROCESOS (Visión abstracta: Recordar sus llamadas)
Proceso de arranque y grupos de procesos /etc/inittab
P1 id:rlevel:action:process
P2 P3 P5 /etc/rc5.d
P4 P7 login as:
?
init
Password: gdm
PC1> login
login /etc/rc.d/rc 5
P6 rlevel
0 Halt
1 Monousuario /etc/passwd
bash xinetd
2 MultiSinRed pcarazo:........:/bin/bash
Red
3 MultiConRed
5 X11
6 Reboot
grupo de procesos
? putty
Gestión de Procesos 5
PROCESOS (Visión abstracta: Recordar sus llamadas)
Gestión de Procesos 6
Esbozo de implementación
¿Cómo es el ciclo de vida de un proceso?
CPU
Creación
P3
P4
P1
P3 P2
P4
P3
P1
P2
P3 P3
P4
P1
P1
P2
P3 ? Terminación
Expulsión ¿P1.read(disco,
¿P2.sleep(5
¿P1
¿P4
¿P3 mucha
fin
read(cinta,
termina?
E/S?CPU?
)? ))?
P1 ¿Estados de un proceso?
• EnEjecución
Activo
• Preparado
P2 • EnEspera o Bloqueado
Ejecu.
P4
Prep. Espera
Gestión de Procesos 7
Diagrama de transición de estados de un Proceso
F.R.
¿exec?
forkp wait
¿forkh? ¿kill?
exit ¿forkp?
F.R. EnEjecución
sleep wait
wait
exit ¿forkp? sleep
forkh F.R.
Preparado ¿forkp? EnEspera
exit F.R.
Gestión de Procesos 8
Esbozo de implementación en términos más informáticos
El contexto de un proceso está distribuido en varias zonas
• Contexto de memoria (Código y Datos)
• MP/MSec
Bloque de control (descriptor) del Proceso MP
(S.O.)
• Contexto del procesador
Reg/MP/MSec
MP
Ejecutándose MSec
CPU
i la
p
S.O.
Bloqueado
Gestión de Procesos 9
Esbozo de implementación ( ¿Cuántos procesos? )
142
MINIX-2 32
MINIX-3 100 + 4
Gestión de Procesos 10
Esbozo de implementación ( ¿Cuántos procesos? )
¿#Procesos ilimitado o un máximo predeterminado?
maxProcesos: constant:=100; Reservado
proc
Gestión de Procesos 11
Esbozo de implementación ( ¿Cómo dar los PID’s? )
type descriptorProceso is ¿Problemas?
record
pid: idProceso; • 99 procesos en el sistema
0..100
--------------- • Hago ps y veo un proceso
end record; mío (50)
• Me dispongo a kill –9 50
Mejor espaciar más los códigos
• Mi proceso termina antes
pid: NATURAL; 0..65535... del kill y se crea otro
ejecutandose proceso con el código 50
Algo más complejo ¿ 584 o 50 ? ¡ Mato a otro proceso !
dar PID’s
fork exit
1 2 3 4 50 97 98 99 100
584
Gestión de Procesos 13
Esbozo de implementación ( ¿Estados y su gestión? )
type unEstado is (ejecutandose, preparado,
espLapso, espFinHijo, zombie);
Gestión de Procesos 14
Esbozo de implementación ( ¿Estados y su gestión? )
fork2Bis
Gestión de Procesos 15
Esbozo de implementación ( ¿Estados y su gestión? )
type unEstado is (ejecutandose, preparado,
espLapso, espFinHijo, zombie);
type descriptorProceso is CPU queda libre. ¿A qué Pi se la doy?
record
pid: NATURAL; • Recorro procesos buscando uno que
estado: unEstado; esté preparado Lento e injusto
sig: IdProceso; • Si decido elegir al Pi que lleva más
end record; tiempo preparado, lo mejor cola FIFO
type unaCola is record
primero: idProceso := 0; preparados: unaCola;
ultimo: idProceso:= 0; ejecutandose: idProceso;
end record;
1 2 3 4 50 97 98 99 100
Gestión de Procesos 16
Esbozo de implementación ( ¿Estados y su gestión? )
• Recorro procesos buscando uno que esté preparado Lento e injusto
P97 P57 P4
• ¿Marca de tiempo?
• time ¿ Algo mejor que antes ? ¿INANICIÓN?
• antigüedad contPasoAPreparados
1056 ¿Desborda?
Lento ++
0
Gestión de Procesos 17
Esbozo de implementación ( ¿Procesos bloqueados? )
espLapso => Muy parecido a preparados, sólo que es necesario indicar
cuándo despertarles o cuánto falta para despertarles, ...
¿ gcc –O3 ?
--
sleepHasta (DDMMAA hhmmss) sleepDurante (segundos)
localtime
time
?
segundos ? DDMMAA
hhmmss
mktime
Gestión de Procesos 18
Esbozo de implementación ( ¿Procesos bloqueados? )
espLapso => Muy parecido a preparados, sólo que es necesario indicar
cuándo despertarles o cuánto falta para despertarles, ...
type descriptorProceso is • El campo sig me sigue sirviendo
record para encadenar
pid: NATURAL; 80
estado: unEstado; • ¿Mejorable? P80.sleep(8)
83
sig: idProceso; P33.sleep(10)
lapso: NATURAL; 4 97 50
end record;
5 52 15
espLapso : unaCola;
1 2 3 4 50 97 98 99 100
5 25 10
Gestión de Procesos 19
Esbozo de implementación ( ¿Procesos bloqueados? )
espFinHijo => El fin de un hijo sólo puede estar esperándolo su Padre.
Puede no ser necesaria una cola.
24 50
P 1000 ¿Quién H 1040 • Buscar al H1040 h50
antes? • No existe
-------------
-------------
waitpid(1040)
-------------
-------------
-------------
• No es hijo mío ?
• Mi hijo está Zombie
------------- exit(33) • Mi hijo está vivo
------------- -------------
// Localizar H en procesos
h
24 50 if (h.estado != zombie) // vivo
1000 1040 p.estado = espFinHijo;
24 p.sig := h;
liberarCPU y dársela a otro Pi
padre 24 | 1000 else // Hijo ya hizo exit
Gestión de Procesos 20
Esbozo de implementación ( ¿Procesos bloqueados? )
espFinHijo => El fin de un hijo sólo puede estar esperándolo su Padre.
Puede no ser necesaria una cola.
24 50
P 1000 ¿Quién H 1040 // Localizar H en procesos
antes? h
------------- ------------- if (h.estado != zombie) // vivo
------------- ------------- p.estado = espFinHijo;
waitpid(1040)
-------------
-------------
?
-------------
exit(33)
-------------
p.sig := h;
liberarCPU y dársela a otro Pi
else // Hijo ya hizo exit
p = procesos[enEje].padre;
if ((p.estado = espFinHijo)
24 50 && (p.sig = h) ) // enEje
1000 1040 Transferir estado terminación
24
liberar recursos y descriptor
desbloquear Padre y darCPU
else // Padre no está waitpid
Gestión de Procesos 21
Esbozo de implementación ( ¿Procesos bloqueados? )
espFinHijo => El fin de un hijo sólo puede estar esperándolo su Padre.
Puede no ser necesaria una cola.
type descriptorProceso is • El Padre (P) hace wait (H):
record
-- Localizar H en procesos => h
pid: NATURAL;
if h.estado = zombie then
padre: idProceso;
Liberar descriptor del Hijo y
estado: unEstado;
continuar al Padre
sig: idProceso;
else -- hijo vivo
lapso: NATURAL;
p.estado:=espFinHijo; p.sig:=h;
end record;
liberar CPU;
• Un Hijo(H) termina exit:
If (p.estado = espFinHijo) & (p.sig = h) then
liberar recursos y descriptor Hijo y continuar Padre
else
h.estado := zombie; liberar recursos h y liberar CPU
Gestión de Procesos 22
Esbozo de implementación ( Concluyendo )
maxProcesos : constant := 100;
type idProceso is NATURAL range 0..maxProcesos;
type unEstado is (ejecutandose, preparado,
espLapso, espFinHijo, zombie);
type descriptorProceso is ¿ fork y exec ?
record
pid: NATURAL; type unaCola is
padre: idProceso; record
estado: unEstado; primero: idProceso := 0;
sig: idProceso; ultimo: idProceso := 0;
lapso: NATURAL; end record;
SP: address;
procesos : array [1..maxProcesos] of
memoria: ----------;
descriptorProceso;
ficheros: ----------;
ejecutandose: idProceso;
tiempos: ----------;
preparados, espLapso: unaCola;
end record;
Gestión de Procesos 23
Esbozo de implementación ( Concluyendo )
• fork y exec
forkh pid = 0
---------- • Buscar descriptor libre
fork () • Buscar memoria libre
---------- • Copiar y …
exec( … ) • Buscar PID y …
---------- • Meter en preparados
fork () • Asignar CPU
----------
exec( … )
---------- ¿ exec ?
----------
----------
?
----------
----------
Gestión de Procesos 24
Esbozo de implementación ( Otro ejemplo )
Gestión de Procesos 25
Esbozo de implementación ( El Cambio de Contexto )
• Llamada al Sistema
• Fin de Proceso Trap
Causas? Bien/Mal Mecanismo similar
Gestión de Procesos
Dispatcher 26
Esbozo de implementación ( El Cambio de Contexto )
Vector de
---------- Interrupciones
DIV 0 S.O.
divu d5,d0
---------- -------
-------
-------
-------
------- -------
INT 3 -------
-------
---------- -------
------- -------
---------- ------- -------
------- -------
sleep(10) TRAP #0 ------- -------
------- -------
---------- ------- -------
------- -------
---------- ------- -------
exit(0) -------
------- Cambio de
-------
------- contexto
-------
Se salva el SR y PC
Gestión de Procesos 27
Esbozo de implementación ( El Cambio de Contexto )
• Recuperar registros (Pj) y cederle control
SO SO SO
Pj Pj Pj
rte
Gestión de Procesos 28
Esbozo de implementación ( El Cambio de Contexto )
vmstat
Gestión de Procesos 29
Threads ( Visión abstracta )
Modelo de procesos más común Espacios de direcciones disjuntos
Pi Pj
Hijo
SIGUSR1
Gestión de Procesos 34
Threads ( Ejemplos de uso: despara2Threads.c )
int encontrada=0;
char laPasswordCifrada[LONG_CLAVE_CIFRADA+1];
35
Gestión de Procesos
Threads ( Ejemplos de uso: despara2Threads.c )
yo = (int) parametro;
if (yo == 0) strcpy (laPasswordCruda, "aaaaa\0");
else strcpy (laPasswordCruda, "naaaa\0");
buscar(yo, laPasswordCifrada, laPasswordCruda);
printf ("Termina esclavo %d\n",yo);
pthread_exit (NULL);
}
Gestión de Procesos 36
Threads ( Ejemplos de uso: despara2Threads.c )
datosCrypt.initialized = 0;
for (i=0; i<(NUM_COMBINACIONES/2); i++) {
if ((i%456976) == 0) printf("%s\n", laPassword);
if (strcmp(cifrada, crypt_r(laPassword, "aa",
&datosCrypt)) == 0) {
printf ("%d la password es: %s\n", yo, laPassword);
encontrada = 1;
break;
}
if (encontrada) break;
siguientePassword(laPassword);
}
}
Gestión de Procesos 37
Threads ( Ejemplos de uso: `despara2Threads.c )
E0 esesi ojosi
E1
Gestión de Procesos 38
Threads ( En el espacio de usuario )
• read, … ¡ Bloqueantes !
• Falta de página
• ¡Planificación expulsora!
pthread_create pthread_join
Gestión de Procesos
pthread_exit pthread_self 39
Threads ( En el espacio del S.O. )
Gestión de Procesos 40
Comunicación entre Procesos
Los procesos cooperantes necesitan mecanismos para sincronizarse y
comunicarse información de forma segura
Sincronización Ordenación temporal de la ejecución de
procesos
Canal de Panamá A antes queTortilla
B de patatas
Batir Pelar Pelar
Huevos Cebollas Patatas
Gestión de Procesos 42
Condiciones de Carrera (Modelización con threads)
int cuenta;
void *taxista(void *parametro) { ..... }
int main( int argc, char *argv[] ) {
int i, numEsclavos;
pthread_t pids[MAX_ESCLAVOS];
numEsclavos = atoi(argv[1]);
cuenta = 0;
// Crear esclavos y esperar a que terminen su trabajo
for (i=0; i<numEsclavos; i++)
pthread_create (&pids[i], NULL, taxista, (void *) i);
for (i=0; i<numEsclavos; i++)
pthread_join (pids[i], NULL);
printf ("Total recaudacion = %d\n", cuenta);
return (0);
}
Ingreso de Taxista 1 = 80729
Ingreso de Taxista 2 = 80618 + 161347
Total recaudacion = 161096
Gestión de Procesos 43
Condiciones de Carrera (Modelización con threads)
void *taxista (void *parametro) {
// Variables
recaudacion = 0; mio = 0; Hacer
do { Carrera
espera = random() % MAX_ESPERA;Buscar
for (i=1; i<espera; i++); Cliente
importe = random (maxImporte);
mio = mio + (importe / RATIO_TAXISTA);
cuenta = cuenta + importe –
(importe / RATIO_TAXISTA);
recaudacion = recaudacion + importe;
} while (mio < SUELDO_DIA);
printf (“Ingreso de Taxista %d = %d\n”,
yo, recaudacion – mio); Ingreso
pthread_exit (NULL);
}Gestión de Procesos 44
Condiciones de Carrera (Modelización con threads)
?
Fallos x 1.000
Threads pc1:4Cores pc9:8Cores
2 7 207
4 64 926
8 230 1.000
16 533 1.000
32 830 1.000
Gestión de Procesos 45
Condiciones de Carrera (El problema)
3: cuenta := cuenta + importe
RC Exclusión
Mutua
REQUISITOS
• En una misma Región Crítica no más de un proceso
Gestión de Procesos 48
Implementación de la Exclusión Mutua
Mecanismos: Hw Sw
• Inhibición de interrupciones • Semáforos S.O.
• Cerrojos (espera activa) • Monitores Lenguaje
Inhibición de interrupciones
Taxistas DirecciónGeneralDeTráfico
InhibirInterrupciones repeat
cuenta := cuenta + importe aguardarAgazapados y ¡foto!
PermitirInterrupciones InhibirInterrupciones
numeroMultas++
RC muy corta o pueden PermitirInterrupciones
perderse interrupciones until cubiertoCupo
Exclusión total vs parcial
Sólo válido en monoprocesador Peligroso en manos del usuario
Gestión de Procesos Útil dentro del propio S.O. 49
Implementación de la Exclusión Mutua ( Cerrojos )
Una variable “cerrojo” por cada RC distinta que indica Libre/Ocupada
T2
T1
entrar tas.b
F.R. ¿Habrá problemas?
RCT,#$FF
bnz ¡SI!
entrar No funciona en multiprocesador
push ya que TAS es ininterrumpible
importe dentro de un procesador, pero
push supone dos accesos al bus:
cuenta 1 Lectura del cerrojo
addp
Gestión de pop
Procesos
2 Modificación del 52
Implementación de la Exclusión Mutua ( Un cerrojo seguro! )
RCT RCT RCT RCT
00 FF FF FF
T2
T1
---------------- ----------------
bnz entrar tas.b RCT,#$FF
---------------- ----------------
------------- bnz entrar
tas.b RCT,#$FF tas.b RCT,#$FF
-------------
bnz entrar
-------------
T1.SR ------------- T2 no puede
Z T1 en RCT entrar en RC
mientras está T1
1
Gestión de Procesos 53
Implementación de la Exclusión Mutua ( TAS todavía falla! )
P1 P2
TAS PedirBus, Leer, PedirBus, Escribir
P1 T1 PB, L1, PB, E1
RCT ???
P2 T2 PB, L2, PB, E2
tas.b RCT,#$FF L1, E1, L2, E2 L2, E2, L1, E1 L1, L2, E1, E2
bnz entrar
T1 T2 T2 T1 T1 T2
( El Hw nos ayuda )
pthread_mutex_init T3.lock
T1.lock T2.lock
T3 T2
T1 T1
Gestión de Procesos 58
Implementación de la Exclusión Mutua ( Semáforos )
Esbozo de implementación:
S Pi Pj Pk
private type Semaforos is record 0
valor : NATURAL;
cola : unaCola;
end record; ¿Dónde están los semáforos?
Hacen falta operaciones del estilo: crear, conectarse, destruir
procedure Inicializar (S : out Semaforos;
valor : NATURAL) is
begin Exclusión mutua, Salvado estado Pi
S.valor := valor;
end Inicializar; Dispatcher
Gestión de Procesos 59
Implementación de la Exclusión Mutua ( Semáforos )
procedure Bajar (S: in out Semaforos) is begin
if S.valor = 0 then
encolar (ejecutandose, S.cola);
planificar;
else S.valor := S.valor - 1; endif;
end Bajar;
Gestión de Procesos 61
Paso de mensajes
Debilidades del Sincronismo + Memoria Común:
• Primitivas de bajo nivel (Inhibir Interrupciones, TASL, Semáforos)
• Inviable en sistemas débilmente acoplados sin memoria común
Gestión de Procesos
¿Puede fallar enviar/recibir? ? 62
Paso de mensajes ( Ejemplos de uso: cuentaParMsj.c )
• ¿Cómo podría ser cuentaPar.c si no hay memoria común?
+
1
8 3 2 2
esclavo1 esclavo2 esclavo3 esclavo4
620… 067… 625… 217…
Gestión de Procesos
• No Bloquear 0 65
Paso de mensajes (Cuestiones de Diseño)
Pi Pj Pi B Pj
Gestión de Procesos 66
Paso de mensajes (Mensajes de longitud fija vs variable)
• Longitud Fija
El S.O. La aplicación
siempre envía distingue
el total distintos msj.
Simplifica la gestión de la capacidad de almacenamiento del canal
• Longitud Variable
El S.O. envía 110 Mensaje de
lo que diga la 110 bytes
aplicación aj e
e n s
prop io m
En el
¿Cómo? En la llamada
enviar (Pdest, msj, 110)
Gestión de Procesos 67
Paso de mensajes (Mensajes de longitud fija vs variable)
MINIX 3
mess_5 m_m5;
40
69 mess_7 m_m7;
Práctica 4: Nueva llamada SO 84
mess_8 m_m8;
Proceso40.if (proceso_vivo(84)
} m_u;
68
# Llamada 69 } message;
Paso de mensajes (Capacidad de almacenamiento 0..)
Ilimitada () Nula (0)
Po Pd Po Pd
¡Nunca Bloqueo! ¡Siempre Bloqueo!
Po Pd Po Pd
Espera a Pd.recibir
Limitada (8)
Po Pd Po Pd
Cita “Rendez-vous”
Hueco Sin Bloqueo
Po Pd Po Pd
Escribir
-----
----- Po Pd
-----
env (Pd, msj) rec (Po, msj)
Leer
-----
1 2 -----
-----
¡ 2 copias extra por cada envío/recepción !
Envío por referencia
pedirBuffer
Escribir
----- Po Pd
-----
----- rec (Po, msj)
env (Pd, msj)
• Complejidad pedir/liberar Buffer Leer
-----
• ¿Y si no hay memoria común? -----
-----
• ¿Seguridad? liberarBuffer
Gestión de Procesos 70
Paso de mensajes (Comunicación Directa)
• A qué proceso se desea enviar
Indicación explícita
• De qué proceso se desea recibir
¿15.731 es primo?
Cliente Servidor
SÍ
Gestión de Procesos 71
Paso de mensajes (Comunicación Directa “Características”)
• Creación automática del enlace Po Pd
• Necesidad de conocer los Pid’s de los procesos Tipo de
• De Pi a Pj SÓLO un enlace en cada sentido mensaje
0
15.731
esPrimo?
Cliente Servidor Cliente ? Servidor
Hora?
1
¿Todo resuelto?
H P P P P P P P
Cliente Servidor
Gestión de Procesos 72
Paso de mensajes (Un enlace asocia SÓLO a dos procesos)
C1 C1
S S
C2 C2
Servidor
repeat
• Inanición
if recibir (PC1, &msjp , 1 ) then
enviar (PC1, respuesta (msjp)); • Espera Activa
Mitigada?
elsif recibir (PC2, &msjp , 1 ) then
enviar (PC2, respuesta (msjp)); • 50 Clientes????
forever
! Demasiadas pegas ¡
Gestión de Procesos 73
Paso de mensajes (Comunicación Directa Asimétrica)
Mejor admitir un recibir de cualquier proceso (no uno concreto)
• ¿Más de un servidor?
Servidor
repeat
S1
remitente := recibir (&msjp);
C
enviar (remitente, respuesta (msjp)); S2
forever
int enviar (char * msj)
Pid del proceso que recibió???
Gestión de Procesos 74
Paso de mensajes (Comunicación Indirecta)
enviar (buzon, msj) recibir (buzon, msj)
PC1 PS1
bPeti bPeti
PC PS
PCn PSm
NM 11
¿De quién
PS1 PC1 recibí?
bPeti bPeti
PC PS
PSm PCn
1M N1 PCn
• Indeterminismo PCn
¿Quién recibe? • Justicia
• Integridad int recibir (buzon, msj)
Gestión de Procesos 75
Paso de mensajes (Comunicación Indirecta)
Los enlaces pueden ser Unidireccionales o Bidireccionales
PC1
PC PS PS
PC2
¿ Problemas ? ¿ Y aquí ?
Lo normal Unidireccionales: Lo más general:
bPeti P1 B1
PS1 P4
PC P2
PS2 P5
bResp P3 B2
• Varios Procesos
¿ Código del Cliente y de • Varios Buzones
los Servidores ?
• Todo dinámico
Gestión de Procesos 76
Paso de mensajes (Comunicación Indirecta)
Un modelo: Capacidad
type Buzones is private;
<cr>
Criterios difícilmente alcanzables:
Tiempo inútil Tiempo
Gestión de Procesos útil Favorecer Pi Perjudicar Pj 78
Planificación de Procesos ( PCPU vs PE/S )
PCPU
PE/S
Planificación a Planificación a
corto plazo CPU medio plazo
Memoria
S.O.
CPU T2
T1, T2,
IT2 T3 Entrada al
T3, T4,
T5 sistema
T5, T6
Gestión de Procesos 80
Planificación de Procesos ( Políticas )
Sistemas Batch
• No expulsores o expulsores con un quantum grande
• Reducen cambios de contexto y mejoran el rendimiento
• Primero en llegar primero en servir FCFS,
Más corto el siguiente SJF,
Tiempo restante menor SRTN
Sistemas interactivos
• Expulsores: evita la monopolización de la CPU
• Round-Robin, prioridades, múltiples colas,
Más corto el siguiente SPN (envejecimiento)
Sistemas de tiempo real
• Monotónico en frecuencia
• Deadline más próximo el siguiente
Gestión de Procesos 81
Planificación de Procesos ( Primero en llegar FCFS )
Sólo cuando un proceso abandona voluntariamente la CPU, la
misma se asigna al proceso que lleva más tiempo preparado (FIFO)
D C B A D C B A D C B
A E/S
preparados
D, C, B, A CPU
Gestión de Procesos 83
Planificación de Procesos ( Efecto convoy )
PUCP = {10UCP + 2E/S}* PE/S = {1UCP + 2 E/S}*
PE/S
PUCP
CPU al 100%, pero tan sólo 30 unidades de tiempo en E/S
PE/S
??
PUCP
CPU al 100% y además, 55 unidades de tiempo en E/S
Gestión de Procesos 84
Planificación de Procesos ( El más corto primero SJF )
Objetivo: Minimizar Tesp/ret 4
8 3 8 5 4 3
5 CPU
¿Óptimo?
¿Dónde esperan los procesos?
1
¿Aplicable SJF en
preparados planificación a largo y a
CPU
corto plazo?
0 1 2 3 4
Gestión de Procesos 85
Planificación de Procesos ( Tiempo restante menor SRTN )
C(1)
A(2) D(1) ¿Tiempo medio de espera?
B(4) E(1)
0 1 2 3 4 5 6 7
Gestión de Procesos 86
Planificación de Procesos (Round Robin)
“Todos iguales”: Turno Rotatorio o Rodajas de Tiempo
• A cada Pi que pasa a ejecución se le dá una rodaja “cuanto” de tiempo
a La consume totalmente b La usa parcialmente y abandona
y se le expulsa voluntariamente la UCP
31,5 33,5
Gestión de Procesos 88
Planificación de Procesos (Round Robin)
2 ¿Cómo determinar el fin de rodaja?
¿Somos justos con P3?
a Una interrupción periódica • Dar 2 rodajas
• Resetear interrupción
P1 P2 P3 P4
sleep
¿viable? F(int) en 68901 [1µseg..20mseg]
1GHz
b Sumar ticks de una interrupción más frecuente 32bits
P1 P2 P3 P4
sleep
Gestión de Procesos 89
Planificación de Procesos (Prioridades) á x0
m N
“Unos más importantes que otros”: Cada Pi prioridad explícitam
no ín N 0
s or a expu
p ul lsora
e x
P7 P7
P3 P3
P1 P1
UCP siempre ejecuta Pi más prioritario UCP libre ejecutar Pi más prioritario
Prioridad ¿Expulsora?
3 FCFS
Quantum
2 4
Round
1 Robin 8
0 16
Dos elecciones:
1 Seleccionar cola
2 Seleccionar proceso dentro de la cola
Gestión de Procesos 92
Planificación de Procesos (Múltiples colas realimentadas)
“Mezcla de políticas”: Cada Pi asociado a una cola de forma dinámica
a Menos Cambios de Contexto b Favorecer selectivamente PE/S
Prioridad + Rodajas Variables Prioridad
4 1 3 Terminal
3 2 2 E/S
2 4
1 Rodaja corta
1 8
0 Rodaja larga
0 16
Consumir rodajas:
Rodajas para Pi 1, 2, 4, 8, 16 Bajar de prioridad
Gestión de Procesos 93
Planificación de Procesos (MINIX 3)
Preparados
MinPrioridad
Pi
sched
SI consumió su rodaja
Nueva rodaja
Prioridad++ ¡Menor!
RoundRobin Encolar_Al_Final
SINO
Encolar_Al_Principio
MaxPrioridad
/usr/src/kernel/proc.h proc[log].p_nextready
94
Planificación de Procesos ( Pi más corto siguiente SPN )
Gestión de Procesos
i 10 8 6 6 5 9 11 12
95
Planificación de Procesos ( Sistemas de Tiempo Real )
Dado
• m eventos periódicos
• evento i ocurre en el periodo Pi y precisa Ci segundos
El sistema es planificable si
m
Ci
i1 P 1
i
(Leer las secciones 7.4.2, 7.4.3 y 7.4.4)
Gestión de Procesos 96
Planificación de Procesos ( Política vs Mecanismo )
Gestión de Procesos 97
Planificación de Threads ( Espacio de usuario )
4MB L2 4MB L2
sched_setaffinity
Espacio
compartido
Tiempo
compartido
FIN
Gestión de Procesos 103