← Blog

Procesos — Referencia de Conceptos

Conceptos fundamentales sobre procesos en sistemas operativos: modelo de procesos, creación, terminación y estados.

Tesis

Un proceso es la abstracción fundamental que proveen los SO para ejecución concurrente: una instancia de un programa en ejecución con su propio contador de programa, registros y variables. A diferencia de un programa (código almacenado), un proceso es una actividad dinámica. Sin esta abstracción, la computación moderna no existiría.

Desglose del modelo de procesos

Multiprogramación y pseudoparalelismo

En sistemas con una sola CPU, los procesos simulan múltiples CPUs virtuales mediante multiprogramación (pseudoparalelismo): el CPU cambia rápidamente entre procesos cada pocos milisegundos, creando la ilusión de ejecución simultánea. Solo un proceso se ejecuta a la vez, pero todos avanzan con el tiempo.

Consecuencia práctica: no programar procesos con supuestos sobre su velocidad de ejecución — el cambio de contexto afecta el ritmo. Si un proceso de audio se sincroniza con un bucle de espera, audio y video pueden desincronizarse; los requisitos críticos de tiempo real exigen medidas especiales.

Elementos y analogía

Un proceso se compone de programa, entrada, salida y estado. En la analogía del pastel: la receta es el programa, el científico es el procesador (CPU) y hornear es el proceso. Cuando el hijo interrumpe al padre, el estado del proceso actual se guarda y se cambia a otro de mayor prioridad; cambiar de receta equivale a cambiar de programa entre procesos.

El SO puede compartir el código en memoria si dos procesos ejecutan el mismo programa — siguen siendo procesos distintos. Ejecutar el mismo programa dos veces son dos procesos.

Proceso vs. programa

Un proceso es una actividad en ejecución; un programa es solo código almacenado. El modelo conceptual de procesos secuenciales se desarrolló para facilitar el manejo del paralelismo: cada proceso tiene su propio flujo de control (CPU virtual), el contador lógico se guarda en memoria al cambiar de proceso y se carga el del nuevo.

Creación de procesos

Cuatro eventos principales crean procesos: inicialización del sistema, llamada del sistema por un proceso en ejecución, solicitud del usuario, e inicio de un trabajo por lotes (batch job).

  • Durante el arranque se crean procesos en primer plano y en segundo plano (daemons, que esperan eventos como emails o solicitudes web). Ver con ps (UNIX) o el Administrador de tareas (Windows).
  • Un proceso crea otros para dividir trabajo en tareas independientes (ej. descarga y procesamiento en red ejecutándose en paralelo, incluso en distintas CPUs).
  • En sistemas interactivos se crea un proceso al escribir un comando o hacer doble clic en un ícono. En UNIX con X Window System y en Windows, cada ventana suele representar un proceso distinto.
  • En mainframes batch, los procesos se crean mediante trabajos por lotes.

Mecánica técnica: en todos los casos, un proceso existente ejecuta una llamada al sistema para crear otro. Un sistema recién arrancado necesita un proceso inicial creado manualmente durante el boot.

UNIX: dos pasos — fork (clona exactamente al padre: padre e hijo con la misma imagen de memoria) y execve (ejecuta un nuevo programa). El enfoque en dos pasos permite que el hijo redirija entrada/salida antes de ejecutar el nuevo programa. El hijo recibe una copia del espacio de direcciones del padre (independiente); UNIX usa copy-on-write para compartir memoria asegurando independencia en escritura. Los cambios de memoria no son visibles entre padre e hijo, pero sí pueden compartir recursos como archivos abiertos.

Windows: CreateProcess crea el proceso y carga el programa en un solo paso, con 10 parámetros (programa, parámetros, atributos de seguridad, herencia de archivos, prioridad, ventana, etc.).

Terminación de procesos

Cuatro causas: salida normal, salida por error, error fatal, o terminación por otro proceso.

  • Salida normal (voluntaria): exit (UNIX) / ExitProcess (Windows). Los programas interactivos suelen eliminar archivos temporales antes de finalizar; un compilador informa del error y termina si el archivo no existe; los procesos interactivos muestran un diálogo ante parámetros incorrectos.
  • Error fatal (involuntaria): instrucciones ilegales, memoria inexistente, división por cero.
  • Manejo de señales: un proceso en UNIX puede solicitar al SO manejar ciertos errores mediante señales en lugar de terminar.
  • Terminación por otro proceso: kill (UNIX) / TerminateProcess (Windows), siempre que se tenga la autorización necesaria. Ni UNIX ni Windows eliminan automáticamente los procesos creados por uno que termina.

