miércoles, 14 de mayo de 2014

Procesos en los sistemas operativos

Proceso

Es un programa en ejecución. Tiene un conjunto de registros que esta usando,  un contador de programa que indica las instrucciones que se deben ejecutar, y una pila. Esto significa que tiene un flujo de control que ejecuta una instrucción tras otra.




Un proceso es una serie de sentencias asignadas a una tarea, una vez que contribuye la tarea con el programa. Un programa es un conjunto de sentencias que pueden incluir varios procesos.


Programa
Proceso
Requiere compilador o interprete
Valores
Cuando se ejecutan se presenta como un proceso
Información de su estado
Se desarrolla por lenguaje de alto nivel
Asigna recursos


Modelo del proceso


Todo el software ejecutable, inclusive el Sistema Operativo, se organiza en varios procesos secuenciales. Un proceso incluye al programa en ejecución y a los valores que están activados en el contador, registros y variables del mismo programa. Conceptualmente cada proceso tiene su propia CPU virtual.
Si la CPU se alterna entre los procesos, la velocidad a la que se ejecuta un proceso no será uniforme, por lo que es necesario anclar lo siguiente:

  • Que los procesos no deben programarse con hipótesis implícitas acerca del tiempo.
  • Que la mayoría de los procesos no son afectados por la multiprogramación inferior de la CPU o las velocidades de un proceso distinto.
  • Un proceso es una actividad que tiene un programa, entrada, salida y estado.
  • Un solo procesador puede ser compartido entre varios procesos con cierto “algoritmo de planificación”, el cual determina cuando detener el trabajo de proceso y dar servicio a otro distinto.

Estado del proceso




Nuevo: Se dice que un proceso está en estado de nuevo cuando apenas se encuentra en proceso de crearse.
Listo: Un proceso está en estado de listo, cuando podría usar una CPU, si hubiera una disponible.
En ejecución: Se dice que un proceso está estado de ejecución, si en ese momento tiene esta ocupando la CPU.
Bloqueado: Se dice que un proceso está en estado de bloqueado, si espera que ocurra algo, como por ejemplo, la terminación de una E/S, para así poder ponerse en marcha.
Terminado: Cuando un proceso se ha completado su ejecución pasa a ser un proceso terminado.

Bloque de control de procesos

Es la estructura de datos con la que el sistema operativo administra los procesos. Contiene la información acerca del proceso y su estado. Además la información que el Sistema Operativo precisa para manejarlo como:
  • Identificador, estado, recursos, historia.

Niveles de planificación

La planificación es el conjunto de mecanismos incorporados al sistema operativo, gobierna el orden en que se deben ejecutar los trabajos. El objetivo de la planificación es optimizar el rendimiento del sistema: 
  • Planificación de largo plazo: se encarga de llevar procesos de disco a memoria y viceversa. Seleccionando los trabajos que deben admitirse en el sistema. Se determina a que trabajos se les va a permitir competir activamente por los recursos del sistema, lo cual determina planificación de admisión. 
  • Planificación de mediano plazo: En algunos casos, en especial cuando el sistema esta sobrecargado, el planificador encuentra ventajas al retirar trabajos activos en la memoria para reducir el grado de multiprogramación. Equilibra la administración de procesos en el sistema con la asignación del CPU a dichos procesos
  • Planificación de corto plazo: Se encarga de pasar de un proceso a otro en memoria principal, determinando a cual proceso listo se le asignara el CPU cuando este se encuentra disponible. Determina que proceso se le asigna al CPU cuando este se encuentra disponible y asigna la CPU al mismo proceso.



Políticas de planificación

Los algoritmos de planificación no se limitan a un plazo de planificación concreto. Aunque en general la planificación de corto plazo es la entrada de procesos al CPU, algunos algoritmos pueden implementarse también a largo plazo o distribuirse en más de un tipo de planificación.

Consideraciones para la planificación:
  • Como se seleccionar el proceso que entra a ejecución. De entre los procesos que se están procesando, se elige uno de acuerdo a criterios como: prioridad, tiempo que lleva en la cola de preparados.
  • Cuándo se lleva a cabo la planificación de corto plazo. Hay dos alternativas básicas: si únicamente se planifica cuando un proceso abandona al CPU por que se acaba o se bloquea (políticas no expulsoras), o si se puede forzar al proceso que esta usando al CPU a abandonarla para planificar otro proceso (políticas expulsoras).

 Información de un proceso


Despacho de procesos

Algoritmos de planificación de procesos

FCFS

