sábado, 11 de noviembre de 2017

Gestion de procesos



                       GESTIÓN DE PROCESOS


DEFINICIÓN:

La definición es la siguiente: “Un proceso es básicamente un entorno formado por todos los recursos necesarios para ejecutar programas. Desde el punto de vista del SO, un proceso es un objeto más que hay que gestionar y al cual hay que dar servicio”.

Podemos decir que un programa es una entidad pasiva, en tanto en cuanto es un conjunto de instrucciones de código máquina y datos almacenados en un ejecutable. Mientras que un proceso sería la ejecución de ese programa, es decir, el programa en acción. Esto indica que los procesos son dinámicos, están en constante cambio debido a estos recursos necesarios, ya que al intentar realizar algún tipo de acción puede ser que tenga que permanecer a la espera de que dicho recurso esté disponible, por ejemplo una petición de lectura del disco duro, y que el brazo lector del disco duro lo esté utilizando otro proceso.

Como se puede observar en el compilador de C++ se tiene los comandos escritos, pero el desarrollo del proceso no está en ejecución. Por tanto es  el desarrollo de un PROGRAMA y en un concepto general podemos decir que un  PROGRAMA es un conjunto de comandos que se encuentran de forma estática antes ser ejecutado.


En el gráfico ya se puede apreciar la acción de tarea que está en ejecución. Por tanto en otros términos es un Programa en Ejecución.





Ejemplo de un Concepto de proceso


 Una analogía: receta de un pastel (el programa), ingredientes (los datos), cocinero (la CPU), la mesa de cocina (la memoria), cada pastel (un proceso), el horno (un dispositivo E/S).

 ¡Nuestro chef puede tener varios pasteles a medio hacer!






 Prueba el ejemplo: abre 2 terminales y ejecuta en uno ls -lR / y en otro ls -lR /usr. Tenemos dos procesos ejecutando el mismo programa /bin/ls.



 En este caso (lo habitual) cada proceso es secuencial.



 Concurrencia: su ejecución parece simultánea pero, en realidad, la CPU salta de uno a otro (como nuestro sufrido cocinero). Es lo que llamamos sistema operativo multitarea.



 Mientras ejecuta un proceso, el otro está en espera.



 Cuando hay varias CPUs podemos tener ejecución paralela. Pero cada CPU sólo puede ejecutar un proceso a la vez. Normalmente número de procesos > número de CPUs.



 Más adelante veremos procesos que internamente también son concurrentes. Utilizan hebras (threads) de ejecución.

Estados de un proceso 
En un sistema multiprogramado o multitarea donde existen muchos procesos y un procesador, puede ocurrir que en un momento dado sólo se ejecute un proceso o varios y los demás estén esperando a ser procesado o esperen la finalización de una operación de E/S. Los pasos por los que puede pasar un proceso se pueden representar con un diagrama de estado como el de la figura siguiente . Así se puede apreciar que a medida que un proceso se ejecuta va cambiando de estado dependiendo de las preferencias que cada uno tengan asignadas, por lo que será el procesador el que se encargue de ejecutar unos u otros.



Cómo se aprecia en la imagen los estados por los que puede pasar un proceso y son los siguientes:

Nuevo. En los sistemas operativos hay varias razones por las que se crea un proceso. Entre éstas se pueden destacar; la inicialización del sistema, cuando se arranca el sistema se generan una serie de procesos ya bien sean para interactuar con el usuario o procesos en segundo plano con una función específica, como por ejemplo el aceptar la solicitud de una página web que está en dicha máquina; ejecución de una llamada al sistema por parte de otro proceso, un proceso puede requerir la descarga de ficheros, por lo que serán otros procesos los que se encarguen de ubicar el archivo o archivos en la ubicación específica; por medio de la acción de un usuario, por ejemplo al hacer doble clic en un icono; mediante el inicio de un trabajo por lotes. 

Una vez el proceso ha sido creado queda a la espera de ser admitido, por lo que si es así pasaría a estado preparado o en caso contrario terminaría dicho proceso. 

