Saltar al contenido principal

Procesos en sistemas Windows y Linux

Documento escrito por: Fernando Lucendo García

Puedes ver todos los documentos de este autor aquí.

¿Qué es un proceso?

Es la abstracción de un programa en ejecución, la unidad de trabajo del sistema.

Definición sencilla: es un programa en ejecución.

Conceptos previos:

SO: Sistema operativo.

Para ejecutar un programa, el SO debe lanzar un proceso o procesos ejecutados por el microprocesador.

¿Cuándo se crea un proceso?

  • Durante el arranque del SO.
  • Un proceso hace una llamada al SO.
  • Petición del usuario al SO.
  • Inicio de un trabajo por lotes.

¿Qué funciones tendrá el SO en cuanto a procesos?

  • Crear y eliminar procesos de usuario y sistema.
  • Suspender y reanudar ejecución de procesos.
  • Dar una sincronización, comunicación y planificación de procesos

TiposProcesos

SCB – System Control Block

Bloque de Control del Sistema

Para que nuestro SO gestione debidamente los procesos tiene que guardar información sobre estos procesos:

  • Lista de descriptores de procesos
  • Puntero al descriptor de proceso que usa la CPU
  • Puntero a cola de procesos que está en distintos estados.
  • Identificadores de rutinas para interrupciones HW o SW y errores.

El SCB gestiona una tabla de procesos y cada proceso tiene un PCB

SCB

PCB – Process Control Block

Bloque de Control de Procesos

Es creado por el SO cada vez que hay un nuevo proceso. Los procesos conocidos para el SO son elegibles para competir por los recursos cuando hay un PCB activo asociado a ellos. Cuando termina el programa, el PCB se elimina dejando espacio libre en registro para otros PCB.

El PCB se le denomina Task Struct en Linux.

Información del PCB:

  • Identificación:

    • ID del proceso
    • ID del proceso padre
    • ID del usuario y grupo propietario
  • Planificación:

    • Estado del proceso
    • Si el estado es bloqueado, el evento por el que espera el proceso
    • Prioridad del proceso
    • Otra información usada como contadores, colas, etc…
  • Punteros a segmentos de memoria asignados:

    • Segmento de datos, código y de pila.
  • Recursos asignados:

    • Archivos abiertos: Tabla de manejadores de archivos o de descriptores
    • Puertos de comunicación asignados
  • Punteros para organizar los procesos en colas

  • Información para comunicación entre procesos con señales y mensajes

Estados de un proceso

Un proceso puede pasar por diferentes estados, que se resumen en:

  • Nuevo: Está siendo creado.
  • En ejecución: Está haciendo uso del microprocesador.
  • Bloqueado: No puede ejecutarse hasta que termine un evento externo.
  • Preparado: Está listo para ser ejecutado.
  • Terminado: Ha finalizado su ejecución.

Cuando un proceso finaliza su ejecución puede ser por:

  • Ha finalizado normalmente.
  • Ha finalizado con error.
  • Ha finalizado por error fatal.
  • Ha finalizado por otro proceso.

Transiciones de un estado

  • Paso a ejecución: se toma el primero de la cola de preparados cuando el reloj interrumpa el que estaba ejecutándose
  • Paso a preparado: (3 motivos)
    • Creación: se carga el programa en memoria
    • Desde ejecución: la CPU ejecutará otro proceso (cambio de contexto)
    • Desde bloqueado: acabó una operación de E/S por la que esperaba.
  • Paso a bloqueado:
    • Desde ejecución: Se interrumpe para solicitar E/S

Cambio de contexto: Es la ejecución de una rutina del núcleo del SO multitarea de un PC, cuyo propósito es parar la ejecución de un hilo o proceso para ejecutar otro distinto.

La función del SO que realiza los cambios de contexto es el PLANIFICADOR, que se encarga de:

  • Salvar el contexto del proceso que deja la CPU en su PCB.
  • Quita el PCB del proceso que sale de la cola de ejecución. La cola de destino dependerá del motivo del cambio de contexto.
  • Elige un nuevo proceso para entrar a ejecución. Esto lo hace el scheduler.
  • Se mueve el PCB del proceso seleccionado a la cola de ejecución.
  • Se restaura el contexto del proceso seleccionado para ejecutarse y se le da control.

