lunes, 1 de octubre de 2012

Práctica 7: Algoritmos de Planificación


Explicación detallada del modelo diseñado

Simulación del algoritmo de Planificación:

Primero en llegar, primero en ser servido (First Come, First Served - FCFS).
Primero en entrar, primero en salir (First Input, First Output - FIFO).
Servicio por orden de llegada.

En la simulación del algoritmo, aparecerán una serie de procesos hasta llegar a un número de tres. Todos los procesos creados competirán por el procesador según el algoritmo F.I.F.O.

Los Procesos, para concluir su ejecución, tendrán que consumir un número de unidades de tiempo con el que parten desde el momento en el que se crean.

Irán pasando desde una cola de procesos listos hasta la figura que representa el procesador del sistema operativo y una vez allí podrán consumir su tiempo de ejecución o bien dormirse como consecuencia de una operación de entrada/salida o un bloqueo.

Los procesos que se duermen lo harán durante cierto tiempo. Una vez que pase cierto tiempo, se despertarán y pasarán de nuevo a formar parte de la cola de procesos listos.

Los procesos irán pasando por los distintos estados de su ciclo de vida reflejando cada estado con un letrero que indicara el estado en el que se encuentran.



Simulación del algoritmo de Planificación:

Round Robin (RR).
Asignación cíclica.
Planificación en rueda.
Planificación por turno circular.
Planificación por Turno Rotatorio.

En la simulación del algoritmo, irán apareciendo una serie de procesos hasta llegar a un número de dos.
Todos los procesos creados competirán por el procesador según el algoritmo de Planificación por Turno Rotatorio.

Los Procesos, para concluir su ejecución, tendrán que consumir un número de unidades de tiempo con el que parten desde el momento en el que se crean.

Irán pasando desde la cola de procesos listos hasta la figura que representa el procesador del sistema operativo, y una vez allí podrán consumir el tiempo especificado por el parámetro Quantum o bien dormirse como consecuencia de una operación de entrada/salida o un bloqueo.

Si el proceso consume todo el Quantum de tiempo, abandonará el procesador del sistema operativo y pasará a ocupar la última posición en la cola de procesos listos.

Si el proceso no consume todo el tiempo de su Quantum, este se dormirá durante una serie de unidades de tiempo. Los procesos que se duermen se desplazan a otra zona de la pantalla específica para ellos. Una vez que pase cierto tiempo, se despertarán y pasarán de nuevo a formar parte de la cola de procesos listos.

Los procesos irán pasando por los distintos estados de su ciclo de vida reflejando cada estado con un letrero que indicara el estado en el que se encuentran.



Cuestionario

A)

¿Qué es el planificador del CPU?

Cuando mas de un proceso es ejecutable, la porción del SO que debe decidir cual de ellos debe ejecutarse en primer término es el Planificador (Scheduler o Dispatcher).

¿Cuál es su importancia en el sistema?

Es importante ya que es el encargado de escoger los procesos correctos que van a ejecutarse y además de el depende el uso eficiente de la CPU.

En el contexto de la planificación del CPU, ¿se puede considerar el término planificador y despachador como sinónimos? Justifique su respuesta.

Tal vez, porque al hablar de planificador estamos diciendo que es el encargado ver cual proceso va a ser atendido o "despachado" primero y si habláramos de despachador diríamos que es el encargado de despachar a los procesos haciendo posible que usen el CPU, o sea que el planificador y el despachador en el contexto de la planificación del CPU pudieran ser sinónimos.

B)

¿Cuál es la finalidad de ejecutar un algoritmo de planificación?

La finalidad es lograr la equidad en los procesos, eficiencia, bajo tiempo de respuesta, un rendimiento alto y minimizar el tiempo de espera.

C)

¿Cuál es la diferencia entre una planificación apropiativa y no apropiativa?

La planificación apropiativa es aquella en la cual, una vez que a un proceso le toca su turno de ejecución ya no puede ser suspendido, ya no se le puede arrebatar el procesador.

Una planificación no apropiativa es aquella en que existe un reloj que lanza interrupciones periódicas en las cuales el planificador toma el control y se decide si el mismo proceso seguirá ejecutándose o se le da su turno a otro proceso.

D)

Defina el concepto ráfaga de CPU y ráfaga de E/S.

· Ráfaga de CPU: Intervalo de tiempo consecutivo que un proceso está ejecutándose en la CPU.
· Ráfaga de E/S: Intervalo de tiempo consecutivo que un proceso está realizando una E/S.

¿Qué consideraciones se deben tomar en cuenta al momento de seleccionar un algoritmo de planificación basándose en estos dos conceptos?

