Title: Sistemas Operativos I
1S.O.I Temario Curso 04/05
- Horas
- INTRODUCCIÓN 4
- PROCESOS Y THREADS 8
- GESTIÓN DE MEMORIA 8
- ENTRADA/SALIDA 4
- GESTIÓN DE FICHEROS 5
2Tema 2. Procesos y Threads
- Introducción
- Procesos
- Visión abstracta
- Esbozo de implementación
- Threads (Procesos ligeros)
- Comunicación entre procesos
- Condición de carrera
- Exclusión mutua y región crÃtica
- Implementación de la exclusión mutua
- Paso de mensajes
- Planificación de procesos
- Criterios
- PolÃticas
3INTRODUCCIÓN
Interesa tener máquinas que ejecuten varios
procesos al mismo tiempo
Aprovechar tiempos muertos E/S Soluciones
elegantes concurrentes Más rapidez con más de una
CPU
pseudoparalelismo
Con multiprocesadores también interesa
multiplexar las CPUs
4PROCESOS (Visión abstracta Recordar sus llamadas)
Dos relaciones tÃpicas entre proceso Padre y
proceso Hijo
fork exec?
fork?
- El código ya está en memoria
Parecido a Threads
5PROCESOS (Visión abstracta Recordar sus llamadas)
Proceso de arranque y grupos de procesos
init
IBERIAgt
6Esbozo de implementación
P3
P4
P1.read(disco, )?
P2.sleep(5 )?
P3 mucha CPU?
P1 fin E/S?
P4 read(cinta, )
P3 termina?
Estados de un proceso?
7Diagrama de transición de estados de un Proceso
F.R.
wait
F.R.
sleep
wait
sleep
F.R.
8Esbozo de implementación en términos más
informáticos
9Esbozo de implementación ( Cuántos procesos? )
Procesos ilimitado o un máximo predeterminado?
maxProcesos constant100
Reservado
type idProceso is NATURAL range 0..maxProcesos
Correcto?
ejecutandose idProceso
10Esbozo de implementación ( Cómo dar los PIDs? )
type descriptorProceso is record pid
idProceso --------------- end record
Problemas?
- 99 procesos en el sistema
- Hago ps y veo un proceso mÃo (57)
- Me dispongo a kill 9 57
- Mi proceso termina antes del kill y se crea otro
proceso con el código 57
Mato a otro proceso !
11Esbozo de implementación ( Estados y su gestión?
)
type unEstado is (ejecutandose,
preparado, espLapso, espFinHijo, zoombie)
CPU queda libre. A qué Pi se la doy?
- Recorro procesos buscando uno que esté preparado
Lento e injusto
- Si decido elegir al Pi que lleva más tiempo
preparado, lo mejor cola FIFO
12Esbozo de implementación ( Procesos bloqueados? )
espLapso gt Muy parecido a preparados, sólo que
es necesario indicar cuándo despertarles o
cuánto falta para despertarles, ...
- El campo sig me sigue sirviendo para encadenar
- Otras formas de implementarlo
13Esbozo de implementación ( Procesos bloqueados? )
espFinHijo gt El fin de un hijo sólo puede estar
esperándolo su Padre. Puede no ser necesaria
una cola.
type descriptorProceso is record pid
NATURAL padre idProceso estado
unEstado sig idProceso lapso NATURAL
end record
- El Padre (P) hace wait (H)
-- Localizar H en procesos gt h if h.estado
zoombie then Liberar recursos del Hijo
y continuar al Padre else -- hijo
vivo p.estadoespFinHijo p.sigh liberar
CPU
If (p.estado espFinHijo) (p.sig h)
then liberar recursos Hijo y continuar
Padre else h.estado zoombie y liberar CPU
14Esbozo de implementación ( Concluyendo )
maxProcesos constant 100 type idProceso is
NATURAL range 0..maxProcesos type unEstado is
(ejecutandose, preparado, espLapso,
espFinHijo, zoombie) type descriptorProceso is
record pid NATURAL padre idProceso
estado unEstado sig idProceso lapso
NATURAL SP address memoria
---------- ficheros ----------
tiempos ---------- end record
type unaCola is record primero idProceso
0 ultimo idProceso 0 end
record procesos array 1..maxProcesos
of descriptorProceso ejecutandose
idProceso preparados, espLapso unaCola
15Esbozo de implementación ( Otro ejemplo )
- Campos en una entrada a la tabla de procesos
16Esbozo de implementación ( El Cambio de Contexto )
Causas?
Supongamos como causa Fin de Rodaja
No hay procesos preparados?
(1) Reconocimiento de la interrupción
(3) 1 Recorrer dormitorio 2 Elegir siguiente
proceso
(2) Salvar reg (Pi) y conmutar de pila
(4) Recuperar reg (Pj) y cederle control
17Esbozo de implementación ( El Cambio de Contexto )
---------- divu d5,d0 ----------
------- ------- ------- ------- -------
------- ------- ------- ------- -------
---------- ---------- sleep(10) ---------- -------
--- exit(0)
------- ------- ------- ------- ------- ------- --
----- ------- ------- ------- ------- -------
18Threads ( Visión abstracta )
Modelo de procesos más común ? Espacios de
direcciones disjuntos
- Facilita protección Pi?Pj, pero
- Creación laboriosa
- Cambio de contexto pesado
- (procesador entorno) TLBs, cachés, ...
- Comunicación vÃa mensajes
- más seguro pero más lento
Y si los procesos son cooperantes?
- Objetivo común
- Colaboración vs agresión
- Protección más laxa
- Pueden desear mantener datos comunes con los
menores costes de tiempo
19Threads ( Visión abstracta )
Procesos Ligeros ? Espacios de direcciones no
disjuntos
Servidor de localización de utilidades
Muy eficaz con multiprocesadores !
- Soportados de dos formas
- En el espacio del S.O.
- En el espacio del Usuario
respuesta
Biblioteca
20Threads ( Linux )
int __clone (int (fn) (void arg), void
child_stack, int flags, void arg)
int pthread_create (pthread_t thread,
atributos, funcion, argumentos) pthread_t
pthread_self (void) int pthread_exit (void
estado) int pthread_join (pthread_t thread, void
estado) ........................................
........... ......................................
.............
fork threads ?
21Threads ( Ejemplo de uso )
include ltpthread.hgt include ltstdio.hgt int main
(int argc, char argv) pthread_t tA, tB
int datoA0 datoB0
pthread_create(tA, NULL, A, NULL)
pthread_create(tB, NULL, B, NULL)
pthread_join (tA, NULL) pthread_join (tB,
NULL) exit (0)
void B (void basura) datoB 2000
sleep (5) printf (datoAd\n, datoA)
pthread_exit (NULL)
void A (void basura) datoA 1000
sleep (5) printf (datoBd\n, datoB)
pthread_exit (NULL)
22Threads ( En el espacio de usuario )
pthread_create pthread_join pthread_exit
pthread_self
23Threads ( En el espacio del S.O. )
24Comunicació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 A antes que B
Tortilla de patatas Batir Pelar Pelar Huevos Ceb
ollas Patatas
Mezclar, Añadir Sal y Freir
Comunicación ? Paso de información entre
tareas SÃncrona o AsÃncrona
Filtros Unix who wc sed -e s/ //g
cut -d -f2
25Condiciones de Carrera
- La falta de sincronismo entre procesos
cooperantes da problemas - Canal de Panamá ? Barco encallado
- Tortilla de Patatas ? No hay quien se la coma
- Uso de datos / recursos comunes ? Inconsistencia
El empresario y los taxistas
26Condiciones de Carrera (Modelización en Pascal-FC)
program taxistas const numTaxistas 2 var
cuenta integer process type taxista (t
integer) var taxista1, taxista2
taxista begin cuenta 0 cobegin
taxista1(1) taxista2(2) coend writeln
(Total recaudacion , cuenta 7) end.
Ingreso de Taxista 1 27439 Ingreso de Taxista 2
27092 Total recaudacion 47055
27Condiciones de Carrera (Modelización en Pascal-FC)
process type taxista (t integer) (
constantes y variables ) begin recaudacion
0 mio 0 repeat for i1 to random
(maxEspera) do null importe random
(maxImporte) mio mio (importe div
ratioTaxista) cuenta cuenta importe
(importe div ratioTaxista)
recaudacion recaudacion importe until mio
gt sueldoDia writeln (Ingreso de Taxista,
t2, , recaudacion mio) end
28Condiciones de Carrera (El problema)
3 cuenta cuenta importe
problema?
3.1, 3.2
3.3, 3.4
3.1, 3.2
3.3, 3.4
29Exclusión mutua y Región crÃtica (La solución)
Los Pi indicarán cuándo EntranEnRC y cuándo
SalenDeRC
30Exclusión mutua y Región crÃtica (La solución)
EntrarEnRC cuenta cuenta importe
(importe div ratioTaxista) SalirDeRC
- REQUISITOS
- En una misma Región CrÃtica no más de un proceso
- Sin supuestos µP, Pi, velocidades relativas,
..... - Ningún Pi fuera de su Región CrÃtica bloqueará a
otros Pj - Decisión de quién entra a una Región CrÃtica en
un tiempo finito
31Implementación de la Exclusión Mutua
- Mecanismos
- Inhibición de interrupciones Semáforos
- Cerrojos (espera activa) Monitores
Inhibición de interrupciones
DirecciónGeneralDeTráfico repeat aguardarAgazapad
os y foto! InhibirInterrupciones numeroMultas
PermitirInterrupciones until cubiertoCupo
Taxistas InhibirInterrupciones cuenta cuenta
importe PermitirInterrupciones
- RC muy corta o pueden
- perderse interrupciones
- Exclusión total vs parcial
- Sólo válido en monoprocesador
- Peligroso en manos del usuario
- Útil dentro del propio S.O.
32Implementación de la Exclusión Mutua ( Cerrojos )
Una variable cerrojo por cada RC distinta que
indica Libre/Ocupada
No funciona !
33Implementación de la Exclusión Mutua ( El cerrojo
falla )
---------------- ---------------- entrar tst.b R
CT
bnz entrar move.b FF,RCT ---------------- ------
---------- ---------------- ----------------
---------------- ---------------- tst.b RCT bnz en
trar move.b FF,RCT ---------------- ------------
----
T1 también dentro RCT !!
34Implementación de la Exclusión Mutua ( Un cerrojo
seguro? )
Algoritmos Dekker, Dijkstra, Knuth, Peterson,
.......
Habrá problemas?
35Implementación de la Exclusión Mutua ( Un cerrojo
seguro! )
T2
T1
---------------- ---------------- tas.b RCT,FF
---------------- ---------------- tas.b RCT,FF b
nz entrar
bnz entrar ------------- ------------- -----------
-- -------------
T2 no puede entrar en RC mientras está T1
T1 en RCT
36Implementación de la Exclusión Mutua ( TAS
todavÃa falla! )
TAS ? PedirBus, Leer, PedirBus, Escribir
tas.b RCT,FF bnz entrar
tasl.b RCT,FF bnz entrar --------------------- -
--------------------
- TodavÃa dos problemas !
- Espera Activa
- Inversión de prioridades
Qué hacer ?
37Implementación de la Exclusión Mutua ( RC POSIX )
int pthread_mutex_lock (pthread_mutex_t
regionCritica) int pthread_mutex_unlock (pthread_
mutex_t regionCritica)
Posible implementación (sin espera activa)?
lock (RCT) inhibir interrupciones salvarEstado(
ejecutandose) if RCT.libre then RCT.libre
FALSE else meter (ejecutandose,
RCT) ejecutandose planificar()
recuperarEstado(ejecutandose) rte /Se
habilitan interrupciones/
type pthread_mutext_t is record libre
BOOLEAN cola unaCola end record
tasl
38Implementación de la Exclusión Mutua ( Semáforos )
Soportado por el S.O. garantiza exclusión mutua
sin espera activa
type Semaforos is private Inicializar (S
Semaforos Valor NATURAL) Bajar (S) -- Puede
bloquear al proceso (Si Valor 0) Subir (S) --
Puede desbloquear a UN proceso
Dar soporte a RC con semáforos es fácil
Inicializar (S_RCT, 1) Inicializar (S_RCGC, 1)
--------------- --------------- Bajar
(S_RCT) Bajar (S_RCGC) Cuenta Cuenta
Importe numeroMultas Subir (S_RCT) Subir
(S_RCGC) --------------- ---------------
39Implementación de la Exclusión Mutua ( Semáforos )
Precisando la semántica P.Bajar (S) ? IF
Valor(S) gt 0 THEN Valor (P.Bajar(S)) Valor(S)
1 ELSE P deja UCP y se bloquea esperando
P.Subir(S) P.Subir(S) ? IF Hay_algun_Pi_esperand
o_en (S) THEN Sacar a uno de ellos de
espera INDETERMINISMO Proceso
continuado Proceso que coge
UCP JUSTICIA ELSE Valor (P.Subir(S))
Valor (S) 1
40Implementación de la Exclusión Mutua ( Semáforos )
Esbozo de implementación
private type Semaforos is record valor
NATURAL cola unaCola end record
Hacen falta operaciones del estilo crear,
conectarse, destruir
procedure Inicializar (S out
Semaforos valor NATURAL) is begin S.valor
valor end Inicializar
41Implementació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
procedure Subir (S in out Semaforos) is
begin if S.cola.primero / 0 then encolar
(sacarProceso(S.cola), preparados) planificar
else S.valor S.valor 1 endif end Subir
42Implementación de la Exclusión Mutua ( Semáforos
POSIX )
int sem_init (sem_t S, int global, unsigned
int valor) int sem_wait (sem_t S) int
sem_post (sem_t S) int sem_destroy (sem_t S)
43Paso 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
----- ----- -----
----- ----- -----
11
----- ----- -----
11
Primera aproximación a la sintaxis
void enviar ( int Pdestino, void recibir ( int
Porigen, char msj ) char msj )
Puede fallar enviar/recibir?
44Paso de mensajes (muchas semánticas)
Bloqueo?
? msj ? Se le entrega a Pd y continua
Independencia del enlace de comunicación
?
- Bloquear
- Bloquear un máximo
- No Bloquear
7
45Paso de mensajes (Cuestiones de Diseño)
- Mensajes de longitud fija vs variable
- Capacidad de almacenamiento 0 .. ?
- EnvÃo por copia vs referencia
- Comunicación Directa vs Indirecta
46Paso de mensajes (Mensajes de longitud fija vs
variable)
El S.O. siempre envÃa el total
Simplifica la gestión de la capacidad de
almacenamiento del canal
El S.O. envÃa lo que diga la aplicación
47Paso de mensajes (Capacidad de almacenamiento
0..?)
Nunca Bloqueo!
Siempre Bloqueo!
Espera a Pd.recibir
Hueco ? Sin Bloqueo
No hay Hueco!
48Paso de mensajes (EnvÃo por copia vs referencia)
2 copias extra por cada envÃo/recepción !
- Complejidad pedir/liberar Buffer
- Y si no hay memoria común?
- Seguridad?
Leer ----- ----- -----
49Paso de mensajes (Comunicación Directa)
repeat repeat read (msjp.num) recibir ( Pc,
msjp) enviar (Ps, msjp) enviar
( Pc, recibir (Ps, msjr) respuesta(msjp)) im
primir (msjr.esPrimo) forever forever
50Paso de mensajes (Comunicación Directa
CaracterÃsticas)
- Necesidad de conocer los Pids de los procesos
- De Pi a Pj SÓLO un enlace en cada sentido
?
Todo resuelto?
P
P
P
P
P
P
P
H
- Un enlace asocia SÓLO a dos procesos
51Paso de mensajes (Un enlace asocia SÓLO a dos
procesos)
! Demasiadas pegas
52Paso de mensajes (Comunicación Directa Asimétrica)
Mejor admitir un recibir de cualquier proceso (no
uno concreto)
53Paso de mensajes (Comunicación Indirecta)
enviar (buzon, msj) recibir (buzon, msj)
De quién recib�
- Indeterminismo
- Justicia
- Integridad
Quién recibe?
54Paso de mensajes (Comunicación Indirecta)
Los enlaces pueden ser Unidireccionales o
Bidireccionales
Problemas ?
Y aquà ?
Lo normal Unidireccionales
Lo más general
- Varios Procesos
- Varios Buzones
- Todo dinámico
55Paso de mensajes (Comunicación Indirecta)
Excepción ? buzonInexistente, ...
Problemática Destrucción !
56Planificación de Procesos ( Criterios )
Planificar ? Elegir el siguiente Pi a ejecutar
Tiempo de Respuesta?
Criterios difÃcilmente alcanzables Favorecer Pi
? Perjudicar Pj
57Planificación de Procesos ( PCPU vs PE/S )
?
Cómo reconocerlos?
58Planificación de Procesos ( PolÃticas )
- Sistemas Batch
- No expulsores o expulsores con un quantum grande
- Reducen cambios de contexto y mejoran el
rendimiento - Por niveles,
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
59Planificación de Procesos ( Por niveles )
60Planificació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
Sencillo, pero ? Ausencia de polÃtica
Efecto convoy
61Planificación de Procesos ( Efecto convoy )
PUCP 10UCP 2E/S PE/S 1UCP 2 E/S
CPU al 100, pero tan sólo 30 unidades de tiempo
en E/S
CPU al 100 y además, 55 unidades de tiempo en E/S
62Planificación de Procesos ( El más corto primero
SJF )
3
4
5
8
Óptimo?
Aplicable SJF en planificación a largo y a corto
plazo?
63Planificación de Procesos ( Tiempo restante menor
SRTN )
- Variante expulsora del SJF.
- Cuando llega un trabajo nuevo, comparar su
petición de tiempo - con el tiempo que le queda al actual.
Seleccionar el menor. - Favorece a los trabajos nuevos
C(1) D(1) E(1)
A(2) B(4)
Tiempo medio de espera?
0 1 2 3 4 5 6 7
64Planificació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
Ley del 80
- PolÃtica FIFO de gestión de la cola de preparados
- Dos cuestiones de diseño
- Cómo elegir el tamaño de la rodaja?
- Cómo determinar el fin de rodaja?
65Planificación de Procesos (Round Robin)
- Cómo elegir el tamaño de la rodaja?
Sea Tcc 5 mseg (mucho)
- Rodaja pequeña 20 mseg gt Burocracia del 20
- Rodaja grande 500 mseg gt Burocracia del 1
P1
P2
P3
P1
Valores comunes 20..50 mseg
66Planificación de Procesos (Round Robin)
- Cómo determinar el fin de rodaja?
- Una interrupción periódica
- Dar 2 rodajas
- Resetear interrupción
F(int) en 68901 1µseg..20mseg
- Sumar ticks de una interrupción más frecuente
67Planificación de Procesos (Prioridades)
Unos más importantes que otros Cada Pi
prioridad explÃcita
UCP siempre ejecuta Pi más prioritario
UCP libre ? ejecutar Pi más prioritario
- Igualdad de prioridad ? FCFS, Round Robin
- Prioridades estáticas vs dinámicas
68Planificación de Procesos (Prioridades dinámicas)
- Evitar la inanición
- Disminuir la prioridad a medida que se usa la UCP
- Aumentar la prioridad si se está tiempo en
preparados
Favorece a los trabajos cortos ?
Favorece a los Pi ligados a E/S
- Cuáles son PE/S?
- Todo el tiempo será PE/S?
Ejemplo con rodajas de 100 mseg P1 usa 2 mseg
de UCP ? PE/S P2 usa 25 mseg de UCP ? PUCP
Rango de prioridades 0..N?
69Planificación de Procesos (Múltiples colas)
Mezcla de polÃticas Cada Pi asociado a una
cola de forma estática
- Dos elecciones
- Seleccionar cola
- Seleccionar proceso dentro de la cola
70Planificación de Procesos (Múltiples colas
realimentadas)
Mezcla de polÃticas Cada Pi asociado a una
cola de forma dinámica
- Menos Cambios de Contexto
- Favorecer selectivamente PE/S
2
4
8
16
Consumir rodajas Bajar de prioridad
Rodajas para Pi ? 1, 2, 4, 8, 16
71Planificación de Procesos ( Pi más corto
siguiente SPN )
?
Predicción
?i1 F (ti, ?i)
?i1 ? ti (1- ?) ?i y ? 1/2
10
8
6
4
72Planificación de Procesos ( Sistemas de Tiempo
Real )
Hard real time vs Soft real time Eventos
periódicos vs aperiódicos
- Dado
- m eventos periódicos
- evento i ocurre en el periodo Pi y precisa Ci
segundos - El sistema es planificable si
(Leer las secciones 7.4.2, 7.4.3 y 7.4.4)
73Planificación de Procesos ( PolÃtica vs Mecanismo
)
- Separar qué se puede hacer de cómo hacerlo
- Un proceso puede saber cuáles de sus threads
hijos son los más importantes y asignarles
prioridad - Algoritmo de planificación parametrizado
- Mecanismo en el kernel
- Los procesos de usuario ponen el valor de los
parámetros - Los procesos de usuario indican la polÃtica
pthread_attr_setschedpolicy() gt FIFO, RR, OTHERS
74Planificación de Threads ( Espacio de usuario )
Quantum por proceso de 50 mseg Cada thread
ejecuta 5 mseg de ráfaga de CPU
75Planificación de Threads ( Espacio de kernel )
FIN
Quantum por proceso de 50 mseg Cada thread
ejecuta 5 mseg de ráfaga de CPU