sábado, 7 de mayo de 2016

Hilos


HILOS – ASPECTOS GENERALES


  • En la programación multihilo se relaciona en distintas partes de código de un mismo programa durante su ejecución
  • Los hilos permiten realizar tareas simultáneamente
  • Cada una de estas partes individuales se llama Thread (hilos o contextos de ejecución)
  • La JVM los ejecuta de la siguiente forma: Simultáneamente en una maquina multiprocesador, Conmutada en maquina de un solo procesador.


ESTADOS DE UN HILO
  • Nace: Declarado pero no se ha ejecutado start()
  • Listo: Preparado para entrar en ejecución pero el planificador a un no ha decidido su puesta en marcha.
  • Ejecutándose: Se esta ejecutando en la CPU
  • Dormido: Se ha detenido durante un instante de tiempo definido mediante la utilización de sleep()
  • Bloqueado: Pendiente de una operación de I/O
  • Suspendido: Detenido temporalmente por suspend().
  • Esperando: Detenido por una condición llamando a wait()




PRIORIDADES DE LOS HILOS

PETICIÓN



PRIORIDADES


BLOQUEOS










Comandos Linux

CMD- COMANDOS & LINUX



¿QUÉ ES EL PROMPT?

Se llama prompt al carácter o conjunto de caracteres que se muestran en una línea de comandos para indicar que está a la espera de órdenes. Éste puede variar dependiendo del intérprete de comandos y suele ser configurable.


DEBUG

Nota:  "Bug" significa fallo, defecto en un programa;  "debug" significa depurar (escrutar y eliminar fallos).  La palabra ha quedado como verbo (depurar), de la que han derivado otras.  Por ejemplo: "Debugger" (depurador).  Por extensión, todos los programas y utilidades que sirven para escudriñar los datos y el código a bajo nivel, se identifican genéricamente con esta denominación.
DEBUG.EXE es un ejecutable que, hasta 2001, acompañó a todas las versiones de MS-DOS, a partir de la  2.0, y de Windows [1].  Es sin duda un programa antiguo pero de enorme potencial didáctico para el principiante.  En adelante nos referiremos a él como debug simplemente.

He aqui algunas funcionalidades para entender mejor


Comando TREE:

Presenta en forma gráfica la estructura de directorios de una ruta de acceso o del disquete en una unidad de disco.

Sintaxis:

TREE [unidad:] [ruta] [/F] [/A]
Parámetros:

unidad: 
Especifica la unidad de disco que contiene el disquete cuya estructura de directorios desee presentar.

ruta: 
Especifica el directorio cuya estructura de directorios desee presentar.

Modificador 

/F 
Presenta los nombres de los archivos que contiene cada directorio.

/A 

Indica al comando TREE que utilice caracteres de texto en lugar de caracteres gráficos para mostrar las líneas que vinculan los subdirectorios. Utilice este modificador con tablas de códigos que no reconozcan caracteres gráficos y para enviar información a impresoras que no los puedan interpretar adecuadamente.

A continuación veremos la creación de directorios a partir de este comando.


ASEMBLER DEBUG


Otras utilidades del debug

AX: Acumulador (AL:AH)
BX: Registro base (BL:BH)

Modos de direccionamiento

Son medios que facilitan la tarea de programación, permitiendo el acceso a los datos
de una manera natural y eficiente.
Estos indican al procesador como calcular la dirección absoluta (real o efectiva) donde
se encuentran los datos.

1.- Direccionamiento de Registro: Los operandos o datos se encuentran en registros
No se necesita calcular la Dir. Absoluta.
P.e. 
 ADD BX, CX
 MOV BX, AX
 SUB DX, BX

2.- Direccionamiento inmediato : El operando es un número que forma parte de la
instrucción. No se necesita calcular la dir absoluta.

P.C. 
 ADD BX, 2h
 SUB CX, 100h
 MOV dx, 30h.

3.- Modo directo: La dirección del operando viene incluida en la instrucción , aquí el
procesador calcula la dirección real ([DS]+Dir)






TOP


A la hora de realizar el mantenimiento y monitorización de un servidor GNU/Linux (o de nuestro propio ordenador) hay comandos que son de gran ayuda e importancia. El comando top  nos ayuda a conocer los procesos de ejecución del sistema (y más cosas) en tiempo real y es una de las herramientas más importantes para un administrador. 

Ejecutar el comando


Abrimos una consola y simplemente ejecutamos el comando:

