miércoles, octubre 19, 2011

Tipos De Procesos De Planificacion Usan Las Maquinas

Al respecto, este último autor afirma que, el proceso de planificación y control de la producción debe seguir un enfoque jerárquico, en el que se logre una integración vertical entre los objetivos estratégicos, tácticos y operativos y además se establezca su relación horizontal con las otras áreas funcionales de la compañía.
Básicamente las cinco fases que componen el proceso de planificación y control de la producción son [Domínguez Machuca 1995]:

1. Planificación estratégica o a largo plazo. 
2. Planificación agregada o a medio plazo. 
3. Programación maestra. 
4. Programación de componentes. 
5. Ejecución y control.
En épocas pasadas de los sistemas de procesamiento por lotes (batch), la idea que existía sobre la planificación era bastante simple y consistía en aplicar un algoritmo secuencial. Esto producía un desaprovechamiento muy importante de las capacidades del procesador ya que la ejecución de un proceso alternaba entre dos estados de ejecución: utilizando la CPU o esperando a que se realice una operación de E/S, por lo que mientras se trabajaba con un dispositivo, el procesador se encontraba inactivo.
Más tarde, surgieron los sistemas multiprogramados, en donde se intentó maximizar la utilización de la CPU. Esto se pudo conseguir manteniendo varios procesos en la memoria, y cuando un proceso tenía que esperar, el sistema operativo le quitaba la CPU y se lo asignaba a otro proceso que se encontraba en dicha memoria. Por lo tanto, la tarea de la planificación cobró gran importancia por su incidencia directa sobre el rendimiento del sistema, ya que el sistema operativo debía decidir qué proceso esperaría y qué proceso continuaría.
Podemos definir a la planificación como un 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. Un "buen" servicio podría traducirse en tiempo de respuesta aceptable, productividad eficiencia del procesador.
Niveles de planificación
La planificación se hace en cuatro instantes de tiempo. De estas cuatro, una no la realiza el sistema operativo, sino que es externa al procesamiento, pero tiene una influencia enorme sobre la definición del procesamiento, dado que el sistema operativo queda determinado por las decisiones que se toman en este nivel. A esta instancia le daremos el nombre de "extra largo plazo" por ser en la escala de tiempo del ser humano.
En la administración del procesador podemos distinguir tres niveles de planificación de acuerdo a la escala de tiempo en que se realiza la misma. El largo plazo en segundos, mediano plazo en milisegundos y el corto plazo en nanosegundos o microsegundos.
Planificación a extra largo plazo
Consiste en una planificación externa que se hace en el centro de cómputos y está estrechamente ligada a las políticas de funcionamiento del sistema, ya que se determina la importancia relativa de los usuarios. A través de procedimientos escritos se fijan las reglas que se aplicarán a los usuarios relativos al uso, seguridad, accesos, prioridades, etc, así como también las reglas en cuanto a modalidad de procesamiento, la operación, la política de backup, etc.
Esta planificación busca satisfacer cuatro objetivos desde el punto de vista de los usuarios:
1.       Mayor velocidad de respuesta en sus trabajos con lo que disminuye el tiempo de espera de los usuarios.
2.       Existencia y disponibilidad de recursos que necesitan para ejecutar sus trabajos.
3.       Importancia de sus tareas.
4.       Seguridad de que sus trabajos sean completados correctamente.
Por lo tanto, es responsabilidad del profesional de sistemas brindar un adecuado servicio de procesamiento de datos como también ocuparse del orgware y del peopleware para que todo funcione dentro de lo establecido.
Planificación a largo plazo
El planificador a largo plazo, scheduler o planificador de trabajos, es un administrador que se encarga de organizar la ejecución con un adecuado planeamiento de recursos para que el trabajo se ejecute ordenadamente y eficientemente según la modalidad de procesamiento.
El sheduler se ejecuta con poca frecuencia, sólo cuando se necesita crear un nuevo proceso en el sistema, cuando termina un proceso, o ingresa un usuario en el sistema, por lo que tiene prioridad máxima para ejecutar. Es el responsable de controlar el nivel de multiprogramación del sistema y el balance de carga del sistema. Esto último implica la selección cuidadosa de trabajos para mantener un adecuado balance de carga de procesos que hacen uso de E/S intensivo (I/O bound) o uso de CPU intensivo (CPU bound).
Procedamos a describir un poco su accionar ante un nuevo trabajo. Un software del sistema operativo, llamado monitor, recibe al nuevo trabajo y lo carga en la memoria central. Después de haber sido recibido el trabajo, el sheduler se encarga de preparar y crear procesos con sus respectivos bloques de control del proceso (PCB) para poder ejecutarlos. Si los recursos que solicita estuvieran disponibles, se le asignan y se lo ingresa a la cola de listos para ejecutar.
Existen diferentes filosofías en el procesamiento de un trabajo. Todas ellas responden a ciertos criterios de planificación que se vuelcan en los respectivos algoritmos de planificación. Esto se conoce como la modalidad de ejecución o procesamiento. Los más importantes son:
·         Batch: Apunta estrictamente al exhaustivo uso del procesador en detrimento del usuario. Sus principales caracterísiticas son:
1.       La CPU es monoprogramada.
2.       No existe diferencia entre trabajo y proceso.
3.       El scheduler elige el trabajo, crea el proceso y lo ejecuta.
4.       Prácticamente hay un solo nivel de planificación.
·         Interactivo: Apunta al servicio del usuario en detrimento de la performance del procesador. Es multiprogramado pues se multiplexa la CPU entre varios programas.
·         Multiprocesado: Es un ambiente en el que existen varios procesadores para servir a los procesos en ejecución.
·         Procesamiento distribuido o en red: Es una forma de procesamiento en que se le presenta al usuario una máquina virtual y en que el procesamiento se realiza en distintas máquinas diseminadas geográficamente y conectadas por una red.
En conclusión y siendo un poco más precisos, podríamos decir que las tareas que involucra este nivel de planificación son:
·         Mantener un registro de estado de todos los trabajos en el sistema (JBC).
·         Establecer una estrategia para el pasaje entre las colas de suspendidos y la de listos.
·         Asignar recursos (memoria central, dispositivos, procesadores, etc.) a cada trabajo.
·         Pedir (recuperar) los recursos cuando los trabajos se han completado.
·         Detectar y prevenir los conflictos de abrazo mortal o deadlock.
·         Dar entrada a nuevos trabajos.
·         Asignar prioridades a los procesos. Esto genera el orden de ejecución y viene determinado básicamente por el orden de procesos en la cola de listos, o sea, el orden en el que el dispatcher los seleccionará de esta cola para ponerlos en ejecución (generalmente el primero de la cola).
·         Implementar las políticas de asignación de recursos, razón por la que se le otorga la máxima prioridad en el sistema para que el dispatcher lo seleccione primero si está libre el procesador y se ejecuta cuando:
1.       Se pide o libera un recurso.
2.       Cuando termina un proceso.
3.       Cuando llega un nuevo trabajo al pool de procesos (lo ubica en la ready queue)
4.       Cuando llega un nuevo usuario al sistema.
Planificación a mediano plazo
Es el que decide sacar de memoria central y llevar a disco (swap-out) a aquellos procesos inactivos o a los activos cuyos estados sean bloqueado momentáneamente o temporalmente o los suspendidos y luego, cuando desaparezcan las causas de sus bloqueos, traerlos nuevamente a memoria (swap-in) para continuar su ejecución. Este tipo de planificador se encuentra solo en algunos sistemas especialmente en los de tiempo compartido, ya que permite mantener un equilibrio entre los procesos activos e inactivos.
Este planificador puede ser invocado cuando quede espacio libre de memoria por efecto de la terminación de un proceso o cuando el suministro de procesos caiga por debajo de un límite especificado.
En algunos casos suplanta al planificador de largo plazo y otros lo complementa: Por ejemplo en sistemas de tiempo compartido, el long-term scheduler puede admitir más usuarios de los que pueden caber realmente en memoria. Sin embargo, como los trabajos de estos sistemas están caracterizados por ciclos de actividad y ciclos de ociosidad, mientras el usuario piensa algunos procesos pueden ser almacenados y al recibir respuesta vueltos a poner en la cola de listos.
Este tipo de planificación solo es usado en sistemas con mucha carga de procesos, ya que el procedimiento de swapping produce mucho overhead, haciendo bajar considerablemente el desempeño general.
Planificación a corto plazo
También llamado short-term scheduler o low scheduler, es el responsable de decidir quién, cuándo, cómo y por cuánto tiempo recibe el procesador un proceso que está preparado (ready queue) para ejecutar (los recursos a esta altura ya deben estar todos disponibles para este trabajo). Además en sistemas operativos con esquemas expropiativos (se quita el recurso procesador al proceso) verifica las interrupciones.
El planificador a corto plazo es invocado cada vez que un suceso (interno o externo) hace que se modifique el estado global del sistema. Por ejemplo:
·         Tics de reloj (interrupciones basadas en el tiempo).
·         Interrupciones y terminaciones de E/S.
·         La mayoría de las llamadas operacionales al sistema operativo (en oposición a las llamadas de consulta).
·         El envío y recepción de señales.
·         La activación de programas interactivos.
El low scheduler debe ser rápido y con poca carga para el procesador para que se mantenga el rendimiento, ya que se le debe sumar además el tiempo que toma el cambio de contexto. El cambio de contexto o context switch consiste en la conmutación de la CPU entre un proceso y otro y es overhead puro, por lo tanto debe ser lo más rápido posible. Algunos valores típicos oscilan entre 1 y 100 m seg que se conoce como dispatch latency.
El context switch involucra:
·         Preservar el estado del viejo proceso (guardar en el stack su PCB).
·         Recuperar el estado del nuevo proceso (recuperar su PCB).
·         Bifurcar a la dirección donde había sido suspendido el nuevo proceso.
·         El proceso nulo o vacío
·         Un problema que debe resolver un sistema operativo multitarea es, qué debería hacer el sistema cuando no hay nada que ejecutar. Por ejemplo cuando la cola de listos se encuentra vacía.
·         Este problema es resuelto en muchos sistemas operativos con el proceso NULO que es creado por el sistema en el momento de arranque. El proceso nulo nunca termina, no tiene E/S y tiene la prioridad más baja en el sistema. En consecuencia la cola de listos nunca está vacía, además la ejecución del planificador puede hacerse más rápida al eliminar la necesidad de comprobar si la cola de listos está vacía o no. Algunas de las tareas que se le pueden dar al proceso nulo, por ejemplo, es realizar estadísticas de uso de procesador, o asistencia de vigilancia de la integridad del sistema, etc.