Se debe tener bien claro que es lo que queremos optimizar, por ejemplo, ay algoritmos de planificación que optimizan los tiempos medios de espera asignando de forma dinámica la longitud (duración) de la ráfaga de CPU de los procesos. También ay que tener muy en claro como la ejecución de un trabajo depende las longitudes de las ráfagas de CPU y de E/S, ningún algoritmo de planificación logra cubrir al 100% los objetivos deseados de la planificación, ya que si trata de optimizar algunos objetivos necesariamente debe descuidar otros, así que para seleccionar un algoritmo de planificación es necesario conocer el tipo de proceso a realizar y los tipos de criterios de planificación que se desean optimizar.

Algoritmos de Planificación elegidos para la simulación

FCFS (first come, firstserve)

Es un algoritmo apropiativo.


Es el algoritmo de planificación más sencillo. Esto es, el primer proceso en solicitar la CPU es el primero en recibir la asignación de la misma. La implementación del FCFS se realiza fácilmente mediante una cola FIFO. Cuando un proceso entra en la cola de preparados o listos para la ejecución (readyqueue), se lo coloca al final de la cola.

Cuando la CPU queda libre, ésta se le asigna al proceso situado al principio de la cola. Entonces el proceso en ejecución se elimina de la cola. FCFS rinde mucho mejor con procesos largos que con procesos cortos. Sin embargo, las prestaciones del FCFS son, con frecuencia, bastante malas.

Presenta problemas como que el tiempo medio de espera suele ser elevado, un bajo nivel de uso de la CPU, pobre tiempo de respuesta en procesos cortos en esquemas con mucha carga, tiende a favorecer los procesos con carga de CPU respecto a los que tienen carga de E/S, así como también un uso ineficiente de los dispositivos de E/S.


Round Robin

Es un algoritmo no apropiativo.


El algoritmo de planificación round-robin fue especialmente diseñado para sistemas de tiempo compartido. Requiere que se defina una pequeña unidad de tiempo común llamada quantum de tiempo o time slice, pequeño en magnitud de milisegundos. Los procesos se encolan en una cola de procesos listos que es tratada como una cola circular. El planificador recorre la cola asignando el procesador a cada proceso durante un intervalo de tiempo de hasta un quantum.

Para implementar la planificación round robin, la cola se mantiene como una cola de procesos FIFO. El planificador de la CPU selecciona el primer proceso de la cola, y únicamente puede salir del estado de ejecución por tres motivos:


  • Que termine su ejecución.
  • Que se proceda la llamada a una E/S y el proceso se quede bloqueado.
  • Que se genere una interrupción por haber superado un quantum de ejecución del proceso.
Si hay n procesos en la cola y el quantum de tiempo es q, entonces cada proceso obtiene 1/n del tiempo de CPU en fragmentos de al menos q unidades de tiempo cada vez. Cada proceso tiene que esperar no más de (n-1) x q unidades de tiempo hasta su quantum de tiempo siguiente.


El verdadero problema de esta implementación esta en la elección del quantum de tiempo para cada proceso. Si el quantum es muy pequeño, produce mucho overhead por la gran cantidad de cambios de contexto de ejecución que hace el sistema operativo. Si por el contrario, el quantum es muy grande produce un tiempo de reacción muy pobre porque los procesos en cola de listos esperan demasiado (si el tiempo de espera fuese infitino, este algoritmo se convertiría en un FCFS). Es decir que para que sea eficiente, la duración del contextswitch debe ser mucho menor que el quantum elegido.



Una desventaja del turno rotatorio es el tratamiento que hace si existe una mezcla de procesos limitados por CPU y procesos limitados por E/S. En este caso, sucedería lo siguiente: un proceso limitado por E/S utiliza el procesador durante un periodo corto y después se bloquea en la E/S, espera a que se complete la operación de E/S y entonces vuelve a la cola de listos. Por otro lado, un proceso limitado por procesador generalmente hace uso de un cuanto de tiempo completo cuando se ejecuta e inmediatamente retorna a la cola de listos. Así, los procesos con más carga de procesador que entrada/salida, tienden a recibir una porción desigual de tiempo de procesador, lo que origina un rendimiento pobre de los procesos con carga de E/S. Esto además, trae aparejado un mal aprovechamiento de los dispositivos de E/S y un incremento de la variabilidad del tiempo de respuesta.



Para solucionar este problema se implementa un variación del algoritmo llamada VRR (virtual round-robin). La nueva característica consiste en una cola FIFO auxiliar a la que se desplazan los procesos una vez que son liberados de la espera por E/S. Al tomar una decisión sobre el siguiente proceso a expedir, los procesos de la cola auxiliar tienen preferencia sobre los de la cola principal de listos. Cuando se expide un proceso desde la cola auxiliar, no se puede ejecutar más que un tiempo igual al cuanto básico menos el tiempo total de ejecución consumido desde que fue seleccionado por última vez en la cola de listos.



