UNIDAD III

Publicadas por Sistemas Operativos II

3. PROCESOS E HILOS


3.1 Introduccion

Qué es un Thread? ¿Qué es un Proceso? 

Un Proceso es algo que te resulta bastante familiar. Si lanzas Microsoft Word y VFP, entonces tienes dos procesos separados que están corriendo al mismo tiempo aunque sólo tengas una CPU. El sistema operativo asigna tiempo a cada uno de los procesos y pasa de uno a otro según le interesa. En un sistema multitarea no-preemptivo (un tarea es sinónimo de un proceso) tal como Windows 3.1, un proceso puede paralizar la ejecución de otro proceso, pues el sistema operativo pasa un mensaje a cada proceso y este lo interpreta, mientras un proceso interpreta un mensaje los demás procesos están detenidos. En un sistema multitarea preemptivo, la CPU realiza un reparto del tiempo de ejecución entre las intrucciones de todos procesos.Una arquitectura de aplicación basada en un sólo proceso no funciona bien en un servidor de aplicaciones Web. Un usuario con un Browser en Hawaii hace un hit en tu Web y tu servidor Web empieza a procesar la petición. Al mismo tiempo viene otro usuario de Nueva zelanda, y tiene que esperar hasta que la primera petición ha finalizado. Una posible solución a este problema es tener múltiples procesos sirviendo a estas peticiones, de forma que puedan ser respondidas de forma más o menos simultanea. Esto es lo que hacen los CGI. (cada CGI crea un nuevo proceso que crea una página y a continuación termina.) Sin embargo, esto conlleva un uso intensivo en recursos y es ineficiente.Una mejor solución es tener muchos threads (hilos) dentro de un solo proceso capaz de procesar las peticiones de la Web. Cada proceso tiene un thread principal, pero puede crear muchos threads privados para su propio uso.

 El sistema operativo no sólo es perfectamente feliz haciendo eso y saltando de un thread a otro dentro del mismo proceso sino que no asigna necesariamente un espacio de memoria a cada uno de los threats privados, mejorando considerablemente el uso de los recursos. Por esta razón los threads gozan de mucha eficiencia. La arquitectura ISAPI se basa en múltiples threads. Cada hit en la web usa uno de un pool de threads para responder a las peticiones.


3.2 Procesos

1. Definición de proceso.

Es una ejecución concreta de un programa, con un camino determinado y un valor de sus variables determinados. La unidad mínima de expedición y de asignación de recursos es el proceso.2. Estados en los que puede estar un proceso.

  • Listo. Tiene todo lo necesario para ejecutarse excepto el procesador.
  • Suspendido. No está en memoria principal.
  • Bloqueado. Está esperando un evento.
  • Bloqueado y suspendido.
  • Listo y suspendido.



¿Qué es un proceso?
Instancia de un programa en ejecución, requiriendo para ello unos Recursos.

3.3 Creación de Procesos.

Elementos estructurales de un proceso.

  • Propiedad de Recursos
  • Memoria asignada.
  • Canales y/o Dispositivos de I/O asignados.
  • Archivos asignados.
  • Entidad de Ejecución
  • Bloque de Control del Proceso (BCP).
  • Estado del Proceso.
  • Traza de ejecución (Programa en ejecución y su control).
  • Condiciones de trabajo en Multiprogramación
  • Varios Procesos deben poder compartir recursos.
  • Varios Procesos deben poder trabajar juntos en paralelo.
Un Proceso debe poder "crear" otro Proceso.

3.4 Comunicación entre Procesos.

La comunicación entre procesos, en inglés IPC (Interprocess Communication) es una función básica de los Sistemas operativos. Los procesos pueden comunicarse entre sí a través de compartir espacios de memoria, ya sean variables compartidas o buffers, o a través de las herramientas provistas por las rutinas de IPC. La IPC provee un mecanismo que permite a los procesos comunicarse y sincronizarse entre sí. Normalmente a través de un sistema de bajo nivel de paso de mensajes que ofrece la red subyacente.La comunicación se establece siguiendo una serie de reglas (protocolos de comunicación). Los protocolos desarrollados para internet son los mayormente usados: IP (capa de red), protocolo de control de transmisión (capa de transporte) y protocolo de transferencia de archivos , protocolo de transferencia de hipertexto (capa de aplicación).