martes, octubre 18, 2011

2.1 Concepto De Proceso

Proceso:

Un proceso no es más que un conjunto de threads(hilos) que ejecutan el mismo código, junto con las zonas de memoria asociadas a ellos y los ficheros que tienen abiertos.

Un programa consta, al menos, de un proceso, y de un thread. Cuando un programa tiene varios procesos, lo normal es que cada uno ejecute un código distinto, los cuales se encuentran en ficheros ejecutables separados. Dos procesos solo pueden compartir una zona de memoria si esta es definida expresamente como tal. Así mismo, es en este caso cuando los sistemas de sincronización a la hora de compartir memoria (de los que hablaremos más adelante) se vuelven especialmente necesarios e importantes.


2.2 Estados Y Transiciones De Los Procesos

Los sistemas operativos multiprogramados necesitan del concepto de proceso. El sistema operativo debe entremezclar la ejecución de un número de procesos para maximizar la utilización de los recursos del ordenador. Al mismo tiempo, los sistemas de tiempo compartido deben proporcionar un tiempo de respuesta razonable. El sistema operativo debe asignar recursos a los procesos de acuerdo a una política específica (ciertas funciones o aplicaciones son de mayor prioridad), mientras impide los interbloqueos. Por último, el sistema operativo debe ofrecer un soporte para llevar a cabo la comunicación entre procesos.
El concepto de proceso es clave en los sistemas operativos modernos. La gestión del procesador mediante multiprogramación, revolucionó la concepción de los sistemas operativos, e introdujo el término proceso como elemento necesario para realizar dicha gestión. Por lo demás, este tema trata sobre la definición de proceso, el estudio de sus propiedades, y la gestión que realiza el sistema operativo para crear la abstracción de proceso, aunque esto último se completará en el tema de planificación. Por último, descubriremos que el concepto de proceso encierra, en realidad, dos características potencialmente independientes: por un lado, es una unidad a la que se le asigna y posee recursos y, por otro, es una unidad planificable. Basándonos en esta distinción emprenderemos el estudio de los threads (hebra o hilo), o también llamados procesos ligeros.