Conclusión

La planificación del procesador se refiere a la manera o técnicas que se usan para decidir cuánto tiempo de ejecución y cuando se le asignan a cada proceso del sistema.

Una buena estrategia de planificación debe buscar que los procesos obtengan sus turnos de ejecución apropiadamente, conjuntamente con un buen rendimiento y minimización de la overhead (sobrecarga) del planificador mismo. En general, se buscan cinco objetivos principales: Justicia o Imparcialidad en los procesos, Maximización de la finalización de procesos en el menor tiempo posible, Maximizar el tiempo de respuesta, Evitar la espera indefinida de tiempo para que los procesos ocupen la CPU, Evitar la inanición.

Para elegir el mejor algoritmo de planificación hay que conocer los tipos de procesos que se van a ejecutar y conocer los siguientes criterios de planificación: Utilización de CPU, Rendimiento, Tiempo de retorno o de estancia, Tiempo de espera y Tiempo de respuesta.

Actividad 4: Módulo de Planificación

Módulo del Sistema Operativo que realiza la planificación

El módulo del Sistema Operativo que realiza la planificación es el Planificador.


Planificación de procesos en Sistemas Operativos

Conjunto de políticas y mecanismos incorporados al sistema operativo, a través de un módulo denominado planificador, que debe decidir cuál de los procesos en condiciones de ser ejecutado conviene ser despachado primero y qué orden de ejecución debe seguirse. Esto debe realizarse sin perder de vista su principal objetivo que consiste en el máximo aprovechamiento del sistema, lo que implica proveer un buen servicio a los procesos existentes en un momento dado. 

Modo de decisión

Indica en qué instante en el tiempo se aplica la función de selección. Las decisiones del planificador deben efectuarse en una de las cinco circunstancias siguientes:

1ª. Cuando un proceso cambia del estado de ejecución al estado de bloqueado.
2ª. Cuando un proceso cambia del estado de ejecución al estado de listo.
3ª. Cuando un proceso cambia del estado de bloqueado al estado de listo.
4ª. Cuando llega un proceso nuevo. Del estado de nuevo al estado de listo.
5ª. Cuanto termina un proceso.  
        
Cuando la planificación tiene lugar únicamente en las situaciones 1ª y 5ª, decimos que el esquema de planificación es no apropiativo. Solo pierde el control del procesador cuando se bloquea por una operación de E/S o porque ha terminado.

En los otros casos decimos que tenemos un esquema de planificación apropiativo. Se le puede retirar el dominio del procesador a un proceso.


Algoritmos de Planificación

Primero en llegar primero en ser servido

Conocido como FCFS (First Come First Served). Este algoritmo emplea una cola de procesos, asignando un lugar a cada proceso por el orden de llegada. Cuando el proceso llega es puesto en su lugar en la cola después del que llegó antes que él y se pone en estado de listo. Cuando un proceso comienza a ejecutarse no se interrumpe su ejecución hasta que termina de hacerlo.

Prioridad al más corto

Su nombre es SJF (Shortest Job First). El proceso que se encuentra en ejecución cambiará de estado voluntariamente, o sea, no tendrá un tiempo de ejecución determinado para el proceso. A cada proceso se le asigna el tiempo que usará cuando vuelva a estar en ejecución, y se irá ejecutando el que tenga un menor tiempo asignado. Si se da el caso de que dos procesos tengan igual valor en ese aspecto emplea el algoritmo FCFS.

Round Robin

A cada proceso se le asigna un tiempo determinado para su ejecución, el mismo tiempo para todos. En caso de que un proceso no pueda ser ejecutado completamente en ese tiempo se continuará su ejecución después de que todos los procesos restantes sean ejecutados durante el tiempo establecido. Este es un algoritmo basado en FCFS que trata la cola de procesos que se encuentran en estado de listos como una cola circular.

Planificación por prioridad

En este tipo de planificación a cada proceso se le asigna una prioridad siguiendo un criterio determinado, y de acuerdo con esa prioridad será el orden en que se atienda cada proceso.

Planificación garantizada

Para realizar esta planificación el sistema tiene en cuenta el número de usuarios que deben ser atendidos. Para un número "n" de usuarios se asignará a cada uno un tiempo de ejecución igual a 1/n.

Planificación de Colas Múltiples

El nombre se deriva de MQS (Multilevel Queue Schedulling). En este algoritmo la cola de procesos que se encuentran en estado de listos es dividida en un número determinado de colas más pequeñas. Los procesos son clasificados mediante un criterio para determinar en qué cola será colocado cada uno cuando quede en estado de listo. Cada cola puede manejar un algoritmo de planificación diferente a las demás.





