3. Flujos de ejecucion
Texto íntegro de la conversión. Las figuras y la disposición de las notas se pueden consultar en el PDF.
Página 25
3.Flujos de ejecución
Un hilo o flujo de ejecución (thread) es la mínima unidad de planificación del sistema operativo.
Un flujo forma parte de un proceso y disfruta de los recursos asignados al proceso. Un proceso tiene como mínimo un flujo, pero en los sistemas operativos actuales un proceso puede tener más de un flujo de ejecución.
Figura 7
Los diferentes hilos que forman parte de un mismo proceso comparten la mayoría de los recursos del proceso, como el espacio de memoria, los archivos abiertos, los permisos, el directorio de trabajo, el identificador de proceso, etc. En cambio, cada hilo tiene su propia pila de ejecución, puede estar ejecutando diferentes instrucciones (cada hilo tiene su propio registro contador de programa o PC), se ejecuta a una determinada velocidad y tiene su propio estado de ejecución. Por lo tanto, todos los flujos de un proceso disponen del mismo código y datos, pero en un momento determinado pueden estar ejecutando partes diferentes del código y/o trabajar con datos diferentes.
Puede haber varios motivos por los que sea interesante diseñar aplicaciones con distintos flujos (multithreaded):
- Programación más modular, encapsulando tareas.
- Explotar el paralelismo disponible en las máquinas con memoria compartida por más de un procesador (multicore o multiprocesador).
- Hacer Entrada/Salida paralela, dedicando flujos a realizar la E/S.
- Hacer servidores concurrentes, haciendo que cada flujo atienda una petición de servicio.
Página 26
Cabe señalar que si disponemos de varios procesadores, los flujos se podrán ejecutar simultáneamente. Si en cambio sólo disponemos de un procesador o, en general, tenemos menos procesadores que flujos, entonces hay que repartir el tiempo del procesador entre los diferentes flujos, multiplexando el uso del procesador en el tiempo.
Aunque los flujos comparten todos los recursos del proceso, es importante que haya alguna información propia de cada flujo para garantizar un funcionamiento correcto. Por ejemplo:
-
Podemos estar interesados en realizar una acción determinada sobre un flujo concreto.
-
Cada flujo puede estar ejecutando una parte del código diferente.
-
Aunque llamen a una misma rutina, cada uno necesitará guardar los parámetros y las variables locales en una zona de memoria diferente que haga las funciones de pila.
-
Cuando se produzcan cambios de contexto entre flujos, hay que garantizar que se conserva el estado del flujo para poder continuar con su ejecución posteriormente.
-
Hay que diferenciar las condiciones de error producidas por llamadas a sistema realizadas por diferentes flujos dentro de un mismo proceso.
-
Opcionalmente, es interesante controlar la planificación de los threads, por ejemplo priorizando un flujo sobre otros.
Por todo esto cada flujo tiene asociado:
-
Un identificador.
-
Un puntero a la siguiente instrucción que hay que ejecutar.
-
Un puntero a la cima de la pila.
-
El estado de los registros del procesador.
-
Puede haber información local en un flujo. Eso puede ser útil en determinadas circunstancias. Un ejemplo de ello es la definición de la variable errno cuando una llamada a sistema ha producido un error.
-
Puede haber información de planificación específica para cada flujo y usada por el planificador de flujos.
Página 27
Los flujos de un mismo proceso comparten la mayoría de los recursos. Por ello, el cambio de contexto entre flujos de un mismo proceso es menos costoso que el cambio de contexto entre flujos de procesos diferentes.
Los hilos de ejecución también son conocidos como procesos ligeros porque consumen menos recursos de sistema que los procesos.
Posibles utilidades de los flujos
- Aplicaciones gráficas: un flujo se encarga de la gestión de la interfaz gráfica de usuario mientras otro realiza las operaciones de cálculo.
- Aplicaciones cliente/servidor: el servidor crea múltiples flujos con el fin de dar servicio a múltiples clientes simultáneamente.
Ver fragmento extraído sin normalizar
## Página 25
<!-- source-page: 25 -->
GNUFDL • PID_00214802 25 La gestión de procesos
3.Flujos de ejecución
Un hilo o flujodeejecución (thread) es la mínima unidad de planifi-
cación del sistema operativo.
Un flujo forma parte de un proceso y disfruta de los recursos asignados
al proceso. Un proceso tiene como mínimo un flujo, pero en los siste-
mas operativos actuales un proceso puede tener más de un flujo de eje-
cución.
Figura 7
Los diferentes hilos que forman parte de un mismo proceso comparten la ma-
yoría de los recursos del proceso, como el espacio de memoria, los archivos
abiertos, los permisos, el directorio de trabajo, el identificador de proceso, etc.
En cambio, cada hilo tiene su propia pila de ejecución, puede estar ejecutando
diferentes instrucciones (cada hilo tiene su propio registro contador de pro-
grama o PC), se ejecuta a una determinada velocidad y tiene su propio estado
de ejecución. Por lo tanto, todos los flujos de un proceso disponen del mismo
código y datos, pero en un momento determinado pueden estar ejecutando
partes diferentes del código y/o trabajar con datos diferentes.
Puede haber varios motivos por los que sea interesante diseñar aplicaciones
con distintos flujos (multithreaded):
• Programación más modular, encapsulando tareas.
• Explotar el paralelismo disponible en las máquinas con memoria compar-
tida por más de un procesador (multicore o multiprocesador).
• Hacer Entrada/Salida paralela, dedicando flujos a realizar la E/S.
• Hacer servidores concurrentes, haciendo que cada flujo atienda una peti-
ción de servicio.
## Página 26
<!-- source-page: 26 -->
GNUFDL • PID_00214802 26 La gestión de procesos
Cabe señalar que si disponemos de varios procesadores, los flujos se podrán
ejecutar simultáneamente. Si en cambio sólo disponemos de un procesador o,
en general, tenemos menos procesadores que flujos, entonces hay que repartir
el tiempo del procesador entre los diferentes flujos, multiplexando el uso del
procesador en el tiempo.
Aunque los flujos comparten todos los recursos del proceso, es importante que
haya alguna información propia de cada flujo para garantizar un funciona-
miento correcto. Por ejemplo:
1) Podemos estar interesados en realizar una acción determinada sobre un
flujo concreto.
2) Cada flujo puede estar ejecutando una parte del código diferente.
3) Aunque llamen a una misma rutina, cada uno necesitará guardar los pará-
metros y las variables locales en una zona de memoria diferente que haga las
funciones de pila.
4) Cuando se produzcan cambios de contexto entre flujos, hay que garanti-
zar que se conserva el estado del flujo para poder continuar con su ejecución
posteriormente.
5) Hay que diferenciar las condiciones de error producidas por llamadas a sis-
tema realizadas por diferentes flujos dentro de un mismo proceso.
6) Opcionalmente, es interesante controlar la planificación de los threads, por
ejemplo priorizando un flujo sobre otros.
Por todo esto cada flujo tiene asociado:
1) Un identificador.
2) Un puntero a la siguiente instrucción que hay que ejecutar.
3) Un puntero a la cima de la pila.
4) El estado de los registros del procesador.
5) Puede haber información local en un flujo. Eso puede ser útil en determi-
nadas circunstancias. Un ejemplo de ello es la definición de la variable errno
cuando una llamada a sistema ha producido un error.
6) Puede haber información de planificación específica para cada flujo y usada
por el planificador de flujos.
## Página 27
<!-- source-page: 27 -->
GNUFDL • PID_00214802 27 La gestión de procesos
Los flujos de un mismo proceso comparten la mayoría de los recursos. Por ello,
el cambio de contexto entre flujos de un mismo proceso es menos costoso que
el cambio de contexto entre flujos de procesos diferentes.
Los hilos de ejecución también son conocidos como procesosligeros porque
consumen menos recursos de sistema que los procesos.
Posibles utilidades de los flujos
• Aplicaciones gráficas: un flujo se encarga de la gestión de la interfaz gráfica de usuario
mientras otro realiza las operaciones de cálculo.
• Aplicaciones cliente/servidor: el servidor crea múltiples flujos con el fin de dar servi-
cio a múltiples clientes simultáneamente.