Interrupciones

Permiten al SO controlar la CPU. Se produce cuando:

  • Hay algún tipo de error.
  • Hay un evento externo.
  • Se ha agotado el límite de tiempo.

Cuando hay una interrupción el proceso que se ejecuta pasará a bloqueado.

Prioridades

Los SO cuentan con un planificador que decide qué proceso tiene prioridad. Tomar esta decisión y el tiempo de ejecución lo dará un algoritmo de planificación.

La planificación de procesos tiene como objetivos:

  • Equidad: Todos los procesos deben atenderse.
  • Eficacia: El procesador debe estar siempre ocupado.
  • Tiempo de respuesta: Este tiempo debe ser el menor posible.
  • Tiempo de retorno: Reducir el tiempo que tarda el proceso al mínimo.
  • Rendimiento: Maximizar el número de tareas procesadas.

Algoritmos de planificación

FCFS = FIFO

Primero en llegar primero en servirse (First Come First Served).

Usa un orden de llegada. Si llega un proceso se pone en la cola detrás del que llegó antes que él y está listo para ejecutarse. Cuando comienza la ejecución no se interrumpe hasta terminar.

SJF

Primero el más corto (Shortest Job First).

Puede ser apropiativo o no apropiativo. Cada proceso tiene un tiempo que usará cuando vuelva a ejecutarse, y se irá ejecutando el que tenga menor tiempo. Si dos procesos tienen el mismo tiempo, se emplea FCFS.

Round Robin

Cada proceso tiene un tiempo determinado para ejecutarse. Si un proceso no termina continuará ejecutándose después de que todos los procesos cumplan su tiempo de ejecución.

Apropiativo

Es apropiativo cuando el proceso que se está ejecutando se adueña de la CPU y ningún proceso se la puede quitar tenga mayor o menor prioridad.

No apropiativo

Es no apropiativo cuando el proceso que entra puede obtener el dominio de la CPU si tiene una prioridad mayor.

Planificación por prioridad

Este tipo de planificación asigna una prioridad a cada proceso según un criterio y se atenderá cada proceso en función de su prioridad.

Planificación garantizada

En esta planificación el sistema cuenta el número de usuarios que deben atenderse. Se asignará un tiempo de ejecución 1/n a cada usuario. Siendo "n" el número de usuarios.

MQS

Multilevel Queue Scheduling o Planificación de Colas Múltiples

En este algoritmo la cola de procesos que se encuentran en estado de listos se divide en subcolas más pequeñas. Se clasifican los procesos para determinar la cola donde se irá. Cada cola puede manejar un algoritmo distinto a las demás.

Tiempos

En la planificación de procesos se tiene en cuenta los diferentes tiempos que pueden ser calculados, como son:

Tiempo de espera

Tiempo total que pasa un proceso en la cola de preparados

Tiempo de espera medio

Promedio de tiempos donde los procesos están listos

  • En FCFS este tiempo suele ser largo.
  • En SJF, para procesos largos tienen este tiempo muy grande, ya que se ejecutarán continuamente procesos más cortos y los largos esperarán.
  • En Planificación por prioridad los procesos de prioridad baja podrían no ejecutarse. El programa soluciona esto elevando su prioridad.

Tiempo de retorno

Tiempo que transcurre desde la creación de un proceso hasta que termina su ejecución.

Tiempo de retorno normalizado

Tiempo Retorno Normalizado = Tiempo Retorno / Tiempo Servicio

Tiempo de retorno medio

Suma de los tiempos de retorno de cada proceso dividido entre el número total de procesos.

Tiempo de servicio

Tiempo que consumiría si fuese el único proceso existente. Es el tiempo de retorno menos el tiempo de espera. Tiempo de servicio = Tiempo Retorno - Tiempo Espera

Comunicación de procesos

Cuando un proceso se ejecuta de forma concurrente puede ser:

  • Independientes: no puede verse alterado por otro proceso.
  • Cooperativos: el proceso es afectado y afecta a los demás procesos.