Práctica 6: Deadlock de Procesos en Java


Introducción

El interbloqueo (deadlock) se puede definir como el bloqueo permanente de un conjunto de procesos que compiten por los recursos del sistema o bien se comunican unos con otros. A diferencia de otros problemas de la gestión concurrente de procesos, no existe una solución eficiente para el caso general.

Todos los interbloqueos suponen necesidades contradictorias de recursos por parte de dos o más procesos.

A veces, los interbloqueos se denominan "abrazo mortal".

El interbloqueo puede definirse formalmente como sigue: Un conjunto de procesos está en interbloqueo si cada proceso del conjunto está esperando un evento que sólo otro proceso del conjunto puede causar. Puesto que todos los procesos están esperando, ninguno de ellos puede causar ninguno de los eventos que podrían despertar a cualquiera de los demás miembros del conjunto, y todos los procesos continúan esperando indefinidamente.

Código en Java Deadlock

Deadlock describe una situación en la que dos o más hilos están bloqueados constantemente, esperando a los demás. He aquí un ejemplo.

Alphonse y Gaston son amigos, y grandes creyentes de la cortesía. Una regla estricta de cortesía es que cuando haces reverencia a un amigo, debes permanecer inclinado hasta que tu amigo tenga la oportunidad de responder la reverencia. Desafortunadamente, esta regla no tiene en cuenta la posibilidad de que dos amigos hagan reverencia el uno al otro al mismo tiempo. Esta aplicación de ejemplo, Deadlock, modela esta posibilidad:

public class Deadlock {
    static class Friend {
        private final String name;
        public Friend(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public synchronized void bow(Friend bower) {
            System.out.format("%s: %s has bowed to me!%n",
                    this.name, bower.getName());
            bower.bowBack(this);
        }
        public synchronized void bowBack(Friend bower) {
            System.out.format("%s: %s has bowed back to me!%n",
                    this.name, bower.getName());
        }
    }

    public static void main(String[] args) {
        final Friend alphonse = new Friend("Alphonse");
        final Friend gaston = new Friend("Gaston");
        new Thread(new Runnable() {
            public void run() { alphonse.bow(gaston); }
        }).start();
        new Thread(new Runnable() {
            public void run() { gaston.bow(alphonse); }
        }).start();
    }
}

Cuando se ejecuta Deadlock, es muy probable que ambos hilos se bloqueen cuando intenten invocar bowBack. Ningún bloque nunca terminaría porque cada hilo está esperando a que el otro salga.

Ejecución del código


Comentario de los resultados de la ejecución del código

Casi siempre el programa nunca va terminar su ejecución ya que los procesos se quedan "atorados" y no avanzan, aunque puede darse el caso de que los procesos no se bloqueen entre sí y el programa logre terminar su ejecución.

Código en Java Deadlock con nombres


                                                      Ejecución del código con nombres


