Toda la información necesaria para realizar un seguimiento de un proceso cuando se cambia se guarda en un paquete de datos llamado bloque de control de procesos. El bloque de control de proceso normalmente contiene:
- Un número de identificación que identifica el proceso
- Punteros a las ubicaciones en el programa y sus datos donde se produjo el último procesamiento
- Contenido del registro
- Estados de varias banderas y conmutadores
- Punteros a los límites superior e inferior de la memoria requerida para el proceso
- Una lista de archivos abiertos por el proceso
- La prioridad del proceso
- El estado de todos los/O dispositivos necesarios para el proceso
Cada proceso tiene un estado asociado a él. Muchos procesos no consumen tiempo de CPU hasta que obtienen algún tipo de entrada. Por ejemplo, un proceso puede estar esperando una pulsación de tecla del usuario. Mientras espera la pulsación de tecla, no utiliza tiempo de CPU. Mientras espera, está «suspendido». Cuando llega la pulsación de tecla, el sistema operativo cambia su estado. Cuando el estado del proceso cambia, de pendiente a activo, por ejemplo, o de suspendido a en ejecución, la información en el bloque de control de proceso debe usarse como los datos en cualquier otro programa para la ejecución directa de la parte de conmutación de tareas del sistema operativo.
Advertisement
Este intercambio de procesos ocurre sin interferencia directa del usuario, y cada proceso recibe suficientes ciclos de CPU para realizar su tarea en un tiempo razonable. Los problemas pueden comenzar si el usuario intenta tener demasiados procesos funcionando al mismo tiempo. El sistema operativo en sí requiere algunos ciclos de CPU para realizar el almacenamiento e intercambio de todos los registros, colas y pilas de los procesos de aplicación. Si se inician suficientes procesos, y si el sistema operativo no ha sido cuidadosamente diseñado, el sistema puede comenzar a usar la gran mayoría de sus ciclos de CPU disponibles para intercambiar entre procesos en lugar de ejecutar procesos. Cuando esto sucede, se llama «thrashing» y, por lo general, requiere algún tipo de intervención directa del usuario para detener los procesos y devolver el orden al sistema.
Este contenido no es compatible con este dispositivo.
Este contenido no es compatible con este dispositivo.
Una forma en que los diseñadores de sistemas operativos reducen la posibilidad de problemas es reduciendo la necesidad de nuevos procesos para realizar diversas tareas. Algunos sistemas operativos permiten un» proceso ligero», llamado subproceso, que puede lidiar con todo el trabajo intensivo de CPU de un proceso normal, pero generalmente no se ocupa de los diversos tipos de E/S y no establece estructuras que requieran el bloque de control de proceso extenso de un proceso regular. Un proceso puede iniciar muchos subprocesos u otros procesos, pero un subproceso no puede iniciar un proceso.
Hasta ahora, toda la programación que hemos discutido se ha referido a una sola CPU. En un sistema con dos o más CPU, el sistema operativo debe dividir la carga de trabajo entre las CPU, tratando de equilibrar las demandas de los procesos requeridos con los ciclos disponibles en las diferentes CPU. Los sistemas operativos asimétricos utilizan una CPU para sus propias necesidades y dividen los procesos de aplicación entre las CPU restantes. Los sistemas operativos simétricos se dividen entre las diversas CPU, equilibrando la demanda con la disponibilidad de la CPU, incluso cuando el sistema operativo en sí es todo lo que se está ejecutando.