Skip to content

3 Procesos en el sistema operativo

Gestión de procesos en multiprogramación

Si el sistema tiene que repartir el uso del microprocesador entre los distintos procesos, ¿qué le sucede a un proceso cuando no se está ejecutando? Y, si un proceso está esperando datos, ¿por qué el equipo hace otras cosas mientras que un proceso queda a la espera de datos?

Los procesos nuevos van entrando en una cola de procesos activos, a la espera de que llegue su turno y el sistema operativo les conceda el uso de la CPU.

Cuando llega su turno, el sistema operativo concede la CPU al proceso durante un tiempo determinado y equitativo, denominado quantum.

Cuando un proceso que consume su quantum, el proceso es pausado y enviado al final de la cola.

Estados de un proceso

Figura 1 - Estados de un proceso

Si, teniendo asignada la CPU, un un proceso finaliza su ejecución, sale del sistema de gestión de procesos, liberando la CPU.

Si, teniendo asignada la CPU, el proceso realiza una operación de E/S, como obtener leer o escribir de un archivo o una entrada de datos que deba suministrar el usuario, el proceso queda bloqueado hasta que haya finalizado dicha operación de E/S, liberando la CPU.

El proceso es bloqueado porque los dispositivos de E/S son mucho más lentos que la CPU, por lo que, mientras que uno de ellos está esperando una E/S, se puede asignar la CPU a otros procesos para que ejecuten sus instrucciones.

Cuando termina la operación de E/S que tenga un proceso bloqueado, el sistema operativo volverá a colocar al proceso en la cola de procesos activos, para que recoja los datos y continúe con su tarea cuando se le conceda su quantum.

Todo proceso en ejecución, tiene que estar cargado en la RAM física del equipo o memoria principal, así como todos los datos que necesite.

Cuando la memoria RAM del equipo está llena, algunos procesos deberán pasar a disco para dejar espacio en RAM que permita la ejecución de otros procesos. A esta operación se le conoce como suspender un proceso.

Hay procesos en el equipo cuya ejecución es crítica para el sistema, como por ejemplo los correspondientes al propio sistema operativo, por lo que estos procesos tendrán prioridad frente a los procesos de usuario.

Creación de un proceso

Cuando se lanza la ejecución de un ejecutable, el cargador de procesos del sistema operativo es el encargado de crear el proceso correspondiente. Para ello, en primer lugar reserva para el proceso un determinado espacio en la memoria RAM del sistema, que recibe el nombre de espacio de direcciones de memoria del proceso. En dicho espacio de memoria se copia desde el fichero ejecutable situado en disco todas las instrucciones de la aplicación, y se determina una determinada cantidad de espacio de memoria para los datos de la aplicación y su pila de llamadas.

Proceso en memoria

Figura 2 - Proceso en memoria

Un proceso, durante su ejecución, no podrá hacer referencia a direcciones que se encuentren fuera de su espacio de memoria; si lo intentara, el sistema operativo lo detectará y generará una excepción (produciendo, por ejemplo, los típicos pantallazos azules de Windows).

Después, el cargador crea una estructura de datos para proceso, denominada PCB (Process Control Block, Bloque de Control de Proceso). La información del PCB, es única para cada proceso y permite controlarlo. Esta información, también la utilizará el planificador (scheduler) del sistema operativo.

Entre otros datos, el PCB estará formado por:

  • Identificador del proceso o PID. Es un número único para cada proceso.
  • Estado actual del proceso: en ejecución, listo, bloqueado, suspendido, finalizando.
  • Espacio de direcciones de memoria: dónde comienza la zona de memoria reservada para el proceso y cuál es su tamaño.
  • Información para la planificación: prioridad, quantum, estadísticas, etc.
  • Información para el cambio de contexto, es decir para poder cambiar la ejecución de un proceso a otro. Incluye:
  • El contador del programa: Indica la instrucción por donde se está ejecutando el proceso.
  • El estado del procesador: Valores actuales de los registros del procesador sobre el que se está ejecutando el proceso.
  • El puntero de pila de llamadas: En cada instante apunta a la parte superior de la pila del proceso en ejecución.
  • Recursos utilizados. Ficheros abiertos, conexiones, etc.

Planificación de procesos

Una vez que el proceso ya está cargado en memoria, será el planificador (scheduler) el encargado de tomar las decisiones relacionadas con la ejecución de los procesos.

Planificador

El planificador (scheduler) es un proceso del sistema operativo encargado de decidir qué proceso se ejecuta en cada momento y durante cuánto tiempo.

La política en la toma de decisiones del planificador se denomina algoritmo de planificación (scheduling algorithm). Existen distintos tipos de algoritmos de planificación (que estudiasteis en en el curso anterior), con distintas características, pero todos buscan conciliar los siguientes objetivos lo mejor posible:

  • Equidad: que todos los procesos deben poder ejecutarse.
  • Eficacia: que la CPU se mantenga ocupada el 100% del tiempo.
  • Tiempo de respuesta: que el tiempo de respuesta al usuario sea el mínimo posible.
  • Tiempo de finalización: que el tiempo de finalización del proceso sea el mínimo posible.
  • Rendimiento: que el número de tareas procesadas en una determinada unidad de tiempo sea el máximo posible.

Una vez que el algoritmo de planificación ha decidido el siguiente proceso que debe usar la CPU, entra en acción el módulo conocido como dispatcher (despachador).

Dispatcher

El dispatcher (despachador) del el módulo del planificador que realiza el cambio de contexto, de manera que el proceso elegido por el planificador pueda hacer uso de la CPU.

El dispatcher debe ser lo más rápido posible en realizar el cambio de contexto, ya que durante dicho tiempo, conocido como latencia, la CPU no está siendo usada.

Herramientas de gestión de procesos

Todos los sistemas operativos con interfaz gráfica disponen de alguna aplicación de gestión de procesos. En Windows tenemos el Administrador de tareas, en Linux el Monitor del sistema y en MacOS Monitor de actividad. Todos son bastante parecidos, y nos ofrecen funcionalidad similares:

  • Listado de todos los procesos que se encuentran activos en el sistema, mostrando su PID, usuario y ubicación de su fichero ejecutable.
  • Posibilidad de finalizar procesos.
  • Información sobre el uso de CPU, memoria principal y virtual, red, …
  • Posibilidad de cambiar la prioridad de ejecución de los procesos

Sin embargo, es interesante que conozcamos los comandos (órdenes) de consola para la gestión de procesos en los distintos sistemas operativos.

Así, en Windows tenemos:

  • tasklist: para listar los procesos presentes en el sistema. Mostrará el nombre del ejecutable, su correspondiente identificador de proceso (PID) y el porcentaje de uso de memoria, entre otros datos.
  • taskkill pid: que nos permite finalizar (matar) el proceso especificado.

En sistemas Linux, tenemos los siguiente comandos relacionados con los procesos:

  • ps: Lista los procesos presentes en el sistema. Con la opción aux muestra todos los procesos del sistema independientemente del usuario que los haya lanzado.
  • pstree: Muestra un listado de procesos en forma de árbol, mostrando qué procesos han creado otros. Con la opción AGu construirá el árbol utilizando líneas guía y mostrará el nombre de usuario propietario del proceso.
  • kill: Manda señales a los procesos. La señal -9, matará al proceso. Se utiliza kill -9 pid.
  • killall: Mata procesos por su nombre. Se utiliza como killall nombreDeAplicacion.
  • nice: Cambia la prioridad de un proceso. nice -n 5 comando ejecutará el comando con una prioridad 5. Por defecto la prioridad es 0. Las prioridades están entre -20 (más alta) y 19 (más baja).