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
forkpara 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
CreateProcessen 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.