Nos va a aparecer una interfaz en modo texto que se va a ir actualizando cada 3 segundos. Muestra un resumen del estado de nuestro sistema y la lista de procesos que se están ejecutando. La salida que obtengo en mi ordenador es la siguiente:


1. Tiempo de actividad y carga media del sistema




En la primera línea nos muestra:

Hora actual.
Tiempo que ha estado el sistema encendido.
Número de usuarios (mario y root).
Carga media en intervalos de 5, 10 y 15 minutos respectivamente.
2. Tareas

La segunda línea muestra el total de tareas y procesos, los cuales pueden estar en diferentes estados. Yo lo tengo en castellano y la traducción es un poco pobre, así que lo explico en inglés:

Running (ejecutar): procesos ejecutándose actualmente o preparados para ejecutarse.

Sleeping (hibernar): procesos dormidos esperando que ocurra algo (depende del proceso) para ejecutarse.

Stopped (detener): ejecución de proceso detenida.

Zombie: el proceso no está siendo ejecutado. Estos procesos se quedan en este estado cuando el proceso que los ha iniciado muere (padre).

3. Estados de la CPU

Esta línea nos muestra los porcentajes de uso del procesador diferenciado por el uso que se le de.
us (usuario): tiempo de CPU de usuario.
sy (sistema): tiempo de CPU del kernel.
id (inactivo): tiempo de CPU en procesos inactivos.
wa (en espera): tiempo de CPU en procesos en espera.
hi (interrupciones de hardware): interrupciones de hardware.

si (interrupciones de software): tiempo de CPU en interrupciones de software.

6. Columnas
Ahora vamos a ver las diferentes columnas que nos encontramos al ejecutar el comando.
PID: es el identificador de proceso. Cada proceso tiene un identificador único.
USER (USUARIO): usuario propietario del proceso.
PR: prioridad del proceso. Si pone RT es que se está ejecutando en tiempo real.
NI: asigna la prioridad. Si tiene un valor bajo (hasta -20) quiere decir que tiene más prioridad que otro con valor alto (hasta 19).
VIRT: cantidad de memoria virtual utilizada por el proceso.
RES: cantidad de memoria RAM física que utiliza el proceso.
SHR: memoria compartida.
S (ESTADO): estado del proceso.
%CPU: porcentaje de CPU utilizado desde la última actualización.
%MEM: porcentaje de memoria física utilizada por el proceso desde la última actualización.
TIME+ (HORA+): tiempo total de CPU que ha usado el proceso desde su inicio.
COMMAND: comando utilizado para iniciar el proceso.

Particiones

PARTICIONES

Imagen 1- Particiones

¿QUÉ ES?

Es el nombre que recibe cada una de las divisiones en una sola unidad física de almacenamiento de datos, dándole a cada partición un propio sistema de archivo llamado formato, la gran mayoría de los sistemas operativos reconocen, utilizan y manipulan una partición como un disco físico independiente sabiendo que solo están en un solo disco físico.

PARTICIONES FIJAS

Imagen 1- Particiones Fijas

Con la creación de estas particiones se comienza a ver la multiprogramación, una partición fija por cada tarea, el tamaño de la partición se daba al arrancar el sistema, cada partición se podía re-configurar al volver a encender o reiniciar el sistema, con estas particiones nos aparece la fragmentacion interna.

Imagen 2- Proceso de Particiones Fijas


ALGORITMO DE UBICACIÓN:

Si se llega a tener alguna partición libre, un proceso se puede cargar en esta y si se llega a tener todas las particiones llenas se saca un proceso que no este listo para ejecutarse, para que el proceso que se va a ejecutar pase a tomar su lugar dentro de la partición.

PARTICIONES DINÁMICAS


Imagen 3- Partición Dinámica
Con las particiones dinámicas, la memoria contigua sigue manteniéndose en bloques contiguos  pero a los trabajos solo se les proporciona tanta memoria como lo solicitan cuando se cargan para su procesamiento. Aunque esta mejora es importante con respecto a las particiones fijas porque dentro de las particiones no se desperdicia memoria, no elimina por completo el problema.
Imagen 4- Proceso o comportamiento Partición Dinámica
Uso de la memoria principal durante la asignación por particiones dinámicas. Cinco primeros encisos (a-e)  de memoria principal cuando 8 trabajos se presentan para su procesamiento y se les asigna espacio como base en el "Primer llegado, primer servido". El trabajo 8 debe esperar a e) aun cuando entre las particiones hay suficiente memoria libre para acomodarlo.