Cuando los procesos son cooperativos debe haber mecanismos para compartir datos entre los procesos, el llamado IPC (InterProcess Communication). Razones para proporcionar entornos que permitan cooperación de procesos:

  • Compartir información.
  • Acelerar cálculos.
  • Permitir modularidad.

Mecanismos de IPC

  • Memoria compartida:
    • Permite compartir un segmento de memoria a dos o más procesos y por consiguiente sus datos.
    • La gestión del acceso se realiza por semáforos, usando las operaciones "wait" y "signal".
  • Colas de mensajes:
    • Cada proceso tiene su propia cola de mensajes.
    • Si un proceso quiere mandar un mensaje lo manda a su cola de mensajes y queda almacenado ahí.
    • Si un proceso extrae un mensaje de la cola, extrae el primer mensaje que se introdujo y se borra de la cola.

Otros mecanismos

Además del IPC existen otros más rudimentarios para comunicar procesos:

  • A través de variables de entorno: Solo es posible de padres a hijos.

  • Mediante señales: Indica que algo ha ocurrido y lleva como información de un número de señal.

  • Mediante redirección de la entrada salida (tuberías):

    • La forma más corriente a nivel de shell.

    • Es una forma práctica de redireccionar la salida estándar de un programa hacia la entrada estándar de otro.

    • Para ello se usa el símbolo | (pipe o tubería).

      Ejemplo: ps -a | sort

Hilos de ejecución

Podemos definir un hilo, hebra o subproceso (en inglés "thread") como la unidad de procesamiento más pequeña planificada por el sistema operativo.

  • Permite a la aplicación realizar varias tareas a la vez.
  • Los sistemas con varias CPUs permiten aumentar mucho el rendimiento del proceso.
  • Comparten recursos como: Espacio de memoria, archivos abiertos...
  • Algunos lenguajes permiten lidiar con los hilos de forma transparente (Java), pero en otros se necesita crearlos (C y C++).

Diferencia entre hilos y núcleos

Es fácil confundirlos por culpa de los fabricantes de microprocesadores.

  • Diferencia: Los hilos se distinguen de los procesos en que los procesos son independientes.
  • Ventajas:
    • Se tarda menos en crear un hilo nuevo en un proceso existente.
    • Un hilo termina antes que un proceso. Un proceso acabado tiene que eliminar su PCB, mientras que un hilo elimina su contexto y pila.
    • Se tarda menos en cambiar entre dos hilos de un mismo proceso.
    • Los hilos aumentan la eficiencia entre los programas.

Estado de un proceso con hilos

El estado del proceso dependerá del estado de sus hilos:

  • Hilo en ejecución - Proceso en ejecución.
  • No hay hilo en ejecución, pero sí preparado - Proceso preparado.
  • Hilos bloqueados - Proceso bloqueado.

Gestión de procesos en sistemas Windows

Conceptos previos:

PID: Identificador del proceso.

PPID: Identificador del proceso padre.

Usando el modo comando, en el CMD podemos utilizar los siguientes:

TASKLIST: Lista todos los procesos

Tasklist options

Ejemplos:

Ver la información detallada de las aplicaciones ejecutandose en el equipo.

TASKLIST /V /FI "STATUS eq running"

Muestra todas las tareas que usan el módulo ntdll.dll.

TASKLIST /M ntdll.dll

Muestra los procesos con un PID mayor que 1000

TASKLIST /V /FI "PID gt 1000"


TASKKILL: Detiene tareas o procesos usando el PID.

Taskkill Options

Ejemplos:

Finaliza el proceso Bloc de notas de Windows

TASKKILL /F /IM notepad.exe

Cierra el proceso con el número de identidad 1250

TASKKILL /PID 1250

Cierra la consola de CMD y todos los procesos secundarios iniciados por ella.

TASKKILL /F /IM cmd.exe /T

Gestión de procesos en sistemas Linux

Conceptos previos:

NICE Number: prioridad asignada al ejecutarlo.

tty: terminal en el que se está ejecutando.

RUID: identificador del usuario real, el que lo ejecutó.

EUID: identificador del usuario efectivo.

RGID: identificador del grupo real, grupo del usuario que lo ejecutó.