Hasta ahora hemos utilizado siempre el término programa. A partir de ahora distinguiremos entre programa y proceso. Un programa es una secuencia de instrucciones escrita en un lenguaje dado. Un proceso es una instancia de ejecución de un programa, caracterizado por su contador de programa, su palabra de estado, sus registros del procesador, su segmento de texto, pila y datos, etc. Un programa es un concepto estático, mientras que un proceso es un concepto dinámico. Es posible que un programa sea ejecutado por varios usuarios en un sistema multiusuario, por cada una de estas ejecuciones existirá un proceso, con su contador de programa, registros, etc. El sistema operativo necesita el concepto de proceso para poder gestionar el procesador mediante la técnica de multiprogramación o de tiempo compartido, de hecho, el proceso es la unidad planificable, o de asignación de la CPU.

Estados de un proceso y Transiciones:

Durante su vida, un proceso puede pasar por una serie de estados discretos, algunos de ellos son:

  • En ejecución: El proceso ocupa la CPU actualmente, es decir, se está ejecutando.
  • Listo o preparado: El proceso dispone de todos los recursos para su ejecución, sólo le falta la CPU.
  •  Bloqueado: Al proceso le falta algún recurso para poder seguir ejecutándose, además de la CPU. Por recurso se pueden entender un dispositivo, un dato, etc. El proceso necesita que ocurra algún evento que le permita poder proseguir su ejecución.
Hay otros estados de los procesos, pero en la presente exposición se tratarán estos tres. Por sencillez, se considera un sistema con una sola CPU, aunque no es difícil la extensión a múltiples procesadores. Solamente puede haber un proceso en ejecución a la vez, pero pueden existir varios listos y varios pueden estar bloqueados. Así pues, se forman una lista de procesos listos y otra de procesos bloqueados. La lista de procesos listos se ordena por prioridad, de manera que el siguiente proceso que reciba la CPU será el primero de la lista. La lista de procesos bloqueados normalmente no está ordenada; los procesos no se desbloquean (es decir, no pasan a ser procesos listos) en orden de prioridad, sino que lo hacen en el orden de ocurrencia de los eventos que están esperando. Como se verá más adelante, hay situaciones en las cuales varios procesos pueden bloquearse esperando la ocurrencia del mismo evento; en tales casos es común asignar prioridades a los procesos que esperan.
Transiciones de estado de los procesos
A continuación se dan ejemplos de eventos que pueden provocar transiciones de estado en un proceso en este modelo de tres estados (ver figura 2.1). La mayoría de estos eventos se discutirán con profundidad a lo largo del curso:



  •  De ejecución á Bloqueado: al iniciar una operación de E/S, al realizar una operación WAIT sobre un semáforo a cero (en el tema de procesos concurrentes se estudiarán los semáforos).
  • De ejecución á Listo: por ejemplo, en un sistema de tiempo compartido, cuando el proceso que ocupa la CPU lleva demasiado tiempo ejecutándose continuamente (agota su cuanto) el sistema operativo decide que otro proceso ocupe la CPU, pasando el proceso que ocupaba la CPU a estado listo.
  • De Listo á en ejecución: cuando lo requiere el planificador de la CPU (veremos el planificador de la CPU en el tema de planificación de procesos).
  • De Bloqueado á Listo: se dispone del recurso por el que se había bloqueado el proceso. Por ejemplo, termina la operación de E/S, o se produce una operación SIGNAL sobre el semáforo en que se bloqueó el proceso, no habiendo otros procesos bloqueados en el semáforo.
Obsérvese que de las cuatro transiciones de estado posibles, la única iniciada por el proceso de usuario es el bloqueo, las otras tres son iniciadas por entidades externas al proceso.





2.3 Procesos Ligeros: Hilos o Hebras

El concepto de proceso es más complejo y sutil que el presentado hasta ahora. Engloba dos conceptos separados y potencialmente independientes: uno relativo a la propiedad de recursos y otro que hace referencia a la ejecución.
  • Unidad que posee recursos: A un proceso se le asigna un espacio de memoria y, de tanto en tanto, se le puede asignar otros recursos como dispositivos de E/S o ficheros.
  • Unidad a la que se le asigna el procesador: Un proceso es un flujo de ejecución (una traza) a través de uno o más programas. Esta ejecución se entremezcla con la de otros procesos. De tal forma, que un proceso tiene un estado (en ejecución, listo, etc) y una prioridad de expedición u origen. La unidad planificada y expedida por el sistema operativo es el proceso.
En la mayoría de los sistemas operativos, estas dos características son, de hecho, la esencia de un proceso. Sin embargo, son independientes, y pueden ser tratadas como tales por el sistema operativo. Esta distinción ha conducido en los sistemas operativos actuales a desarrollar la construcción conocida como thread, cuyas traducciones más frecuentes son hilo, hebra y proceso ligero. Si se tiene esta división de características, la unidad de asignación de la CPU se conoce como hilo, mientras que a la unidad que posee recursos se le llama proceso.

Dentro de un proceso puede haber uno o más hilos de control cada uno con:
  • Un estado de ejecución (en ejecución, listo, bloqueado).
  • Un contexto de procesador, que se salva cuando no esté ejecutándose.
  • Una pila de ejecución.
  • Algún almacenamiento estático para variables locales.
  • Acceso a la memoria y a los recursos de ese trabajo que comparte con los otros hilos.
Los beneficios clave de los hilos se derivan de las implicaciones del rendimiento: se tarda menos tiempo en crear un nuevo hilo de un proceso que ya existe, en terminarlo, y en hacer un cambio de contexto entre hilos de un mismo proceso. Al someter a un mismo proceso a varios flujos de ejecución se mantiene una única copia en memoria del código, y no varias.

Un ejemplo de aplicación que podría hacer uso de los hilos es un servidor de ficheros de una red de área local. Cada vez que llega una solicitud de una operación sobre un fichero, se puede generar un nuevo hilo para su gestión. El servidor gestiona multitud de solicitudes, por tanto, se pueden crear y destruir muchos hilos en poco tiempo para dar servicio a estas peticiones. Si el servidor es un multiprocesador, se pueden ejecutar varios hilos de un mismo proceso simultáneamente y en diferentes procesadores.


Un proceso ligero (thread o hebra) es un programa en ejecución que comparte la imagen de la memoria y otras informaciones con otros procesos ligeros.

Es una unidad básica de utilización de la CPU consistente en un juego de registros y un espacio de pila. Comparte el código, los datos y los recursos con sus hebras pares
  • Una tarea (o proceso pesado) está formada ahora por una o más hebras
  • Una hebra sólo puede pertenecer a una tarea


    CARACTERISTICAS
    • Se comparten recursos. La compartición de la memoria permite a las hebras pares comunicarse sin usar ningún mecanismo de comunicación inter-proceso del SO.


      • La conmutación de contexto es más rápida gracias al extenso compartir de recursos
      • No hay protección entre las hebras. Una hebra puede escribir en la pila de otra hebra del mismo proceso.

      ESTADOS DE LOS PROCESOS LIGEROS
      Un proceso ligero puede estar ejecutando, listo o bloqueado.


      PARALELISMO
      Los procesos ligeros permiten paralelizar una aplicación







2.4 Concurrencia Secuenciabilidad

La concurrencia comprende un gran número de cuestiones de diseño, incluyendo la comunicación entre procesos, comparición y competencia por los recursos, sincronización de la ejecución de varios procesos y asignación del tiempo de procesador a los procesos y es fundamental para que existan diseños como Multiprogramación, Multiproceso y Proceso distribuido.
Los procesos son concurrentes si existen simultáneamente. Los procesos concurrentes pueden funcionar en forma totalmente independiente unos de otros, o pueden ser asíncronos, lo cual significa que en ocasiones requieren cierta sincronización o cooperación.
La concurrencia puede presentarse en tres contextos diferentes:

  • Varias aplicaciones: La multiprogramación se creó para permitir que el tiempo de procesador de la máquina fuese compartido dinámicamente entre varios trabajos o aplicaciones activas.
  • Aplicaciones estructuradas: Como ampliación de los principios del diseño modular y la programación estructurada, algunas aplicaciones pueden implementarse eficazmente como un conjunto de procesos concurrentes.
  • Estructura del sistema operativo: Las mismas ventajas de estructuración son aplicables a los programadores de sistemas y se ha comprobado que algunos sistemas operativos están implementados como un conjunto de procesos. Existen tres modelos de computadora en los que se pueden ejecutar procesos concurrentes:
    • Multiprogramación con un único procesador. El sistema operativo se encarga de ir repartiendo el tiempo del procesador entre los distintos procesos, intercalando la ejecución de los mismos para dar así una apariencia de ejecución simultánea.
    • Multiprocesador. Es una maquina formada por un conjunto de procesadores que comparten memoria principal. En este tipo de arquitecturas, los procesos concurrentes no sólo pueden intercalar su ejecución sino también superponerla.
    • Multicomputadora. Es una maquina de memoria distribuida, que está formada por una serie de computadoras. En este tipo de arquitecturas también es posible la ejecución simultánea de los procesos sobre los diferentes procesadores



Tipos de procesos concurrentes.

Los procesos que ejecutan de forma concurrente en un sistema se pueden clasificar como:
Proceso independiente: Es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos. Un claro ejemplo de procesos independientes son los diferentes shells que se ejecutan de forma simultánea en un sistema.

Procesos son cooperantes: Son aquellos que están diseñados para trabajar conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos.
En ambos tipos de procesos (independientes y cooperantes), puede producirse una serie de interacciones entre ellos y pueden ser de dos tipos:
  • Interacciones motivadas porque los procesos comparten o compiten por el acceso a recursos físicos o lógicos. Por ejemplo, dos procesos independientes compiten por el acceso a disco o para modificar una base de datos.
  • Interacción motivada porque los procesos se comunican y sincronizan entre sí para alcanzar un objetivo común, Por ejemplo, un compilador que tiene varios procesos que trabajan conjuntamente para obtener un solo archivo de salida.


Beneficios del uso de la concurrencia:
        • Trata de evitar los tiempos muertos de la UCP
        • Comparte y optimiza el uso de recursos
        • Permite la modularidad en las diferentes etapas del proceso
        • Acelera los cálculo
        • Da mayor comodidad

Desventajas  de la concurrencia:

  • Inanición e interrupción de procesos
  • Ocurrencia de bloqueos
  • Que dos o mas procesos requieran el mismo recurso (no apropiativo).



La Sincronización:




En muchos casos, los procesos se reúnen para realizar tareas en conjunto, a este tipo de relación se le llama procesos cooperativos. Para lograr la comunicación, los procesos deben sincronizarse, de no ser así pueden ocurrir problemas no deseados. La sincronización es la transmisión y recepción de señales que tiene por objeto llevar a cabo el trabajo de un grupo de procesos cooperativos. Es la coordinación y cooperación de un conjunto de procesos para asegurar la comparación de recursos de cómputo. La sincronización entre procesos es necesaria para prevenir y/o corregir errores de sincronización debidos al acceso concurrente a recursos compartidos, tales como estructuras de datos o dispositivos de E/S, de procesos contendientes. La sincronización entre procesos también permite intercambiar señales de tiempo (ARRANQUE/PARADA) entre procesos cooperantes para garantizar las relaciones específicas de precedencia impuestas por el problema que se resuelve. Sin una sincronización adecuada entre procesos, la actualización de variables compartidas puede inducir a errores de tiempo relacionados con la concurrencia que son con frecuencia difíciles de depurar. Una de las causas principales de este problema es que procesos concurrentes puedan observar valores temporalmente inconsistentes de una variable compartida mientras se actualizan. una aproximación para resolver este problema es realizar actualizaciones de variables compartidas de manera mutuamente exclusiva. Se pueden mejorar permitiendo que a lo más un proceso entre a la vez en la sección crítica de código en la que se actualiza una variable compartida o estructura de datos en particular.

martes, octubre 11, 2011

2.5 Niveles,Objetivos Y Criterios De Planificación.

La planificación de la CPU, en el sentido de conmutarla entre los distintos procesos, es una de las funciones del sistema operativo. Este despacho es llevado a cabo por un pequeño programa llamado planificador a corto plazo o dispatcher (despachador). La misión del dispatcher consiste en asignar la CPU a uno de los procesos ejecutables del sistema, para ello sigue un determinado algoritmo. En secciones posteriores estudiaremos algunos algoritmos posibles. Para que el dispatcher conmute el procesador entre dos procesos es necesario realizar un cambio de proceso.

Los acontecimientos que pueden provocar la llamada al dispatcher dependen del sistema (son un subconjunto de las interrupciones), pero son alguno de estos:
  • El proceso en ejecución acaba su ejecución o no puede seguir ejecutándose (por una E/S, operación WAIT, etc).
  • Un elemento del sistema operativo ordena el bloqueo del proceso en ejecución (ver estados de un proceso).
  • El proceso en ejecución agota su cuantum o cuanto de estancia en la CPU.
  • Un proceso pasa a estado listo.

Hay que destacar el hecho de que cuanto menos se llame al dispatcher menos tiempo ocupa la CPU un programa del sistema operativo, y, por tanto, se dedica más tiempo a los procesos del usuario (un cambio de proceso lleva bastante tiempo).
Así, si sólo se activa el dispatcher como consecuencia de los 2 primeros acontecimientos se estará haciendo un buen uso del procesador. Este criterio es acertado en sistemas por lotes en los que los programas no son interactivos. Sin embargo, en un sistema de tiempo compartido no es adecuado, pues un proceso que se dedicara a realizar cálculos, y no realizara E/S, monopolizaría el uso de la CPU. En estos sistemas hay que tener en cuenta el conjunto de todos los procesos, activándose el dispatcher con la circunstancia tercera y, posiblemente, la cuarta. Los sistema operativos en que las dos siguientes circunstancias no provocan la activación del dispatcher muestran preferencia por el proceso en ejecución, si no ocurre esto se tiene más en cuenta el conjunto de todos los procesos.



Se puede definir el scheduling -algunas veces traducido como -planificación- como el conjunto de políticas y mecanismos construidos dentro del sistema operativo que gobiernan la forma de conseguir que los procesos a ejecutar lleguen a ejecutarse.
El scheduling está asociado a las cuestiones de:

  • Cuándo introducir un nuevo proceso en el Sistema.
  • Determinar el orden de ejecución de los procesos del sistema.




El scheduling está muy relacionado con la gestión de los recursos. Existen tres niveles de scheduling, como se ilustra en la figura 1.1, estos niveles son:



  • Planificador de la CPU o a corto plazo.
  • Planificador a medio plazo.
  • Planificador a largo plazo

Este planificador está presente en algunos sistemas que admiten además de procesos interactivos trabajos por lotes. Usualmente , se les asigna una prioridad baja a los trabajos por lotes, utilizándose estos para mantener ocupados a los recursos del sistema durante períodos de baja actividad de los procesos interactivos. Normalmente, los trabajos por lotes realizan tareas rutinarias como el cálculo de nóminas; en este tipo de tareas el programador puede estimar su gasto en recursos, indicándoselo al sistema. Esto facilita el funcionamiento del planificador a largo plazo.

El objetivo primordial del planificador a largo plazo es el de dar al planificador de la CPU una mezcla equilibrada de trabajos, tales como los limitados por la CPU (utilizan mucho la CPU) o la E/S. Así, por ejemplo, cuando la utilización de la CPU es baja, el planificador puede admitir más trabajos para aumentar el número de procesos listos y, con ello, la probabilidad de tener algún trabajo útil en espera de que se le asigne la CPU. A la inversa, cuando la utilización de la CPU llega a ser alta, y el tiempo de respuesta comienza a reflejarlo, el planificador a largo plazo puede optar por reducir la frecuencia de admisión de trabajos.Normalmente, se invoca al planificador a largo plazo siempre que un proceso termina. La frecuencia de invocación depende, pues, de la carga del sistema, pero generalmente es mucho menor que la de los otros dos planificadores. Esta baja frecuencia de uso hace que este planificador pueda permitirse utilizar algoritmos complejos, basados en las estimaciones de los nuevos trabajos.








