Está en la página 1de 9

Facultad de Ingenierías y Tecnologías de la Información y Comunicación

Escuela de Tecnología para la gestión de negocios


Escuela de Ingeniería en Sistemas Computacionales

Resumen

Sistemas Operativos

Profesor:
Carlos Andrés Mendez Rodríguez

Elaborado por:
Katherine Fabiola Pereira Jiménez

San José, 2 de marzo de 2022


• Cap 4. Hebras

4.1

Una hebra es una unidad básica de utilización de la CPU, comprende: ID de hebra, contador,
programa, conjunto de registros, pila.
Comparte con otras hebras que pertenecen al mismo proceso la sección de código, sección de
datos, otros recursos del sistema operativo.

• 4.1.1 Motivación

Paquetes de software que se ejecutan en los PC modernos de escritorio son multihebra.

Una función es que el servidor funcione como un solo proceso de aceptación de solicitudes.
Cuando el servidor recibe una solicitud, crea otro proceso para dar servicio a dicha solicitud.
Si un nuevo proceso va a realizar las mismas tareas que los procesos existentes, algo que nos
podemos preguntar es ¿por qué realizar todo el trabajo adiciona? Lo más eficiente es utilizar
un proceso que contenga múltiples hebras, lo que este método hace es dividir en múltiples
hebras el proceso servidor web.

Las hebras juegan un papel importante en los sistemas que son de llamada a procedimientos
remotos, RCP permiten la comunicación entre procesos proporcionando un mecanismo de
comunicación similar a las llamadas a funciones – procedimientos, los servidores RCP son
multihebra, cabe destacar que muchos kernel son multihebra, hay hebras operando en kernel y
cada hebra realiza una tarea en especifico.

4.1.2 Ventajas

Ventajas de la programación multihebra:


- Capacidad de respuesta.
- Compartición de recursos.
- Economía.
- Utilización sobre arquitecturas multiprocesador.

• 4.2 Modelos multihebra

El soporte para hebras puede proporcionarse en el nivel de usuario (para las hebras de
usuario) o por parte del kernel (para las hebras del kernel). El soporte para las hebras de
usuario se proporciona por encima del kernel y las hebras se gestionan sin soporte del mismo
y el sistema operativo soporta/gestiona las hebras del kernel.

4.2.1 Modelo muchos-a-uno

Este modelo asigna multiples hebras de nivel de usuario a una hebra del kernel.

Del modelo uno-a-uno podemos esperar lo siguiente:

- Asigna cada hebra de usuario a una hebra del kernel.


- Proporciona una mayor concurrencia que el modelo muchos-a-uno permitiendo que se
ejecute otra hebra mientras una hebra hace una llamada bloqueante al sistema.
- kernel.
4.2.3 Modelo muchos-a-muchos

Multiplexa muchas hebras de usuario sobre un número menor e igual de hebras del kernel, el
número de hebras del kernel puede ser especifico de una determinada aplicación o de una
determinada máquina, mientras que el modelo muchos-a-muchos permite al desarrollador
crear tantas hebras de usuario como desee.

Se debe de tener cuidado de no crear tantas hebras dentro de una aplicación. El modelo-
muchos-a-muchos no sufre estos inconvenientes, las de kernel pueden ejecutarse en paralelo
en un multiprocesador y también cuando una hebra realiza una llamada bloqueante al sistema
el kernel puede planificar otra hebra para su ejecución.

• 4.3 Biblioteca de hebras


Proporciona al programador una API para crear y gestionar hebras.

Formas de implementar una biblioteca de hebras:

- Proporcionar una biblioteca enteramente en el espacio de usuario, sin ningún soporte


de kernel.
- Implementar una biblioteca en el nivel del kernel, soportada directamente por el
sistema operativo.

Principales bibliotecas de hebras actuales:

- POXIS Pthreads.
- Win 32.
- Java.

• 4.4 Consideraciones sobre las hebras

Un poco de repaso del capitulo 3.

4.4.2 Cancelación.

La cancelación de una hebra es la acción de terminar una hebra antes de que se haya
completado.

Ejemplo:
Dos tipos de cancelación en las hebras:

- Cancelación asíncrona
- Cancelación diferida

Dificultad de cancelación:

- La dificultad se produce en aquellas situaciones en las que se ha asignado recursos a


una hebra cancelada o cuando una hebra se cancela en mitad de una actualización de
datos que tuviera compartidos con otras hebras, estos problemas son graves cuando se
utilizan el mecanismo de cancelación asíncrona.

4.4.3 Tratamiento de señales

Una señal se usa para notificarle a un proceso que se ha producido un determinado suceso.

Todas las señales, sean síncronas o asíncronas, siguen el mismo patrón:

- Una señal se genera debido a que se produce un determinado suceso.


- La señal generada se suministra a un proceso.
- Una vez suministrada, la señal debe ser tratada.