TÉCNICAS DE ASIGNACIÓN

PRIMER AJUSTE :  El sistema operativo asigna el primer bloque de memoria libre con espacio suficiente para satisfacer la información. La búsqueda de este bloque es de manera secuencial.

Ejemplo: Suponiendo una memoria principal de 32 KB.





















MEJOR AJUSTE : El sistema operativo busca el bloque de memoria que represente el menor desperdicio según el requerimiento.

PEOR AJUSTE: El sistema operativo asigna el bloque mas grande que encuentre.


¿VENTAJAS/ DESVENTAJAS?

PRIMER AJUSTE

  • El mecanismo es más fácil de implementar.
  • Ejecución rápida. 
  • Pero no considera facilitar las cosas para el futuro...
MEJOR AJUSTE:

  • Requiere revisión completa de los bloques disponibles.
  • Mantenerlos en una lista ordenada.
  • Busca que el desperdicio sea el menor posible.
  • Pero va generando muchos bloques pequeños.
PEOR AJUSTE:
  • Requiere revisión de los bloques disponibles.
  • O mantenerlos en una lista ordenada.
  • Busca que los bloques que van quedando tras la creación de nuevos procesos tiendan a ser del mismo tamaño.
  • Balanceando el tamaño de los bloques remanentes.



PARTICIONES RELOCALIZABLES

En este tipo de esquema el administrador de memoria relocaliza los programas para reunir los bloques vacíos y los compacta para hacer un bloque de memoria lo bastante grande. El sistema operativo compacta la memoria a este proceso también se le conoce como recolección de basura o defragmentacion.

viernes, 6 de mayo de 2016

Algoritmos No Apropiativos


(Una vez que se le ha otorgado la cpu a un proceso, no le puede ser retirada)

También conocido como cooperative multitasking. Una vez que el proceso pasa al estado de ejecución, continúa ejecutando hasta que termina, se bloquean en espera de una E/S o al solicitar algún servicio del sistema. Esta política de ejecución para terminación fue implementada en los primeros sistemas de lote (batch). 





Características 


  • Significa que los trabajos “largos” hacen esperar a los trabajos “cortos”.
  • Logra más equidad en el tratamiento de los procesos.
  • Logra hacer más predecibles los tiempos de respuesta puesto que los trabajos nuevos de prioridad alta no pueden desplazar a los trabajos en espera.

Clases de Algoritmos No Apropiativos

FCFS “Firts-Come, First-Served”

 En esta política de planificación, el procesador ejecuta cada proceso hasta que termina, por tanto, los procesos que en cola de procesos preparados permanecerán encolados en el orden en que lleguen hasta que les toque su ejecución. Este método se conoce también como FIFO (fist input, first output,Primero en llegar primero en salir). 
    Se trata de una política muy simple y sencilla de llevar a la práctica, pero muy pobre en cuanto a su comportamiento. 
    La cantidad de tiempo de espera de cada proceso depende del número de procesos que se encuentren en la cola en el momento de su petición de ejecución y del tiempo que cada uno de ellos tenga en uso al procesador, y es independiente de las necesidades del propio proceso. 
Sus características son: 
– No apropiativa. 
– Es justa, aunque los procesos largos hacen esperar mucho a los cortos. 
– Predecible. 
– El tiempo medio de servicio es muy variable en función del número de procesos y su duración.

Ejemplo :

Proceso A → Tiempo ejecución → Tiempo llegada → Tiempo finaliza → Tiempo retorno → Tiempo espera .




En el caso de que los procesos de mayor tiempo de duración llegasen los primeros, el tiempo medio de espera sería mucho mayor. Podemos llegar a la conclusión de que este no es un algoritmo eficiente.

Conclusión:

Este algoritmo esta bien lo único que que los procesos largos hacen esperar mucho a los cortos.

Predecible. 
-El tiempo medio de servicio es muy variable en función del número de procesos y su duración.

SJF “Shortest  Job First”

En este algoritmo , da bastante prioridad a los procesos más cortos a la hora de ejecución  y los coloca en la cola.
Ejemplo:
Una cola de personas en Mercadona delante de la caja , la persona que menos compra lleva esa pasa primero.

Conclusión

En resumen, este algoritmo selecciona al proceso con el próximo tiempo ejecución más corto. en proceso corto saltará a la cabeza de la cola. Ejecución de un proceso consiste en ciclos deejecución de CP y ciclos de espera por E/S. El algoritmo selecciona aquel proceso cuyo próximo ciclo de ejecución de CP sea menor. El problema está en conocer dichos valores, pero podemos predecirlos usando la información de los ciclos anteriores ejecutados