Los procesos pueden estar ejecutándose en una o más computadoras conectadas a una red. Las técnicas de IPC están divididas dentro de métodos para: paso de mensajes, sincronización, memoria compartida y llamadas de procediemientos remotos (RPC).   

 El método de IPC usado puede variar dependiendo del ancho de banda y latencia (el tiempo desde el pedido de información y el comienzo del envió de la misma) de la comunicación entre procesos, y del tipo de datos que están siendo comunicados.La comunicación puede ser:

  • Síncrona o asíncrona.
  • Persistente (persisntent) o momentánea (transient).
  • Directa o Indirecta.
  • Simétrica o Asimética.
  • Con uso de buffers explícito o automático.
  • Envío por copia el mensaje o por referencia.
  • Mensajes de tamaño fijo o variable.

Síncrona: 
Quien envía permanece bloqueado esperando a que llegue una respuesta del receptor antes de realizar cualquier otra tarea.

Asíncrona:
Quien envía continúa con su ejecución inmediatamente después de enviar el mensaje al receptor.

Persistente: 
El receptor no tiene que estar operativo al mismo tiempo que se realiza la comunicación, el mensaje se almacena tanto tiempo.

Momentánea (transient): 
El mensaje se descarta si el receptor no está operativo al tiempo que se realiza la comunicación. Por lo tanto no será entregado.

Directa: 
Las primitivas enviar y recibir explicitan el nombre del proceso con el que se comunican.

Indirecta: 
La comunicación indirecta se implementa mediante puertos, en alguna bibliografía se lo denomina buzones.

Simétrica: 
Todos los procesos pueden enviar o recibir. También llamada bidireccional para el caso de dos procesos.

Asimétrica: 
Un proceso puede enviar, los demás procesos solo reciben. También llamada unidireccional.

3.5 Hilos.

Un hilo de ejecución, en sistemas operativos, es una característica que permite a una aplicación realizar varias tareas concurrentemente. Los distintos hilos de ejecución comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc. Esta técnica permite simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.Los hilos de ejecución que comparten los mismos recursos, sumados a estos recursos, son en conjunto conocidos como un proceso. El hecho de que los hilos de ejecución de un mismo proceso compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos. Cuando un hilo modifica un dato en la memoria, los otros hilos acceden a ese dato modificado inmediatamente.Lo que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado de la CPU (incluyendo el valor de los registros).

El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo. Cuando el proceso finaliza, todos sus hilos de ejecución también han terminado. Asimismo en el momento en el que todos los hilos de ejecución finalizan, el proceso no existe más y todos sus recursos son liberados.Funcionalidad de los hilos.Al igual que los procesos, los hilos poseen un estado de ejecución y pueden sincronizarse entre ellos para evitar problemas de compartimiento de recursos. Generalmente, cada hilo tiene una tarea especifica y determinada, como forma de aumentar la eficiencia del uso del procesador.

Estados de un hilo. 

Los principales estados de los hilos son: Ejecución, Listo y Bloqueado. No tiene sentido asociar estados de suspensión de hilos ya que es un concepto de proceso. En todo caso, si un proceso está expulsado de la memoria principal (ram), todos sus hilos deberán estarlo ya que todos comparten el espacio de direcciones del proceso.

Cambio de estados.

Creación: Cuando se crea un proceso se crea un hilo para ese proceso. Luego, este hilo puede crear otros hilos dentro del mismo proceso, proporcionando un puntero de instrucción y los argumentos del nuevo hilo. El hilo tendrá su propio contexto y su propio espacio de pila, y pasara a la cola de listos.

Bloqueo: Cuando un hilo necesita esperar por un suceso, se bloquea (salvando sus registros de usuario, contador de programa y punteros de pila). Ahora el procesador podrá pasar a ejecutar otro hilo que esté en la cola de Listos mientras el anterior permanece bloqueado.

Desbloqueo: Cuando el suceso por el que el hilo se bloqueó se produce, el mismo pasa a la cola de Listos.

Terminación: Cuando un hilo finaliza se liberan tanto su contexto como sus pilas.

0 comentarios: