lunes, 18 de noviembre de 2013

Procesos

Procesos e hilos

Como vimos, la cantidad de información que el sistema operativo debe manejar acerca de cada proceso es bastante significativa. Si cada vez que el planificador elige qué proceso pasar de Listo a En ejecución debe considerar buena parte de dicha información, la simple transferencia de todo esto entre la memoria y el CPU podría llevar a un desperdicio burocrático de recursos. Una respuesta a esta problemática fue la de los hilos de ejecución, a veces conocidos como procesos ligeros (Lightweight processes, LWP). 

Cuando consideramos procesos basados en un modelo de hilos, podríamos proyectar en sentido inverso que todo proceso es como un sólo hilo de ejecución. Un sistema operativo que no ofreciera soporte expreso a los hilos lo agendaría exactamente del mismo modo. 

Pero visto desde la perspectiva del proceso hay una gran diferencia: Si bien el sistema operativo se encarga de que cada proceso tenga una visión de virtual exclusividad sobre la computadora, todos los hilos de un proceso comparten un sólo espacio de direccionamiento en memoria y lista de descriptores de archivos y dispositivos abiertos. Cada uno de los hilos se ejecuta de forma (aparentemente) secuencial y maneja su propio contador de programa (y algunas estructuras adicionales, aunque mucho más ligeras que el PCB).

Los hilos y el sistema operativo

Formalmente, una programación basada en hilos puede hacerse completamente y de forma transparente en espacio de usuario (sin involucrar al sistema operativo). Estos hilos se llaman hilos de usuario (user threads), y muchos lenguajes de programación los denominan hilos verdes (green threads). Un caso de uso interesante es en sistemas operativos mínimos (p.ej. para dispositivos embebidos) capaces de ejecutar una máquina virtual de alguno de estos lenguajes: Si bien el sistema operativo no maneja multiprocesamiento, a través de los hilos de usuario sí podemos crear procesos con multitarea interna. 

Los procesos que implementan hilos ganan un poco en el rendimiento gracias a no tener que reemplazar al PCB activo, pero además de esto, ganan mucho más por la ventaja de compartir espacio de memoria sin tener que establecerlo explícitamente a través de mecanismos de comunicación entre procesos (IPC — Inter Process Communications). Dependiendo de la plataforma, a veces los hilos de usuario inclusive utilizan multitarea cooperativa para pasar el control dentro de un mismo proceso. Cualquier llamada al sistema bloqueante (como obtener datos de un archivo para utilizarlos inmediatamente) interrumpirá la ejecución de todos los hilos, dado que el control de ejecución es entregado al sistema operativo. 

El siguiente paso fue la creación de hilos informando al sistema operativo, típicamente denominados hilos de kernel (kernel threads). A través de bibliotecas de sistema que los implementan de forma estándar para los diferentes sistemas operativos (p.ej. pthreads para POSIX o Win32_Thread para Windows) o arquitecturas. Estas bibliotecas aprovechan la comunicación con el sistema operativo tanto para solicitudes de recursos (p.ej. un proceso basado en hilos puede beneficiarse de una ejecución verdaderamente paralela en sistemas multiprocesador) como para una gestión de recursos más comparable con una situación de multiproceso estándar.

 Patrones de trabajo con hilos

Hay tres patrones en los que caen generalmente los modelos de hilos; podemos emplear a más de uno de estos patrones en diferentes áreas de nuestra aplicación, e incluso podemos anidarlos (esto es, podríamos tener una línea de ensamblado dentro de la cual uno de los pasos sea un equipo de trabajo):

Jefe / trabajador
Un hilo tiene una tarea distinta de todos los demás: El hilo jefe genera o recopila tareas que requieren ser cubiertas, las separa y se las entrega a los hilos trabajadores. 

Este modelo es el más común para procesos que implementan servidores (es el modelo clásico del servidor Web Apache) y para aplicaciones gráficas (GUIs), en que hay una porción del programa (el hilo jefe) esperando a que ocurran eventos externos. El jefe realiza poco trabajo, se limita a invocar a los trabajadores a hacer el trabajo de verdad; como mucho, puede llevar contabilidad de los trabajos realizados. 