SRTF “Short Remaining Time First”


Es similar al SJF, con la diferencia de que si un nuevo proceso pasa a listo se activa el dispatcher  para ver si es más corto que lo que queda por ejecutar del proceso en ejecución. Si es así, el proceso en ejecución pasa a listo y su tiempo de estimación se decremento con el tiempo que ha estado ejecutándose.

 Los procesos llegan a la cola y solicitan un intervalo de CPU
– Si dicho intervalo es inferior al que le falta al proceso en ejecución para abandonar la CPU, el nuevo proceso pasa a la CPU y el que se ejecutaba a la cola de preparados.
Conclusión:
 El intervalo de CPU es difícil de predecir
– Posibilidad de inanición: los trabajos largos no se ejecutarán mientras hayan trabajos cortos.

Round Robin


Es un método para seleccionar todos los elementos en un grupo de manera equitativa y en un orden racional, normalmente comenzando por el primer elemento de la lista hasta llegar al último y empezando de nuevo desde el primer elemento.

Round Robin es uno de los algoritmos de planificación de procesos más complejos y difíciles, dentro de un sistema operativo asigna a cada proceso una porción de tiempo equitativa y ordenada, tratando a todos los procesos con la misma prioridad.
Se define un intervalo de tiempo denominado cuanto, cuya duración varía según el sistema. La cola de procesos se estructura como una cola circular. El planificado la recorre asignando un cuanto de tiempo a cada proceso. La organización de la cola es FIFO.

Conclusión:
Cada proceso tiene asignado un intervalo de tiempo de ejecución, llamado cuantum o cuanto. Si el proceso agota su cuantum de tiempo, se elige a otro proceso para ocupar la CPU. Si el proceso se bloquea o termina antes de agotar su cuantum también se alterna el uso de la CPU. El round robín es muy fácil de implementar. Todo lo que necesita el planificado es mantener una lista de los procesos listos.


 Algoritmos Apropiativos

Cuando tenemos más de un proceso en condiciones de ejecutar CPU, debemos escoger uno de entre ellos. Para escogerlo se emplean los Algoritmos de planificación. Estos algoritmos pueden usar prioridades. En este caso a cada proceso se le asigna una prioridad y los procesos de mayor prioridad tendrán preferencia sobre los de menos. La prioridad de un proceso se puede modificar a lo largo de su vida, para evitar que un proceso de baja prioridad nunca llegue a ejecutarse debido a que los de alta prioridad monopolizan el procesador.
Otra característica  de un algoritmo de planificación es la expropiación. Podemos definir un algoritmo de planificación como expropiativo si podemos retirar un proceso que se está ejecutando para introducir otro nuevo.
Para estudiar la bondad de un algoritmo de planificación se suelen estudiar algunos parámetros:
  • Tiempo de espera: Tiempo que el proceso está parado o en espera desde que se lanza hasta que finaliza su ejecución.
  • Tiempo de retorno: Tiempo que transcurre desde que el proceso se lanza hasta que finaliza su ejecución. Se puede ver como la suma del tiempo de espera más el tiempo de ejecución.
  • Tiempo de respuesta: Tiempo que pasa desde que se manda ejecutar un proceso hasta que se ejecuta por primera vez.
  • Productividad: Número de trabajos realizados por unidad de tiempo.
  • Uso de la CPU: Porcentaje de tiempo que el procesador pasa ejecutando procesos.
Pasamos a explicar los diferentes algoritmos desarrollando un ejemplo sobre la siguiente tabla de procesos que representa los instantes de llegada de cada proceso y también los tiempos de ejecución respectivamente.


FCFS. First Come, First Served o lo que es lo mismo el primero que llega es el primero en ser atendido. Podemos decir que no es expropiativo y no emplea prioridades. Es un algoritmo muy sencillo de implementar, basta con emplear una cola FIFO, pero corre el peligro de que un proceso muy largo monopolice la CPU durante mucho tiempo generando tiempos de espera mayores de los que serían deseables.

Algoritmo FCFS

Round-Robin (modificado). También conocido como RR, Carrousel o planificación por rondas. Se reparte el tiempo de CPU en quantums o rodajas. El funcionamiento es dar una rodaja a cada proceso de forma secuencial. La selección de entre los procesos activos se gestiona según una cola FIFO o lo que es lo mismo se elije el que más tiempo lleve esperando. Si llega un proceso nuevo y hay otro en ejecución, los ciclos de CPU se distribuyen entre ambos pero se ejecuta un ciclo de CPU para el proceso en ejecución e inmediatamente  se le asigna un ciclo al recién llegado. Como se puede deducir, este algoritmo es expropiativo y no emplea prioridades.


