Proceso: Se refiere a la ejecución de diversas instrucciones por parte del microprocesador, de acuerdo a lo que indica un programa.
Estados de los procesos: Todo proceso en un sistema operativo presenta un estado que indica la situación de la ejecución en que se encuentra. El número de posibles estados varía de un sistema operativo a otro.
Consideramos que todo proceso puede estar, como mínimo, en uno de los siguientes tres estados:
Activo: El proceso está empleando la CPU, por tanto, está ejecutándose. Pueden haber tantos procesos activos como procesadores haya disponibles. Por tanto, si el sistema dispone de un único procesador, únicamente puede haber un proceso activo a la vez.
Preparado: El proceso no está ejecutándose pero es candidato a pasar a estado activo. Es el planificador el que, en base a un criterio de planificación, decide qué proceso selecciona de la lista de procesos preparados para pasar a estado activo.
Bloqueado: El proceso está pendiente de un evento externo que le ha hecho bloquear, tales como una operación de lectura/escritura, la espera de finalización de un proceso hijo, una señal o una operación sobre un semáforo. El dispositivo/hecho externo "avisa" al S.O. cuando ha terminado la acción que realizaba mediante una INTERRUPCIÓN, dejando el S.O. lo que está haciendo para atender a esta última. Tras esto, el S.O. comprueba cuales son los procesos que fueron bloqueados por ese evento externo, cambiándolos al estado de preparado.
La transición de activo a preparado y viceversa depende de decisiones tomadas por el planificador del sistema operativo en base a un cierto criterio. La transición de activo a bloqueado, y de bloqueado a preparado puede inducirlas el programador mediante llamadas al sistema.
Operaciones sobre procesos: Los sistemas operativos son responsables de la "gestión de procesos y memoria", por lo que están encargados de realizar una serie de actividades, tales como la planificación o itineración de procesos, la operación sobre procesos y la comunicación entre procesos. Para operar sobre un proceso, los sistemas operativos actuales suministran ciertas funciones, que pueden ser ejecutadas ya sea desde el mismo proceso o desde el intérprete de comandos, si es un usuario el que solicita algún servicio de dicho sistema.
Entre las operaciones sobre procesos que con mayor frecuencia ofrecen los sistemas operativos se encuentran la creación, terminación o destrucción, suspensión y reanudación de procesos. Actualmente, en la mayoría de los S.O., los procesos pueden ejecutarse de forma concurrente, pudiéndose crear y eliminar de forma dinámica, por lo que es necesario que estos sistemas brinden un mecanismo para la creación y terminación de procesos.
planificador de procesos: El planificador de procesos (
process scheduler, en inglés) es la parte del sistema operativo que se encarga de seleccionar a qué proceso se asigna el recurso procesador y durante cuánto tiempo.
Ejemplo:
Para la siguiente configuración de procesos:
- Proceso Pa: Llega en el instante de tiempo 0. Realiza una llamada al sistema bloqueante cada 1 unidad de tiempo, la operación bloqueante se resuelve tras 2 unidades de tiempo. Para finalizar su ejecución requiere 5 unidades de ejecución.
- Proceso Pb: Llega en el instante de tiempo 1. Para finalizar su ejecución requiere 4 unidades de ejecución.
- Suponga que el proceso Pa tiene mayor prioridad que el proceso Pb, por tanto, el planificador debe de dejar paso al proceso Pa siempre que éste esté en estado preparado.
La evolución de la asignación del procesador que realizaría el planificador es la siguiente:
Bloque de control de procesos: Para llevar a cabo la gestión de un proceso, es necesario que el sistema operativo guarde cierta información necesaria. Para ello, existe un registro especial que se conoce como el bloque de control del proceso BCP, o PCB en inglés (Process Control Block).
El BCP es creado por el Sistema operativo cada vez que aparece un nuevo proceso. Los procesos son conocidos para el sistema operativo y por tanto elegibles para competir por los recursos del sistema sólo cuando existe un BCP activo asociado a ellos. Cuando el programa termina, el BCP es eliminado para dejar espacio libre en el registro, y usarlo para almacenar otros BCP.
El bloque de control de procesos difiere mucho de un sistema a otros, pero existen contenidos comunes:
- Identificador del proceso: Identificar de forma unívoca al proceso en el sistema, generalmente se emplea un entero sin signo que se denomina PID (Process IDentifier)
- Estado del proceso para el planificador de procesos: preparado, activo o bloqueado.
- Contexto de la ejecución: valor de los registros del procesador, bits de estados, etc. Esto es, cada vez que se ejecuta el planificador y se realiza una conmutación de procesos, la información sobre en qué lugar se encontraba la ejecución del proceso se encuentra guardada aquí, así como el lugar en el que se paró la ejecución del anterior proceso (cada una en su respectivo BCP).
- Aspectos relacionados con la administración de memoria: tales como el espacio de direcciones y la cantidad de memoria asignada a un proceso.
- Aspectos relacionados con la administración de ficheros: tales como los ficheros con los que el proceso está actualmente operando.
- Los procesadores en los que el proceso puede ejecutarse: en caso de soportar el sistema multiprocesador.
- En el caso de un sistema operativo tipo UNIX: el proceso padre de dicho proceso y la relación de procesos hijos.
- Estadísticas temporales: Tiempo de lanzamiento del proceso, tiempo en estado activo, etc.
Tipos de interrupciones y excepciones: Una interrupción por hardware es un mecanismo de comunicación entre el procesador y los dispositivos de E/S. Sirve para indicar que un dispositivo de E/S tiene datos pendientes de ser tratados. Las interrupciones por hardware evitan que el sistema operativo tenga que muestrear periódicamente el estado de los dispositivos de E/S, de manera que son ellos mismos los que indican que hay datos a ser tratados.
- Una interrupción por software, es un mecanismo de comunicación entre un proceso (que se ejecuta en modo usuario) y el sistema operativo (que se ejecuta en modo supervisor). El proceso emplea las interrupciones por software para notificar al sistema operativo que requiere de su intervención. Para lanzar una interrupción por software un proceso ejecuta la instrucción int seguida de un número de 16 bits que indica el tipo de interrupción por software. Por ejemplo, las llamadas al sistema en x86 se implementan mediante interrupciones por software, por medio de la instrucción int 0x80 (Sin embargo, hoy día las arquitectura de procesadores viene con instrucciones especializadas para la invocación de llamadas al sistema, por tanto esta técnica ha caído en desuso).
Las excepciones son un tipo de interrupción por software que emplea el sistema operativo para indicar al proceso de un evento externo que debe ser tratado inmediatamente.
El tratamiento de interrupciones es prioritario, por tanto, en caso de interrupción se deja de ejecutar el proceso para dar paso al manejador de la interrupciones.
Conmutación de procesos: La conmutación de procesos es la operación que consiste en retirar el procesador a un proceso para asignárselo a otro. La conmutación se produce por cuatro razones:
- Un proceso agota el tiempo máximo asignado al procesador, por tanto, se debe dar paso a otro proceso para garantizar que la multiprogramación es llevada a cabo apropiadamente.
- Un proceso está pendiente de un evento externo, por tanto, pasa a estado bloqueado haciendo uso de la llamada al sistema bloqueante. El planificador debe asignar el procesador a otro nuevo proceso de entre los que están en estado preparado.
- Que termine la ejecución del proceso en cuestión.
- Que haya una interrupción en la ejecución.
Los pasos que se siguen son los siguientes:
- Pasar a modo privilegiado.
- Guardar el contenido de los registros del hardware en el PCB (el llamado contexto de la ejecución).
- Actualizar el estado del proceso en el PCB (el estado ha pasado de activo a bloqueado o preparado).
- Si se produjo una interrupción, atenderla.
- Seleccionar un nuevo proceso.
- Restaurar el contexto de ejecución del nuevo proceso seleccionado. En el caso de que el nuevo proceso no hubiese estado en el contexto de la ejecución deberá inicializarse.
- Pasar a modo no privilegiado.
Sincronización: Los mecanismos de sincronización los podemos catalogar en dos categorías:
- Optimistas: Este mecanismo considera que la frecuencia de acceso a un cierto recurso compartido es baja. Este tipo tiene mas consumo de memoria, ya que tiene que copiar el recurso compartido y en caso de interferencia en el hilo tiene que volver a ejecutarlo y consume mas recursos.
- Pesimistas: Este mecanismo permite coordinar la ejecución de dos o más procesos que acceden al recurso compartido con una frecuencia alta.
Dependerá del criterio del programador el tipo de mecanismo que utilice ya que puede que no elija el tipo correcto. Por ejemplo, puede que la frecuencia de acceso a un cierto recurso sea alta y el programador le asigna un mecanismo optimista, esto provocaría no obtener el resultado esperado.
Concurrencia de procesos: La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos puedan coincidir en el acceso a un recurso compartido o, dicho de otra forma, que requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.