1. Definición de proceso:
Un proceso es un programa en ejecución
En los libros de texto se pueden encontrar definiciones más formales de lo que es un proceso, como por ejemplo, un proceso puede ser definido como “la unidad de procesamiento gestionada por el sistema operativo” o como “la entidad que puede ser asignada a un procesador y ejecutada por él”.
2. La Multitarea:
2.1 Historia
En los ordenadores de la segunda generación (años 60), cuando el trabajo actual que se estaba ejecutando se deténía para esperar a que se completara una operación con cinta u otro dispositivo de Entrada/Salida[1], la CPU simplemente permanecía inactiva hasta terminar la operación de E/S. El tiempo de espera de las operaciones de E/S podía ser a menudo de 80 a 90 por ciento del tiempo total que tardaba en ejecutarse la tarea, por lo que debía hacerse algo para evitar que la (costosa) CPU esté inactiva por mucho tiempo. Así pues, en la tercera generación de ordenadores (años 70), la solución que surgíó fue particionar la memoria en varias piezas, con un trabajo distinto en cada partición, como se muestra en la figura 1. Mientras que un trabajo esperaba a que se completara una operación de E/S, otro podía estar usando la CPU. Si pudieran contenerse suficientes trabajos en memoria principal al mismo tiempo, la CPU podía estar ocupada casi 100 por ciento del tiempo.
2.2 Concepto de multitarea
Se denomina multiprogramación o multitarea a una técnica por la que dos o más procesos pueden alojarse en la memoria principal y ser ejecutados concurrentemente por el procesador o CPU. Así, en un sistema multitarea, el sistema operativo debe ir repartiendo el tiempo de uso del procesador entre el conjunto de procesos, para que todos ellos vayan avanzando en su ejecución. La ejecución de los procesos se va solapando en el tiempo a tal velocidad, que causa la impresión de realizarse en paralelo (simultáneamente). Se trata de un paralelismo simulado, dado que una CPU sólo puede trabajar con un proceso cada vez. De ahí que, en rigor, se diga que la CPU ejecuta «concurrentemente» (no simultáneamente) varios procesos; en un lapso de tiempo determinado, se ejecutarán alternativamente partes de múltiples procesos cargados en la memoria principal.
3 Cambio de contexto
Imagine que el usuario tiene abierto un editor de texto, el navegador Web y un editor de video. Así tenemos (cuando menos) tres procesos activos. Cada cierto tiempo, el sistema operativo decide detener la ejecución de un proceso y empezar a ejecutar otro; por ejemplo, debido a que el primero ha utilizado más tiempo del que le correspondía.
Nótese que cuando un proceso se suspende en forma temporal como en el ejemplo anterior, debe reanudarse después exactamente en el mismo estado que tenía cuando se detuvo. Esto significa que toda la información acerca del proceso debe guardarse en forma explícita en alguna parte durante la suspensión. En muchos sistemas operativos, toda la información acerca de cada proceso se almacena en una tabla del sistema operativo, conocida como la tabla de procesos, la cual tiene una entrada para cada proceso que se encuentre actualmente en existencia.
A cada una de las entradas de la tabla de procesos se la conoce como bloque de control de proceso (BCP) y la información que se guarda aquí se lista a continuación:
- Información para la identificación del proceso: nombre del proceso (PID), usuario que lanzó el proceso(UID), grupo al que pertenece dicho usuario(PGID), nombre del proceso padre (PPID).
- Estado del procesador: valores que guardan los registros del procesador correspondientes al momento en que el proceso dejó de ejecutarse.
Información de control del proceso:
– Información de planificación y estado: estado del proceso, evento que espera (si está bloqueado en espera de una operación de E/S), prioridad, etc
– Descripción de las zonas de memoria asignadas al proceso.
– Recursos asignados: archivos abiertos, puertos de comunicaciones…
– Punteros para organizar y almacenar los procesos en colas o anillos (para facilitar la tarea del planificador)
.
– Comunicación entre procesos: almacén de señales y mensajes enviados al proceso.
Al hecho de detener la ejecución de un proceso y empezar a ejecutar otro se le conoce como cambio de contexto.
En cada cambio de contexto el sistema operativo debe seleccionar cuál, de los muchos procesos que hay, será el siguiente que se ha de ejecutar a continuación. De esto se encarga una parte del núcleo del sistema operativo llamada el planificador.
Una vez que se ha seleccionado el próximo proceso próximo a ejecutar, hay que ponerlo en marcha, y de eso se encarga otra parte llamada el activador.
4. Estado de los procesos:
Básicamente un proceso se puede encontrase en tres estados o situaciones:
1º)
Listo
Aquí se encuentran los procesos que están en espera de ser seleccionados por el planificador para pasar a estado ejecución.2º)
Ejecución
Aquí se encuentra el proceso que está siendo ejecutado en la CPU.3º)
Bloqueado
En este estado se encuentran los procesos que están esperando a que ocurra un evento (la finalización de una operación de entrada/salida)
Además de estos estados básicos también pueden estar en estado:
4º) Suspendido: Para disminuir número de procesos residentes en memoria RAM el sistema operativo puede mandar completamente la imagen de memoria de un proceso al área de intercambio.
5º) En espera: En este estado, los procesos están en una lista de espera para entrar al sistema. Entrarán al sistema cuando se disponga de recursos libres.
5.- Formación de un proceso
Para que un programa almacenado en disco, se ejecute y se convierta en un proceso en ejecución, el sistema operativo realiza una serie de pasos:
1º) Asignar un espacio de memoria libre para alojar al nuevo proceso.
2º) Seleccionar una entrada libre de la tabla de los BCPs
3º) Rellenar la BCP con información relativa al nuevo proceso
4º) Cargar las distintas regiones del programa (código, datos…) en la zona de memoria previamente reservada
5º) Poner el proceso en estado listo
7. Hilos (Threads en inglés)
Un proceso puede tener un solo flujo de ejecución, como ocurre en los procesos clásicos en donde una instrucción del programa se ejecuta cuando acaba la anterior; o más de un flujo o hilo de ejecución, en donde se puede ejecutar varias instrucciones de forma concurrente.
Cuando empieza a ejecutarse un programa, solo hay un hilo de ejecución, pero a petición del propio programa, este puede dividirse en dos o en más hilos, lo que hace que el programa avance más rápidamente.
Las ventajas de diseñar un programa usando hilos son las siguientes:
• Permite separación de tareas. Cada tarea se puede encapsular en hilo independiente.
• Facilita el modularidad del programa, al dividir trabajos complejos en tareas más sencillas.
• Aumenta la velocidad de ejecución del programa, puesto que aprovecha los tiempos de bloqueo de unos hilos para ejecutar otros.
Los distintos hilos de ejecución de un proceso comparten una serie de recursos tales como el espacio de memoria, los archivos abiertos, situación de autenticación, etc.
Aunque compartan la misma zona de memoria, cada hilo contiene información propia que no comparte con los otros (como por ejemplo, el estado del microprocesador, la pila de ejecución…)
A de notar que, no existe un mecanismo de protección de memoria entre hilos. Para ordenar el acceso a los datos, se emplean mecanismos de sincronización para impedir que un hilo pueda acceder a los datos mientras otro los está usando.
Un hilo puede estar en estado de ejecución, listo o bloqueado. El estado del proceso al que pertenecen los hilos será la combinación de estados de sus hilos: Si hay algún hilo en ejecución, el proceso estará en ejecución. Si no hay ninguno hilo en ejecución pero alguno está en estado listo, el proceso estará en estado listo y finalmente, si todos los hilos están bloqueados el proceso estará en estado bloqueado.
Una de las aplicaciones típicas de los programas con hilos es el diseño de servidores. Por ejemplo, piense en un servidor en donde cada vez que se recibe una petición de trabajo de un cliente, se crea un nuevo hilo para que dé respuesta a dicha petición. De esta forma el hilo de ejecución principal del servidor no queda bloqueado dando respuesta a una sola petición, si no que puede atender múltiples peticiones de trabajo simultáneamente