Gestión de Procesos

Anuncio
Gestión de Procesos
Capítulo que describe cómo un sistema operativo realiza la gestión
de los procesos en ejecución en un sistema informático. Se
comenzará con una introducción a los procesos en un sistema
operativo y a los hilos de ejecución. Posteriormente se verá la
planificación de la CPU y las diferentes estrategias de planificación,
haciendo una comparativa de sus ventajas y desventajas. Se
finalizará viendo la planificación en entornos multiprocesador.
Gestión de Procesos by Rafael Lozano is licensed under a Creative Commons ReconocimientoNoComercial-CompartirIgual 3.0 España License.
Tabla de contenidos
Tabla de contenido
1 Procesos............................................................................................................................................... 1
1.1 Administración de procesos.....................................................................................................................2
1.1.1 Creación de procesos............................................................................................................................... 2
1.1.2 Terminación de procesos......................................................................................................................... 3
1.1.3 Estado de un proceso............................................................................................................................... 3
1.2 Multiprogramación......................................................................................................................................3
1.3 Bloque de control de proceso..................................................................................................................4
2 Hilos de ejecución.............................................................................................................................. 5
2.1 Implementación a nivel de usuario.........................................................................................................6
2.2 Implementación a nivel de kernel...........................................................................................................6
3 Planificación de la CPU......................................................................................................................7
3.1 Colas de planificación.................................................................................................................................8
3.2 Cambio de contexto....................................................................................................................................9
3.3 Comportamiento de un proceso.............................................................................................................9
4 Algoritmos de planificación............................................................................................................10
4.1 Objetivos de los algoritmos de planificación......................................................................................10
4.2 Planificación FCFS. Servicio por orden de llegada............................................................................12
4.3 Planificación SJF. Tiempo de ejecución más breve...........................................................................14
4.4 Planificación SRTN. El menor tiempo restante..................................................................................15
4.5 Planificación por prioridades..................................................................................................................16
4.6 Planificación por turno circular..............................................................................................................17
5 Planificación por niveles.................................................................................................................19
5.1 Planificación de colas de múltiples niveles con realimentación....................................................20
6 Planificación de múltiples procesadores....................................................................................21
7 Planificación de hilos.......................................................................................................................22
8 Bibliografía......................................................................................................................................... 23
Índice I
Rafael Lozano
Gestión de Procesos
Gestión
de procesos
1 Procesos
Una de las principales funciones de un sistema operativo es gestionar los procesos que se
ejecutan en el sistema informático en un momento dado. Se utiliza el término programa y proceso
como sinónimos cuando realmente son conceptos diferentes. En un capítulo anterior vimos la
definición de programa:
Un programa es un conjunto finito de instrucciones que realizan una tarea concreta.
El conjunto de instrucciones del programa se almacenan en forma de archivos ejecutables que
pueden ser invocados por el usuario para comenzar su ejecución.
Un proceso es un programa en ejecución junto con su entorno asociado formado por
los datos que emplea y otros que el sistema operativo utiliza para su gestión, como el
valor actual del contador de programa, registros y variables.
Si nos fijamos atentamente en las definiciones anteriores, un programa es un ente pasivo, ya
que es solo código, mientras que un proceso es activo y dinámico, ya que varía con el tiempo.
Un programa puede originar varios procesos. Por ejemplo, un usuario puede estar ejecutando
diferentes instancias del mismo programa simultáneamente. En este caso, varios procesos estarían
ejecutando el mismo programa.
Los procesos necesitan recursos hardware para su ejecución, como la CPU, espacio en
memoria, archivos y dispositivos de E/S. Estos recursos son asignados por el sistema operativo al
proceso en el momento de crearlo, es decir, cuando comienza su ejecución, o mientras se está
Página 1
Rafael Lozano
Gestión de procesos
ejecutando, ya que las necesidades de recursos hardware por parte de los procesos puede cambiar
durante su ejecución.
En la mayoría de los sistemas operativos el proceso es la unidad de trabajo, es decir, los
sistemas consisten en un conjunto de procesos. Los procesos del SO ejecutan el código del sistema y
los procesos de los usuarios ejecutan el código del usuario. En potencia, todos estos procesos
pueden ejecutarse concurrentemente, y la CPU o varias de ellas se multiplexan entre ellos. Al
conmutar la CPU entre procesos, el SO puede hacer más productivo al ordenador.
1.1 Administración de procesos
El SO es responsable de las siguientes actividades relacionadas con la administración de
procesos: la creación y eliminación de procesos tanto del sistema como de los usuarios, la
planificación de procesos y el suministro de mecanismos para la sincronización, comunicación y
manejo de bloqueos mutuos entre procesos.
1.1.1 Creación de procesos
En un sistema informático de propósito general se necesita cierta forma de crear y terminar
procesos según sea necesario durante la operación del sistema. Hay cuatro eventos principales que
provocan la creación de procesos:
1. Durante el arranque del sistema.
2. La ejecución, desde un proceso, de una llamada al sistema para creación de procesos.
3. Una petición de usuario para crear un proceso.
4. El inicio de un trabajo por lotes.
Generalmente, cuando se arranca un sistema operativo se crean varios procesos y en función
de su interactividad con el usuario, estos pueden ser:
✔
Procesos en primer plano.- Son procesos que interactúan con los usuarios y realizan trabajo
para ellos.
✔
Procesos en segundo plano.- No están asociados con usuarios específicos sino con una
función específica.
En un proceso en segundo plano no hay intervención del usuario y generalmente se ejecuta sin
que éste se de cuenta. Por ejemplo, un proceso en segundo plano puede aceptar el correo
electrónico entrante, que permanece inactivo la mayor parte del día pero que se activa cuando llega
un mensaje. Otro proceso en segundo plano acepta peticiones entrantes para las páginas Web
hospedadas en ese equipo, que despierte cuando llegue una petición para darle servicio.
Los procesos que permanecen en segundo plano para manejar ciertas actividades como correo
electrónico, páginas Web, noticias, impresiones de documentos, etc, se conocen como demonios
(daemons). Los sistemas grandes tienen comúnmente docenas de ellos. En Linux/UNIX podemos
utilizar el comando ps para listar los procesos en ejecución. En Windows podemos usar el
administrador de tareas.
En los sistemas interactivos, los usuarios pueden iniciar un programa escribiendo un comando
Página 2
Rafael Lozano
Gestión de Procesos
o haciendo doble clic en un icono. Cualquiera de estas dos acciones inicia un proceso y ejecuta el
programa seleccionado. En los sistemas operativos con GUI la mayoría de estos procesos se cargarán
en una ventana y los usuarios pueden tener varias ventanas abiertas a la vez, cada una ejecutando
algún proceso. Mediante el ratón, el usuario puede seleccionar una ventana e interactuar con el
proceso.
1.1.2 Terminación de procesos
Una vez creado un proceso, empieza a ejecutarse y realiza el trabajo al que está destinado.
Tarde o temprano, el proceso terminará debido a una de las siguientes condiciones:
1. Salida normal.
2. Salida por error.
3. Error fatal.
4. Eliminado por otro proceso.
La mayoría de los procesos terminan debido a que han concluido su trabajo. Las aplicaciones
de usuario siempre tienen un icono u opción de menú en el que el usuario puede hacer clic para
indicar al proceso que elimine todos los archivos temporales que tenga abiertos y después termine.
La segunda razón de terminación es que el proceso descubra un error. Los procesos
interactivos no suelen terminar cuando reciben algún dato incorrecto. En su lugar aparece un cuadro
de diálogo y se le pide al usuario el reintento de alguna acción.
La tercera razón de terminación es un error fatal producido por el proceso, a menudo debido a
un error en el programa como por ejemplo ejecutar una instrucción ilegal, hacer referencia a una
parte de memoria no existente o la división entre cero.
1.1.3 Estado de un proceso
Al ejecutarse un proceso, éste cambia de estado. El estado de un proceso se define en parte
por la actividad de este proceso, y cada proceso puede encontrarse en uno de los tres estados
siguientes:
✔
En ejecución.- Las instrucciones del proceso se están ejecutando.
✔
En espera.- El proceso está esperando a que ocurra algún suceso (como la conclusión de una
E/S).
✔
Listo.- El proceso está esperando que se le asigne a un procesador.
Es importante observar que en un momento determinado sólo un proceso puede encontrarse
en ejecución, aunque varios procesos pueden estar listos o en espera.
1.2 Multiprogramación
Debido a la velocidad a la que operan la CPU, un solo usuario nunca puede mantener la CPU o
los dispositivos de E/S ocupados constantemente. La multiprogramación es un método para
maximizar el empleo de la CPU disponiendo en todo momento de algo que la CPU pueda ejecutar.
Página 3
Rafael Lozano
Gestión de procesos
La idea básica consiste en mantener permanentemente ocupada la CPU ejecutando algún
proceso. El SO toma uno de los procesos y empieza a ejecutarlo. En algún momento, este proceso
tendrá que esperar por algún motivo, como por ejemplo una operación de entrada de datos, que se
teclee una información desde teclado o se complete una operación de salida a disco. En un sistema
sin multiprogramación, la CPU permanecería inactiva. En un sistema con multiprogramación, el SO
sencillamente cambiará a otro proceso y lo ejecutará. Cuando este último deba esperar, la CPU
pasará a ejecutar otro proceso y así sucesivamente. Finalmente, el primer proceso habrá acabado su
espera y obtendrá la CPU de nuevo. En la medida en que siempre haya algún proceso por ejecutar, la
CPU nunca permanecerá inactiva.
Los sistemas operativos multiprogramados son bastantes sofisticados. Tener varios procesos
dispuestos para su ejecución, supone mantenerlos simultáneamente en memoria. Tener varios
programas en memoria al mismo tiempo requiere una gestión de memoria que estudiaremos más
adelante. Además, si hay varios procesos dispuestos para ejecución al mismo tiempo, el sistema
operativo tiene que decidir cuál de ellos prosigue con su ejecución. Esta es la función principal de la
planificación de la CPU.
1.3 Bloque de control de proceso
El sistema operativo necesita conocer en todo momento los procesos que hay en el sistema
para su gestión. Para ello mantiene una tabla donde cada elemento contiene toda la información
relativa a un proceso. Cada uno de estos elementos se denomina Bloque de Control de Proceso
(PCB).
En el SO, cada proceso se representa por medio de un bloque de control de proceso. Un PCB
es un bloque o registro de datos que contiene diversa información relacionada con un proceso
concreto, incluyendo:
✔
Estado del proceso.- El estado puede ser nuevo, listo, en ejecución, en espera o detenido.
✔
Contador del programa.- El contador indica la dirección de la siguiente instrucción que este
proceso ejecutará.
✔
Registros de la CPU.- Los registros varían en número y tipo, dependiendo de la arquitectura
del ordenador. Incluyen acumuladores, registro índice, apuntadores de pila y registros de
propósito general. Esta información debe guardarse, junto con el contador del programa,
cuando ocurre una interrupción para así permitir que después el proceso continúe
correctamente.
✔
Información de la planificación de la CPU.- Esta información incluye una prioridad del proceso,
punteros a las colas de planificación y otros parámetros de planificación.
✔
Información de administración de memoria.- Esta información incluye registros límites o tablas
de páginas, es decir, información sobre donde se almacena el proceso en memoria y la
información generada por él.
✔
Información contable.- Esta información incluye la cantidad de tiempo real y de la CPU
utilizado, límites de tiempo, números de cuenta, números de proceso, etc.
✔
Información del estado de la E/S.- La información incluye solicitudes de E/S pendientes,
Página 4
Rafael Lozano
Gestión de Procesos
dispositivos de E/S asignados a este proceso, una lista de archivos abiertos, etc.
2 Hilos de ejecución
Habitualmente, las instrucciones de un proceso se ejecutan secuencialmente, una detrás de
otra. Es posible que durante la ejecución del código del proceso haya saltos que provoquen una
ruptura de la secuencia de instrucciones, pero básicamente en un momento dado solo se ejecuta una
instrucción del proceso.
Sin embargo, los procesos también se pueden ejecutar concurrentemente, es decir, puede
haber múltiples procesos ejecutándose a la vez. En esta situación:
✔
Si la CPU es de un único núcleo, la concurrencia será lógica, no real, ya que existen varios
procesos para un solo procesador.
✔
En CPUs con múltiples núcleos, la concurrencia es real, ya que al existir varias unidades de
ejecución, eventualmente pueden estar todas ellas ocupadas ejecutando algún proceso en un
momento dado.
Sin embargo, el modelo anterior puede afinarse aún más dividiendo los procesos en unidades
de ejecución más pequeñas que pueden ejecutarse en paralelo. Estas unidades más pequeñas se
denominan hilos de ejecución.
Un hilo de ejecución, hebra o subproceso es la unidad de procesamiento más pequeña que
puede ser planificada por un sistema operativo. Un hilo es simplemente una tarea que puede ser
ejecutada al mismo tiempo con otra tarea. La creación de un nuevo hilo es una característica que
permite a una aplicación realizar varias tareas a la vez. Los distintos hilos de ejecución comparten una
serie de recursos tales como el espacio de memoria, los archivos abiertos, etc. Esta técnica permite
simplificar el diseño de una aplicación que debe llevar a cabo distintas funciones simultáneamente.
En los sistemas operativos multihilo, donde un proceso consta de uno o más hilos, la memoria
asignada al proceso y la información de planificación es compartida por todos los hilos.
De lo anterior se deduce que un proceso está formado por todos sus hilos de ejecución y los
recursos que utilizan y comparten. El hecho de que los hilos de ejecución de un mismo proceso
compartan los recursos hace que cualquiera de estos hilos pueda modificar éstos. Cuando un hilo
modifica un dato en la memoria, los otros hilos acceden a ese dato modificado inmediatamente. Lo
que es propio de cada hilo es el contador de programa, la pila de ejecución y el estado de la CPU,
incluyendo el valor de los registros.
El proceso sigue en ejecución mientras al menos uno de sus hilos de ejecución siga activo.
Cuando el proceso finaliza, todos sus hilos de ejecución también han terminado. Asimismo en el
momento en el que todos los hilos de ejecución finalizan, el proceso no existe más y todos sus
recursos son liberados.
Hay dos formas principales de implementar un sistema de hilos: en espacio de usuario y en el
kernel. La elección es un poco controvertida y también es posible una implementación híbrida. Ahora
describiremos estos métodos.
Página 5
Rafael Lozano
Gestión de procesos
2.1 Implementación a nivel de usuario
El primer método es colocar el paquete de hilos completamente en espacio de usuario, es decir,
los programas de usuario admiten hilos, pero el kernel no tiene procesos con hilos. Además, el kernel
no sabe nada acerca de la existencia de hilos en el espacio de usuario. En lo que al kernel concierne,
está administrando procesos ordinarios con un solo hilo. La primera ventaja, la más obvia, es que un
paquete de hilos de nivel usuario puede implementarse en un sistema operativo que no acepte hilos.
Todos los sistemas operativos solían entrar en esta categoría e incluso hoy en día algunos todavía lo
están.
Figura 1.- Hilos en el espacio de usuario
Cuando los hilos se administran en espacio de usuario, cada proceso es el responsable de
gestionar sus hilos. Para ello, tiene su propia tabla de hilos privada para llevar la gestión de los hilos
en ese proceso. Esta tabla es similar a la tabla de procesos del kernel, excepto porque sólo contiene la
información de sus hilos, como el contador de programa, registros, estado, etc. La tabla de hilos es
administrada por el sistema en tiempo de ejecución.
2.2 Implementación a nivel de kernel
Ahora vamos a considerar el caso en que el kernel sabe acerca de los hilos y los administra. No
se necesita un sistema en tiempo de ejecución para ninguna de las dos acciones. Además, no hay
tabla de hilos en cada proceso. En vez de ello, el kernel tiene una tabla de hilos que lleva la cuenta de
todos los hilos en el sistema. Cuando un hilo desea crear un nuevo hilo o destruir uno existente,
realiza una llamada al kernel, la cual se encarga de la creación o destrucción mediante una
actualización en la tabla de hilos del kernel.
La tabla de hilos del kernel contiene los registros, el estado y demás información de cada hilo.
Esta información es la misma que con los hilos de nivel usuario, pero ahora se mantiene en el kernel,
en vez de hacerlo en espacio de usuario (dentro del sistema en tiempo de ejecución). Esta
información es un subconjunto de la información que mantienen tradicionalmente los kernels acerca
de sus procesos con un solo hilo; es decir, el estado del proceso. Además, el kernel también mantiene
la tabla de procesos tradicional para llevar la gestión de los procesos.
Página 6
Rafael Lozano
Gestión de Procesos
Figura 2.- Implementación a nivel de kernel
Cuando un hilo se bloquea por E/S, el kernel, según lo que decida, puede ejecutar otro hilo del
mismo proceso (si hay uno listo) o un hilo de un proceso distinto. Con los hilos de nivel usuario, el
sistema en tiempo de ejecución ejecuta hilos de su propio proceso hasta que el kernel le quita la CPU.
3 Planificación de la CPU
El objetivo de la multiprogramación es que en todo momento se ejecute un proceso para
maximizar la utilización de la CPU. En un sistema con una sola CPU nunca habrá más de un proceso
en ejecución. Si hay más procesos tendrán que esperar a que la CPU esté libre y pueda volver a
asignarse.
El concepto de multiprogramación es bastante sencillo: un proceso se ejecuta hasta que tenga
que esperar, generalmente a que termine una solicitud de E/S. En un sistema de computación
sencillo, la CPU permanecería inactiva; todo este tiempo de espera se desperdicia sin efectuar
ninguna actividad útil. Con la multiprogramación tratamos de emplear productivamente este tiempo.
Varios procesos se conservan en memoria a la vez, y cuando uno de ellos tiene que esperar, el SO le
quita la CPU al proceso y se la da a otro; este modelo continúa. Cada vez que un proceso tiene que
esperar, otro puede utilizar la CPU.
Los beneficios de la multiprogramación son un aumento de la utilización de la CPU y una mayor
productividad. La productividad es la cantidad de trabajo desarrollada en un intervalo de tiempo.
Cuando un sistema informático es multiprogramado, con frecuencia tiene varios procesos o
hilos que compiten por la CPU al mismo tiempo. Esta situación ocurre cada vez que dos o más de
estos procesos se encuentran al mismo tiempo en el estado listo. Si sólo hay una CPU disponible, hay
que decidir cuál proceso se va a ejecutar a continuación. La parte del sistema operativo que realiza
esa decisión se conoce como planificador de procesos y el algoritmo que utiliza se conoce como
algoritmo de planificación.
Página 7
Rafael Lozano
Gestión de procesos
3.1 Colas de planificación
Conforme los procesos entran en el sistema, se colocan en una cola de trabajos formada por
todos los procesos que residen en el disco esperando la asignación de la memoria principal. Los
procesos que residen en la memoria principal y que están listos y esperando su ejecución se
mantienen en una lista llamada cola de procesos listos.
Figura 3.- Cola de procesos listos
Esta cola tiene un encabezado que apunta al primer y último PCB de la lista. Cada PCB tiene un
campo puntero que indica el siguiente proceso en la cola de procesos listos.
También hay otras colas en el sistema. Cuando la CPU se asigna a un proceso, se ejecuta
durante un tiempo y después termina o espera a que ocurra un suceso determinado, como la
conclusión de una solicitud de E/S en disco. Puesto que en el sistema hay varios procesos, el disco
puede estar ocupado con la solicitud de E/S de otro proceso, por lo que el proceso tendrá que
esperar al disco. La lista de procesos que espera a un dispositivo de E/S determinado se denomina
cola del dispositivo, y cada dispositivo tiene su propia cola.
En el transcurso de su vida, un proceso transita entre las distintas colas de planificación, y el SO
de alguna manera debe seleccionar procesos de estas colas. Esta actividad de selección es realizada
por el planificador. El planificador a corto plazo, o planificador de la CPU, selecciona uno de los
procesos listos para su ejecución y le asigna la CPU.
Figura 4.- Cola de procesos en espera de dispositivo
El planificador a corto plazo debe seleccionar con mucha frecuencia un nuevo proceso para la
CPU, y el proceso quizá se ejecute únicamente durante unos milisegundos antes de esperar una
solicitud de E/S; en muchos casos, este planificador de la CPU se ejecuta por lo menos una vez cada
10 milisegundos. Debido al breve lapso de tiempo entre ejecuciones, el planificador de la CPU debe
ser muy rápido. Si cuesta un milisegundo decidir la ejecución de un proceso de 10 milisegundos,
entonces el 9% del tiempo de la CPU se desperdicia para que la planificación funcione.
Página 8
Rafael Lozano
Gestión de Procesos
3.2 Cambio de contexto
Para cambiar la CPU a otro proceso se requiere guardar el estado del proceso anterior y cargar
el estado guardado para el nuevo proceso. Esta tarea se conoce como cambio de contexto. El tiempo
de cambio de contexto es un puro gasto adicional, y varía de una máquina a otra, dependiendo de la
velocidad de la memoria, del número de registros y de la existencia de instrucciones especiales, como
una sola instrucción para cargar o almacenar todos los registros. Típicamente se encuentra en el
intervalo de uno a cien microsegundos.
Los tiempos de cambio de contexto dependen en gran medida del apoyo del hardware; por
ejemplo, algunos procesadores ofrecen varios conjuntos de registros, y un cambio de contexto
implica únicamente cambiar el puntero al conjunto actual de registros. Por supuesto, si hay más
procesos activos que conjuntos de registros, el sistema copia los datos usando la memoria, como se
mencionó antes. Además, cuanto más complejo sea el SO, más trabajo hay que realizar durante un
cambio de contexto. Como veremos en capítulos posteriores, las técnicas avanzadas de
administración de memoria pueden requerir que con cada contexto se cambien otros datos
adicionales.
3.3 Comportamiento de un proceso
El éxito de la planificación de la CPU depende de la siguiente propiedad observada de los
procesos: la ejecución de un proceso consiste en un ciclo de ejecución de la CPU y espera de E/S, y los
procesos se alternan entre estos dos estados. La ejecución del proceso se inicia con una ráfaga de
CPU; a ésta le siguen una ráfaga de E/S, otra ráfaga de CPU, una más de E/S, etc. Finalmente, la última
ráfaga de CPU terminará con una solicitud al sistema para que concluya la ejecución, en vez de otra
ráfaga de E/S.
Figura 5.- Ráfagas de uso de la CPU y la E/S
Si observamos la figura anterior vemos que un proceso con ráfagas de CPU y E/S en (a) utilizan
ráfagas de CPU largas y poca E/S. Esto significa que invierten la mayor parte del tiempo en hacer
cálculos, mientras que (b) tienen ráfagas de CPU cortas y hacen un uso más intensivo de la E/S.
Las duraciones de estas ráfagas de CPU se han medido, y aunque varían considerablemente de
un proceso a otro y entre ordenadores, se caracterizan en que suele haber un gran número de
ráfagas de CPU de corta duración y un pequeño número de ráfagas de larga duración. Un programa
Página 9
Rafael Lozano
Gestión de procesos
limitado por E/S normalmente tendrá muchas ráfagas de CPU breves, mientras que un programa
limitado por la CPU tendrá pocas ráfagas de muy larga duración. Esta distribución puede ser muy
importante al seleccionar un algoritmo adecuado para la planificación de la CPU.
4 Algoritmos de planificación
Un algoritmo de planificación define la estrategia que sigue el planificador de la CPU para
seleccionar el siguiente proceso de la cola de procesos listos al que se le asignará la CPU. Cuando hay
más de un proceso que está en condiciones de ejecutarse, se debe escoger alguno. El encargado de
tomar esta decisión es el planificador y el algoritmo que se usa se llama algoritmo de planificación.
Distintos entornos requieren diferentes algoritmos de planificación. Esto se debe a que las
diferentes áreas de aplicación, y por ende los distintos tipos de sistemas operativos, tienen objetivos
diferentes. Es decir, lo que el planificador debe optimizar no es lo mismo en todos los sistemas.
Mientras que en entornos con procesos por lotes no hay usuarios esperando impacientemente
una respuesta rápida, en los entornos con usuarios interactivos la apropiación de la CPU es esencial
para evitar que un proceso acapare su uso y niegue el servicio a los demás. Aunque no hubiera un
proceso que se ejecutara indefinidamente de manera intencionada, podría haber un proceso que
debido a un error de programa continuará su ejecución indefinidamente. La apropiación es necesaria
para evitar este posible comportamiento. Los servidores también entran en esta categoría, ya que por
lo general dan servicio a varios usuarios remotos, todos los cuales siempre tienen mucha prisa.
4.1 Objetivos de los algoritmos de planificación
Para diseñar un algoritmo de planificación, es necesario tener en mente los objetivos que debe
alcanzar un buen algoritmo de planificación. Algunos objetivos dependen del entorno (procesamiento
por lotes o interactivo), pero hay también algunos que son deseables en todos los casos:
✔
Equidad.- Otorgar a cada proceso una parte justa del tiempo de la CPU.
✔
Rendimiento.- Maximizar el número de trabajos terminados por unidad de tiempo.
✔
Tiempo de respuesta.- Minimizar el tiempo de respuesta a los usuarios interactivos.
✔
Tiempo de espera.- Minimizar el tiempo de espera de los procesos.
✔
Utilización de la CPU.- Mantener ocupada la CPU todo el tiempo.
Los distintos algoritmos de planificación tienen propiedades diferentes y pueden favorecer a un
tipo de proceso en lugar de a otro, así que al elegir qué algoritmo se aplicará en una situación
determinada debemos considerar las propiedades de los diversos algoritmos.
Para comparar los algoritmos de planificación de la CPU se han propuesto varios criterios, y las
características que se utilicen para la comparación pueden representar diferencias considerables en
la determinación del mejor algoritmo. Los criterios que se emplean incluyen los siguientes:
✔
Utilización de la CPU.- Queremos que la CPU se mantenga tan ocupada como sea posible.
✔
Productividad.- Si la CPU se encuentra ocupada, se está efectuando algún trabajo. Una medida
del trabajo es el número de procesos que se completan por unidad de tiempo, llamada
Página 10
Rafael Lozano
Gestión de Procesos
productividad.
✔
Tiempo de espera.- El algoritmo para la planificación de la CPU no afecta realmente a la
cantidad de tiempo durante el cual un proceso se ejecuta o lleva a cabo la E/S. El algoritmo
afecta únicamente a la cantidad de tiempo que el proceso espera en la cola de procesos listos,
de modo que en vez de tener en cuenta el tiempo de retorno, podemos considerar sólo el
tiempo de espera para cada proceso.
✔
Tiempo de respuesta.- En un sistema interactivo, es posible que el tiempo de retorno no sea el
mejor criterio. Con frecuencia un proceso puede producir alguna salida en los primeros
instantes y continuar calculando nuevos resultados mientras se presentan al usuario los
resultados anteriores. Por esto, otra medición es el tiempo transcurrido desde la presentación
de una solicitud hasta que se produce la primera respuesta. Esta medición, llamada tiempo de
respuesta, es la cantidad de tiempo para comenzar a responder, pero no el tiempo necesario
para mostrar esa respuesta. El tiempo de retorno generalmente se encuentra limitado por la
velocidad del dispositivo de salida.
Es deseable maximizar la utilización de la CPU y la productividad, y minimizar los tiempos de
retorno, de espera y de respuesta.
El modo de decisión especifica los instantes de tiempo en que se aplica la función de selección.
Hay dos categorías generales:
✔
No apropiativo.- En este caso el proceso dispondrá de la CPU una vez se la haya asignado el
sistemas operativo y este no podrá apropiarse de esta hasta que termine o se bloquee en
espera de una operación de E/S.
✔
Apropiativo.- El proceso que se está ejecutando puede ser interrumpido por el SO y pasar al
estado de listos.
Las políticas apropiativas suponen un mayor coste que las no apropiativas pero en general,
aumentan el rendimiento global del sistema ya que evitan el monopolio por parte de un único
proceso.
A medida que analicemos los distintos algoritmos para la planificación de la CPU, ilustraremos
su funcionamiento. Una ilustración precisa podría incluir muchos procesos, y cada uno de ellos una
secuencia de centenares de ráfagas de CPU y de E/S. Para simplificar las ilustraciones, en nuestros
ejemplos consideramos sólo una ráfaga de CPU, en milisegundos.
No existe un algoritmo de planificación óptimo ya que los resultados dependerán de factores
como la duración de su ráfaga, el instante de llegada, prioridad, etc. Para estudiar el comportamiento
de cada algoritmo vamos a utilizar dos medidas que nos indicarán como el proceso ha sido tratado
por la planificación: el tiempo de servicio y el tiempo de espera. Calcularemos estas dos medidas para
cada proceso y luego haremos un promedio para el conjunto de procesos de la cola. Para calcular
estos tiempos necesitaremos los siguientes factores:
✔
Llamaremos t al tiempo que un proceso necesita la CPU para su ejecución (suponiendo que
solamente constara de una ráfaga de CPU).
✔
Tiempo de retorno.- Desde el punto de vista de un proceso en particular, el criterio más
Página 11
Rafael Lozano
Gestión de procesos
importante es cuanto tiempo tarda en ejecutarse ese proceso. El intervalo entre el momento
de ofrecerlo hasta el momento en que termina es el tiempo de retorno, es decir, la suma de
los periodos transcurridos esperando entrar en la memoria, esperando en la cola de procesos
listos, ejecutándose en la CPU y efectuando la E/S.
✔
Llamaremos ti es el instante en que el proceso comienza su ejecución
✔
Llamaremos tf es el instante en que el proceso termina su ejecución.
✔
Llamaremos p a la prioridad del proceso. Es un entero que indica la prioridad del proceso a la
hora de asignarle la CPU. El valor 0 indica prioridad máxima.
Con estos factores definimos:
✔
Tiempo de servicio (T) es el que necesitaría un proceso para ejecutarse. T = tf – ti
✔
Tiempo de espera (E) es el tiempo que un proceso permanece en la cola de procesos listos
esperando que se le asigne la CPU. E = T - t
A modo de ejemplo vamos a utilizar en todos los algoritmos de planificación la siguiente cola de
procesos listos
Proceso
P1
P2
P3
P4
P5
P6
Duración (t)
16
3
2
5
1
3
Llegada (ti)
0
1
5
6
7
9
Prioridad
1
1
0
0
2
0
A partir de ahora se presentan los diferentes algoritmos de planificación y con estos datos
haremos los cálculos necesarios para obtener T y E.
4.2 Planificación FCFS. Servicio por orden de llegada
Este algoritmo se emplea en sistemas con procesamiento por lotes (no hay interacción con el
usuario) y es probablemente el más simple de todos. El FCFS (First Come, First Served) es no apropiativo
y consiste en asignar la CPU a los procesos en el orden en que la solicitan. Solo hay una cola de
procesos listas y cuando se asigna la CPU a un proceso se le permite ejecutarse todo el tiempo que
desee. No se interrumpe debido a que se ha ejecutado demasiado tiempo. A medida que van
entrando otros trabajos se colocan al final de la cola. Si el proceso en ejecución se bloquea por E/S, el
primer proceso en la cola se ejecuta a continuación. Cuando un proceso bloqueado pasa al estado de
listo, al igual que un proceso recién llegado, se coloca al final de la cola. En la política FCFS el tiempo
promedio de espera puede ser bastante largo.
Para mostrar el comportamiento del sistema durante el tiempo que duren los procesos
anteriores vamos a emplear un diagrama de Gantt.
P6
P5
P4
P3
Página 12
Rafael Lozano
Gestión de Procesos
P2
P1
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Hemos sombreado los instantes de tiempo que los procesos están en la cola de procesos listos.
Los instantes coloreados representan a los procesos con la CPU asignada. Ahora podemos calcular
los tiempos de espera y retorno de cada proceso
Proceso
Duración (t)
Llegada (ti)
T = tf - ti
E=T-t
P1
16
0
16 – 0 = 16
16 – 16 = 0
P2
3
1
19 – 1 = 18
18 – 3 = 15
P3
2
5
21 – 5 = 16
16 – 2 = 14
P4
5
6
26 – 6 = 20
20 – 5 = 15
P5
1
7
27 – 7 = 20
20 – 1 = 19
P6
3
9
30 – 9 = 21
21 – 3 = 18
Promedio
T̄ =
18,5
16 +18+16+20+ 20+21
=18,5
6
Ē=
13,5
0+15+ 14+15+19+18
=13,5
6
Los resultados de esta política de planificación pueden variar mucho en función de la
distribución de los procesos. Consideremos el mismo ejemplo anterior pero variando los instantes de
llegada.
Proceso
P1
P2
Llegada (ti) 7
P3
0
2
P4
3
P5
5
P6
6
En este caso tendríamos el siguiente diagrama temporal
P6
P5
P4
P3
P2
P1
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Volemos a calcular los tiempos de espera y retorno de cada proceso
Proceso
Duración (t)
Llegada (ti)
T = tf - ti
E=T-t
P1
16
7
30 – 7 = 23
23 – 16 = 7
P2
3
0
3–0=3
3–3=0
P3
2
2
5–2=3
3–2=1
P4
5
3
10 – 3 = 7
7–5=2
P5
1
5
11 – 5 = 6
6–1=5
Página 13
Rafael Lozano
P6
Gestión de procesos
3
6
Promedio
T̄ =
23+ 3+3+7+6 +8
=8,33
6
Ē=
14 – 6 = 8
8–3=5
8,33
3,33
7+ 0+1+2+5+5
=3,33
6
Nótese como han bajado los tiempos de respuesta y espera de los procesos y los promedios.
Además, consideremos el rendimiento de la planificación FCFS en una situación dinámica.
Suponga que tenemos un proceso limitado por la CPU y varios procesos limitados por E/S. Al pasar
los procesos por el sistema, se puede presentar la siguiente situación: el proceso limitado por la CPU
obtendrá la CPU y la retendrá; durante este tiempo, todos los demás procesos terminarán su E/S y
pasarán a la cola de procesos listos, en espera de la CPU. Mientras esperan en la cola de procesos
listos, los dispositivos de E/S permanecen inactivos. Finalmente, el proceso limitado por la CPU
termina su ráfaga de CPU y pasa a un dispositivo de E/S. Todos los procesos limitados por E/S, que
tienen ráfagas de CPU breves, se ejecutan rápidamente y regresan a las colas de dispositivos de E/S.
En este momento la CPU está inactiva. El proceso limitado por la CPU regresará a la cola de procesos
listos y se le asignará la CPU. Una vez más, los procesos limitados por E/S se encuentran en la cola de
procesos listos esperando a que termine el proceso limitado por la CPU. Esto se conoce como efecto
convoy, ya que todos los demás procesos esperan a que un proceso de gran tamaño salga de la CPU.
Este efecto provoca que la CPU y los dispositivos se aprovechen menos que si se permitiera que los
procesos más cortos pasaran antes.
El algoritmo de planificación FCFS es no apropiativo. Una vez que se ha asignado la CPU a un
proceso, éste la conserva hasta que desee liberarla, ya sea por terminación o por solicitud de E/S. El
algoritmo FCFS es especialmente problemático en los sistemas de tiempo compartido, donde es
importante que cada usuario reciba una porción de la CPU a intervalos regulares. Sería desastroso
permitir que un proceso retuviera la CPU por un periodo largo.
4.3 Planificación SJF. Tiempo de ejecución más breve
Ahora vamos a analizar otro algoritmo de procesamiento por lotes no apropiativo, el cual
supone que los tiempos de ejecución se conocen de antemano. El algoritmo “ primero el trabajo más
breve” o SJF (Shortest Job First) asigna la CPU al proceso que tiene la ráfaga siguiente de CPU más
pequeña. Si dos procesos tienen la misma longitud para la siguiente ráfaga de CPU, se utiliza la
planificación FCFS para romper el empate. Vamos a analizar nuestro conjunto de procesos de ejemplo
con este algoritmo. El diagrama de Gantt sería el siguiente
P6
P5
P4
P3
P2
P1
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Los tiempos de espera y retorno serían los siguientes
Proceso
Duración (t)
Llegada (ti)
T = tf - ti
Página 14
E=T-t
Rafael Lozano
Gestión de Procesos
P1
16
0
16 – 0 = 16
16 – 16 = 0
P2
3
1
22 – 1 = 21
21 – 3 = 18
P3
2
5
19 – 5 = 14
14 – 2 = 12
P4
5
6
29 – 6 = 23
23 – 5 = 18
P5
1
7
17 – 7 = 10
10 – 1 = 9
P6
3
9
25 – 9 = 16
16 – 3 = 13
Promedio
T̄ =
16 +21+14+23+ 10+16
=16,67
6
16,67
Ē=
11,67
0+18+ 12+ 18+9+13
=11,67
6
Puede comprobarse que el algoritmo SJF es óptimo, ya que ofrece el mínimo tiempo promedio
de espera para un conjunto de procesos dado. La comprobación muestra que poniendo un proceso
breve antes de uno largo se reduce el tiempo de espera del proceso corto más de lo que aumenta el
tiempo de espera del proceso largo. Por tanto, se reduce el tiempo de espera promedio.
El problema real con el algoritmo SJF es conocer la longitud de la siguiente solicitud de la CPU y
su dificultad para estimarla. No hay manera de conocer la longitud de la siguiente ráfaga de CPU, pero
se puede tratar de efectuar una aproximación a la planificación SJF. Aunque no conocemos la longitud
de la siguiente ráfaga de CPU, podemos predecir su valor, esperando que sea de longitud similar a las
anteriores. Así, al calcular una aproximación de la longitud de la siguiente ráfaga de CPU podemos
elegir el proceso con la ráfaga de CPU prevista más breve.
4.4 Planificación SRTN. El menor tiempo restante
La alternativa se plantea cuando un nuevo proceso llega a la cola de procesos listos mientras se
está ejecutando otro proceso. El nuevo proceso puede tener una ráfaga de CPU menor que lo que
resta de proceso que se ejecuta en ese momento. Un algoritmo SJF apropiativo desplazará al proceso
que se ejecuta, mientras que un algoritmo SJF no apropiativo permitirá que el proceso que se ejecuta
termine su ráfaga de CPU. La planificación SJF apropiativa en ocasiones se denomina planificación
“primero el que tenga el menos tiempo restante” o SRTF (Shortest Remaining Time First).
Vamos a analizar nuestro conjunto de procesos de ejemplo con este algoritmo. El diagrama de
Gantt sería el siguiente
P6
P5
P4
P3
P2
P1
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Los tiempos de espera y retorno serían los siguientes
Proceso
Duración (t)
Llegada (ti)
T = tf - ti
Página 15
E=T-t
Rafael Lozano
Gestión de procesos
P1
16
0
30 – 0 = 30
30 – 16 = 14
P2
3
1
4–1=3
3–3=0
P3
2
5
7–5=2
2–2=0
P4
5
6
16 – 6 = 10
10 – 5 = 5
P5
1
7
8–7=1
1–1=0
P6
3
9
12 – 9 = 3
3–3=0
Promedio
T̄ =
30+ 3+2+10+1+3
=8,16
6
Ē=
8,16
3,67
14+ 0+0+5+ 0+0
=3,67
6
La bajada de los tiempos de espera y retorno es evidente y sus promedios son óptimos.
4.5 Planificación por prioridades
La idea básica es simple: a cada proceso se le asigna una prioridad y el proceso al que se le
asigna la CPU es el que tiene la prioridad más alta. Los procesos con igual prioridad se planifican en
orden FCFS.
Incluso hasta en un PC con un solo usuario puede haber varios procesos, algunos de ellos más
importantes que los demás. Por ejemplo, un proceso demonio que envía correo electrónico en
segundo plano debería recibir una menor prioridad que un proceso que muestra una película de
vídeo en la pantalla en tiempo real.
Estamos analizando la planificación en términos de una alta prioridad y una baja prioridad. Las
prioridades generalmente corresponden a un intervalo fijo de números, como 0 a 7 o 0 a 4095. Sin
embargo, no existe ningún consenso respecto a si 0 es la prioridad más alta o la más baja. Algunos
sistemas emplean números bajos para representar una prioridad baja; otros utilizan números bajos
para representar una prioridad alta. Esta diferencia puede prestarse a confusiones. En este tema
supondremos que los números bajos representan prioridades altas.
A los procesos se les asigna prioridad de forma estática o dinámica. Cuando un usuario inicia un
proceso, este puede tener una prioridad en función del tipo de usuario y en el sistema operativo
Linux/Unix existe un comando que permite reducir la prioridad de un proceso lanzado por un
usuario, aunque nadie lo usa.
El sistema también puede asignar las prioridades en forma dinámica para lograr ciertos
objetivos. Por ejemplo, algunos procesos están muy limitados a E/S y gastan la mayor parte de su
tiempo esperando a que la E/S se complete. Cada vez que un proceso de este tipo necesita la CPU,
debe recibirla de inmediato para dejar que inicie su siguiente petición de E/S, que a su vez puede
proceder en paralelo con otro proceso que se encuentre realizando cálculos. Hacer que el proceso
limitado a E/S espere mucho tiempo por la CPU sólo significa que estará ocupando memoria por un
tiempo innecesariamente largo.
La planificación por prioridades puede ser apropiativa o no apropiativa. Cuando un proceso
llega a la cola de procesos listos, su prioridad se compara con la del proceso en ejecución. Un
algoritmo apropiativo para la planificación por prioridades se apropiará de la CPU si la prioridad del
Página 16
Rafael Lozano
Gestión de Procesos
proceso recién llegado es mayor que la del proceso en ejecución. Un algoritmo no apropiativo para la
planificación por prioridades únicamente dejará al nuevo proceso al inicio de la cola de procesos
listos.
Vamos a estudiar nuestro ejemplo con una política por prioridades apropiativa. En principio, hay
que asignar prioridades a los procesos, indicada en la columna Prioridad. El diagrama de Gantt sería el
siguiente
P6
P5
P4
P3
P2
P1
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Los tiempos de espera y retorno serían los siguientes
Proceso
Prioridad
Duración (t)
P1
1
16
P2
2
P3
Llegada (ti)
T = tf - ti
E=T-t
0
25 – 0 = 25
25 – 16 = 9
3
1
28 – 1 = 27
27 – 3 = 24
2
2
5
30 – 5 = 25
25 – 2 = 23
P4
0
5
6
11 – 6 = 5
5–5=0
P5
0
1
7
12 – 7 = 5
5–1=4
P6
0
3
9
15 – 9 = 6
6–3=3
Promedio
T̄ =
25+ 27+25+5+5+ 6
=15,5
6
Ē=
15,5
10,5
9+ 24+23+ 0+ 4 +3
=10,5
6
Un serio problema de los algoritmos para la planificación por prioridades es el bloqueo
indefinido o inanición. Un proceso que está listo para ejecutarse pero no obtiene la CPU puede
considerarse bloqueado, en espera de la CPU. Un algoritmo para la planificación por prioridades
puede dejar a un proceso de baja prioridad esperando indefinidamente a la CPU. En un sistema de
computación con gran carga, un flujo constante de procesos de alta prioridad puede evitar que un
proceso de baja prioridad obtenga la CPU. Por lo general sucederá una de estas dos cosas: o el
programa finalmente se ejecuta, cuando disminuye la carga del sistema, o el sistema de computación
falla y pierde todos los procesos de baja prioridad.
Una solución para el problema del bloqueo indefinido de los procesos de baja prioridad es el
envejecimiento, técnica por la cual aumenta gradualmente la prioridad de los procesos que esperan
durante mucho tiempo en el sistema, a intervalos de tiempo regulares.
4.6 Planificación por turno circular
Uno de los algoritmos más antiguos, simples, equitativos y de mayor uso es el de turno circular.
El algoritmo de planificación circular o RR (round-robin) está diseñado especialmente para sistemas
Página 17
Rafael Lozano
Gestión de procesos
interactivos de tiempo compartido. Se define una pequeña unidad de tiempo, llamada quántum
(cuanto de tiempo o porción de tiempo), que generalmente varia entre 10 y 100 milisegundos. La cola
de procesos listos se trata como una cola circular, el planificador de la CPU la recorre asignando la
CPU a cada proceso por un intervalo de hasta un cuanto de tiempo.
Para poner en práctica la planificación RR, mantenemos la cola de procesos listos como una
cola “primero que entra, primero que sale” (FIFO). Los nuevos proceso se agregan al final de la cola de
procesos listos. El planificador de la CPU toma el primer proceso de la cola, programa un cronómetro
para que interrumpa después de un cuanto de tiempo y despacha el proceso.
Entonces sucederá una de estas dos cosas: el proceso puede tener una ráfaga de CPU menor
que un cuanto de tiempo, en cuyo caso el proceso liberará voluntariamente a la CPU y el planificador
continuará con el siguiente proceso de la cola de procesos listos. Por otra parte, si la ráfaga de la CPU
del proceso en ejecución es mayor que un cuanto de tiempo, el cronómetro se activará y provocará
una interrupción para el SO. Se ejecutará un cambio de contexto y el proceso se colocará al final de la
cola de procesos listos. El planificador de la CPU seleccionará entonces el siguiente proceso de la cola.
En el algoritmo de planificación RR, la CPU no se asigna a ningún proceso por más de un
quántum consecutivo de tiempo. Si la ráfaga de la CPU de un proceso excede de un quántum, se
expulsa y regresa a la cola de procesos listos. El algoritmo de planificación RR es apropiativo.
Si existen n procesos en la cola de procesos listos y el cuanto de tiempo es q, cada proceso
recibe 1/n de tiempo de la CPU en trozos de q unidades de tiempo como máximo. Ningún proceso
debe esperar más de (n – 1)· q unidades de tiempo antes de recibir su siguiente cuanto. Por ejemplo,
si hay cinco procesos, con un cuanto de tiempo de 20 milisegundos, entonces cada proceso recibirá
hasta 20 milisegundos cada 100 milisegundos.
Vamos a estudiar nuestro ejemplo con esta política. Supongamos que definimos un quántum
de 5mseg. El diagrama de Gantt sería el siguiente
P6
P5
P4
P3
P2
P1
0
1
2
3
4
5
6
7
8
9
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
Los tiempos de espera y retorno serían los siguientes
Proceso
Duración (t)
Llegada (ti)
T = tf - ti
0 30 – 0 = 30
E=T-t
P1
16
P2
3
1
8–1=7
7–3=4
P3
2
5
10 – 5 = 5
5–2=3
P4
5
6
15 – 6 = 9
9–5=4
P5
1
7
16 – 7 = 9
9–1=8
P6
3
9 19 – 9 = 10
10 – 3 = 7
Página 18
30 – 16 = 14
Rafael Lozano
Gestión de Procesos
Promedio
T̄ =
30+ 7+5+9+ 9+10
=11,67
6
11,67
Ē=
6,67
14+ 4+ 3+4 +8+7
=6,67
6
La única cuestión interesante con el algoritmo de turno circular es la longitud del quántum. Para
conmutar de un proceso a otro se requiere cierta cantidad de tiempo para realizar el cambio de
contexto (guardar y cargar tanto registros como mapas de memoria, actualizar varias tablas y listas,
vaciar y recargar la memoria caché, etc). Supongamos que este cambio de contexto requiere 1 mseg y
que el quántum se establece a 4 mseg. Con estos parámetros, después de realizar 4 mseg de trabajo
útil, la CPU tendrá que gastar (es decir, desperdiciar) 1 mseg en el cambio de contexto. Es decir, se
pierde un 20% por carga administrativa. Sin duda, esto es demasiado.
Para mejorar la eficiencia de la CPU, podríamos establecer el quántum de por ejemplo 100
mseg. Ahora el tiempo desperdiciado es sólo de 1%. Pero considere lo que ocurre en un sistema
servidor si llegan 50 peticiones dentro de un intervalo de tiempo muy corto y con requerimientos muy
variables de la CPU. Se colocarán cincuenta procesos en la lista de procesos ejecutables. Si la CPU
está inactiva, el primero empezará de inmediato, el segundo tal vez no inicie sino hasta 100 mseg
después y así en lo sucesivo. El último desafortunado tal vez tenga que esperar 5 segundos para
poder tener una oportunidad, suponiendo que los demás utilizan sus quántums completos. La
mayoría de los usuarios percibirán como lenta una respuesta de 5 segundos a un comando corto.
Esta situación es muy mala si algunas de las peticiones cerca del final de la cola requirieron sólo unos
cuantos milisegundos de tiempo de la CPU. Con un quántum corto, hubieran obtenido un mejor
servicio.
Otro factor es que si al quántum se le asigna un tiempo más largo que la ráfaga promedio de la
CPU, la apropiación no ocurrirá con mucha frecuencia. En vez de ello, la mayoría de los procesos
realizarán una operación de bloqueo antes de que el quántum se agote, ocasionando una
conmutación de proceso. Al eliminar la apropiación mejora el rendimiento, debido a que los cambios
de contexto sólo ocurrirán cuando sea lógicamente necesario; es decir, cuando un proceso se
bloquee por E/S y no pueda continuar.
La conclusión a la que se llega es que si se establece el quántum demasiado corto se producen
demasiadas conmutaciones de procesos y se reduce la eficiencia de la CPU, pero si se establece
demasiado largo se puede producir una mala respuesta a las peticiones interactivas cortas. A
menudo, un quántum con un valor entre 20 y 50 mseg constituye una solución razonable.
5 Planificación por niveles
Se ha creado otra clase de algoritmos de planificación para aquellas situaciones donde los
procesos se pueden clasificar fácilmente en distintos grupos. Por ejemplo, una división habitual
consiste en diferenciar los procesos de primer plano (interactivos) de los procesos de segundo plano
(por lotes). Estos dos tipos de procesos tienen requisitos de tiempo de respuesta bastante diferentes,
por lo que pueden presentar distintas necesidades de planificación. Además, los procesos de primer
plano pueden tener una prioridad superior (definida externamente) a la de procesos de segundo
plano.
Un algoritmo de planificación de colas de múltiples niveles divide la cola de procesos listos en
diversas colas. Los procesos se asignan en forma permanente a una cola, generalmente a partir de
Página 19
Rafael Lozano
Gestión de procesos
alguna propiedad del proceso, como puede ser el tamaño de la memoria o el tipo de proceso. Cada
cola tiene su propio algoritmo de planificación; por ejemplo, pueden emplearse colas distintas para
los procesos de primer y segundo planos. La cola de primer plano puede planificarse con un
algoritmo RR, mientras que la de segundo plano se planifica con un algoritmo FCFS.
Debe existir además una planificación entre las colas, la cual generalmente es una planificación
apropiativa de prioridad fija. Por ejemplo, la cola de procesos de primer plano puede tener prioridad
absoluta sobre la cola de procesos de segundo plano.
Veamos un ejemplo de algoritmo de planificación de colas de múltiples niveles con tres colas:
✔
Procesos del sistema
✔
Procesos interactivos
✔
Procesos por lotes
Cada cola tiene prioridad absoluta sobre las colas de menor prioridad. Por ejemplo, no podría
ejecutarse ningún proceso de la cola de procesos por lotes a menos que las colas de procesos del
sistema y procesos interactivos estuvieran vacías. Si un proceso interactivo de edición entrara en la
cola de procesos listos durante la ejecución de un proceso por lotes, este último se expulsaría.
Otra posibilidad es utilizar una porción de tiempo para las colas. Cada cola recibiría cierta
porción del tiempo de la CPU, la cual se planificaría entre los procesos de su cola. Por ejemplo, en el
caso de las colas de primer y segundo planos, la cola de primer plano puede recibir el 80% del tiempo
de la CPU para la planificación RR de sus procesos, mientras que la cola de segundo plano recibe el
20% de la CPU para distribuirlo entre sus procesos de manera FCFS.
5.1 Planificación de colas de múltiples niveles con realimentación
En un algoritmo para la planificación de colas de múltiples niveles normalmente los procesos se
asignan de manera permanente a una cola al entrar al sistema y no se mueven a otras colas. Por
ejemplo, si hay colas diferentes para los procesos de primer y segundo planos, no cambian de una
cola a otra, ya que los procesos no modifican su naturaleza de primer a segundo plano. Esta
configuración tiene la ventaja de provocar poco gasto de procesamiento adicional durante la
planificación, pero es inflexible.
Sin embargo, la planificación de colas de múltiples niveles con realimentación permite a un
proceso moverse de una cola a otra. La idea es separar los procesos con diferentes características en
cuanto a ráfagas de la CPU. Si un proceso utiliza demasiado tiempo de la CPU, se pasará a una cola de
menor prioridad. Este esquema deja a los procesos limitados por E/S y a los procesos interactivos en
las colas de mayor prioridad. De igual manera, si un proceso espera demasiado tiempo en una cola de
menor prioridad se puede mover a una de mayor prioridad. Esta es una forma de envejecimiento que
evitaría el bloqueo indefinido.
Por ejemplo, consideremos un planificador de colas de múltiples niveles con realimentación con
tres colas, numeradas del 0 al 2. El planificador ejecutará primero todos los proceso de la cola 0. Sólo
cuando ésta se encuentre vacía, se ejecutarán los procesos de la cola 1. En forma similar, los procesos
de la cola 2 sólo se ejecutarán si las colas 0 y 1 están vacías. Un proceso que llegue a la cola 1
expulsará a un proceso de la cola 2. A su vez, un proceso de la cola 1 será expulsado por un proceso
Página 20
Rafael Lozano
Gestión de Procesos
que llegue a la cola 0.
A los procesos que entran en la cola de procesos listos se les coloca en la cola 0, y se les asigna
un cuanto de tiempo de ocho milisegundos. Si no terminan en este lapso, se mueven al final de la cola
1; si la cola 0 está vacía, se asigna un cuanto de tiempo de 16 milisegundos al proceso que se
encuentra al inicio de la cola 1. Si no termina, es expulsado y pasa a la cola 2. Los procesos de esta
cola se ejecutan sobre una base FCFS, únicamente cuanto estén vacías las colas 0 y 1.
Este algoritmo de planificación da mayor prioridad a cualquier proceso con una ráfaga de CPU
de ocho milisegundos o menos. Este proceso recibirá rápidamente la CPU, terminará su ráfaga de
CPU y pasará a su siguiente ráfaga de E/S. Los procesos que requieren más de ocho, pero menos de
24 milisegundos, también son atendidos con rapidez, aunque con menos prioridad que los procesos
más breves. Los procesos de larga duración descienden automáticamente a la cola 2 y son atendidos
en orden de llegada utilizando cualquier ciclo de la CPU que no ocupe las colas 0 y 1.
Por lo general, un planificador de colas de múltiples niveles con realimentación se define con los
siguientes parámetros:
✔
El número de colas.
✔
El algoritmo de planificación para cada cola.
✔
El método utilizado para determinar cuándo promover un proceso a una cola de mayor
prioridad.
✔
El método utilizado para determinar cuándo degradar un proceso a una cola de menor
prioridad.
✔
El método utilizado para determinar a cuál cola entrará un proceso cuando necesite servicio.
La definición de un planificador de colas de múltiples niveles con realimentación lo convierte en
el algoritmo de planificación de la CPU más general, aunque también el más complejo.
6 Planificación de múltiples procesadores
Hasta ahora nuestro análisis se ha centrado en los problemas de la planificación de la CPU en
un sistema con un solo procesador. Si hay múltiples CPU, el problema de planificación se vuelve más
complejo. Se han probado varias posibilidades y, como hemos visto en la planificación de la CPU con
un solo procesador, no hay una solución única que sea la mejor. A continuación analizaremos
brevemente algunos de los asuntos relacionados con la planificación de procesadores múltiples.
Uno de los factores principales es el tipo de procesadores que entran en juego, los cuales
pueden ser idénticos (un sistema homogéneo) o distintos (un sistema heterogéneo). Si los
procesadores son diferentes, las opciones son relativamente limitadas. Cada procesador tiene su
propia cola y su propio algoritmo de planificación. Los procesos están tipificados intrínsecamente por
su estructura, y deben ejecutarse en un procesador determinado. Así, los procesos se restringen a un
procesador y cada procesador se planifica a si mismo.
Si hay varios procesadores idénticos, pueden compartir cargas. Sería posible proporcionar una
cola distinta a cada procesador, pero en esta situación un procesador podría estar inactivo, con una
cola vacía, mientras los demás procesadores estuvieran muy activos. Para evitarlo utilizamos una cola
Página 21
Rafael Lozano
Gestión de procesos
común de procesos listos; todos los procesas entran a esta cola y se planifican en cualquier
procesador disponible.
Con este esquema puede emplearse una de entre dos estrategias de planificación. En una de
ellas, cada procesador se planifica a sí mismo. Cada procesador examina la cola común de procesos
listos y selecciona un proceso para ejecución. Si tenemos varios procesadores que tratan de acceder
a un proceso común hay que programar con cuidado cada procesador. Debemos asegurar que dos
procesadores no elijan el mismo proceso, y que no se pierdan procesos de la cola. La otra estrategia
evita este problema estableciendo a un procesador como planificador para los demás, creando así
una estructura amo-esclavo, es decir, el multiprocesamiento asimétrico.
7 Planificación de hilos
Cuando los procesos son multihilo tenemos dos niveles de paralelismo: procesos e hilo. La
planificación en tales sistemas dependerá de si los hilos se implementan a nivel de usuario o a nivel
de kernel.
En los sistemas de hilo a nivel de usuario como el kernel no es consciente de la existencia de los
hilos, opera de la misma forma de siempre: selecciona un proceso y le asigna la CPU. El planificador
de hilos dentro del proceso decide qué hilo se ejecuta y este hilo puede continuar todo el tiempo que
quiera. Si agota todo el tiempo de CPU asignado al proceso entonces el kernel seleccionará otro
proceso para su ejecución.
En los sistemas con hilo a nivel de kernel, este selecciona un hilo específico para su ejecución.
No tiene que tomar en cuenta a qué proceso pertenece el hilo, pero puede hacerlo si lo desea. El hilo
recibe la CPU por un tiempo y se suspende obligatoriamente cuando lo excede.
Figura 6.- Planificación multihilo
Página 22
Rafael Lozano
Gestión de Procesos
8 Bibliografía
WIKIPEDIA,
Hilo
de
ejecución
[acceso
septiembre
<http://es.wikipedia.org/wiki/Hilo_de_ejecuci%C3%B3n>
2014].
Disponible
en
TANENBAUM, A. T., Sistemas Operativos Modernos – 3ª Edición. 2009 Pearson Prentice Hall, ISBN 978607-442-046-3
Página 23
Descargar