EGID: identificador del grupo efectivo.

Usando el modo comando, en la terminal podemos utilizar los siguientes:

ComandoDescripción
psgrepMuestra el ID de un proceso
psMuestra la lista de procesos de un usuario
ps auxMuestra la lista de procesos de la máquina
pstreeMuestra los procesos en forma de árbol
killMata un proceso por su ID de proceso
killallMata todas las instancias de un proceso
pkillMata un proceso por su nombre
topMuestra los procesos que se ejecutan y permite matarlos
htopUna mejora de HTOP respecto a TOP es la navegación entre procesos
nicePermite cambiar prioridad de un proceso al iniciar su ejecución de nuevo
renicePermite cambiar prioridad de un proceso en tiempo real
timeMide el tiempo que tarda en ejecutarse un proceso
fgMueve el proceso a primer plano
bgMueve el proceso a segundo plano
&Colocado al final de la línea de un comando, lo ejecuta en 2º plano

Todo lo que se está ejecutando en el sistema es un proceso, incluyendo el shell, la interfaz gráfica...

Sabías que ...?

Demonios: es el nombre que reciben los procesos del sistema, funcionan solos y no interactúan con el usuario.

Procesos en primer o segundo plano

  • Un proceso que corre en primer plano ("fg" de foreground), es introducido por teclado y muestra una ventana de terminal.
  • Puede ser cancelado con la combinación CTRL+C.
  • Para cancelar un proceso en segundo plano necesitamos el comando kill.
Información

man antes de ejecutar algún comando podemos comprobar cuales son todas sus opciones y atributos así como su sintaxis en el propio sistema operativo. Por ejemplo para obtener el manual completo de uso del comando ps escribiremos en una terminal el comando man ps

Procesos batch

No necesitan interacción con el usuario, corren en segundo plano ("bg" de background).

Control y gestión de la actividad de la CPU

Algunos comandos más:

  • uptime

    Devuelve la hora actual, el tiempo que lleva en marcha, usuarios conectados y carga media del sistema en los últimos 1, 5 y 15 minutos.

  • ps -e

    Muestra todos los procesos tanto los del sistema como los de los usuarios.

  • top

    Esta orden permite realizar una serie de tareas sobre los procesos, como por ejemplo:

    • Cambiar la prioridad de alguno utilizando la opción r.
    • Matar o enviar una señal con la opción k.
    • Ordenarlos por diferentes criterios: PID con N, uso de CPU con P, tiempo con A.
    • Con n se cambia el número de procesos que se muestra.
    • Para salir se usa la letra q.
  • nohup y &

    Utilizado para ejecutar procesos en background (segundo plano). La diferencia entre ambos es que & depende del terminal donde se ejecuta, si se cierra termina su ejecución. Si queremos que aún cerrando la terminal se mantenga el proceso debemos usar los dos, nohup &.

  • jobs

    Este comando lista los procesos actuales en ejecución. Agregando un número de trabajo junto a cada proceso, un símbolo (+) o (-), que indicará cual de estos procesos estará al frente con el + y cuál de ellos estará en segundo plano, y además de esto tendrá un estado que indicará cómo se encuentra ese proceso (Running, Stopped...).

    Listar_Jobs

  • mpstat

    Muestra estadísticas del procesador y la media global de todos los datos.

    • Sintaxis: mpstat intervalo número

      - Intervalo: cada cuántos segundos se muestran los datos.
      - Número: cuántos muestreos se solicita.

      Para instalar la herramienta debes ejecutar apt-get install sysstat.

  • vmstat

    Información sobre la memoria virtual.

  • w

    Quién está conectado y qué está haciendo.

Número NICE y prioridad de procesos

Al lanzar un proceso se le asigna un valor de prioridad estática, el llamado número nice. La prioridad dinámica del proceso se calcula con el número nice junto a su consumo de CPU.

Información:

NICE NUMBER un número positivo aquí significa menor prioridad, un número negativo indica mayor prioridad. Siendo -20 la prioridad mayor y 20 la prioridad menor. Mejorar la prioridad de un proceso sólo puede hacerlo un root.

Ejemplo de sintaxis