RR quantum=3
RR quantum=2
RR quantum=1
SJF. Son las siglas de Short Job First, es decir el trabajo más corto primero. En este caso se seleccionará el proceso que requiera menor tiempo de ejecución (si dos tienen el mismo tiempo se decide por FIFO). El problema puede aparecer con procesos muy largos que están siempre bloqueados por procesos más cortos. Este algoritmo puede ser expropiativo o no. En la variante expropiativa denominada SRTN (Shortest Remainig Time Next) medimos el tiempo restante que le queda a cada proceso.


Algoritmo SJF (no expropiativo)


SRTN. Es la variedad expropiativa de SJF. Eso significa que el proceso con menor tiempo para acabar es el siguiente proceso en ejecutarse expropiando la CPU inmediatamente al proceso que este en ejecución en el instante correspondiente. El problema vendría en el caso que tengamos un proceso que requiera un tiempo de ejecución para finalizar igual que un proceso nuevo que entra. Existen dos soluciones, dar prioridad a los procesos nuevos sobre los procesos en ejecución o dar prioridad a los procesos en ejecución sobre los procesos nuevos.

SRTN con prioridad a procesos en ejecución
SRTN con prioridad a procesos nuevos

Por prioridad. En este tipo de algoritmos el proceso de mayor prioridad es el que se ejecuta. En un escenario con prioridades estáticas los procesos con menor prioridad podrían no llegar a  ejecutarse, por ejemplo porque entren continuamente procesos de mayor prioridad. Para solucionar este problema se introduce el concepto de prioridad dinámica que consiste en modificar la prioridad inicial de los procesos a medida que transcurre el tiempo y se suele hacer atendiendo a a diferentes criterios:
  • Según la categoría del usuario.
  • Según el tipo de proceso.
  • Según la ocupación de CPU de los procesos.
