Portada » Informática » Gestión de Procesos y Threads en Sistemas Operativos
El Sistema Operativo debe proveer mecanismos para:
Los procesos padre crean procesos hijos, los cuales vuelven a crear otros procesos, formando un árbol de procesos. Generalmente, los procesos se identifican y gestionan mediante el identificador de proceso o PID.
fork()
para emplazar el espacio de memoria del proceso con un nuevo programa.El proceso ejecuta la última sentencia y entonces llama al sistema para borrarlo utilizando la llamada a sistema exit().
El padre termina la ejecución del proceso hijo utilizando la llamada abort().
Algunos Sistemas no permiten que el hijo exista si el padre ha terminado. Si un proceso termina, todos sus hijos también lo hacen.
El proceso padre espera el término de los procesos hijos utilizando la llamada a sistema wait()
. Esta llamada devuelve el estado de la información del PID del proceso terminado: pid = wait(&status);
wait()
) -> proceso Zombie.wait()
-> proceso hijo es Orphan.Muchos Web Browsers se ejecutaban en un único proceso. Si una web causa problemas, el navegador por completo hace crash.
El Navegador Google Chrome es multiproceso con 3 tipos de procesos diferentes:
Los Procesos dentro de un sistema pueden ser independientes o cooperantes. La Cooperación puede afectar o ser afectada por otros procesos, incluyendo la compartición de datos.
La Cooperación de procesos requiere de Interprocess Communication (IPC).
Dos modelos de IPC:
Las aplicaciones modernas utilizan multithread. Los hilos se ejecutan dentro de la aplicación. Múltiples tareas de la aplicación pueden ser implementadas mediante hilos separados.
La creación de procesos es pesada mientras que la de hilos es ligera. Simplifica el código y aumenta la eficiencia. Los Kernels son generalmente multithread.
Los Sistemas Multicore o Multiprocesador plantean retos para los programadores: Cómo dividir tareas, datos, etc.
Existe soporte de arquitectura para Threading:
Thread
o implementando la interfaz Runnable
.java.lang.Thread
(class)java.lang.Runnable
(interface)run()
, start()
wait()
, notify()
, notifyAll()
.start()
del hilo o ejecutar run()
concurrentemente.