2. Contenido
Concepto de proceso.
Estados y transiciones de los procesos.
Procesos ligeros (hilos o hebras).
Concurrencias y secuenciabilidad.
3. Concepto de Proceso.
Un programa que se esta ejecutando.
Una actividad asincrónica.
Aquello que se manifiesta por la existencia del
Sistema Operativo de un bloque de control de
proceso.
Aquella entidad a la cual son asignados los
procesadores.
4. Concepto de Proceso.
Programa: conjunto de instrucciones que
ejecuta una computadora para realizar una
actividad.
Proceso: instancia de ejecución de un programa,
caracterizado por su contador de programa,
estado, registros del procesador, segmento de
texto, pila y datos.
5. Estados y Transiciones de los procesos.
Estados
En ejecución: Utiliza la CPU.
Listo: Ejecutable, se detiene de forma temporal.
Bloqueado: No se puede ejecutar debido a la
ocurrencia de algún evento externo.
7. Procesos ligeros (hilos o hebras)
Un hilo o hebra en los S.O. son programas que
tienen como característica principal el ejecutar
varias tareas a la vez (concurrencia) .
• Comparten recursos
• Cuentan con un contador de programa
• Pila de ejecución
• Estado del CPU
8. Procesos ligeros (hilos o hebras)
• Espacio de memoria
• Variables globales
• Ficheros abiertos
• Procesos hijos
• Temporizadores
• Señales y semáforos
• Contabilidad
9. Procesos ligeros (hilos o hebras)
Beneficios:
• Explotación del paralelismo
• Explotación de concurrencia (I/O)
• Estilo de programación
10. Procesos ligeros (hilos o hebras)
Aplicaciones:
• Creación y destrucción
• Sincronización
• Gestión de prioridades
• Gestión de señales
• Gestión de memoria
• Se pueden utilizar todas las funciones incluidas en POSIX.1 y
POSIX.1b
• La interfaz de hilos POSIX es pthreads, aunque existen otras
bibliotecas de hilos
11. Procesos ligeros (hilos o hebras)
• Si se desea crear una nueva hebra, es suficiente construir un
nuevo objeto de la clase Thread y llamar a su método start().
public class DosHebrasBasicas extends Thread {
int cont;
DosHebrasBasicas(int c) {
cont = c;
}
public void run() {
while (true) {
system.out.println(cont);
}
}
public static void main(String[] args) {
new DosHebrasBasicas(0).start();
new DosHebrasBasicas(1).start();
}
} // class
12. Procesos ligeros (hilos o hebras)
• En algún momento de la ejecución del método run() se
ha generado una excepción que nadie ha capturado. La
excepción se propaga hasta el propio método run(). Si
tampoco éste tiene un manejador para la excepción, el
método run() finaliza abruptamente, terminando la
ejecución de la hebra.
• Si se llama al método stop() o stop(excepción) de la
hebra. Estos dos métodos originan que la hebra termine,
y son en realidad un caso particular del anterior.
• Cuando se llama al método destroy() de la hebra.
También se comenta posteriormente.
13. Procesos ligeros (hilos o hebras)
Ejemplo para asignar una prioridad
public class ComprobarPrioridad implements Runnable {
int num;
ComprobarPrioridad(int c) { num = c; }
public void run() {
while (!parar) {
system.out.println(num);
cont++;
}
}
public static void main(String[] args) {
Thread nueva;
for (int c = 0; c < 10; c++) {
nueva = new Thread(new ComprobarPrioridad(c));
if (c == 0) nueva.setPriority(Thread.MAX_PRIORITY);
nueva.start();
}
}
} // class
14. Procesos ligeros (hilos o hebras)
Ejemplo para asignar una prioridad
setPriority(int): establece la prioridad de la hebra. Puede ocasionar la
generación de una excepción de seguridad si la hebra que solicita el cambio
de prioridad de otra no está autorizada a hacerlo.
getPriority(): devuelve la prioridad de la hebra.
Para establecer los posibles valores en el parámetro de setPriority o como
resultado de getPriority, la clase Thread define tres constantes estáticas a la
clase:
MAX_PRIORITY (= 10): es el valor que simboliza la máxima prioridad.
MIN_PRIORITY (= 1): es el valor que simboliza la mínima prioridad.
NORM_PRIORITY (= 5): es el valor que simboliza la prioridad
normal, la que tiene la hebra creada durante el arranque de la máquina
virtual y que se encarga de ejecutar la función main
15. Concurrencia y secuenciabilidad
Los procesos son concurrentes si existen
simultáneamente. Los procesos concurrentes
pueden funcionar en forma totalmente
independiente unos de otros, o pueden ser
asíncronos, lo cual significa que en ocasiones
requieren cierta sincronización o cooperación.
16. Concurrencia y secuenciabilidad
Beneficios del uso de la concurrencia
• Trata de evitar los tiempos muertos de la UCP.
• Comparte y optimiza el uso de recursos.
• Permite la modularidad en las diferentes etapas del
proceso.
• Acelera los cálculos.
• Da mayor comodidad.
17. Concurrencia y secuenciabilidad
Desventajas del uso de la concurrencia
• Que dos o mas procesos requieran el mismo
recurso .
• Ocurrencia de bloqueos.
• Interrupción de procesos.
18. Concurrencia y secuenciabilidad
Elementos a gestionar y diseñar a causa de la
concurrencia
1. El sistema operativo debe ser capaz de seguir la pista de los
distintos procesos activos. Esto lo hace por medio de PBC’s
(Bloque de Control de Procesos) .
2. El sistema operativo debe asignar y quitar los distintos recursos a
cada proceso activo.(Tiempo de procesador, memoria, Archivos,
dispositivos de entrada y salida).
3. El sistema operativo debe proteger los datos y los recursos físicos
de cada proceso contra injerencias no intencionadas de otros
procesos.
4. Los resultados de un proceso deben ser independientes de la
velocidad relativa a la que se realiza la ejecución con respecto a
otros procesos concurrentes.
19. Concurrencia y secuenciabilidad
Exclusión Mutua
La exclusión mutua la podríamos definir como una operación de
control que permite la coordinación de procesos .
Formas de satisfacer los requisitos de exclusión mutua:
• Soluciones por Software. Una manera es dejar la
responsabilidad a los procesos que deseen ejecutar
concurrentemente, de esta manera los procesos deben
coordinarse unos con otros para cumplir la exclusión mutua
sin ayuda alguna, aunque estas soluciones son propensas a
errores y a una fuerte carga de proceso (Algunos ejemplos de
estas son: Algoritmo de Dekker y Algoritmo de
Peterson).
• Soluciones por Hardware. Propone el uso de instrucciones de
la máquina a tal efecto, estas tienen la ventaja de reducir la
sobrecarga.
21. Concurrencia y secuenciabilidad
void sleep(long milis): duerme a la hebra durante al menos
<milis> milisegundos. Transcurrido el tiempo, la hebra
pasará a estar preparada para ejecutarse, pero eso no implica
que pase inmediatamente a hacerlo (dependerá del
planificador), de ahí que pueda estar más tiempo del que se
especifica sin ejecutarse.
void sleep(long milis, int nanos): duerme a la hebra
durante al menos <milis> milisegundos y <nanos>
nanosegundos. Sirve como una implementación con más
precisión que la anterior. En la práctica, la implementación
actual no permite tanta parecisión, y se limita a redondear los
<milis> en función de los <nanos> y a llamar al método sleep
anterior con el valor obtenido.
void yield(): cede el procesador. Pasará a ejecutarse de nuevo
el planificador, que decidirá qué otra hebra ejecutar.
22. Concurrencia y secuenciabilidad
Sincronización de procesos
La comunicación entre procesos es necesaria si se
desea que varios procesos puedan colaborar para
realizar una misma tarea. La sincronización es el
funcionamiento coordinado en la resolución de
una tarea encomendada.
23. Concurrencia y secuenciabilidad
Sincronización de procesos
Los servicios básicos de comunicación son:
• Crear: el proceso solicita la creación del
mecanismo
• Enviar o escribir: el proceso emisor envía
información al proceso receptor
• Recibir o leer: el proceso receptor recibe
información
• Destruir: el proceso solicita la destrucción del
mecanismo de comunicación
24. Concurrencia y secuenciabilidad
Sincronización de procesos
La comunicación puede ser síncrona y asíncrona:
• Síncrona: los dos procesos han de ejecutar
servicios de forma simultánea. El emisor ha de
ejecutar el servicio enviar mientras el receptor
ejecuta recibir.
• Asíncrona: el emisor hace el envío y prosigue su
ejecución. El SO ofrece un almacenamiento
intermedio para guardar la información enviada,
hasta que el receptor la solicite.
25. Concurrencia y secuenciabilidad
Sincronización de procesos
• Dos o más procesos leen o escriben en ciertas
zonas compartidas.
• El resultado final puede depender de lo que cada
proceso ejecutó.
Proceso 1 Proceso 2
S. O.
Recurso
26. Concurrencia y secuenciabilidad
class almacen {
int[] almacen = new int[16];
int primero = 0;
int cuantos = 0;
synchronized public int coger() {
int aux;
if (cuantos == 0)
return (-1);
else {
cuantos--;
aux = primero;
primero = (primero + 1) & 15;
return(almacen[aux]);
}
}
synchronized public boolean dejar(char val) {
if (cuantos == 16)
return false;
int aux;
aux = (primero + cuantos) & 15;
cuantos++;
almacen[aux] = val;
return true;
}
} // almacen
27. Concurrencia y secuenciabilidad
Mecanismos de semáforos
Los semáforos son mecanismos para la
sincronización de los procesos y esta
representado por una variable entera positiva,
cuyo valor solo puede ser acceso mediante las
operaciones wait y signal.
28. Concurrencia y secuenciabilidad
Semáforos
• WAIT: verifica si el valor de un semáforo es
mayor que cero y en este caso decrementa dicho
valor y el proceso continúa. Si es cero, el proceso
se va a dormir.
Las modificaciones al valor del se ejecutan en forma
indivisible, es decir, si un proceso está modificando un
semáforo ningún otro proceso puede esta modificando
el mismo valor
29. Concurrencia y secuenciabilidad
Semáforos
• SIGNAL: incrementa el valor del semáforo
respectivo. Si uno o más procesos dormían y no
podían completar una operación anterior, el SO
elige alguno de ellos y se le permite terminar la
operación WAIT.
30. Concurrencia y secuenciabilidad
Semáforos
/*Semáforo mutex compartido por N procesos es
inicializado en 1*/
/*Estructura del proceso Pi */
while (TRUE) {
wait(mutex);
/*Sección Critica*/
signal(mutex);
/*Sección No Crítica*/
}
31. Concurrencia y secuenciabilidad
Semáforos
/*Semáforo mutex compartido por N procesos es
inicializado en 1*/
/*Estructura del proceso Pi */
while (TRUE) {
wait(mutex);
/*Sección Critica*/
signal(mutex);
/*Sección No Crítica*/
}
32. Actividades
Investigación del tema Técnicas de administración del
planificador (FIFO, SJF,RR, QUEVES MULTI-LEVEL,
MULTI-LEVEL FEEDBACK QUEVES).