Hay que tener en cuenta además, como en otro tipo de algoritmos, que la Prioridad puede ser Apropiativa o No Apropiativa (apropiativo, expulsivo o expropiativo son para nosotros lo mismo) y que en caso de conflicto, es decir encontrarnos con varios procesos con la misma prioridad, el problema nos debería indicar como resolverlo (sino dice nada el asunto se suele zanjar con FIFO). Veamos un ejemplo, en este caso sencillo y basado en prioridades  estáticas.

    Ejemplo

    Se tiene un sistema en tiempo real, en que los procesos se ejecutan en función de sus prioridad. Se desea calcular los tiempos medios de espera y retorno en los supuestos:
    1. Prioridades no apropiativas
    2. Prioridades apropiativas
    Nota: En caso de conflicto utilizaremos el algoritmo FCFS

    Prioridades NO apropiativas

    Prioridades Apropiativas

    Multiples colas. Se usan diferentes colas, donde cada cola puede tener diferentes algoritmos de planificación y también se pueden clasificar los procesos. Se trata de repartir el tiempo de la CPU entra las diferentes  colas según la carga que tenga cada una. Otra idea útil es migrar los procesos de una cola a otra cuando la situación lo requiera. Este algoritmo es uno de los más completos, pero también es de los más difíciles de implementar.

    2 niveles. Hasta ahora se ha supuesto que todos los procesos están en memoria, pero qué pasa cuando hay muchos procesos, o poca memoria y no podemos almacenarlos todos allí. Una de las soluciones más elegantes consiste en establecer dos niveles, uno para planificar a largo plazo, donde se situan los procesos que no están en memoria y otro nivel a corto plazo donde se ponen los procesos que están en memoria.

    Ejemplo

    Cierto SO posee un algoritmo de planificación de CPU basado en 3 colas multinivel realimentadas. La forma en la que los trabajos se alojan en cada una de las colas es la siguiente:
    • Todos los trabajos, cuando llegan al sistema, son colocados en la cola 1, la cual se planifica de acuerdo con un algoritmo Round-Robin con cuanto de tiempo igual a 2ms. en esta cola un trabajo permanecerá si después de ejecutar su primera ráfaga de CPU, le queda por ejecutar ráfagas inferiores a 5 ms. en caso contrario pasaría a la cola 2 o a la cola 3.
    • Un trabajo pasará a la cola 2 en caso de que le quede por ejecutar una ráfaga mayor o igual a 5 ms. Este trabajo permanecerá en esta cola hasta que termine su ejecución y se planifica según Round-Robin con cuanto igual a 3ms.
    • Un trabajo pasará a la cola 3, en caso de que le quede por ejecutar una ráfaga de CPU superior o igual a 8 ms. Este trabajo permanecerá en esta cola hasta que termine su ejecución  y se planifica según SJF.

    Sabiendo que la cola 1 es la de mayor prioridad y la 3 la de prioridad inferior, se desea para el siguiente conjunto de trabajos:

    1. Dibujar la planificación de los trabajos en cada una de las colas y el orden en que se van ejecutando en la CPU.
    2. Calcular tiempo de espera y de estancia de cada trabajo.
    3. Calcular tiempos medios de retorno y de espera del sistema.
    Planificación CPU basada en colas multinivel








    Propuesta 1

    Cierto SO posee un algoritmo de planificación de CPU basado en 3 colas multinivel realimentadas. La forma en la que los trabajos se alojan en cada una de las colas es la siguiente:
    • Todos los trabajos, cuando llegan al sistema, son colocados en la cola 1, la cual se planifica de acuerdo con un algoritmo Round-Robin con cuanto de tiempo igual a 2ms. en esta cola un trabajo permanecerá si después de ejecutar su primera ráfaga de CPU, le queda por ejecutar ráfagas inferiores a 5 ms. en caso contrario pasaría a la cola 2 o a la cola 3.
    • Un trabajo pasará a la cola 2 en caso de que le quede por ejecutar una ráfaga mayor o igual a 5 ms. Esta cola se planifica según Round-Robin con cuanto igual a 3ms.
    • Un trabajo pasará a la cola 3, en caso de que le quede por ejecutar una ráfaga de CPU superior o igual a 8 ms. Esta cola  se planifica según SJF.

    Sabiendo que la cola 1 es la de mayor prioridad y la 3 la de prioridad inferior, calcule para la tabla de  trabajos anterior la planificación, el tiempo medio de espera y el tiempo medio de respuesta, teniendo en cuenta las siguientes consideraciones: 

    • Cada trabajo que exista en el sistema se bloquea cuando solicita alguna operación de E/S sobre un mismo dispositivo compartido.
    • Las solicitudes de E/S son atendidas secuencialmente en el mismo orden en que fueron efectuadas por los procesos. En caso de coincidencia en el tiempo en el acceso al mismo dispositivo por parte de dos o más trabajos, estos se colocarán en una cola dedicada a dicho dispositivo mientras termina la transferencia el trabajo anterior.
    • Dicha cola se gestionará en forma de FIFO.
    Propuesta 2

    Un SO planifica su CPU por medio de una cola multinivel con 2 niveles. El nivel 1 se planifica por SRTN. El nivel 2 a través de FCFS. La CPU ejecuta procesos de cada nivel, cada 100ms pero atendiendo a la siguiente restricción: Si un proceso finaliza o realiza una operación de E/S sin haber consumido los 100ms la CPU cambia inmediatamente de nivel y se le vuelven a asignar al nuevo nivel 100ms. Las operaciones de E/S se planifican según una cola FIFO. Teniendo en cuenta estas características se pide:
    • Representar una tabla que implemente las ejecuciones, las esperas, las operaciones de E/S y los bloqueos de los procesos .
    • Tiempo de retorno medio de los procesos


    Consideraciones Finales

    RR

    • Es adecuado para implementar tiempo compartido.
    • Se comporta como FCFS pero cada proceso dispone de un cuanto de tiempo máximo.
    • Si el cuanto es muy grande (más grande que el mayor tiempo de CPU de los procesos), RR se convierte en FCFS ya que los procesos terminan sus ráfagas de CPU antes de que termine el cuanto.
    • Si el cuanto es muy pequeño se provocarían constantemente cambios de contexto, disminuyendo el rendimiento.
    FCFS
    • Tiene tiempos de espera bastantes largos.
    SJF
    • Se minimiza el tiempo de espera medio.
    • Los procesos de larga duración sufren riesgo de inanición.
    • SJF es un caso especial de planificación por prioridad.
    • SJF dispone de su versión expulsiva.

    Prioridades

    • Los procesos de prioridad más baja tienen riesgo de inanición que podría ser solventado aumentando de forma progresiva la prioridad de los procesos en espera (prioridades dinámicas).
    • La política de prioridades puede ser o no expulsiva.