0% encontró este documento útil (0 votos)
19 vistas20 páginas

3 1 Hilos

Descargar como pdf o txt
Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1/ 20

FACULTAD DE INGENIERÍA DE PRODUCCIÓN Y SERVICIOS

ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS

Periodo Académico: 2024


Semestre: 07

SISTEMAS
DISTRIBUIDOS
Docente. Mg. Maribel Molina Barriga

Capítulo III: PROCESOS


Tema 03: Hilos, virtualización, clientes, servidores, migración de código, migración en sistemas heterogéneos
CONTENIDO

01 02 03 04
Procesos Hilos Virtualización Migración
Procesos

● El concepto de proceso tiene su origen en el ámbito de los sistemas


operativos, donde generalmente se define como un programa en
ejecución.
● Desde la perspectiva del sistema operativo, la gestión y programación
de procesos son quizás los temas más importantes a tratar.
● Resulta que los subprocesos desempeñan un papel crucial a la hora de
obtener rendimiento en entornos multinúcleo y multiprocesador, pero
también ayudan a estructurar clientes y servidores.
● Un proceso suele definirse como un programa en ejecución, es decir,
un programa que se está ejecutando actualmente en uno de los
procesadores virtuales del sistema operativo.
MOTIVACIÓN

https://www.youtube.com/watch?v=j0RO-LX9rLA
HILOS
LOS HILOS (Thread)

• Un hilo es un flujo de control dentro de un programa.


• Creando varios hilos podremos realizar varias
tareas simultáneamente.
• Cada hilo tendrá sólo un contexto de ejecución
(contador de programa, pila de ejecución).
• Es decir, a diferencia de los procesos UNIX, no tienen
su propio espacio de memoria sino que acceden
todos al mismo espacio de memoria común, por lo
que será importante su sincronización cuando
tengamos varios hilos accediendo a los mismos
objetos.

6
LOS HILOS

• Los hilos se diferencian de los procesos en lo siguiente:


o Los hilos comparten los mismos recursos del programa que las contiene, en
tanto
o Los procesos tienen de manera separada su código, así como sus datos.
• Se pueden identificar hilos de dos tipos de flujo:
o Flujo único: En este caso, un programa utiliza únicamente un hilo para controlar
su ejecución.
o Flujo múltiple: Son aquellos programas que utilizan varios contextos de
ejecución para realizar su trabajo.

7
LOS MULTIHILOS
(Multithread)
• En un sistema multihilos, cada tarea se inicia y termina tan pronto como sea posible, esto facilita la
entrada de datos en sistemas en tiempo real, especialmente si estos datos provienen de diferentes
fuentes.
• En un programa multihilo se tiene el hilo principal del programa en ejecución, quien a su vez tiene
otros hilos o tareas paralelas en ejecución.
• Una de las razones de importancia para el estudio de la programación multihilos es que permite
acceder a los recursos de tiempo libre de la CPU mientras se realizan otras tareas.
• La figura ilustra esquemáticamente un programa de un hilo y un programa de dos hilos.

8
CREACIÓN DE HILOS
• En Java los hilos están encapsulados en la clase Thread. Para crear un hilo tenemos dos posibilidades:
o Heredar de Thread redefiniendo el método run().
o Crear una clase que implemente la interfaz Runnable que nos obliga a definir el método run().
• En ambos casos debemos definir un método run() que será el que contenga el código del hilo. Desde
dentro de este método podremos llamar a cualquier otro método de cualquier objeto, pero este
método run() será el método que se invoque cuando iniciemos la ejecución de un hilo. El hilo
terminará su ejecución cuando termine de ejecutarse este método run().

9
CREACIÓN DE HILOS
• Al llamar al método start del hilo, comenzará ejecutarse su método run. Crear un hilo heredando de Thread tiene
el problema de que al no haber herencia múltiple en Java, si heredamos de Thread no podremos heredar de
ninguna otra clase, y por lo tanto un hilo no podría heredar de ninguna otra clase.

• Este problema desaparece si utilizamos la interfaz Runnable para crear el hilo, ya que una clase puede
implementar varios interfaces. Definiremos la clase que contenga el hilo como se muestra a continuación:

1
0
CICLO DE VIDA Y PRIORIDADES

