Publicado el 8 de Mayo del 2019
881 visualizaciones desde el 8 de Mayo del 2019
1,2 MB
101 paginas
Creado hace 16a (30/09/2008)
2
hebras
• La abstracción proceso
• Hebras y procesos ligeros
• Operaciones sobre procesos
• Planificación
El argumento de la
El argumento de la
simplicidad
simplicidad
El mejor modo de resolver un problema
complejo es dividirlo en subproblemas más
pequeños.
En un SO, y otros programas complejos,
existen actividades que ocurren a la vez: 10
solicitudes de disco, 2 mensajes de red, 7
pulsaciones de teclas, 20 aplicaciones, …
Para programar tal sistema:
(a) un programa que lo gestiona todo.
(b) aislar cada actividad en un proceso.
SOI
2
El bucle del SO
El bucle del SO
Podríamos construir el SO como:
for (;;) {
if (aplicación())
if (MensajeRed())
if (TeclaPulsada)()
if (BlokeDiscoListo())
...
Ejecutar();
ObtenMensaje();
ObtenTecla();
ObtenBloque();
}
! La producción del bucle está limitada por
la función más lenta ¡ Esto NO es
aceptable en un SO real (imagina: entorno
de ventanas que no atiende al ratón
mientras dibuja una ventana).
SOI
3
¿Por qué usar procesos ?
¿Por qué usar procesos ?
Simplicidad - en un sistema existen muchas
operaciones independientes (gcc, lpr, edit,..)
que podemos envasar cada una en un
proceso, acotando así sobre lo que tenemos
que razonar.
Velocidad - si un proceso se bloquea (espe-
rando por disco, teclado, red,…) cambiamos
a otro, como si tuviésemos más de una CPU.
Seguridad - limitamos los efectos de un
error.
Usamos intercambiablemente los términos proceso (process),
tarea (task), y trabajo (job).
SOI
4
Simplicidad
Simplicidad
Aislando cada actividad en un proceso:
tratamos con un proceso cada vez, y
los procesos sólo tratan con el SO.
Interrupciones
editor
shell
www
SO
gcc
ls|ps
Interrupciones
editor
gcc
Ls | ps
www
shell
SOI
5
Velocidad
Velocidad
Los SOs actuales permiten la ejecución
simultánea de varios procesos
(seudoparalelismo):
A
B
C
Vista conceptual
Ejecución
Seudoparalela
Secuencial
A
B
C
A
B
C
Sin usar CPU
SOI
Tiempo
Tiempo
6
Seguridad
Seguridad
Vamos a hacer creer a los programas que
están solos en la máquina.
Cada proceso se ejecuta en SU propio
espacio de direcciones –> no puede
acceder directamente a espacios de
direcciones de otros procesos (lo veremos
en los Temas 4-5 ).
Su ejecución esta confinada a su espacio y
también sus errores.
Coste: compartir información se complica
SOI
7
En la vida real …
En la vida real …
SOI
8
Proceso = CPU virtual
Proceso = CPU virtual
Proceso = “programa en ejecución” = un
flujo secuencial de ejecución en su propio
espacio de direcciones.
Un proceso es un recurso virtual - una
abstracción que desacopla la CPU física del
recurso de computo presentado al
programa - creamos la ilusión de tener
más de una CPU.
SOI
9
Idea de implementación
Idea de implementación
Multiplexamos la CPU en el tiempo, hacemos
creer a cada proceso que es único en la máq.
Programa
memoria
memoria
+
Programa
CPU
CPU
Máquina_1
Máquina_2
SOI
Proceso 1
Programa
Estado Máq_1
Estado Máq_2
Programa
Programa
Proceso 2
CPU
10
¿Qué hay en un proceso?
¿Qué hay en un proceso?
Para representar un proceso debemos
recoger toda la información que nos de el
estado de ejecución de un programa:
el código y datos del programa.
una pila de ejecución.
el PC indicando la próxima instrucción.
los valores actuales del conjunto de
registros de la CPU.
un conjunto de recursos del sistema
(memoria, archivos abiertos, etc.).
SOI
11
Estado de un proceso
Estado de un proceso
Varios procesos pueden ejecutar incluso el
mismo programa (p.ej. un editor) pero cada
uno uno tiene su propia representación.
Cada proceso está en un estado de ejecución
que caracteriza lo que hace y determina las
acciones que se pueden sobre él.
Preparado - en espera de la CPU.
Ejecutándose - ejecutando instrucciones.
Bloqueado - esperando por un suceso.
Conforme un programa se ejecuta, pasa de
un estado a otro.
SOI
12
Diagrama de estados
Diagrama de estados
Nuevo
Admitido
Interrupción
Finalizado
Preparado
Ejecutándose
Fin de E/S
o suceso
Planificación
Bloqueado(s)
Espera por
E/S o suceso
Estado
Transición
13
SOI
Bloque de Control de
Bloque de Control de
Proceso
Proceso
Bloque de Control del Proceso (PCB) –
estructura de datos que representa al pro-
ceso; contiene su información asociada:
Identificador del proceso en el sistema.
Estado del proceso.
Copia de los registros de la CPU.
Información de planificación.
Información para la gestión de memoria.
Información del estado de las E/S.
Información de contabilidad. ...
SOI
14
PCB’s y estado hardware
PCB’s y estado hardware
Cuando un proceso esta ejecutándose, los
valores de su PC, puntero a pila, registros,
etc., es decir, su contexto, está cargado en
los registros de la CPU.
Cuando el SO detiene la ejecución de un
proceso, salva su contexto en su PCB.
La acción de conmutar la CPU de un
proceso a otro se denomina cambio de
contexto. Los sistemas de tiempo compartido realizan
de 10 a 100 cambios de contexto por segundo.
Un cambio de contexto suele tardar menos de 1 ms. Este
trabajo es puramente sobrecarga.
SOI
15
Contexto y modo dual
Contexto y modo dual
En máquinas con dos modos de
funcionamiento, separamos el contexto en
dos, uno por modo:
Contexto de usuario – contexto utilizado
cuando se ejecuta en modo usuario.
Contexto en modo kernel – cuando el
proceso se ejecuta en modo kernel.
Al pasar un proceso de modo usuario a
kernel, el SO salva el contexto de usuario y
utiliza el de modo kernel. Al retornar,
restauramos el contexto de usuario.
SOI
16
Cambio de contexto (i)
Cambio de contexto (i)
Cuando hacemos un cambio de contexto,
debemos:
Salvar el contexto previo.
Restaurar el contexto nuevo.
P. ej. switch_context(P1,P2) podría ser
una rutina en lo más profundo del SO que
salva el contexto de P1 en su PCB, y
restaura el nuevo contexto del PCB de P2.
¿En qué se diferencia ésta función de una
llamada a procedimiento normal? ...
SOI
17
Cambio de contexto (ii)
Cambio de contexto (ii)
P1
M. Usuario
M. Kernel
switch_context(P1,P2)
1º
(a)
4º
call
return
P2
3º
2º
switch_context(P2,P1)
SOI
switch_context()
… en detalle a continuación
18
Ilustración del cambio de
Ilustración del cambio de
contexto: supuestos
contexto: supuestos
Suponemos dos procesos:
P1 esta ejecutando la instrucción n que es una
llamada al sistema.
P2 se ejecutó anteriormente y ahora esta en el
estado preparado esperando su turno.
Convenio:
i
SOI
Código del SO
Estructura de datos
Flujo de control
Salvar estructuras de datos
Instrucción i-ésima a ejecutar
19
1º1º - P - P11 ejecuta
ejecuta nn
Memoria
Máquina en modo usuario
n
int c
Proceso 1
Llamada 1
c
Proceso 2
Llamada 2
switch_context(P1,P2)
PCB1
SOI
t,v,x,y
l,n,o,p
PCB2
CPU
n+1
i
j
k
j
. . .
PC
SP
s
o
r
t
O
s
o
r
t
s
g
e
r
i
Contexto kernel
Contexto usuario
Resto información
20
2º2º - Salva contexto usuario
- Salva contexto usuario
y ejecuta fonon kernel
kernel
y ejecuta f
Memoria
Proceso 1
Proceso 2
Llamada 1
Llamada 2
switch_context(P1,P2)
t,v,x,y
l,n,o,p
PCB2
PCB1
n
c
y
Salva
contexto
Usuario
ejecuta
código
kernel
SOI
Máquina en modo kernel
CPU
n+1
i
j
k
j
. . .
PC
SP
s
o
r
t
O
s
o
r
t
s
g
e
r
i
Contexto kernel
Contexto usuario
Resto información
21
3º3º - Parar proceso, invoca a
- Parar proceso, invoca a
cambio_contexto
cambio_contexto
Memoria
Proceso 1
Proceso 2
Llamada 1
Llamada 2
switch_context(P1,P2)
n+1,i,j,k
PCB1
t,v,x,y
l,n,o,p
PCB2
n
c
c+i
Invoca a
switch_
context
SOI
Máquina en modo kernel
CPU
c+i+1
m
r
s
j
. . .
PC
SP
s
o
r
t
O
s
o
r
t
s
g
e
r
i
Contexto kernel
Contexto usuario
Resto información
22
Cambio_contexto()
4º4º - - Cambio_contexto()
salva contexto kernel
salva contexto kernel
Memoria
Proceso 1
Proceso 2
Llamada 1
Llamada 2
switch_context(P1,P2)
n
c
c+i
s_c salva
contexto
kernel
SOI
n+1,i,j,k
PCB1
t,v,x,y
l,n,o,p
PCB2
Máquina en modo kernel
CPU
c+i+1
m
r
s
j
. . .
PC
SP
s
o
r
t
O
s
o
r
t
s
g
e
r
i
Contexto kernel
Contexto usuario
Resto información
23
¿Cómo estamos?
¿Cómo estamos?
Llegados a este punto P1 esta detenido,
“congelado” y nos disponemos a reanudar,
“descongelar”, a P2 (que previamente
habíamos parado en algún instante
anterior).
Es decir, estamos en el punto marcado
como (a) en la transparencia 18.
SOI
24
5º5º - Repone contexto
- Repone contexto
kernel de P22
kernel de P
Memoria
Proceso 1
Proceso 2
Llamada 1
Llamada 2
switch_context(P1,P2)
c+i,m,r,s
n+1,i,j,k
PCB1
t,v,x,y
l,n,o,p
PCB2
n
c
SOI
Máquina en modo kernel
CPU
t
v
x
y
j
t
. . .
PC
SP
s
o
r
t
O
s
o
r
t
s
g
e
r
i
Contexto kernel
Contexto usuario
Resto información
25
6º6º - El kernel termina la
- El kernel termina la
ffonon que inicio de P
que inicio de P22
Memoria
Proceso 1
Proceso 2
Llamada 1
Llamada 2
switch_context(P1,P2)
c+i,m,r,s
n+1,i,j,k
PCB1
l,n,o,p
PCB2
n
c
SOI
Máquina en modo kernel
CPU
t
v
x
y
j
t
. . .
PC
SP
s
o
r
t
O
s
o
r
t
s
g
e
r
i
Contexto kernel
Contexto usuario
Resto información
26
- Finalizada fonon, retorna
, retorna
7º7º - Finalizada f
a modo usuario
a modo usuario
Memoria
Proceso 1
Proceso 2
Llamada 1
Llamada 2
switch_context(P1,P2)
c+i,m,r,s
n+1,i,j,k
PCB1
l,n,o,p
PCB2
n
c
SOI
Máquina en modo kernel
El kernel repone
el contexto de usuario
CPU
l
n
o
p
j
t
. . .
PC
SP
s
o
r
t
O
s
o
r
t
s
g
e
r
i
Contexto kernel
Contexto usuario
Resto información
27
8º8º - reanudamos
- reanudamos
ejecución de P22
ejecución de P
Máquina en modo usuario
Proceso 1
CPU
Proceso 2
Llamada 1
Llamada 2
switch_context(P1,P2)
l
n
o
p
j
t
. . .
PC
SP
s
o
r
t
O
s
o
r
t
s
g
e
r
i
l
c
SOI
c+i,m,r,s
n+1,i,j,k
PCB1
PCB2
Contexto kernel
Contexto usuario
Resto información
28
Observaciones
Observaciones
Cuando conmutamos al
proceso P2, este tiene la
estructura de PCB
Comentarios de: Procesos y hebras (0)
No hay comentarios