En los sistemas de multiprogramación y tiempo compartido varios procesos residen en la memoria principal. El tamaño limitado de ésta hace que el número de procesos que residen en ella sea finito. Puede ocurrir que todos los procesos en memoria estén bloqueados, desperdiciándose así la CPU. En algunos sistemas se intercambian procesos enteros (swap) entre memoria principal y memoria secundaria (normalmente discos), con esto se aumenta el número de procesos, y, por tanto, la probabilidad de una mayor utilización de la CPU.
El planificador a medio plazo es el encargado de regir las transiciones de procesos entre memoria principal y secundaria, actúa intentando maximizar la utilización de los recursos. Por ejemplo, transfiriendo siempre a memoria secundaria procesos bloqueados, o transfiriendo a memoria principal procesos bloqueados únicamente por no tener memoria.


Objetivos y Criterios de Planificación:

El principal objetivo de la planificación a corto plazo es repartir el tiempo del procesador de forma que se optimicen algunos puntos del comportamiento del sistema. Generalmente se fija un conjunto de criterios con los que evaluar las diversas estrategias de planificación. El criterio más empleado establece dos clasificaciones. En primer lugar, se puede hacer una distinción entre los criterios orientados a los usuarios y losorientados al sistema. Los criterios orientados al usuario se refieren al comportamiento del sistema tal y como lo perciben los usuarios o los procesos. Uno de los parámetros es el tiempo de respuesta. El tiempo de respuesta es el periodo de tiempo transcurrido desde que se emite una solicitud hasta que la respuesta aparece en la salida. Sería conveniente disponer de una política de planificación que ofrezca un buen servicio a diversos usuarios.

Otros criterios están orientados al sistema, esto es, se centran en el uso efectivo y eficiente del procesador. Un ejemplo puede ser la productividad, es decir, el ritmo con el que los procesos terminan. La productividad es una medida muy válida del rendimiento de un sistema y que sería deseable maximizar.

Otra forma de clasificación es considerar los criterios relativos al rendimiento del sistema y los que no lo son. Los criterios relativos al rendimiento son cuantitativos y, en general, pueden evaluarse o ser analizados fácilmente. Algunos ejemplos son el tiempo de respuesta y la productividad. Los criterios no relativos al rendimiento son, en cambio cualitativos y no pueden ser evaluados fácilmente. Un ejemplo de estos criterios es la previsibilidad. Sería conveniente que el servicio ofrecido a los usuarios tenga las mismas características en todo momento, independientemente de la existencia de otros trabajos ejecutados por el sistema.

En particular, una disciplina de planificación debe:
  • Ser equitativa: debe intentar hacer una planificación justa, esto es, se debe tratar a todos los procesos de la misma forma y no aplazar indefinidamente ningún proceso. La mejor forma de evitarlo es emplear alguna técnica de envejecimiento; es decir, mientras un proceso espera un recurso, su prioridad debe crecer.
  •  Ser eficiente: debe maximizar el uso de los recursos tales como intentar que la ocupación de la CPU sea máxima. Al mismo tiempo se debe intentar reducir el gasto extra por considerar que es trabajo no productivo. Normalmente el idear algoritmos eficientes supone invertir recursos en gestión del propio sistema.
  • Lograr un tiempo bueno de respuesta, es decir, que los usuarios interactivos reciban respuesta en tiempos aceptables.
  •  Lograr un tiempo de proceso global predecible. Esto quiere decir que un proceso debe ejecutarse aproximadamente en el mismo tiempo y casi al mismo costo con independencia de la carga del sistema.
  • Elevar al máximo la productividad o el rendimiento, esto es, maximizar el número de trabajos procesados por unidad de tiempo. Eso supone, por un lado, dar preferencia a los procesos que ocupan recursos decisivos y, por otro, favorecer a los procesos que muestran un comportamiento deseable. En el primer caso conseguimos liberar el recurso cuanto antes para que esté disponible para un proceso de mayor prioridad. Con el segundo criterio escogemos a los procesos que no consumen muchos recursos dejándole al sistema mayor capacidad de actuación.



Estos criterios son dependientes entre sí y es imposible optimizar todos de forma simultánea. Por ejemplo, obtener un buen tiempo de respuesta puede exigir un algoritmo de planificación que alterne entre los procesos con frecuencia, lo que incrementa la sobrecarga del sistema y reduce la productividad. Por tanto, en el diseño de un política de planificación entran en juego compromisos entre requisitos opuestos; el peso relativo que reciben los distintos requisitos dependerá de la naturaleza y empleo del sistema.