• Cuando invoquemos su método start() el hilo pasará a ser un hilo vivo, comenzándose a ejecutar su método run().
• Una vez haya salido de este método pasará a ser un hilo muerto.
• La única forma de parar un hilo es hacer que salga del método run() de forma natural. Podremos conseguir esto
haciendo que se cumpla una condición de salida de run() (lógicamente, la condición que se nos ocurra dependerá del
tipo de programa que estemos haciendo). Las funciones para parar, pausar y reanudar hilos están desaprobadas en las
versiones actuales de Java.
• Mientras el hilo esté vivo, podrá encontrarse en dos estados: Ejecutable y No ejecutable. El hilo pasará de Ejecutable a
No ejecutable en los siguientes casos:
• Cuando se encuentre dormido por haberse llamado al método sleep(), permanecerá No ejecutable hasta
haber transcurrido el número de milisegundos especificados.
• Cuando se encuentre bloqueado en una llamada al método wait() esperando que otro hilo lo desbloquee llamando a
notify() o notifyAll(). Veremos cómo utilizar estos métodos más adelante.
• Cuando se encuentre bloqueado en una petición de E/S, hasta que se complete la operación de E/S.
8
CICLO DE VIDA Y PRIORIDADES
PRIORIDADES DE LOS HILOS

• Además, una propiedad importante de los hilos será su prioridad. Mientras el hilo se encuentre vivo, el
scheduler de la máquina virtual Java le asignará o lo sacará de la CPU, coordinando así el uso de la CPU
por parte de todos los hilos activos basándose en su prioridad.
• Se puede forzar la salida de un hilo de la CPU llamando a su método yield(). También se sacará un hilo
de la CPU cuando un hilo de mayor prioridad se haga Ejecutable, o cuando el tiempo que se le haya
asignado expire.

• Para cambiar la prioridad de un hilo se utiliza el método setPriority(), al que deberemos proporcionar
un valor de prioridad entre MIN_PRIORITY y MAX_PRIORITY (las constantes de prioridad disponibles
dentro de la clase Thread, de Java…consultar).
Virtualización
● La virtualización permite que una aplicación, y su
entorno completo, incluido el sistema operativo, se
ejecute simultáneamente con otras aplicaciones, pero
de forma muy independiente del hardware y las
plataformas subyacentes , lo que conduce a un alto
grado de portabilidad y flexibilidad.
● Además, la virtualización ayuda a aislar fallas
causadas por errores o problemas de seguridad.

● Es un concepto importante para los sistemas


distribuidos
● Entorno de escritorio virtual, ejemplo: Google con la
introducción de Chrome OS, La idea básica es simple:
dejar que el navegador proporcione la interfaz de
escritorio local.
Migración de procesos
● En los sistemas distribuidos en los que la comunicación se limita a pasar datos. Sin embargo,
hay situaciones en las que pasar programas, a veces incluso mientras se ejecutan, simplifica
el diseño de un sistema distribuido.
● La migración de procesos o, más específicamente, la migración de código, puede ayudar a
lograr escalabilidad, pero también puede ayudar a configurar clientes y servidores de forma
dinámica.
● Mover un proceso en ejecución a una máquina diferente es una tarea costosa y compleja, y
más vale que haya una buena razón para hacerlo
● El motivo más importante para la migración de código siempre ha sido el rendimiento.
● El rendimiento general del sistema se puede mejorar si los procesos se trasladan de
máquinas con mucha carga a máquinas con carga ligera. La carga a menudo se expresa en
términos de longitud de la cola de la CPU o utilización de la CPU, pero también se utilizan
otros indicadores de rendimiento
● Los algoritmos de distribución de carga mediante los cuales se toman decisiones sobre la
asignación y redistribución de tareas con respecto a un conjunto de máquinas juegan un papel
importante en los sistemas con uso intensivo de computación
● Esta suposición es válida cuando se trata de sistemas homogéneos.
Migración de procesos

● Privacidad y seguridad Otra razón para trasladar el


código a donde están los datos tiene que ver con la
seguridad.
● Ejemplo el aprendizaje federado.
○ Surge de la necesidad de entrenar modelos de
aprendizaje automático, en particular todo tipo
de variantes de redes neuronales artificiales.
○ Para hacerlo simple, una red neuronal consiste
en una colección de nodos, organizados como
una serie de varias capas, y que tienen enlaces
ponderados entre nodos de capas sucesivas.
○ Cada nodo coloca datos en sus enlaces
salientes, que es el resultado de un cálculo
(relativamente simple) que obtiene de los
datos de sus enlaces entrantes.
Migración de procesos

Migración de Sistemas heterogéneos


● la migración de código en sistemas heterogéneos
● está siendo abordada por lenguajes de scripting y lenguajes altamente
portátiles como Java y Python.
● En la práctica actual indica que la mejor solución para manejar la
heterogeneidad es utilizar máquinas virtuales

https://www.ucursos.cl/ingenieria/2010/1/CC51S/1/material_docente
/bajar?id_material=271947
Actividad

• Observar el video:
https://youtu.be/j0RO-LX9rLA

• Responda la siguiente pregunta en el foro:

• Indique algún ejemplo aplicativo del uso de hilos


en los sistemas distribuidos.
GRACIAS
mmolinab@unsa.edu.pe

También podría gustarte