Está en la página 1de 7

SISTEMAS OPERATIVOS

HILOS

Un hilo es una unidad básica de utilización de CPU, la cual contiene un id de hilo, su propio program counter,
un conjunto de registros, y una pila; que se representa a nivel del sistema operativo con una estructura llamada
TCB (thread control block).

Los hilos comparten con otros hilos que pertenecen al mismo proceso la sección de código, la sección de datos,
entre otras cosas. Si un proceso tiene múltiples hilos, puede realizar más de una tarea a la vez (esto es real
cuando se posee más de un CPU).

¿Qué es un hilo de ejecución?

También llamado hebra, proceso ligero, flujo, subproceso o “thread”.

Programa en ejecución que comparte la imagen de memoria y otros recursos del proceso con otros hilos.

Desde el punto de vista de programación: Función cuya ejecución se puede lanzar en paralelo con otras.

Un proceso puede contener uno o más hilos.

 Todos los hilos de un proceso comparten el mismo entorno de ejecución (variables globales, espacio
de direcciones, ficheros abiertos, etc.).

 Cada hilo tiene su propio juego de registros de CPU, pila, variables locales, etc.

 No existe protección entre hilos: un error en un hilo puede estropear la pila de otro.

 Para ordenar la forma en la que los hilos acceden a datos comunes hay que emplear mecanismos de
sincronización.

Combinación de los estados de sus hilos:


Si hay un hilo en ejecución. Proceso en ejecución.

Si no hay hilos en ejecución pero sí preparados. Proceso preparado.

Si todos sus hilos bloqueados. Proceso bloqueado.

Los hilos permiten paralelizar la ejecución de una aplicación. Mientras un hilo está bloqueado, otro podría
ejecutarse.

Ventajas de usar hilos

Respuesta: el tiempo de respuesta mejora, ya que el programa puede continuar ejecutándose, aunque parte de
él esté bloqueado.

Compartir recursos: los hilos comparten la memoria y los recursos del proceso al que pertenecen, por lo que se
puede tener varios hilos de ejecución dentro del mismo espacio de direcciones.

Economía: Es más fácil la creación, cambio de contexto y gestión de hilos que de procesos.

Utilización múltiples CPUs: permite que hilos de un mismo proceso ejecuten en diferentes CPUs a la vez. En un
proceso mono-hilo, un proceso ejecuta en una única CPU, independientemente de cuantas tenga disponibles.

Nivel de los hilos

Hilos a nivel de usuario: son implementados en alguna librería. Estos hilos se gestionan sin soporte del SO, el
cual solo reconoce un hilo de ejecución. Su cambio de contexto es más sencillo que el cambio de contexto entre
hilos de kernel.

Hilos a nivel de kernel: el SO es quien crea, planifica y gestiona los hilos. Se reconocen tantos hilos como se
hayan creado. Permiten aprovechar mejor las arquitecturas multiprocesadores, y proporcionan un mejor
tiempo de respuesta, ya que si un hilo se bloquea, los otros pueden seguir ejecutando.

Relación entre hilos a nivel de kernel y de usuario


Modelo Mx1 (many to one) Modelo MxN (many to many)

Modelo 1x1 (one to one)

PROCESOS

El proceso es un programa en ejecución, incluyendo el valor del program counter, los registros y las variables.

Conceptualmente, cada proceso tiene un hilo (thread) de ejecución que es visto como un CPU virtual.

El recurso procesador es alternado entre los diferentes procesos que existan en el sistema, dando la idea de
que ejecutan en paralelo (multiprogramación).

Cada proceso tiene una serie de recursos asociados:

CPU (thread)
Archivos
Espacio de memoria

Contador del programa

Cada proceso tiene su program counter, y avanza cuando el proceso tiene asignado el recurso procesador. A su
vez, a cada proceso se le asigna un número que lo identifica entre los demás: identificador de proceso (process
id)
Memoria de los procesos

Un proceso en memoria se constituye de varias secciones:

Código (text): Instrucciones del proceso.

Datos (data): Variables globales del proceso.

Memoria dinánica (heap): Memoria dinámica que genera el proceso.

Pila (stack): Utilizado para preservar el estado en la invocación anidada de


procedimientos y funciones.

Estados en los que puede estar un proceso.

Nuevo (new): Cuando el proceso es creado.

Ejecutando (running): El proceso tiene asignado un procesador y está ejecutando sus instrucciones.

Bloqueado (waiting): El proceso está esperando por un evento (que se complete un pedido de E/S o una señal).

Listo (ready): El proceso está listo para ejecutar, solo necesita del recurso procesador.

Finalizado (terminated): El proceso finalizó su ejecución.

ALGORITMOS DE PLANIFICACIÓN

El planificador (scheduler) es la parte del SO que decide a qué proceso preparado se le da paso a CPU.

Existen distintos algoritmos de planificación (scheduling algorithms).


Planificación no apropiativa (non-preemptive): deja ejecutar al proceso en CPU hasta que éste para por
bloqueo (inicio E/S), espera por otro proceso o terminación voluntaria.