- Preparado (ready o listo). Un proceso en este estado está esperando a que se le asigne un procesador. Como se puede apreciar en la figura 4, un proceso en este estado puede, o bien finalizar, lo que ocurriría por la acción de otro proceso o por algún acontecimiento externo, o bien el proceso pasa al estado ejecución, ya que el gestor de procesos le asigna una CPU para ser ejecutado.
- Ejecución (run). El proceso en este estado está en la CPU ejecutando instrucciones. Puede ocurrir tres situaciones; que el proceso ejecute todas las instrucciones hasta su última línea de código y finaliza; pasa a estado bloqueado (wait) por que espera una acción externa como la entrada de información por teclado; o bien el proceso pasa a estado preparado debido a que ha agotado su tiempo de ejecución, por lo que cede su tiempo de ejecución.
- Bloqueado (wait, en espera). El proceso está esperando a que se produzca un evento externo, como una señal de E/S, y pasaría a estado ejecución. Al igual que el estado preparado, el proceso puede finalizar debido a un acontecimiento externo.


El sistema operativo utiliza varias colas para gestionar los estados, cada cola puede tener una política diferente. Así, podemos encontrar una cola para los estados preparados y una cola para los estados en espera. El planificador del procesador al examinar estas colas asigna el procesador al proceso más conveniente.



                          Ejemplo de Estados de un Proceso







Terminología:



  1.  preparado o listo (ready)
  2.  corriendo o en ejecución (running)
  3.   bloqueado (blocked) o dormido (asleep) o en espera (waiting).
  4.  suspender (swap out) = enviar el proceso a área de intercambio (swap)
  5.  reanudar (swap in) = traer el proceso desde área de intercambio a memoria
                                       

   TIPOS DE PROCESOS

Existen dos tipos de procesos, aquellos que se ejecutan en modo Kernel y aquellos que se ejecuta en modo usuario.



Modo Kernel o proceso de Núcleo.- 
- Son mas lentos por las llamadas al sistema que realiza 
- Es mas seguro por la integridad que representa 
- Su modo de ejecución es privilegiado 
- Es una parte fundamental de Sistema Operativo

Modo Usuario.-
- Ciertas instrucciones están prohibidas
- Solo tiene acceso a las zonas de memoria que se le han asignado 
- No puede interactuar con el Hardware
- No posee ningún privilegio





Tipos de procesos

Podemos clasificarlos en función de distintos criterios.

Según su diseño:

 Reutilizables: se cargan en memoria cada vez que se usan. Los programas de usuario suelen ser de este tipo.

 Reentrantes: se carga una sola copia del código en memoria. Cada vez que se usan se crea un nuevo proceso con su zona de datos propia, pero compartiendo el código.

Según su acceso a CPU y recursos:

 Apropiativos: acceden a los recursos y sólo los abandonan de forma voluntaria (mediante instrucción CPU).

 No apropiativos: permiten a otros procesos apropiarse de los recursos que ahora poseen.
Según su permanencia en memoria:

 Residentes: tienen que permanecer en memoria durante toda su evolución (desde creación hasta terminación).

 Intercambiables (swappable): es lo más normal. El SO puede decidir llevarlos a disco a lo largo de su evolución


Según su nivel de privilegio (no en todos los SO):

 Privilegiados: se ejecutan en modo supervisor.

 No privilegiados: los que normalmente ejecuta el usuario.




Según su propietario:

 Procesos de usuario: son los diseñados por los usuarios. Se ejecutan en modo no protegido.

 Procesos del sistema: son los que forman parte del SO (de E/S, de planificación de otros procesos, etc).


Comunicacion entre Procesos


Se conoce por Comunicación entre procesos ó InterProcess Communication (IPC) al conjunto de mecanismos claves en la comparación de datos (intercomunicación) y sincronizar entre distintos procesos.


Una función básica de los sistemas operativos es que provee un mecanismo que permite a los procesos comunicarse y sincronizarse entre sí.


Es un sistema, los procesos pueden ejecutarse independientemente o cooperando entre sí. Los intérpretes de comandos son ejemplos típicos de procesos que no precisan la cooperación de otros para realizar sus funciones. En cambio, los procesos que sí cooperan necesitan comunicarse entre sí para poder completar sus tareas.

  •      Compartir información: Ante una eventual necesidad que múltiples usuarios necesiten             la    misma información (Archivo compartido), se debe proveer un entorno que habilite el acceso concurrente a dicha información
  •      Acelerar los cálculos: Al desear que una tarea se ejecute más rápido, se divide en subtareas, implementando un paralelismo de ejecución entre sí. Esto se consigue con computadoras de múltiples elementos de procesamiento, ya sea a nivel de cpu’s o canales de E/S.
  •     Modularidad: Al querer construirse un sistema de forma modular, se necesita dividir la información del sistema en distintos procesos, o hebras.
  •     Conveniencia: Ya sea para un solo usuario, puede éste querer trabajar en varias tareas simultáneamente. Por ejemplo usando editor de texto, escuchando música e imprimiendo al mismo tiempo.

    