Típicamente, los hilos realizan su operación, posiblemente notifican al jefe de su trabajo, y finalizan su ejecución. 


Patrón de hilos jefe/trabajador
 Fuente: sistop.gwolf.org/html/02_administracion_de_procesos.html

 
Equipo de trabajo

Al iniciar la porción multihilos del proceso, se crean muchos hilos idénticos, que realizarán las mismas tareas sobre diferentes datos. Este modelo es muy frecuentemente utilizado para cálculos matemáticos (p.ej. criptografía, render). Puede combinarse con un estilo jefe/trabajador para irle dando al usuario una previsualización del resultado de su cálculo, dado que éste se irá ensamblando progresivamente, pedazo por pedazo. 

Sus principales diferencias con el patrón jefe/trabajador consisten en que el trabajo a realizar por cada uno de los hilos se plantea en un principio, esto es, el paso de división de trabajo no es un hilo más, sino que prepara los datos para que éstos sean lanzados en paralelo. Estos datos no son resultado de eventos independientes (como en el caso anterior), sino que partes de un sólo cálculo. 

Por consecuencia, resulta natural que en este modelo los resultados generados por los diferentes hilos son agregados o totalizados al terminar su procesamiento. Los hilos no terminan, sino que son esperados y continúa la ejecución lineal.


Patrón de hilos Equipo de trabajo

 Fuente: sistop.gwolf.org/html/02_administracion_de_procesos.html
                                      
Línea de ensamblado

Si una tarea larga puede dividirse en pasos sobre bloques de la información total a procesar, cada hilo puede enfocarse a hacer sólo una tarea y pasarle los datos a otro hilo conforme vaya terminando. Una de las principales ventajas de este modelo es que nos ayuda a mantener rutinas simples de comprender, y permite que el procesamiento de datos continúe incluso si parte del programa está bloqueado esperando E/S. 
Un punto importante a tener en cuenta en una línea de ensamblado es que, si bien los hilos trabajan de forma secuencial, pueden estar ejecutándose paralelamente sobre bloques consecutivos de información, eventos, etc.

Este patrón es claramente distinto de los dos anteriormente presentados; si bien en los anteriores los diferentes hilos (a excepción del hilo jefe) eran casi siempre idénticos, aunque operando sobre distintos conjuntos de datos, en este caso son completamente distintos. 



 Patrón de hilos Línea de ensamblado

 Fuente: sistop.gwolf.org/html/02_administracion_de_procesos.html
   
Concurre
 
Formalmente y desde las ciencias de la computación, concurrencia no necesariamente se refiere a dos o más eventos que ocurran a la vez, sino que a dos o más eventos cuyo órden es no determinista, esto es, eventos acerca de los cuales no podemos predecir el órden relativo en que ocurrirán. Esto puede ocurrir porque hablamos de dos hilos ejecutándose en conjunto, dos procesos independientes en el mismo equipo, o incluso procesos independientes en computadoras separadas geográficamente; el estudio de situaciones derivadas de la concurrencia es uno de los campos de estudio clásico (y más abstracto) de las ciencias de la computación.

Si bien una de las tareas principales de los sistemas operativos es dar a cada proceso la ilusión de que se está ejecutando en una computadora dedicada, de modo que el programador no tenga que pensar en la competencia por recursos, a veces esta ilusión sencillamente no puede presentarse — Parte del desarrollo de un programa puede depender de datos obtenidos en fuentes externas a éste, y la cooperación con hilos o procesos externos es fundamental.

Para algunos de los ejemplos a continuación, presentaremos ejemplos usando la semántica de la interacción entre hilos del mismo proceso, sincronización entre procesos independientes, asignación de recursos por parte del núcleo a procesos simultáneos, o incluso entre usuarios de diferentes equipos de una red — En todos estos casos, los conceptos presentados pueden generalizarse a los demás, y son situaciones en que se presenta compartición (o competencia) por estructuras entre entes independientes. 

 Fuente: sistop.gwolf.org/html/02_administracion_de_procesos.html

 Ciclo de vida de un proceso