nice -5 konqueror - Bajar en 5 la prioridad.

nice --10 konqueror - Mejorar en 10 la prioridad.

renice 14 2579 - Asignarle una prioridad 14 al proceso con PID 2579.

Señales

A veces necesitamos enviar señales a los procesos para pararlos, eliminarlos, hacerlos continuar, etc.

kill [-señal] pid - Enviar una señal, siendo pid el identificador de proceso.

kill pid - Terminar el proceso del pid indicado de forma "correcta". Puede ser capturado y envía la señal SIGTERM (15).

killall [-señal] programa - Envía una señal a todos los procesos indicados por el nombre del programa. Ejemplo: killall -15 bash.

pkill ó skill - Envía una señal usando nombre u otros atributos (UID, GID...).

Información:

kill -l Lista todas las posibles señales que se pueden enviar a un proceso.

Lista_Señales

Ejemplo de sintaxis de señales

kill -9 3452 - Termina o mata un proceso completamente (-9 = SIGKILL).

kill -SIGKILL 3452 - Hace lo mismo que la anterior señal.

Las señales más usadas son:

  • SIGHUP (1) para obligar al proceso a releer sus archivos durante la ejecución.
  • SIGKILL (9) para terminar un proceso.
  • SIGCONT (18) para continuar un proceso o programa.
  • SIGSTOP (19) detiene momentaneamente la ejecución de un proceso o programa.
  • SIGTSTP (20) Igual que la anterior.

Ejercicios para practicar

WINDOWS

  1. Crear en el escritorio una lista detallada de los procesos en ejecución en un archivo CSV que se puede abrir con Excel.

  2. Crear en el escritorio una lista sencilla de los procesos en ejecución con los servicios hospedados en cada proceso, en un archivo de texto TXT que se abre con el Bloc de notas.

  3. Ver información detallada de las aplicaciones ejecutándose en el equipo.

  4. Cierra la consola de CMD y todos los procesos secundarios iniciados por ella

  5. Permite cerrar el explorador de Windows ante un bloqueo y a continuación volverlo a iniciar.

LINUX

  1. Ejecute el comando sleep 1111 en segundo plano. ¿Qué significa lo que retorna a la pantalla?

  2. Ejecute en primer plano el comando sleep 4444. Después intente recuperar el control de su shell actual

  3. Pare el proceso sleep 1111 utilizando su número de trabajo

  4. Visualizar mediante el editor vi el archivo que contiene la información de los usuarios del sistema. Ejecutar el programa vi con la máxima prioridad posible.

  5. Mediante la orden top establecer una prioridad normal al editor vi y después terminar el proceso del editor.

  6. Elimina un proceso que lleve más de n minutos ejecutándose.

Soluciones de los ejercicios

  1. TASKLIST /FO CSV > procesos.csv

  2. TASKLIST /FI “STATUS eq running” /SVC /FO LIST > ejercicio2.txt

  3. TASKLIST /V /FI "STATUS eq running"

  4. TASKKILL /F /IM cmd.exe /T

  5. TASKKILL /IM explorer.exe /FI "STATUS eq NOT RESPONDING" & start explorer.exe

  6. sleep 1111 & La pantalla devuelve un número, que indica el ID del proceso asociado.

  7. sleep 4444 Para recuperar el control del shell pulsaremos CTRL+C

  8. kill -19 %2 Siendo el número 2 el número de trabajo.

  9. sudo vi /etc/passwd Ejecutará el editor vi. nice -20 vi /etc/passwd Cambiará vi a la máxima prioridad.

  10. sudo top Abrirá top, donde buscaremos el proceso vi, a continuación pulsamos la letra r y escribimos su PID. Después introducimos el número NICE que queremos agregar, por ejemplo 1. Para terminar el proceso vi: En una nueva terminal pondremos sudo top y abrirá top, donde buscaremos el PID del proceso vi y luego pulsamos la letra k y escribiremos su PID. Esto enviará una señal SIGTERM y matará el proceso del PID indicado, en este caso, vi.

  11. killall -o 20m sleep Siendo 20m el tiempo (20 minutos, por ejemplo) y sleep el proceso