Planificación apropiativa: el planificador puede desalojar al proceso en CPU durante su ejecución y cambiarlo
por otro. Necesita una interrupción de reloj para poder ejecutarse en períodos regulares de tiempo (quantum).

Round Robin

Es uno de los algoritmos más antiguos y equitativos en el reparto de la CPU entre los procesos, muy válido para
entornos de tiempo compartido. Cada proceso tiene asignado un intervalo de tiempo de ejecución, llamado
cuantum o cuanto. Si el proceso agota su cuantum de tiempo, se elige a otro proceso para ocupar la CPU. Si el
proceso se bloquea o termina antes de agotar su cuantum también se alterna el uso de la CPU.

Round Robin es uno de los algoritmos de planificación de procesos más complejos y difíciles, dentro de un
sistema operativo asigna a cada proceso una porción de tiempo equitativa y ordenada, tratando a todos los
procesos con la misma prioridad.

Se define un intervalo de tiempo denominado cuanto, cuya duración varía según el sistema. La cola de procesos
se estructura como una cola circular. El planificado la recorre asignando un cuanto de tiempo a cada proceso.
La organización de la cola es FIFO.

Trabajo más corto – SJF (Shortest-Job-First)

Este algoritmo, se basa en los ciclos de vida de los procesos, da prioridad a los más cortos a la hora de ejecución
y los coloca en la cola.
El SJF se puede comportar de dos formas:

Con Desalojo: Si se incorpora un nuevo proceso a la cola de listos y este tiene un ciclo de CPU menor que el
ciclo de CPU del proceso que se está ejecuando, entonces dicho proceso es desalojado y el nuevo proceso toma
la CPU.

Sin desalojo: Cuando un proceso toma la CPU, ningún otro proceso podrá apropiarse de ella hasta que el
proceso que la posee termine de ejecutarse.

FIFO – (First In, First Out – Primero en entrar, primero en salir)

Este algoritmo da servicio a las solicitudes de acceso a disco de la cola según el orden de llegada.

Cuando se tiene que elegir a qué proceso asignar la CPU se escoge al que llevara más tiempo listo. El proceso
se mantiene en la CPU hasta que se bloquea voluntariamente.

La ventaja de este algoritmo es su fácil implementación, sin embargo, no es válido para entornos interactivos
ya que un proceso de mucho cálculo de CPU hace aumentar el tiempo de espera de los demás procesos. Para
implementar el algoritmo se necesita mantener una cola con los procesos listos ordenada por tiempo de
llegada. Cuando un proceso pasa de bloqueado a listo se sitúa el último de la cola.

Por prioridad

En este tipo de algoritmos el proceso de mayor prioridad es el que se ejecuta. En un escenario con prioridades
estáticas los procesos con menor prioridad podrían no llegar a ejecutarse, por ejemplo porque entren
continuamente procesos de mayor prioridad. Para solucionar este problema se introduce el concepto de
prioridad dinámica que consiste en modificar la prioridad inicial de los procesos a medida que transcurre el
tiempo y se suele hacer atendiendo a diferentes criterios:

• Según la categoría del usuario.

• Según el tipo de proceso.

• Según la ocupación de CPU de los procesos.


La prioridad puede ser Apropiativa o No Apropiativa y que en caso de encontrarnos con varios procesos con
la misma prioridad, el problema nos debería indicar como resolverlo (sino dice nada el asunto se suele resolver
con FIFO).

Múltiples niveles

Las siglas MLQ y MLFQ son los acrónimos ingleses de multi level queues (colas multinivel) y multi level
feedback queues (colas multinivel realimentadas).

La planificación mediante colas multinivel es un algoritmo de planificación de procesos en un sistema


operativo. Su objetivo es diferenciar entre distintos tipos de trabajos, para ello dividen la cola de procesos
preparados en varias colas, una por cada tipo de trabajo, y no permiten el movimiento de los procesos entre
las distintas colas.

Los algoritmos de colas multinivel realimentadas se basan en los algoritmos de colas multinivel, pero permiten
el movimiento de los trabajos de unas colas a otras.

Webgrafía

https://es.wikipedia.org/wiki/Planificaci%C3%B3n_mediante_colas_multinivel

http://gwolf.sistop.org/laminas/08_algoritmos_planif_proc.pdf

https://es.slideshare.net/FernandoJMoralesOldenburg/algoritmos-de-planificacin-de-procesos-en-sistemas-
operativos

http://lsi.vc.ehu.es/pablogn/docencia/manuales/SO/TemasSOuJaen/PLANIFICACIONDEPROCESOS/6Algori
tmosdePlanificacionI.htm

https://eva.fing.edu.uy/pluginfile.php/75119/mod_resource/content/4/5-SO-Teo-Procesos.pdf

https://www.fing.edu.uy/tecnoinf/mvd/cursos/so/material/teo/so05-hilos.pdf

https://sisoperativoluis.wordpress.com/2016/09/24/concepto-de-hilo-de-ejecucion/

También podría gustarte