Estados y planificación

Los procesos a veces interactúan: uno genera salida que otro necesita como entrada. Si no hay datos, el proceso se bloquea hasta que haya entrada disponible.

Tres estados principales:

Estado Significado
running Usa el CPU en ese instante
ready Puede ejecutarse, pero el CPU está ocupado con otro proceso
blocked No puede ejecutarse hasta que ocurra un evento externo

Transiciones: (1) running → blocked (el proceso descubre que no puede continuar); (2) running → ready (el planificador cambia el proceso activo); (3) ready → running (un proceso listo es elegido); (4) blocked → ready (ocurre el evento externo esperado).

El planificador (scheduler) decide qué proceso se ejecuta, cuándo y por cuánto tiempo, gestionando las transiciones sin que el proceso lo sepa. Un proceso puede bloquearse voluntariamente vía llamada al sistema (ej. pause); en UNIX, leer de un pipe sin datos lo bloquea automáticamente. Si el evento externo ocurre y no hay otro proceso corriendo, pasa directo de blocked a running; si el CPU está ocupado, pasa a ready y espera su turno.

Q&A de referencia

Modelo de procesos

  • ¿Qué abstracción fundamental proveen los SO para operaciones concurrentes? Los procesos.
  • ¿Qué permiten hacer con una sola CPU? Simular operación concurrente (pseudo-concurrencia), múltiples CPUs virtuales.
  • ¿Por qué es importante la abstracción de procesos? Sin ella, la computación moderna no podría existir.
  • ¿Qué pasa cuando un servidor web recibe múltiples solicitudes mientras espera una lectura de disco? Se inician otras solicitudes mientras se espera que la primera se complete.
  • ¿Qué modela y controla la concurrencia en servidores web? Los procesos y especialmente los hilos (threads).
  • ¿Qué procesos se inician al boot sin que el usuario lo note? Procesos en segundo plano (esperan correos, actualizan antivirus).
  • ¿Qué permite imprimir o hacer backups mientras se navega? Un sistema de multiprogramación con soporte para múltiples procesos.
  • ¿Qué dispositivos simples además de PCs soportan múltiples procesos? Smartphones y tablets.
  • ¿Cómo se logra la ilusión de paralelismo en un solo CPU? Cambiando rápidamente de proceso cada pocos milisegundos (pseudoparalelismo).
  • ¿Cómo se diferencia del paralelismo real? El real ocurre con múltiples CPUs físicas compartiendo memoria.
  • ¿Por qué se desarrolló un modelo conceptual de procesos secuenciales? Para facilitar el manejo del paralelismo por parte de los diseñadores de SO.
  • ¿Cómo se organiza todo el software ejecutable en el modelo de procesos? En un conjunto de procesos secuenciales.
  • ¿Qué es un proceso? Una instancia de un programa en ejecución, con contador de programa, registros y variables.
  • ¿Qué tiene conceptualmente cada proceso? Su propia CPU virtual.
  • ¿Qué sucede con el contador al cambiar de proceso? Se guarda el contador lógico en memoria y se carga el del nuevo proceso.
  • ¿Qué suposición hay en este capítulo? Que solo hay una CPU; en sistemas multinúcleo, cada núcleo ejecuta solo un proceso a la vez.
  • ¿Por qué el rendimiento de un proceso no es uniforme ni reproducible? Porque el CPU cambia entre procesos y afecta el ritmo.
  • ¿Qué hacer con requisitos críticos de tiempo real? Tomar medidas especiales para garantizar sincronización.
  • ¿Qué diferencia a un proceso de un programa? El proceso es actividad en ejecución; el programa es código almacenado.
  • ¿Qué elementos componen un proceso? Programa, entrada, salida y estado.
  • ¿Qué determina cuándo detener un proceso y ejecutar otro? Un algoritmo de planificación.