La comunicación entre procesos puede estar motivada por la competencia o el uso de recursos compartidos o porque varios procesos deban ejecutarse sincronizada mente para completar una tarea.

Para que puedan realizarse ambos tipos de interacciones, es necesario que el sistema operativo provea de servicios para posibilitar la comunicación entre procesos.
El sistema operativo provee mínima mente dos primitivas, "enviar" y "recibir", normalmente llamadas send y receive. Asimismo, debe implementarse un enlace de comunicación entre los procesos de la comunicación (pipe). Este enlace puede ser unidireccional o multidireccional según permita la comunicación en uno o en varios sentidos.

Problemas Clasicos de Comunicacion Entre Procesos

Para dar inicio a esta parte del tema, proporcionaré una pequeña introducción de la Comunicación entre Procesos. Básicamente sabemos que cuando los procesos se ejecutan de forma concurrente en un sistema operativo esto se puede clasificar como INDEPENDIENTES Y COOPERANTES, un proceso independiente es aquel que se ejecuta sin requerir ayuda o la cooperación de otros procesos y los procesos cooperantes son los que están diseñados para trabajar conjuntamente en alguna actividad que para trabajar deben ser capaces de comunicarse e interactuar entre ellos. Independientemente si los procesos son cooperantes e independientes estos pueden necesitar alguna interacción entre ellos y esta puede ser la interacción motivada porque los procesos comparten o compiten por el acceso a recursos físicos o lógicos o pueden ser interacciones motivadas porque los procesos se comunican y se sincronizan entre si para alcanzar un objetivo en común.
Estas interacciones obligan al sistema operativo a incluir mecanismos de servicios que permitan la comunicación y sincronización entre estos procesos.

El problema de la sección crítica

La característica más importante de este sistema es la porción de códigos  de un programa de un computador en la cual se accede a un recurso compartido  como una estructura de datos  o dispositivos que no debe ser accedido  por más de un proceso en ejecución. Este es uno de los problemas que con mayor frecuencia aparece cuando se ejecutan procesos concurrentes tanto si son cooperantes como independientes. Considérese un sistema compuesto por n procesos {P1, P2, ..., PN} en el que cada uno tiene un fragmento de código, que se denomina sección crítica. Dentro de la sección crítica, los procesos pueden estar accediendo y modificando variables comunes, registros de una base de datos, un archivo, en general cualquier recurso compartido.

Para resolver el problema de la sección crítica es necesario utilizar algún mecanismo de sincronización que permita a los procesos cooperar entre ellos sin problemas. Este mecanismo debe proteger el código de la sección crítica y su funcionamiento básico es el siguiente:
 Cada proceso debe solicitar permiso para entrar en la sección crítica mediante algún fragmento de código, que se denomina de forma genérica entrada en la sección crítica.
Cuando un proceso sale de la sección crítica debe indicarlo mediante otro fragmento de código, que se denomina salida de la sección crítica. Este fragmento permitirá que otros procesos entren a ejecutar el código de la sección crítica.

El problema del productor-consumidor

Este problema es uno de los problemas más habituales que surge cuando se programan aplicaciones utilizando procesos concurrentes. En este tipo de problemas, uno o más procesos, que se denominan productores, generan cierto tipo de datos que son utilizados o consumidos por otros procesos, que se denominan consumidores. Un claro ejemplo de este tipo de problemas es el del compilador que se describió anteriormente. En este ejemplo el compilador hace las funciones de productor al generar el código ensamblador que consumirá el proceso ensamblador para generar el código máquina. 

En esta clase de problemas es necesario disponer de algún mecanismo de comunicación que permita a los procesos productor y consumidor intercambiar información. Ambos procesos, además, deben sincronizar su acceso al mecanismo de comunicación para que la interacción entre ellos no sea problemática: cuando el mecanismo de comunicación se llene, el proceso productor se deberá quedar bloqueado hasta que haya hueco para seguir insertando elementos.
A su vez, el proceso consumidor deberá quedarse bloqueado cuando el mecanismo de comunicación este vacío, ya que en este caso no podrá continuar su ejecución al no disponer de información a consumir. Por tanto, este tipo de problema requiere servicios para que los procesos puedan comunicarse y servicios para que se sincronicen a la hora de acceder al mecanismo de comunicación.