El tratamiento de señales en programas que tienen una sola hebra resulta sencillo, las señales
siempre se suministran en un proceso y suministrar las señales en los programas multihebra es
más complicado, ya que un proceso puede tener varias hebras.
¿A quien debemos de suministrarle la señal?

- Suministrar la señal a todas las hebras del proceso.


- Suministrar la señal a determinadas hebras del proceso.
- Suministrar la señal a la hebra a la que se aplicable el proceso.
- Asignar una hebra especifica para recibir todas las señales del proceso.

4.4.4 Conjunto compartido de hebras


La idea es que a los conjuntos de hebras es la de crear una serie de hebras al principio del
proceso y colocarlas y colocarlas en un conjunto compartido, donde las hebras quedan a la
espera de que se les asigne un trabajo.

Ventajas:

- Dar servicio a una solicitud con una hebra existente normalmente es más rápido que
esperar a crear una hebra.
- Un conjunto de hebras limita el número de hebras existentes en cualquier instante
dado. Esto es importante en aquellos sistemas que no pueden soportar un gran número
de hebras concurrentes.

El número de hebras en conjunto puede definirse basándose en:

- Números de procesadores del sistema.


- Cantidad de memoria física.
- Número esperado de solicitudes concurrentes de los clientes.

4.4.5 Datos específicos de una hebra

Hebras que pertenecen a un mismo proceso, comparten los datos del proceso, llamaremos a
dichos datos, datos específicos de hebra.

4.4.6 Activaciones del planificador

Trata es de buscar la mayor eficiencia y la mayor flexibilidad de los threads de usuario y la


funcionalidad de los threads en el núcleo. El planificador actua sobre los thereads cada vez
que uno de ellos hace una llamada al sistema.

En los programas multihebra existe una comunicación entre el kernel y la biblioteca de


hebras, los cuales pueden ser necesarios para los modelos de muchos-a-muchos.

Un posible esquema de comunicación entre la biblioteca de hebras de usuario y el kernel, se le


conoce como activación del planificador, funciona de la siguiente manera: El kernel
proporciona a la aplicación un conjunto de procesadores virtuales y el procesador puede
planificar la ejecución de las hebras de usuario en uno de los procesadores virtuales
disponibles y ademas el kernel debe de informarle a la aplicación sobre determinados sucesos
y a esto le llamamos suprallamada y estas son tratadas por la biblioteca de hebras mediante
una rutina de tratamiento suprallamada.
El kernel asigna un procesador virtual nuevo a la aplicación y la aplicación ejecuta la rutina
de tratamiento de la suprallamada sobre el nuevo procesador virtual y se debe de marcar la
hebra desbloqueada como disponible para ejecutarse, la aplicación elige una de las hebras que
esté preparada para ejecutarse y toma como que es un procesador virtual disponible.

• 4.5 Ejemplos de sistemas operativos

Hebras en estos sistemas operativos.

Windows

Con la biblioteca de hebras, cualquiera hebra perteneciente a un proceso puede acceder al


espacio de direcciones de dicho proceso.

Componentes de una hebra:

- Un identificador de hebra que identifique de forma unívoca la hebra.


- Un conjunto de registros que represente el estado del procesador.
- Una pila de usuario, empleada cuando la hebra está ejecutándose en modo usuario, y
una pila de kernel, empleada cuando la hebra se esté ejecutando en modo kernel.
- El área de almacenamiento privada usada por las distintas bibliotecas de tiempo de
ejecución y bibliotecas de enlace dinámico.

Principales estructuras de datos de una hebra:

- ETHREAD: bloque de hebra ejecutiva


- KTHREAD: bloque de hebra del kernel
- TEB: bloque de entorno de la hebra

Los componentes clave de THREAD incluyen un puntero al proceso al que pertenece la


hebra y la dirección de la rutina en la qué la hebra inicia su ejecución. THREAD también
contiene un puntero al correspondiente bloque KTHREAD.
THREAD incluye información de planificación y sincronización de la hebra. Además,
KTHRI AD incluye la pila del kernel (utilizada cuando la hebra se está ejecutando en modo
kernel) y un puntero al bloque TEB.
ETHREAD y THREAD están completamente incluidos en el espacio del kernel, esto
significa que solo el kernel puede acceder a ellos.
LINUX

Linux utiliza el termino tarea en lugar de proceso o hebra, para hacer referencia a un flujo
de control dentro de un programa, la creación de tareas se realiza a través de la llamada al
sistema clone() y permite que una tarea hijo comparta el espacio de memoria de la tarea
padre. Implementaciones de esta API están disponibles en sistemas operativos tales como
FreeBSD, NetBSD, OpenBSD, GNU/Linux, Mac OS y Solaris.

Conjunto de indicadores con Clone ()

También podría gustarte