Un proceso pasa por cuatro fases:
  1. Carga
  2. Ejecución
  3. Terminación
Creación

  • Creación
  • Crear un proceso consiste en asignar un proceso ID al nuevo proceso y configurar la información que define el entorno de trabajo del nuevo proceso. La mayor parte de esta información es heredad del proceso padre.
    Carga
    La carga de un proceso se realiza mediante un loader thread (hilo cargador). El código que efectúa la carga reside en el Administrador de Procesos, sin embargo, el thread se ejecuta bajo el proceso ID del nuevo proceso. Esto permite al Administrador de Procesos dedicarse a otras tareas mientras se cargan los programas.
    Ejecución
    Una vez el código del programa ha sido cargado, el proceso está listo para ser ejecutado; comienza a competir con otros procesos por los recursos de la CPU.
    Terminación
    Un proceso puede finalizar su tarea de dos formas:
    • emisión de una señal cuya acción definida es causar la terminación de un proceso
    • el proceso hace una llamada exit()
    Estados de los Procesos

    Un proceso se encuentra siempre en uno de los siguientes estados:
    • READY - el proceso puede hacer uso de la CPU (no está esperando la ocurrencia de ningún evento).
    • BLOCKED - el proceso está en un estado de bloqueo, que puede ser:
      • SEND-blocked
      • RECEIVE-blocked
      • REPLY-blocked
      • SIGNAL-blocked
    • HELD - el proceso ha recibido una señal de HOLD. Mientras no salga de este estado, el proceso no puede utilizar la CPU; el único modo de sacarlo del estado HELD es recibir otra señal que, o bien le permita seguir con su ejecución, o bien, lleve al proceso a su terminación.
    • WAIT-blocked - el proceso ha hecho una llamada wait() o waitpid() y ha de esperar por el estatus de uno o más de sus procesos hijos.
    • DEAD - el proceso ha terminado pero no puede enviar su estatus de exit a su padre porque éste no ha realizado una llamada wait() o waitpid(). Un proceso DEAD tiene un estado, pero la memoria que antes ocupaba ha sido liberada. Un proceso en este estado también se denomina proceso zombie.
      Fuente: www.iuma.ulpgc.es/~avega/int_equipos/trab9899/qnx/cap3.htm

    ¿Qué es un proceso?

    Un proceso es un programa en ejecución. Un proceso simple tiene un hilo de ejecución, por el momento dejemos esta última definición como un concepto, luego se verá en más detalle el concepto de hilo. Una vez definido que es un proceso nos podríamos preguntar cuál es la diferencia entre un programa y un proceso, y básicamente la diferencia es que un proceso es una actividad de cierto tipo que contiene un programa, entradas salidas y estados.

    Los procesos pueden ser cooperantes o independientes, en el primer caso se entiende que los procesos interactúan entre sí y pertenecen a una misma aplicación. En el caso de procesos independientes en general se debe a que no interactúan y un proceso no requiere informacion  de otros o bien porque son procesos que pertenecen a distintos usuarios.

    Estados de los procesos

    Un proceso puede estar en cualquiera de los siguientes tres estados: Listo, En ejecución y Bloqueado.

    Los procesos en el estado listo son los que pueden pasar a estado de ejecución si el planificador los selecciona. Los procesos en el estado ejecución son los que se están ejecutando en elprocesador en ese momento dado. Los procesos que se encuentran en estado bloqueado están esperando la respuesta de algún otro proceso para poder continuar con su ejecución. Por ejemplo operación de E/S.



    La implementación del modelo de procesos se logra debido a que el sistema operativo almacena en una tabla denominada tabla de control de procesos información relativa a cada proceso que se esta ejecutando en el procesador. Cada línea de esta tabla representa a un proceso.

    La información que se almacena es la siguiente:

    1) Identificación del proceso.

    2) Identificación del proceso padre.

    3) Información sobre el usuario y grupo

    4) Estado del procesador.

    5) Información de control de proceso

    5.1) Información del planificador.

    5.2) Segmentos de memoria asignados.

    5.3) Recursos asignados.

    Comunicación entre procesos

    Condiciones de competencia

    Las condiciones de competencia se dan cuando dos o más procesos intentan acceder a un mismo recurso.

    Secciones críticas

    Para solucionar las condiciones de competencia se implementó un modelo para prohibir que dos procesos accedan al mismo recurso. El modelo en cuestión se denomina exclusión mutua.

    Exclusión mutua con espera ocupada

    Las soluciones con espera ocupada funcionan de la siguiente manera, cuando un proceso intenta ingresar a su región critica verifica si esta permitida la entrada. Si no, el proceso se queda esperando hasta obtener el permiso.


    El metodo más simple para evitar las condiciones de competencia es hacer que cada proceso desactive todas sus interrupciones antes de entrar a su sección crítica y las active una vez que salio de la misma. Este modelo como se puede observar, éste modelo tiene una gran problema y es que si se produce una falla mientras que el proceso esta en la región crítica no se puede salir de la misma y el sistema operativo no recuperaría el control.


    En éste caso se genera una variable la cual puede tener dos valores o bien 0 (no hay ningún proceso en su sección crítica) o bien 1 (indicando que la sección crítica está ocupada) entonces cada proceso antes de ingresar a la sección crítica verifica el estado de la variable de cerradura y en caso de que la misma este en 0, le cambia el valor e ingresa a la misma y en caso de que la misma sea 1 el proceso se queda verificando el estado de la misma hasta que el mismo sea 0.

    El problema aquí se presenta si dos procesos verifican al mismo tiempo que la variable cerradura esta en 0 e ingresan a la región crítica.


    El algoritmo de alternancia estricta no bloquea el ingreso a la región crítica cuando otro proceso se esta ejecutando. El problema de ésta solución es que cuando un proceso no esta en la sección crítica igualmente tiene bloqueado el acceso a la misma y por lo tanto no permite que otro proceso que requiera ingresar a la misma logre hacerlo.

    Instrucción TSL

    Esta solución requiere ayuda del hardware y es debido a que en general las computadoras diseñadas para tener más de un procesador tienen una instrucción TEST AND SET LOCK

    Dormir y despertar

    El modelo de espera acotada tienen el inconveniente que se desperdicia tiempo de procesador.


    El problema del productor y elconsumidorr describe el echo de que cuando hay dos o más procesos interactuando a través de un buffer común habiendo procesos que ponen información o datos y otros que los sacan se pueden llegar a dar condiciones en las cuales los procesos que ingresan los datos no puedan hacerlo debido a que el buffer ya se encuentra lleno y para el caso de los que sacan los datos del buffer intenten sacar datos cuando ya no hay nada que sacar. Para evitar estas condiciones se desarrollaron metodos decomunicacion /sincronización entre procesos en los cuales se impide que esto suceda haciendo que el proceso productor "duerma" si el buffer está lleno y una vez que exista espacio el proceso "consumidor" despierte al productor para que siga generando o viceversa.

    Planificación de procesos

    La planificacion es el proceso por el cual el sistema operativo selecciona que proceso ejecutar. La seleccion  del proceso se basa en alguno de los algoritmosde planificación que se describen más abajo.

    Expulsión

    Es la característica por el cual el sistema operativo puede o no expulsar del estado de ejecución a un proceso dado. En este sentido entonces tenemos la planificación apropiativa en la cual el sistema operativo puede cortar en cualquier momento la ejecución de un proceso y la planificación no apropiativa en la cual una vez que el proceso esta en ejecución el sistema operativo no puede sacarlo de ese estado.

    Objetivos de la planificación

    Los objetivos de la planificación de proceso son:

    • Equidad, todos los procesos deben poder ejecutarse
    • Eficacia, mantener ocupada la CPU un 100% del tiempo
    • Tiempo de respuesta, minimizar el tiempo de respuesta al usuario
    • Tiempo de regreso, minimizar el tiempo que deben esperar los usuarios por lotes para obtener sus resultados
    • Rendimiento, maximizar el número de tareas procesadas por hora.

    Algoritmos de planificación

    Los algoritmos de planificación son los que definen que politica se va a seguir para que un proceso pase al estado de ejecución.


    En este tipo de planificación cada proceso tiene asignado un quantum de tiempo para ejecutarse y en el caso de que no pueda terminar la ejecución en su quantum el proceso pasa de nuevo a la cola de procesos para ser ejecutado por otro quantum luego de recorrer la cola para asegurarse que todos los procesos reciban ese quantum de procesamiento.


    En la planificación round-robin todos los procesos sontratados con la misma prioridad. Para el caso de este tipo de planificación a cada proceso se le asigna una prioridad y los mismos son ejecutados

    Colas múltiples

    Las colas múltiples están basadas en una pila que sirve como índice de una lista de procesos que se tienen que ejecutar.

    Primero el trabajo más corto

    Este tipo de algoritmo de planificación se usa para trabajos en batch o de procesamiento or lotes en los cuales se puede saber cual es el tiempo de duración de la ejecución de cada proceso y entonces se puede seleccionar primero eltrabajo más corto. El problema que se presenta con éste algoritmo es que los grandes procesos podrían sufrir de inanición dado que cualquier proceso pequeño se "cuela" sobre uno de mayor tamaño y como resultado final se podría dar el caso que el proceso grande nunca obtenga procesamiento.


    En este modelo de planificación se tiene en cuenta la cantidad de usuarios en el sistema y se le asigna a cada uno el tiempo de ejecución de 1/n (siendo n la cantidad total de usuarios) de esa forma el planificador tiene que llevar cuenta del tiempo de ejecución de los procesos y balancear el tiempo que están utilizando el procesador para cumplir con la ecuación previa.

    Procesos ligeros

    Los procesos ligeros son programas en ejecución son básicamente procesos pero a diferencia de éstos últimos que solo tienen un hilo de ejecución los primeros tienen el hilo principal más hilos secundarios o hijos, en éste caso todos los procesos hijos comparten la información del hilo principal pero además puede cada hilo tener su información privada.

    Dentro de la información propia tenemos:

    • Contador de programa
    • Pila
    • Registros.
    • Estado del proceso ligero.
    • Dentro de la información compartida tenemos:
    • Variables globales.
    • Archivos abiertos
    • Señales
    • Semáforos.
    • Contabilidad.

    Señales

    Las señales son el mecanismo de comunicación que se establece entre los procesos. Para comparar se puede decir que las señales son a los procesos lo que las interrupciones son al procesador. Cuando un proceso recibe una señal detiene su ejecución, bifurca a la rutina del tratamiento de la señal que esta en el mismo proceso y luego una vez finalizado sigue la ejecución en el punto que había bifurcado anteriormente.

    Las señales se pueden originar en un proceso o bien en el sistema operativo. Las señales se pueden enviar entre procesos, solo los que tengan el mismo uid, o bien el sistema operativo puede enviarle una señal a un proceso, por ejemplo excepciones de ejecución.
    Fuente:www.monografias.com/.../administ-procesos/administ-procesos.shtml




    ADMINISTRADOR DE PROCESOS



    Fuente: http://1.bp.blogspot.com


    ADMINISTRADOR DE PROCESOS

       La gestión de procesos es la tarea fundamental de cualquier sistema operativo moderno. El sistema operativo debe asignar recursos a los procesos, permitir el intercambio de información entre los mismos, proteger los recursos de un proceso del resto y facilitar la sincronización de procesos. Para alcanzar estos objetivos, el sistema operativo mantiene una estructura de datos para cada proceso que describe su estado y los recursos que posee y que permite al sistema operativo imponer un control sobre los procesos (PCB Bloque de Control de Proceso).


         En un monoprocesador multiprogramado, debe intercalarse en el tiempo, la ejecución de múltiples procesos. En un multiprocesador, no sólo puede intercalarse la ejecución sino que los procesos se pueden ejecutar simultáneamente. Ambos, intercalación y ejecución simultánea, son formas de concurrencia y llevan a una multitud de problemas complejos, tanto para el programador de aplicaciones como para el sistema operativo. El sistema operativo debe llevar a cabo la función de planificar y ofrecer mecanismos para compartir y sincronizar procesos.



         El Administrador de procesos le permite revisar los procesos que se estén ejecutando y comprobar el rendimiento del sistema. Después de diagnosticar el sistema, puede elegir finalizar procesos que considere no deseados para mejorar la velocidad de procesamiento del equipo, optimizar los procesos o ignorar procesos en próximos análisis.



    Fuente: http://www.descargarwindows.com/wp-content/uploads/2010/05/admintareaswinvista.jpg


    Proceso:

        Permite visualizar los procesos que ejecuta el computador, quién lo ejecuta y el uso de la CPU y el uso de memoria. En nombre de imagen aparece el nombre del archivo ejecutable que está siendo ejecutado; en nombre de usuario se establece si es el usuario quien activó el proceso (sólo los procesos ejecutados por el usuario pueden ser finalizados), si corresponde a una ejecución de red o una ejecución de sistema.


    Estados y transiciones de un proceso:


         Los bloques de control de procesos se almacenan en listas, una para cada posible estado:


    Fuente: http://ac.itdurango.mx

    Un proceso, a lo largo de su vida, alterna entre diferentes estados de ejecución. Estos son:

         Nuevo: Se solicitó al sistema operativo la creación de un proceso, y sus recursos y estructuras están siendo creadas.

         Listo: Está listo para ser asignado para su ejecución en un procesador.

         En ejecución: El proceso está siendo ejecutado en este momento.

        Bloqueado: En espera de algún evento para poder continuar ejecutándose.

       Terminado: El proceso terminó de ejecutarse; sus estructuras están a la espera de ser limpiadas por el sistema operativo.


    Diagrama de Transición entre los Estados de un Proceso


    Fuente: http://sistop.gwolf.org/html/img/dot/estados_proceso.png


    Control de procesos:

    PCB (Bloque de control de procesos): Conjunto de datos donde se
    incluye el estado de un proceso en cada momento, los recursos
    usados, registros, etc.

    Objetivos:

    1) Que el sistema operativo localice la información sobre el proceso.

    2) Mantener registrados los datos del proceso en caso de suspensión o reanudación de la ejecución.

    Información contenida:

    1) Estado del proceso: Contenido del contador de programa, estado del cpu en cuanto a prioridad del proceso, modo de ejecución, etc. y estado de los registros internos de la computadora.

     2) Estadísticas de tiempo y ocupación de recursos: Planificación del CPU.

     3) Ocupación de memoria interna y externa: Swapping.

     4) Recursos en uso.

     5) Archivos en uso.

     6) Privilegios.


    Fuente: http://ac.itdurango.mx


    SCB (Bloque de control del sistema): Objetivos globales similares al PCB, además enlaza los PCB’s de los procesos existentes.

         Cambio de un proceso a otro suponiendo un solo cpu, una tarea en ejecución a la vez y 2 procesos activos (A y B) compitiendo por el cpu, ambos en memoria principal.


    Fuente: http://ac.itdurango.mx


    Cambio de A por B:

    1. Deja de ejecutar el proceso en curso (A).

    2. Se salva el estado del proceso A para su regreso al punto de interrupción.

    3. Cede el control al kernel.

    4. Cambio de contexto (de modo usuario a modo supervisor).

    5. El kernel estudia si el proceso B está preparado para su ejecución.

    6. Si si, cambio de contexto (de modo supervisor a modo usuario).

    7. Repone el estado de B (si es que se había interrumpido antes).

    8. Pone en ejecución a B.





    Referencias Electrónicas

    • Sistemas Operativos, Administración de procesos, disponible en: http://sistop.gwolf.org/html/02_administracion_de_procesos.html

    • Administración de Procesos, disponible en: http://www.slideshare.net/soniderosonidero/unidad-2-administracin-de-procesos-3702723

    • Administrador de los Procesos en los Sistema Operactivos, disponible en: http://www.paretologic.com/es/pchealthadvisor/help/605.htm