El problema de los lectores-escritores

 En este problema existe un determinado objeto, que puede ser un archivo, un registro dentro de un archivo, etc., que va a ser utilizado y compartido por una serie de procesos concurrentes. Algunos de estos procesos sólo van a acceder al objeto sin modificador, mientras que otros van a acceder al objeto para modificar su contenido. Esta actualización implica leerlo, modificar su contenido y escribirlo.
A los primeros procesos se les denomina lectores y a los segundos se les denomina escritores. En este tipo de problemas existe una serie de restricciones que han de seguirse: • Sólo se permite que un escritor tenga acceso al objeto al mismo tiempo.
Mientras el escritor esté accediendo al objeto, ningún otro proceso lector ni escritor podrá acceder a él.
Se permite, sin embargo, que múltiples lectores tengan acceso al objeto, ya que ellos nunca van a modificar el contenido del mismo. En este tipo de problemas es necesario disponer de servicios de sincronización que permitan a los procesos lectores y escritores sincronizarse adecuadamente en el acceso al objeto.

Comunicación cliente-servidor

En el modelo cliente-servidor, los procesos llamados servidores ofrecen una serie de servicios a otros procesos que se denominan clientes. El proceso servidor puede residir en la misma máquina que el cliente o en una distinta, en cuyo caso la comunicación deberá realizarse a través de una red de interconexión. Muchas aplicaciones y servicios de red, como el correo electrónico y la transferencia de archivos, se basan en este modelo.

En este tipo de aplicaciones es necesario que el sistema operativo ofrezca servicios que permitan comunicarse a los procesos cliente y servidor. Cuando los procesos ejecutan en la misma máquina, se pueden emplear técnicas basadas en memoria compartida o archivos. Sin embargo, este modelo de comunicación suele emplearse en aplicaciones que ejecutan en computadores que no comparten memoria y, por tanto, se usan técnicas basadas en paso de mensajes.



Bloque de Control del Sistema



Un primer grupo de datos es general para todos los procesos.





Definición (Bloque de Control del Sistema)



(en inglés System Control Block, SCB) es un conjunto de estructuras de datos que usa el SO para gestionar la ejecución de los procesos.





El SCB normalmente incluye:



 Lista de descriptores de procesos.



 Puntero al descriptor de proceso que está usando la CPU.



 Punteros a colas de procesos que se encuentran en distintos estados. Ejemplo: procesos en espera.



 Puntero a la cola de descriptores de recursos.



 Identificadores de las rutinas para tratar interrupciones hardware o software y errores indeseados.
Un ejemplo de valores de interrupción:




Nivel
Evento Software
0
Proceso de usuario
1
Planificación de procesos
2
Temporización
3 a 10
Drivers de E/S
11 a 15
Otros
Nivel
Evento Hardware
16 a 23
Interrupciones de dispositivos
24
Reloj interno
25 a 29
Errores de:

- Procesador

- Memoria

- Buses
30
Fallo de tensión
31
Pila (stack) del núcleo errónea



Además, el SO gestiona una tabla de procesos donde guarda la información de cada uno. Cada entrada de esa tabla se llama . . .





Definición (Bloque de Control de Proceso)



(en inglés Process Control Block, PCB) son los datos particulares de cada proceso que usa el SO para gestionarlo.



El PCB normalmente incluye información de:



 Identificación:



I     id. del proceso



I     id. del proceso padre (si hay jerarquía de procesos; ej. UNIX)



I     id. del usuario y grupo del propietario.



 Planificación:



I     Estado del proceso



I     Si estado=bloqueado, el evento por el que espera el proceso



I     Prioridad del proceso



I     Otra información usada por el algoritmo de planificación: contadores, colas, etc.


Punteros a segmentos de memoria asignados:




I     Segmento de datos



I     Segmento de código



I     Segmento de pila



 Recursos asignados:



I     Archivos abiertos: tabla de descriptores o “manejadores” de archivos (file descriptors / file handles).

I     Puertos de comunicación asignados



 Punteros para organizar los procesos en colas.



 Información para comunicación entre procesos: señales, mensajes.