Se elige el proceso a entrar en la CPU según el tiempo que lleva esperando; es decir, en el orden de entrada al estado de preparados. 
La implementación de esta política es sencilla: la cola de procesos preparados se gestiona con disciplina FIFO. 
Presenta el problema del efecto convoy. La existencia de programas muy largos dispara el tiempo de finalización, la latencia y el tiempo de espera medios. En el ejemplo se muestra el orden de ejecución de acuerdo a FCFS de tres procesos que llegan en el orden P1, P2, P3. La latencia media, Tr, es (0+10+11)/3= 7 unidades de tiempo, frente a una Tr mínima de 1 que se obtendría si los procesos se 
planificasen en orden P2, P3, P1. 


Planificación FCFS convoy

SJF (el más corto primero) 

Se selecciona para entrar a ejecutarse el proceso de menor duración. Esta planificación es (teóricamente) óptima para los tiempos medios de respuesta, finalización y espera. 
Es necesario estimar la duración de un proceso. Esta estimación dependerá del plazo 
de la planificación. 
  • Largo plazo. El usuario proporciona la estimación. 
  • orto plazo. El scheduler puede predecir la duración del próximo intervalo de CPU en función de las duraciones de los intervalos de CPU anteriores. Así, la duración prevista para el instante n+1, τn+1, se calcula a partir de una media ponderada de la duración del intervalo n, tn, y predicciones anteriores: 
τn+1 = αtn + (1−α)τn 
 donde 0≤α≤1. 

Al trabajar con estimaciones en lugar de duraciones reales, el éxito de la planificación dependerá de lo adecuado que sea el modelo de estimación. 

Prioridades

A cada proceso se le asocia una prioridad, a partir de las cual se establece su orden para la planificación. Para igual prioridad, suele tomarse orden FCFS. 
Habitualmente, la prioridad de un proceso se almacena como un entero positivo dentro de su PCB, que se inserta en la cola de preparados de acuerdo a ella para facilitar la labor del scheduler (en planificación de corto plazo). 
La prioridad se establece inicialmente en función de determinados parámetros, como el propietario del proceso, el tipo del proceso (por ejemplo, procesos del sistema, de tiempo real, batch), su tamaño, los recursos que requiere, etc. La prioridad inicial puede usarse para planificar a largo plazo. 
Si la prioridad inicial no cambia durante la ejecución del proceso y ésta se usa para planificar a corto plazo, se obtiene una política de prioridades estáticas. Un problema de las prioridades estáticas es que algunos parámetros, fundamentalmente los referidos al consumo de recursos, y en particular al tiempo de CPU y duración de sus intervalos, no se conocen a priori, por lo que la prioridad puede no ser indicativa de comportamiento del programa. Otro problema es el riesgo de inanición para los procesos de prioridad baja, lo que además puede tener consecuencias para el propio sistema operativo: si un proceso de prioridad alta realiza espera activa para entrar en una sección crítica ocupada por un proceso de prioridad menor, la sección crítica nunca se liberará. 
En general, resulta más adecuada una planificación por prioridades dinámicas. Un proceso se crea con una prioridad base inicial, y su prioridad dinámica se recalcula periódicamente, fundamentalmente de acuerdo al gasto de CPU del proceso. La prioridad de los procesos que más tiempo de CPU han gastado disminuye en relación a la prioridad de los procesos que han gastado menos.
Existen fundamentalmente dos formas de ajustar la prioridad: 
  • Periódicamente, como por ejemplo UNIX System V, UNIX 3.2BSD y Linux, que ajustan conjuntamente las prioridades de todos los procesos cada cierto tiempo. 
  • Aperiódicamente, como por ejemplo Windows NT y UNIX SVR4, que aprovecha, la transición de estado de un proceso para recalcular la prioridad.

Concurrencia

La concurrencia de procesos se refiere a las situaciones en las que dos o más procesos puedan coincidir en el acceso a un recurso compartido o, dicho de otra forma, que requieran coordinarse en su ejecución. Para evitar dicha coincidencia, el sistema operativo ofrece mecanismos de arbitraje que permiten coordinar la ejecución de los procesos.

Un ejemplo de un problema de concurrencia sería el siguiente: Dados dos procesos A y B, suponiendo que ambos se ejecutan indefinidamente en el tiempo, el proceso A debe recibir tiempo de ejecución antes que B, tras esto, el proceso B debe recibir su oportunidad de ejecución, dando paso de nuevo al proceso A y así sucesivamente.


Programación concurrente