                        Comentario de los resultados de la ejecución del código con nombres

Ocurre lo mismo que en la primera ejecución del código, los procesos se quedan "atorados" y no avanzan, aunque puede darse el caso de que los procesos no se bloqueen entre sí y el programa logre terminar su ejecución.

Manera en la que se presenta el Deadlock en el programa

1. Cuando entra Alphonse.bow (gaston); Alphonse esta ahora bloqueado debido a la palabra clave “Synchronized".

2. Cuando entra gaston.bow (Alphonse); Gaston está ahora bloqueado.

3. No puede ejecutarse “bower.bow Back(thie); del primer método bow que se llama, porque gaston (bower) es bloqueado.

* Espera a que sea liberado el bloqueo.

4. No puede ejecutarse el bower.bowback(this) del segundo método llamado porque Alphonse(bower) esta bloqueado.

*Espera a que el bloqueo sea liberado.

En pocas palabras ambos hilos esperan el un o por el otro para que sea liberado el bloqueo.





Actividad 3: Criterios de Planificación del CPU


Introducción

Planificación: Gestión del procesador realizada por los sistemas operativos a través de distintas políticas y mecanismos. Su objetivo principal es el de dar un buen servicio a todos los procesos que existan en un momento dado en el sistema [Lancharro, 1992].

La planificación del procesador es la base de los sistemas operativos multiprogramados. Al conmutar el procesador entre los procesos, el sistema operativo puede hacer más productiva la computadora [Silberschatz, 1999].

Niveles de planificación

Niveles de planificación [Lancharro, 1992]:

Planificación a largo plazo (planificador de trabajos).
Decide cuál será el próximo trabajo que se va a ejecutar. Sólo existe en los sistemas de proceso por lotes, donde la decisión se basa en las necesidades de recursos y su disponibilidad. En los sistemas de tiempo compartido tiene como única misión cargar los programas que se desean ejecutar en memoria. Es el encargado de crear procesos.

Planificación a mediano plazo (planificador de swapping).
Decide si un proceso que está en ejecución en estado bloqueado o suspendido debe ser extraído de la memoria temporalmente. Posteriormente, cuando el sistema se encuentre más descargado, devolverá dicho proceso a la memoria y al estado de ejecución. Está técnica se conoce con el nombre de swapping. Sólo existe en sistemas de tiempo compartido y en aquellos que tienen gestión de memoria virtual. Gestiona los procesos suspendidos en espera de algún recurso no disponible en el momento de la suspensión.

Planificación a corto plazo (planificador de procesador).
Es el encargado de decidir cómo y cuándo tendrá acceso al procesador a un proceso que está preparado para utilizarlo. Por ello, lleva a cabo las funciones de la multiprogramación, estando siempre residente en memoria y ejecutándose con mucha frecuencia; por ello, debe ser de ejecución muy rápida. En este nivel, es donde se debe dar buen servicio a los procesos interactivos para que el usuario no perciba, o lo haga en pequeño grado, que está compitiendo por el procesador junto con otros usuarios.

Objetivos

Las políticas de planificación intentan cubrir los siguientes objetivos [Lancharro, 1992]:

JusticiaLa política debe ser lo más justa posible con todo tipo de procesos, sin favorecer a unos perjudicar a otros.

Máxima capacidad de ejecución. Debe dar un servicio aceptable para que todos los trabajos se realicen lo más rápidamente posible. Esto se logra disminuyendo el número de cambios de proceso.

Máximo número de usuarios interactivos. En los sistemas de tiempo compartido se tratará de que puedan estar trabajando el mayor número de usuarios simultáneamente.

Predecibilidad. La política de planificación debe concebirse de tal forma que en todo momento pueda saberse cómo será su ejecución.

Minimización de la sobrecarga. La computadora debe tener poca sobrecarga ya que ésta incide directamente sobre el rendimiento final del sistema: a menor sobrecarga, mayor velocidad de proceso. Por ello, los cambios de contexto deben disminuirse.

Equilibrio en el uso de recursos. Para obtener un buen rendimiento en el uso de los recursos y que éstos estén ocupados equitativamente el mayor tiempo posible.

Seguridad de las prioridades. Si un proceso tiene mayor prioridad que otro, éste debe ejecutarse más rápidamente.

Criterios

Criterios a considerar a la hora de elegir o diseñar un buen algoritmo de planificación [Tanenbaum, 1993], [Lancharro, 1992], [Silberschatz, 1999]:

1- Equidad.
Garantizar que cada proceso obtiene su proporción justa de la CPU.

2- Eficacia, eficiencia, utilización de la CPU.
Mantener ocupada la CPU el 100% del tiempo.

3- Tiempo de respuesta.
Velocidad con que el ordenador da respuesta a una petición. Depende mucho de la velocidad de los dispositivos de entrada/salida.

4- Tiempo de regreso o de servicio.
Es el tiempo que tarda en ejecutarse un proceso, donde se incluye el tiempo de carga del programa en memoria, el tiempo de espera en la cola de procesos preparados, el tiempo de ejecución en el procesador y el tiempo consumido en operaciones de entrada/salida.

5- Tiempo de ejecución.
Es idéntico al tiempo de servicio menos el tiempo de espera en la cola de procesos preparados; es decir, es el tiempo teórico que necesitaría el proceso para ser ejecutado si fuera el único presente en el sistema.

6- Tiempo de procesador.
Es el tiempo que un proceso está utilizando el procesador sin contar el tiempo que se encuentra bloqueado por operaciones de entrada/salida.

7- Tiempo de espera.
Es el tiempo en que los procesos están activos pero sin ser ejecutados, es decir, los tiempos de espera en las distintas colas.

8- Rendimiento.
Es el número de trabajos o procesos realizados por unidad de tiempo, que debe ser lo mayor posible.

Medidas

Para estudiar el comportamiento de las distintas políticas de planificación, definiremos dos medidas relacionadas entre si que nos indiquen cómo estamos tratando un proceso concreto.

- Tiempo de servicio (T):           T = tf - ti

siendo   ti : el instante en que el usuario da la orden de ejecución del proceso.
            tf : el instante en que el proceso termina su ejecución.
      
- Tiempo de espera (E):            E = T - t

siendo   t : el tiempo que un proceso P necesita estar en ejecución para llevar a cabo su trabajo.

Podemos establecer una relación que nos permite evaluar la actuación de la política establecida en lo que se denomina índice de servicio (I).