17 comentarios:

  1. Un proceso es como un cuchillo, por si solo no hace nada, depende de un usuario para que sea una herramienta (utilitario) o un arma (malware).

    ResponderEliminar
  2. Aldo tu comparación general es un buen ejemplo, ya que el proceso no depende de sis mismo.

    ResponderEliminar
  3. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  4. El proceso es una labor muy importante para el sistema operativo, ya que esta gestión podemos realizar la por medio de la interfaces gráfica o la interfaces de comando.

    ResponderEliminar
  5. solo una duda
    existen procesos que se ejecsutan automaticamente estos procesos pueden ser desactivados o son necesarios para el funcionamiento del equipo
    por ejemplo en un celular las actualizaciones algunas son automaticas pero las puedes hacer manuales

    ResponderEliminar
  6. La mayor parte hace el usuario y solo la computadora recibe y guarda eso también es un proceso o me equivoco??

    ResponderEliminar
  7. Para saber un poco más de procesos le dejo este link
    https://sites.google.com/site/sisoper1/home/gestion-de-procesos

    ResponderEliminar
  8. Cuando necesites tomar una decisión recuerda algo simple que los sistemas operativos nos enseñaron:
    Espera(piensa), Ejecuta(actúa) y Bloquea(espera resultados)
    Tan simple como esos tres pasos puedes emepzar a hacer las decisiones en tu vida, evoluciona...
    Así como estas tres faces principales de un proceso el sistema operativo creo muchas faces que al implementarlas a las primeras lograron optimizar muchas de las operaciones complejisimas dentro del procesador.

    ResponderEliminar
  9. La gestión de procesos de los sistemas operativos son el inicio de cualquier actividad en el interfaz usuario maquina ,mediante esta gestión de procesos podemos ver los pasos que se realizan para la realización de cualquier actividad, es muy importante conocer el tema

    ResponderEliminar
  10. el hecho de que el sistema operativo divida a cada proceso en partes de un bloque enseña cuan importante es el ORDEN en las cosas cada acción de la ejecución de un procesos esta realizada al detalle dejando un margen de error muy muy mínimo y ahora considerar que también el son ordenadores multitareas refleja el detalle con el que cada procesos esta realizado para gusto del usuario

    ResponderEliminar
  11. La protección de acceso se trata de un mecanismo para el control de los intentos de entrada o acceso al sistema, de tal forma que permita la conexión cuando un usuario lo solicite y pase el control correspondiente

    ResponderEliminar
    Respuestas
    1. El sistema de archivos JFS2 que se entrega con el AIX da soporte a dos tipos AIXC y NFS4

      Eliminar
  12. Aclarando una descripccion importantes, hablaremos un poco sobre el area swap:

    En informática, el espacio de intercambio (También conocido como Archivo de paginación o Memoria Virtual -Entendiendo por memoria la RAM-) es una zona del disco (un fichero o partición) que se usa para guardar las imágenes de los procesos que no han de mantenerse en memoria física. A este espacio se le suele llamar swap, del inglés "intercambiar".

    La mayoría de los sistemas operativos modernos poseen un mecanismo llamado memoria virtual, que permite hacer creer a los programas que tienen más memoria que la disponible realmente. Como en realidad no se tiene físicamente toda esa memoria, algunos procesos no podrán ser ubicados en la memoria RAM.

    En este caso es cuando es útil el espacio de intercambio: el sistema operativo puede buscar un proceso poco activo, y moverlo al área de intercambio (el disco duro) y de esa forma liberar la memoria principal para cargar otros procesos. Mientras no haga falta, el proceso extraído de memoria puede quedarse en el disco, ya que ahí no utiliza memoria física. Cuando sea necesario, el sistema vuelve a hacer un intercambio, pasándolo del disco a memoria RAM. Es un proceso lento (comparado con usar sólo la memoria RAM), pero permite dar la impresión de que hay más memoria disponible.

    ResponderEliminar
  13. Es importante señalar que un proceso es un programa en ejecucion, asi es mas facil de entender que es un proceso

    ResponderEliminar
  14. Estos sistemas permiten identificar áreas de gestión que no se abordan y/o ineficientes. Los procesos y subprocesos relacionados están perfectamente documentados

    ResponderEliminar
  15. Estos sistemas permiten identificar áreas de gestión que no se abordan y/o ineficientes. Los procesos y subprocesos relacionados están perfectamente documentados

    ResponderEliminar