1. Gestión de procesos
En esta sección se presentarán los conceptos básicos de gestión de procesos.
1
2. Gestión de procesos
La gestión de procesos es uno de los componentes principales de un sistema
operativo. Este se encarga de generar y gestionar los procesos que se ejecutan
en una CPU, y atender sus peticiones.
Un proceso se puede considerar como la abstracción de un programa en
ejecución. Se debe tener en cuenta que un programa es parte de un proceso: el
programa es el conjunto de instrucciones de máquina, que generalmente se
almacena en un archivo (ejecutable), y se carga en memoria en el momento de
su ejecución.
Debido a la arquitectura de los computadores actuales (sólo existe un PC, un
juego de registros, etc.) en la cual sólo se puede ejecutar un proceso al tiempo,
la CPU debe “saltar” de proceso en proceso, asignándole a cada uno un tiempo
de ejecución. Cada vez que se cambia el proceso que se está ejecutando se
debe salvar su estado de ejecución con el fin que pueda ser reiniciado más tarde
en el punto de ejecución en el cual se interrumpió.
2
3. Servicios de procesos
Los servicios que ofrece un sistema operativo para la gestión de procesos se pueden clasificar
en:
•Creación: La creación de procesos se puede llevar a cabo de varias maneras:
•Inicialización del sistema: En el momento de iniciar el S.O, el proceso residente puede
ejecutar otros procesos. Con frecuencia estos procesos son utilidades y servicios del
sistema, utilidades de usuario, detección e inicialización de dispositivos de Hardware,
software antivirus, etc.
•Llamadas al sistema: La interfaz de programación (API) del S.O. ofrece algunas
funciones para la creación de procesos (fork en POSIX y CreateProcess en Win32).
•Solicitud del usuario: Por medio de una interfaz de usuario textual o gráfica, el usuario
puede invocar nuevos procesos.
•Inicialización de un trabajo por lotes: Algunos sistemas operativos ofrecen algún
mecanismo para programar tareas, éstas se inician de manera automática en una
determinada fecha y hora, o cuando se cumplan ciertas condiciones (Límite de espacio
en disco, bloqueo de programas, etc).
•Gestión: La gestión de procesos incluye su planificación y administración.
•Finalización: La finalización de un proceso se puede dar de dos formas:
•Voluntaria: El proceso termina su ejecución de manera normal, mediante una llamada
exit, o cuando ocurre un error en la ejecución del programa que impide que pueda
continuar normalmente.
•Involuntaria: Debido a errores en la lógica de programación se pueden ejecutar
operaciones no válidas que producen la terminación de un proceso. De otro lado el
sistema operativo puede implementar estrategias para permitir la finalización de un
proceso.
3
4. Un proceso es un programa en ejecución gestionada por el sistema operativo.
Posee los siguientes componentes:
•Imagen de memoria: Contenido de los segmentos de memoria en los que
residen los datos y el código del proceso (programa).
•Estado del procesador: Contenido de los registros del modelo d programación
del computador.
•Estado del proceso: Es un registro que contiene la información necesaria para
identificar cada proceso.
De acuerdo al número de procesos y de usuarios que pueden utilizar un sistema
al mismo tiempo, los sistemas operativos se clasifican en:
•Monotarea: Sólo se puede ejecutar un proceso en cada momento
•Multitarea (multiproceso): Permite que coexistan varios procesos activos a la
vez. Esto no quiere decir que los procesos se ejecuten “al mismo tiempo”. El
S.O. administra el tiempo del procesador, asignándole tiempo de procesador a
cada proceso (tiempo compartido).
•Monousuario: Previsto para soportar un solo usuario. Un sistema monousuario
puede ser monotarea o multitarea.
•Multiusuario: Permite varios usuarios trabajando simultáneamente desde varios
terminales. Todo sistema operativo multiusuario es multitarea: debe implementar
estrategias de tiempo compartido.
4
5. Debido a que sólo existe un EIP (Instruction Pointer) físico, el S.O. debe
implementar estrategias para administrar el tiempo de la CPU. Cuando un
proceso entra en ejecución, existe un EIP lógico. Cuando se termina el tiempo de
CPU para el proceso, el EIP físico se almacena en el estado del proceso. De
esta manera cuando el proceso adquiera nuevamente tiempo de CPU, su
ejecución continuará en el punto en el cual fue interrumpido.
La gráfica ilustra la administración de tiempo de la CPU: el S.O. asigna
determinado tiempo a cada proceso (1 unidad, en este caso), luego que termina
este tiempo el proceso debe abandonar la CPU y ceder el turno a otro proceso.
5
6. A medida que avanza el uso de los servicios del S.O. por parte del usuario, se
van creando y terminando procesos. Estos se encuentran organizados en una
jerarquía que comienza con el “primer” proceso que se ejecutó, y a partir del cual
se crearon los demás procesos.
En sistemas POSIX, el primer proceso en ser ejecutado es el proceso
denominado “Init”, que recibe un Identificador de Proceso (PID) de 1. Este
proceso se encarga de ejecutar los servicios de arranque del sistema operativo,
y los procesos para inicio de sesión.
De forma general, el PID de un nuevo proceso que se crea en POSIX
corresponde al PID de su proceso padre + 1.
6
7. Estado del proceso
El S.O. mantiene por cada proceso una serie de estructuras de información que
le permite identificar las características de este, así como los recursos que tiene
asignados. Una de las estructuras del S.O. es la tabla de procesos. Dentro de
esta tabla se encuentra un registro para cada proceso en memoria, llamada
Bloque de Control de Proceso.
Bloque de Control de Proceso (BCP)
Depende de cada S.O, pero a nivel general contiene la información básica del
proceso. Se actualiza cuando el proceso está en memoria pero no en ejecución.
Cuando el proceso se está ejecutando, el estado del procesador varía de
acuerdo al flujo de instrucciones de máquina ejecutado. Luego, cuando se
interrumpe el proceso la información del BCP se actualiza en memoria para
reflejar los cambios en el estado del proceso.
7
8. Información del BCP
La información del BCP se puede clasificar en:
•Información de identificación: Se utiliza para diferenciar el proceso de los demás procesos en
memoria. Para ello debe contener la siguiente información:
•Identificador del proceso (Process ID - PID): Número único que identifica al proceso. Se
asigna dinámicamente en el momento de crear el proceso y depende de la cantidad de
procesos que se encuentren en memoria en el momento de la creación. Varía cada vez
que se ejecuta nuevamente el proceso.
•Identificador del proceso padre (Parent Process ID – PPID): PID del proceso desde el
cual se generó el nuevo proceso.
•Identificador de usuario (User ID – UID). En los sistemas operativos multiusuario,
representa el identificador único de cada usuario dentro del sistema.
•Estado del procesador: Almacena los valores del estado del procesador en el momento en el
cual se interrumpió el proceso. Esto permite que el proceso pueda ser reiniciado desde el punto
en el cual fue interrumpido.
•Información de control del proceso: Contiene la información que requiere el S.O. para conocer
los mecanismos para la gestión de proceso:
•Información de planificación
•Descripción de los segmentos de memoria que utiliza el proceso
•Recursos asociados con el proceso
•Estructura del proceso
•Comunicación
8
9. Creación de procesos
Todo proceso se crea a partir de una llamada al sistema. Esta llamada se puede
realizar desde diferentes puntos:
•Proceso de usuario: Dentro de un proceso de usuario se puede realizar la
llamada al sistema para crear un nuevo proceso. Los niveles de seguridad del
S.O. determinarán si es posible crear un nuevo proceso.
•Proceso del sistema: De igual forma un proceso del sistema puede realizar la
llamada para crear nuevos procesos, este es el caso del proceso Init: Una vez
que se está ejecutando realiza llamadas al sistema para crear nuevos procesos
que se encargan de diferentes labores, como controlar los dispositivos, y
administrar los recursos del computador (CPU, memoria, sistema de archivos), y
lanzar intérpretes de comandos textuales o gráficos.
•Tareas programadas: La mayoría de sistemas operativos ejecutan un programa
especial (programador de tareas) que ejecuta tareas en un determinado
momento (cada 2 horas, diariamente, mensualmente) o cuando se cumple cierta
condición en el sistema operativo (poco espacio, falta de memoria).
La creación de procesos depende del sistema operativo, cada una recibe
determinados parámetros. Existe la llamada fork para POSIX y CreateProcess
para WIN32.
9
10. Llamada al sistema fork
La llamada fork de POSIX crea una copia exacta del proceso que la solicita. En
la gráfica, el proceso A dentro de sus instrucciones hace uso de la llamada fork().
En ese instante el S.O. crea una copia de la imagen de memoria del proceso y
de su estado (A’), y la copia en otro segmento de memoria. Esta nueva copia es
idéntica al proceso original, es decir que se tienen dos procesos que ejecutan
el mismo programa en el mismo punto. La diferencia entre el proceso A y A’
se da en algunos campos del BCP, entre los que sobresalen:
•PID: El identificador de proceso es diferente en el proceso original (padre) y en
el nuevo proceso. Generalmente el identificador del proceso hijo es el PID del
padre más uno.
•PPID: El identificador del padre del proceso original no cambia, pero el
identificador del padre del proceso hijo es el identificador del proceso original.
•PC: Cada proceso adquiere un PC lógico diferente, por estar en dos segmentos
de memoria diferentes. Sin embargo el PC de cada uno apunta a la misma
instrucción del programa.
Los dos procesos comparten los descriptores de archivo que existen en el
momento de realizar la llamada.
La llamada fork se acompaña de la llamada exec, que permite cambiar la imagen
de memoria del proceso por un nuevo ejecutable.
10
11. Planificación de Procesos
La planificación se refiere al mecanismo usado por el sistema operativo para
asignar la CPU a cada uno de los procesos existentes en el sistema.
Los computadores actuales pueden ejecutar un gran número de procesos, pero
sólo cuentan con un conjunto limitado de procesadores (1, 2, 4, 8).
Por esta razón el Sistema Operativo debe controlar en todo momento el uso de
la CPU (los procesadores disponibles), tratando que todos los procesos puedan
ser ejecutados.
Existen diferentes algoritmos de planificación, que se estudiarán más adelante.
Por ejemplo, se puede usar una estrategia FIFO, en la cual el proceso que
primero solicite ejecución recibe la CPU (el procesador) desde su inicio hasta
que termina. Otra estrategia común es asignar la CPU durante un determinado
periodo de tiempo, y luego asignarla a otro proceso para crear una “Ronda”
(Round-Robin). Eventualmente todos los procesos recibirán el tiempo de CPU
necesario para que completen su ejecución.
11
12. Estado de un proceso
De acuerdo a la ejecución de un proceso y de la estrategia del sistema operativo
para planificarlo, se puede encontrar en varios estados:
• Ejecución: El proceso tiene asignado tiempo de CPU para su ejecución. En
este estado el proceso puede hacer uso de los recursos del computador. En
un sistema operativo multiproceso sólo puede existir un proceso en ejecución
por cada CPU (núcleo) del procesador.
• Bloqueado: Cuando un proceso realiza una llamada al sistema, se bloquea.
El caso típico es cuando se solicita un recurso de entrada/salida, el proceso
debe esperar hasta que el dispositivo de E/S informe que esté listo. En la
gráfica, el proceso puede pasar de el estado en ejecución al estado
bloqueado cuando solicita un recurso de E/S (1). En un S.O. multiproceso,
cuando un proceso se bloquea se le asigna tiempo de CPU a otro proceso.
• Listo: El proceso se encuentra listo para recibir tiempo de CPU, pero en el
momento la CPU no se encuentra disponible. Este estado se puede dar por
dos casos: El proceso se encuentra en ejecución pero el S.O. decide que
debe otorgarle tiempo de CPU a otro proceso (2), o el proceso estaba
esperando para que finalizara una llamada al sistema (4).
12
13. Otro diagrama de estados de un proceso incluye un nuevo estado (suspendido).
Este estado aparece cuando el sistema maneja memoria virtual, y debido a las
necesidades de memoria del S.O, el segmento de memoria en el que se
encuentra el proceso es llevado a memoria de intercambio (Swapping). Los
procesos entonces pasan a un estado de “Suspendido”. Luego que se recuperan
los segmentos de memoria que el S.O. ha llevado a memoria de intercambio, el
proceso puede pasar nuevamente al estado de listo.
13
14. En este espacio se ilustra el uso de las llamadas al sistema fork() y excec()
14
15. En este espacio se ilustra el uso de las llamadas al sistema fork() y excec()
15