Es la simultaneidad en la ejecución de múltiples tareas interactivas, Estas tareas pueden ser un conjunto de procesos o hilos de ejecución creados por un único programa. Las tareas se pueden ejecutar en una sola CPU, en varios procesadores o en una red de computadoras distribuidas. La programación concurrente está relacionada con la programación paralela, pero enfatiza más la interacción entre tares. Así, la correcta secuencia de interacciones o comunicaciones entre los procesos y el acceso coordinado de recursos que se comparten por todos los procesos o tareas son las claves de esta disciplina.
Ventajas
  • No dependen de la arquitectura o n° de elementos de proceso.
  • Menos necesidad de compartir el trabajo.
  • Menos necesidad de resoluciones de errores.
  • Permite resolver problemas que no sería posible con un procesamiento secuencial.
Características
  • Orden: orden en que se ejecutan las instrucciones.
    • Parcial: no se conoce exactamente la secuencia en la que serán ejecutadas las instrucciones.
    • Total: se conoce exactamente el orden en el que se deben ejecutar todas las instrucciones.
  • Requisitos para la programación concurrente:
    • Sincronización: Capacidad de informar de la situación de un proceso a otro.
    • Objetivo: Establecer la secuencialidad correcta de un programa.
      • Exclusión mutua.  Asegurar que un solo proceso tiene acceso a un recurso compartido único.
      • Por condición. Asegurar que un proceso no progrese hasta que se cumpla una determinada condición
    • Comunicación: Capacidad de transmitir información desde un proceso a otro.
    • Prioridad: Capacidad de establecer una ordenación de importancia en los procesos.

Multitareas

Es el modo de funcionamiento disponible en algunos sistemas operativos, mediante el cual una computadora procesa varias tareas al mismo tiempo. Existen varios tipos de multitareas. La conmutación de contextos (context Switching) es un tipo muy simple de multitarea en el que dos o más aplicaciones se cargan al mismo tiempo, pero en el que solo se esta procesando la aplicación  que se encuentra en primer plano (la que ve el usuario). Para activar otra tarea que se encuentre en segundo plano, el usuario debe traer al primer plano la ventana o pantalla que contenga esa aplicación. En la multitarea cooperativa, la que se utiliza en el sistema operativo Macintosh, las tareas en segundo plano reciben tiempo de procesado durante los tiempos muertos de la tarea que se encuentra en primer plano (por ejemplo, cuando esta aplicación esta esperando información del usuario), y siempre que esta aplicación lo permita. En los sistemas multitarea de tiempo compartido, como OS/2, cada tarea recibe la atención del microprocesador durante una fracción de segundo. Para mantener el sistema en orden, cada tarea recibe un nivel de prioridad o se procesa en orden secuencial. Dado que el sentido temporal del usuario es mucho más lento que la velocidad de procesamiento del ordenador, las operaciones de multitarea en tiempo compartido parecen ser simultáneas.

Clasificación de la Multitarea

  • Nula: Es aquel sistema que carece de multitarea. Puede simular que la implementa en un espacio de usuario. MSDOS.
  • Cooperativa: Es el tipo de multitarea en donde los procesos de usuario son quienes ceden la CPU al sistema operativo a intervalos regulares. Windows antes del 95.
  • Preferente: es en donde el sistema operativo se encarga de administrar uno o más procesadores, repartiendo el tiempo de uso del mismo ente los distintos procesos que esperan utilizarlo. AmigaOS.
  • Real: Es en donde los sistemas operativos ejecutan los procesos al mismo tiempo haciendo uno de múltiples procesadores. La ejecución realmente se realiza en distintos procesadores para cada proceso o tarea. Unix, Mac OS X.

Multiproceso

Las computadoras que tienen mas de un CPU son llamadas multiproceso. Un sistema operativo multiproceso coordina las operaciones de la computadoras multiprocesadoras. Ya que cada CPU en una computadora de multiproceso puede estar ejecutando una instrucci ón, el otro procesador queda liberado para procesar otras instrucciones simultáneamente. Al usar una computadora con capacidades de multiproceso incrementamos su velocidad de respuesta y procesos. Casi todas las computadoras que tienen capacidad de multiproceso ofrecen una gran ventaja. Los primeros Sistemas Operativos Multiproceso realizaban lo que se conoce como: Multiproceso asimétrico: Una CPU principal retiene el control global de la computadora, así como el de los otros procesadores. Esto fue un primer paso hacia el multiproceso pero no fue la dirección ideal a seguir ya que la CPU principal podía conv ertirse en un cuello de botella. Multiproceso simétrico: En un sistema multiproceso simétrico, no existe una CPU controladora única. La barrera a vencer al implementar el multiproceso simétrico es que los SO tienen que ser rediseñados o diseñados desde el principio para trabajar en u n ambiente multiproceso. Las extensiones de Unix, que soportan multiproceso asimétrico ya están disponibles y las extensiones simétricas se están haciendo disponibles. Windows NT de Microsoft soporta multiproceso simétrico.