Creación

  • ¿Qué necesitan los SO para ejecutar nuevos programas durante la operación? Un mecanismo para crear y terminar procesos.
  • ¿Qué es un daemon? Un proceso que permanece en segundo plano esperando eventos (emails, solicitudes web).
  • ¿Qué comando lista procesos en UNIX? ps.
  • ¿Qué herramienta en Windows? Administrador de tareas (Task Manager).
  • ¿Por qué un proceso crea otros? Para dividir el trabajo en tareas independientes ejecutables en paralelo.
  • ¿Cómo se inicia un proceso en sistemas interactivos? Escribiendo un comando o haciendo doble clic en un ícono.
  • ¿En qué sistemas cada ventana es un proceso distinto? UNIX con X Window System y Windows.
  • ¿En qué sistemas se crean procesos por trabajos por lotes? En sistemas batch de mainframes.
  • ¿Cómo se ejecuta técnicamente la creación? Un proceso existente ejecuta una llamada al sistema para crear otro.
  • ¿Qué se necesita en un sistema recién arrancado? Un proceso inicial creado manualmente durante el arranque.
  • ¿Qué crea fork? Un clon exacto del proceso que la invoca (padre e hijo con misma imagen de memoria).
  • ¿Qué llamada se usa después de fork para ejecutar un nuevo programa? execve.
  • ¿Por qué dos pasos? Para que el hijo pueda redirigir entrada/salida antes de ejecutar el nuevo programa.
  • ¿Qué hace CreateProcess en Windows? Crea el proceso y carga el programa a la vez; 10 parámetros (programa, parámetros, seguridad, herencia de archivos, prioridad, ventana, etc.).
  • ¿Se comparten los cambios de memoria entre padre e hijo? No, los cambios no son visibles entre ellos.
  • ¿Cómo maneja UNIX tradicional el espacio del hijo? Como copia del espacio del padre, pero separado.
  • ¿Qué técnica usa UNIX para compartir memoria con independencia en escritura? Copy-on-write.
  • ¿Pueden los procesos recién creados compartir archivos abiertos con su creador? Sí.

Terminación

  • ¿Cuáles son las cuatro causas de terminación? Salida normal, salida por error, error fatal, o ser terminado por otro proceso.
  • ¿Qué llamada usa UNIX para terminación voluntaria? exit; Windows: ExitProcess.
  • ¿Qué causa terminación involuntaria por error fatal? Instrucciones ilegales, memoria inexistente, división por cero.
  • ¿Qué puede hacer un proceso UNIX para manejar errores en lugar de terminar? Solicitar al SO manejar señales en lugar de terminar.
  • ¿Qué llamada usa UNIX para terminar a otro proceso? kill; Windows: TerminateProcess.
  • ¿Qué requisito hay para matar a otro proceso? Tener la autorización necesaria.
  • ¿Se eliminan automáticamente los procesos creados por uno que termina? No, ni UNIX ni Windows funcionan así.

Estados

  • ¿Por qué los procesos a veces interactúan? Porque uno genera salida que otro necesita como entrada.
  • ¿Qué significa "blocked"? Que no puede continuar porque espera un evento externo, como entrada.
  • ¿Qué pasa si un proceso puede continuar pero el CPU se asigna a otro? Es detenido temporalmente por decisión del SO.
  • ¿Cuáles son los tres estados? running, ready y blocked.
  • ¿Qué transiciones existen? (1) running→blocked, (2) running→ready, (3) ready→running, (4) blocked→ready.
  • ¿Puede un proceso bloquearse voluntariamente? Sí, con llamadas como pause; en UNIX, leer un pipe vacío lo bloquea automáticamente.
  • ¿Quién causa las transiciones sin que el proceso lo sepa? El scheduler.
  • ¿Qué pasa si el evento ocurre sin otro proceso corriendo? Pasa directamente de blocked a running.
  • ¿Qué pasa si el CPU está ocupado? Pasa de blocked a ready y espera su turno.
  • ¿Qué pasa con una interrupción de disco mientras otro proceso se ejecuta? El sistema detiene el proceso actual y activa el de disco que estaba bloqueado.
  • ¿Dónde se ubica el scheduler? En el nivel más bajo del SO estructurado por procesos; por encima, los procesos secuenciales del sistema y del usuario.