                                               I = t / T

Este índice representa el tanto por uno de tiempo que el proceso está en ejecución respecto al tiempo de vida del mismo en el sistema.
En caso de que sólo exista un proceso ejecutándose en el sistema, podemos decir que:

Cuando I sea próximo a la unidad, el proceso está limitado por proceso.
Si I tiene un valor bajo próximo a 0, el proceso estará limitado por entrada/salida.

En caso de que exista más de un proceso en el sistema, debemos establecer los valores medios obtenidos al considerar el conjunto de procesos presentes. Las medidas serán:

· Tiempo medio de servicio.
· Tiempo medio de espera.
·         Eficiencia (índice medio de servicio).

Existen otras dos medidas que suelen emplearse:

· Tiempo del núcleo.
Es el tiempo consumido por el núcleo del sistema operativo para tomar decisiones de planificación del procesador, donde se incluyen los tiempos de cambio de contexto y de proceso.

· Tiempo de inactividad (Idle).
Es el tiempo consumido cuando la cola de procesos preparados está vacía y por tanto no puede realizarse ningún trabajo productivo.

Algoritmos

El planificador del procesador tiene como misión la asignación del mismo a los procesos que están en la cola de procesos preparados. Esta cola es alimentada desde dos puntos distintos:

· Cada vez que un usuario inicie la ejecución de un programa, el planificador a largo plazo recibe la orden de ejecución, crea el proceso y lo pasa al planificador a corto plazo, colocándose en la cola de procesos preparados.

· Cuando un proceso deja de estar en estado de ejecución y no existen causas para su bloqueo, o deja de estar bloqueado, pasa nuevamente a la cola de procesos preparados.

Cuando un proceso termina su ejecución, deja de existir para el planificador.

Las políticas de planificación se agrupan en:

· Políticas apropiativas.
Son las que producen un cambio de proceso con cada cambio de contexto; es decir, el proceso que está haciendo uso del procesador puede ser temporalmente suspendido y permitir que otro proceso se apropie del procesador. Se utilizan en sistemas operativos con tiempo compartido y tiempo real.

· Políticas no apropiativas.
Son aquellas en las que un proceso no abandona nunca el procesador desde su comienzo hasta su fin. Se utilizan en sistemas de proceso por lotes.

Los diferentes algoritmos que existen son:

Primero en llegar, primero en ser servido (First Come, First Served - FCFS)
Primero en entrar, primero en salir (First Input, First Output - FIFO)
Servicio por orden de llegada.
Descripción
El procesador ejecuta cada proceso hasta que termina, en el orden que llegan.
Manejo de cola de procesos preparados
Los procesos permanecerán encolados en el orden en que lleguen hasta que les toque su ejecución.
Se alimenta sólo por la creación de los procesos.
Política
No apropiativa.
Ventajas
Muy simple y sencilla.
Justa aunque los procesos largos hacen esperar mucho a los cortos.
Es predecible.
Desventajas
Pobre en cuanto a su comportamiento.
Tiempo medio de servicio muy variable dependiendo del número de procesos y su duración.
Tiempo de espera promedio suele ser muy largo.
No sirve para sistemas de tiempo compartido.
Observaciones
I mejora cuanto más largos son los procesos.
E depende del número de procesos que se encuentren en cola y del tiempo que requieran el procesador y es independiente de las necesidades de ejecución del propio proceso.

Round Robin (RR)
Asignación cíclica
Planificación en rueda
Planificación por turno circular
Descripción
Concede a cada proceso en ejecución un tiempo q (quantum o cuanto de tiempo o porción de tiempo). Forma un rueda de procesos que serán ejecutados cíclicamente hasta que terminen.
Manejo de cola de procesos preparados
Transcurrido q, si el proceso no ha terminado, el temporizador genera una interrupción para el sistema operativo, se le devuelve al final de la cola.
Gestión de cola: FIFO o por prioridad.
Cuando se crea un proceso se coloca al final de la lista.
Si un proceso se crea en el momento en que un q finaliza, se supondrá que este llegó antes a la cola.
Política
Apropiativa.
Ventajas
El tiempo de espera crece de acuerdo al tiempo de ejecución de cada proceso.
Es la más usada para tiempo compartido.
Ofrece índice de servicio uniforme
Sencillo, justo y de uso amplio.
Desventajas
Determinar el q óptimo, ya que depende de:
-     El tipo de sistema.
-     Las cargas.
-     El número de procesos y su tipo.
El tiempo de espera promedio suele ser muy grande.
Observaciones
Si el proceso se bloquea o termina antes de consumir q, se alterna el uso de la CPU.
Si q es mayor que el tiempo de ejecución del proceso más largo se convertirá en una política FCFS.
Si se aproxima a 0, la mayor parte del tiempo se consumirá en cambios de contexto.
10 ms. < q < 100 ms.
Se recomienda q mayor al 80 % de los tiempos de respuesta de los procesos.

El siguiente proceso, el más corto (Shortest Job Next - SJN)
Primero el trabajo más corto (Shortest Job First – SJF)
Descripción
Toma el proceso que necesite menos tiempo de ejecución. Debe conocer el tiempo que necesita cada proceso.
Manejo de cola de procesos preparados
Ubicar los procesos en cola en orden por el tiempo de ejecución.
Política
No apropiativa
Ventajas
El tiempo de espera aumenta con la longitud de los procesos, pero el tiempo medio de espera es óptimo.
Buen tiempo de servicio.
Algoritmo apropiado para las tareas por lotes.
Desventajas
Determinar el tiempo necesario para cada proceso. Métodos:
-          Información del usuario.
-          Por el propio programa.
-          Basado en la historia (heurística)
Poco predecible.
No es justa para procesos largos.
Observaciones
Si hay dos procesos que necesitan igual tiempo de ejecución se usa FCFS para romper el empate.
El tiempo de espera del proceso corto disminuirá más de lo  que aumenta el tiempo de espera del proceso largo. Entonces el tiempo de espera promedio disminuye.
Próximo proceso, el de tiempo restante más corto (Shortest Remaining Time - SRT)
Descripción
Variante de SJN.
Cambia el proceso en ejecución cuando se ejecuta un proceso con un tiempo de ejecución total menor que el que se está ejecutando.
Manejo de cola de procesos preparados

Política
Apropiativa
Ventajas
El tiempo de respuesta medio de los procesos largos mejora.
Excelente I y E es bastante corto para todos los procesos.
Logra que la cola sea lo más corta posible.
Es muy eficiente.
Desventajas
Mayor sobrecarga.
Injusta, pues un proceso corto puede echar a uno largo que este haciendo uso del procesador y que además esté terminando.
Observaciones

Prioridad
Descripción
A cada proceso se le asocia una prioridad y el procesador se asigna al de mayor prioridad.
Se pueden asignar en forma estática o dinámica.
Manejo de cola de procesos preparados

Política
Apropiativa o no apropiativa.
Ventajas

Desventajas
Bloqueo o postergación indefinida o inanición. Utilizar envejecimiento de las prioridades, que aumenta gradualmente las prioridades de los procesos que están en espera.
Observaciones
Las prioridades son definidas:
-          Internamente: el SO se basa en información medible (tiempo necesitado de procesador, necesidad de memoria, número de archivos abiertos).
-          Externamente: se fijan según criterios como la importancia del proceso, el tipo, el departamento que lo patrocina, a menudo factores políticos.
UNIX provee el comando nice que permite a un usuario reducir en forma voluntaria. Nadie la ha utilizado.
Próximo el de más alto índice de respuesta (High Response Next - HRN)
Descripción
Hace variable la prioridad de un proceso.
P = (w + t) / t
P: prioridad
w: tiempo de espera en cola
t: tiempo de ejecución del proceso.
Manejo de cola de procesos preparados

Política
No apropiativa.
Ventajas
Corrige las injusticias de SJN con procesos largos y las de FCFS con procesos cortos.
Es justa.
Desventajas
Si aparece un proceso corto inmediatamente después de que un proceso largo comienza a ejecutarse deberá sufrir una larga espera.
Muy costosa y produce gran sobrecarga por los cálculos.
Observaciones
P inicialmente valdrá 1.
P aumentará a medida que el proceso permanezca en cola (w favorece a procesos largos).
P disminuirá cuando más tiempo este en ejecución (t favorece a procesos cortos).
Colas múltiples
Descripción
Divide la cola de procesos preparados en varias colas separadas. Los procesos se asignan a una determinada cola según sus necesidades, tamaño de memoria, prioridades y tipo.
Existe un algoritmo de planificación entre las colas. Normalmente apropiativo de prioridad fija.
Otra posibilidad: dividir el tiempo entre colas. Cada cola tiene un tiempo de CPU.
Manejo de cola de procesos preparados
Cada cola puede tener una planificación distinta.

Política
Apropiativa.
Ventajas

Desventajas

Observaciones


Colas múltiples con retroalimentación (Feedback Multiple Queues - FB)
Descripción
Divide los procesos en varias colas numeradas siendo la de numeración más baja la de mayor prioridad.
Un planificador de colas multinivel con retroalimentación esta definido por:
-          el número de colas.
-          El algoritmo de planificación para cada cola.
-          El método empleado para determinar cuando se debe promover un proceso a una cola de mayor prioridad.
-          El método empleado para determinar cuando se debe promover un proceso a una cola de menor prioridad.
-          El método empleado para determinar en cual cola ingresará un proceso cuando necesite servicio.
Manejo de cola de procesos preparados
Cuando el proceso finaliza su q, se selecciona el proceso del principio de la cola del nivel más bajo que tenga algún proceso.
Luego de un número determinado de consumos de q, sin haber finalizado, se lo coloca al final del nivel inmediatamente superior.
Cada cola puede tener una planificación distinta.
Política
Apropiativa.
Ventajas
Soporta bien la sobrecarga.
Adaptable a las necesidades del sistema.
Algoritmo más general.
Desventajas

Observaciones
Procesos limitados por procesador irán a colas de menor prioridad (nivel alto).
Procesos muy interactivos irán en colas de alta prioridad (nivel bajo).

Dos niveles
Descripción
Si no se dispone de suficiente memoria principal será necesario mantener algunos procesos ejecutables en disco.
Primero se trabaja con un subconjunto cargado en memoria y en forma periódica se llama al planificador de nivel superior para realizar el cambio.
Manejo de cola de procesos preparados

Política

Ventajas

Desventajas

Observaciones
Criterios para elegir que procesos ejecutables están en memoria o en disco:
-          Tiempo que ha transcurrido desde el último intercambio del proceso.
-          Tiempo de CPU que ha utilizado recientemente el proceso.
-          Tamaño del proceso.
-          Prioridad del proceso.


Planificación de múltiples procesadores

El problema de planificación se vuelve más complejo. Se han ensayado muchas posibilidades, tales como:
· Tener una cola aparte para cada procesador; sin embargo, un procesador podría estar ocioso, con su cola vacía, mientras otro está muy ocupado.
· Tener una cola común para los procesos listos. Los procesos ingresan en una cola y se les asigna cualquier procesador que esté disponible. Existen 2 estrategias para este caso:
Cada procesador se auto - planifica. El procesador examina la cola común de procesos listos y escoge el proceso que ejecutará. Como varios procesadores tratan de acceder a una estructura de datos común y actualizarla es preciso programar cada procesador con mucho cuidado.

Para evitar los problemas de la estrategia anterior se nombra a un procesador como planificador para los demás  procesadores, lo que da lugar a una estructura maestro - esclavo. Una variante es que el procesador maestro tome todas las decisiones de planificación y se encargue del procesamiento de E/S y otras actividades del sistema. Los demás procesadores ejecutan código de usuario. Este se conoce como multiprocesamiento asimétrico, porque sólo un procesador accede a las estructuras de datos del sistema y reduce la necesidad de compartir recursos.

Planificación en tiempo real.

Evaluación de algoritmos.

El siguiente paso es evaluar los diversos algoritmos que se estén considerando. Hay varios métodos de evaluación distintos, entre ellos:

· Modelado determinista.
Es un tipo de evaluación analítica que toma una carga de trabajo predeterminada específica y define el desempeño del algoritmo para esa carga de trabajo.

· Modelos de colas.
Consiste en determinar las distribuciones características del sistema, tales como: la distribución de las ráfagas de CPU y E/S (comúnmente exponencial) y la distribución de los tiempos en que los procesos llegan al sistema. A partir de estas distribuciones es posible calcular el rendimiento promedio, el aprovechamiento, el tiempo de espera, etc. para la mayor parte de los algoritmos. Los modelos consisten asociar a cada recurso colas de procesos en espera. Conociendo frecuencias de llegada y rapidez de servicio es posible calcular el aprovechamiento, la longitud de colas, el tiempo de espera promedio, etc.

·Simulaciones.
Implica programar un modelo del sistema de computación. El simulador tiene una variable que representa un reloj; cuando se incrementa el valor de esta variable, el simulador modifica el estado del sistema de modo que refleje las actividades de los dispositivos, los procesos y el planificador. Conforme se ejecuta la simulación, se recopilan e imprimen los datos estadísticos que indican el desempeño del algoritmo.
Los datos que se alimentan a la simulación se pueden generar de varias maneras. El método más común emplea un generador de números aleatorios. Otra forma es a través de cintas de rastreo que se crean vigilando el sistema real y registrando la secuencia de sucesos reales.

· Implementaciones.
La única forma exacta de evaluar un algoritmo de planificación es codificarlo, colocarlo en el SO y ver como funciona. El principal inconveniente es el costo. Es necesario codificar el algoritmo y modificar el SO para que lo apoye, crear las estructuras de datos que requiere y ver la reacción de los usuarios ante un SO que cambie constantemente. Otro inconveniente de cualquier evaluación de algoritmos es que el entorno en el que se usa el algoritmo cambiará no sólo cuando se escriben nuevos programas y los tipos de problemas cambian sino también por el desempeño del planificador.
Existen algoritmos de planificación más flexibles que permiten  los administradores o usuarios alterarlos o modificar las variables que utilizan.