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: