Sistema operativo como administrador de procesos

Visitas: 828  
Tiempo total: 18 días con 11:52:27 hrs  

Un proceso es la imagen en memoria del programa que representa. La diferencia entre programa y proceso es que el programa es el conjunto de instrucciones en cambio el proceso es lo que define que actuación tendrá el sistema utilizando el código del programa.

Estados de los procesos

Los diferentes estados por los cuales pasa un proceso en un sistema operativo, son los siguientes:

  • Nuevo: Es cuando la creación del proceso es solicitada en espera de la asignación de los recursos necesarios para su ejecución. Por ejemplo, la asignación de memoria RAM para su correcto funcionamiento.
  • Listo: Después de pasar por el estado nuevo, el proceso es creado y se agrega a la lista de procesos listos en espera para su ejecución.
  • En ejecución: De acuerdo al tipo de algoritmo utilizado para la selección de procesos a ejecutar, se seleccionara de la lista de procesos Listos para su ejecución, el tiempo que permanecerá en este estado será respecto al algoritmo seleccionado, el cual puede ser por ejemplo: hasta que se termine su tiempo de vida o el quantum seleccionado para dicho proceso.
  • Bloqueado: En este estado entran los procesos que han sido bloqueados de cualquiera de los anteriores estados. Saldrán de acuerdo a su selección hacia la lista de Listos.
  • Terminado: En este estado entran los procesos que han finalizado o bien han sido eliminados. Las estructuras de estos procesos estarán en espera de ser limpiadas por el sistema operativo.

im1 - estados de un proceso

Bloque de control de procesos

Su abreviado es PCB, básicamente es la información necesaria que el sistema operativo debe de manejar para cada uno de los procesos que componen el sistema. Generalmente, esta información es:

  • Estado del proceso: Indica en qué estado se encuentra el proceso.
  • Contador de programa: Indica la siguiente instrucción que será ejecutada por el proceso. Esto es debido a que una vez el proceso entra en el estado de ejecución, en algunos algoritmos el proceso no es ejecutado hasta que terminen todas las instrucciones, para esto se debe de almacenar la siguiente instrucción por ejecutar.
  • Estado E/S: Este es el listado de dispositivos o recursos asignados al proceso en un determinado tiempo.
  • PID: Es el ID único que determina al proceso.
  • Quantum: Es el tiempo que el proceso estará en el estado de ejecución para después entrar a la pila de Listos.
  • Proceso padre: Indica el proceso padre, si no existe este deberá de ser el proceso base llamado Init.
  • Prioridad: Utilizado al igual que Quantum por el planificador de procesos de acuerdo al algoritmo seleccionado por el sistema operativo. La prioridad le da un orden al proceso para su ejecución.

Esquema de un proceso en memoria

Los segmentos que componen la información de un proceso, son los siguientes:

  • Text: Es el código que compone las instrucciones del proceso. Es el programa en sí que implementa el proceso.
  • Data: Son las variables globales utilizadas en el programa.
  • Heap: Es el área de memoria dinámica utilizada por el programa.
  • Stack: Esta área es utilizada para la implementación de invocaciones anidadas de procedimientos y funciones, es decir que la utilización de esta área incrementa o disminuye conforme son llamadas las funciones o procedimientos y conforme se entrega su retorno. También es utilizada para el manejo de variables locales, entre otros.

im2 - estructura de un proceso en memoria

Procesos e hilos

La información que la memoria y el CPU debe de manejar para que el planificador de procesos seleccione o gestione los procesos en el sistema operativo para su manipulación es bastante significativa, lo cual provocaría un consumo de recursos que debe de considerarse. Para solucionar este problema se utilizan los hilos de ejecución, procesos ligeros o bien Threads.

Un thread es una unidad básica de utilización para el CPU, es decir que es la unidad básica más pequeña que puede ser planificada por el sistema operativo.  Un thread contiene su propio espacio de registros y comparten el código, datos y recursos de con otros threads.

im3 - multithreads process

Una de las características de los procesos, es que el sistema operativo se encarga de que cada uno de estos tenga una asignación virtual de exclusividad. Esta es una ventaja de los hilos en el sistema operativo que se puede observar en la anterior imagen. La imagen significa que todos los hilos comparten un solo espacio de direccionamiento en memoria, lista de descriptores de archivos y dispositivos abiertos y algunas otras estructuras adicionales haciendo posible que la aplicación realice varias tareas de forma aparentemente simultáneamente.

Otra ventaja de la utilización de hilos es que al compartir espacio de memoria no necesita de la utilización de mecanismos de comunicación entre procesos (IPC) el cual debe de acceder al kernel para lograr este objetivo.

Threads a nivel de usuario y a nivel de sistema operativo.

Los threads son utilizados por el usuario y por el sistema operativo. A nivel de usuario en por ejemplo librerías que implementan su administración, creación y planificación en la ejecución de alguna aplicación y a nivel de núcleo llamados threads del kernel. En los threads de kernel o nucleo el sistema operativo debe de implementar la administración, creación y planificación siendo utilizados tantos hilos de ejecución como threads han sido creados a diferencia de los que tienen nivel de usuario, pues sin importar la cantidad de hilos creados el sistema operativo reconoce únicamente uno.

Para la utilización tanto de procesos de usuario como de kernel, se presentan las siguientes tres clasificaciones:

  • Varios a uno: Significa que existen varios threads a nivel de usuario a partir de un solo thread del sistema para su control y son ejecutados por el planificador del proceso a nivel de usuario.

im4 - threads many to one

  • Uno a uno: En este tipo de clasificación, el sistema reconoce todos los threads a nivel de usuario generando uno nuevo para cada thread a nivel del sistema. Estos threads a nivel de usuario son planificados independientemente sin la existencia del planificador a nivel de usuario.

im5 - threads one to one

  • Varios a varios: En este el sistema reconoce únicamente los threads generados a nivel de sistema y los threads a nivel de usuario son asignados a varios del sistema, independientemente de la cantidad que existan.

im6 - threads many to many

Sistemas distribuidos

Un sistema distribuido es un conjunto de computadoras físicamente separadas, comunicadas a través de una red. Su función es consumir los recursos que están distribuidos y a la vez ocultar al usuario la cantidad de hosts que lo conforman.

Una de las ventajas de los sistemas distribuidos es la tolerancia a fallos, pues si un componente que hace al sistema falla puede ser reemplazado. La escalabilidad es una característica que se debe mencionar, pues es la habilidad de este sistema a adaptarse a la cantidad de nodos o bien componentes que lo conforman. Por ejemplo, para hacer un sistema distribuido para un par de decenas de servidores el medio de comunicación es la red de área local, para centenas de host se utiliza la red de área metropolitana y para miles o millones de dispositivos, nodos o hosts se usa el internet.

gfs

Uno de los mejores ejemplos de sistemas distribuidos es el internet, siendo más especifico el sistema de archivos de Google o GFS, el cual utiliza un completo sistema de chunk servers para construir sus propios servidores los cuales mejoran el rendimiento de manejo de información a partir de simples computadoras basadas en GNU/Linux.

Concurrencia

Como una introducción a concurrencia, se puede mencionar uno de los objetivos de un sistema operativo el cual consiste en aislar al usuario de la competencia que existe entre los procesos para la utilización de los recursos. Por analogía en conceptos de programación se conoce como encapsulamiento.

A partir de esto se tiene el concepto de concurrencia, el cual consiste en la solución de problemas que surgen a partir del orden en que ocurren dos eventos o bien, procesos. En este caso se basa en que no se conoce cuál de los dos procesos se ejecutara primero y no necesariamente a la ejecución de procesos de manera simultánea.

Sección critica

El concepto de sección crítica se refiere al recurso que debe de ser accedido por los procesos o hilos del sistema operativo. Un ejemplo de esto puede ser la impresora o un simple archivo de texto en un chat en grupo.

Exclusión mutua

La exclusión mutua se refiere al tiempo de ocio que un proceso debe de esperar para poder utilizar la sección critica a la cual quiere tener acceso. Los algoritmos más comunes para la solución de este tipo de problemas son:

  • Algoritmo de Dekker: Fue creado para solucionar el problema de la exclusión mutua, permitiendo a dos procesos o hilos compartir un recurso sin encontrar conflictos. El autor de este algoritmo es el famoso científico de la computación Edsger Dijkstra recordado por el algoritmo Dijkstra del área de teoría de grafos.
  • Algoritmo de Peterson: A diferencia del algoritmo de Dekker permite a dos o más procesos o hilos compartir un recurso. Este algoritmo es el resultado de la implementación que su autor Gary L. Peterson desarrollo después de una simplificación que obtuvo del algoritmo de Dekker.

Problemas de exclusión mutua y sincronización

  • Productor-consumidor: Consiste en un entorno multi-hilo en el cual un grupo de hilos va realizando algún procedimiento que genera un producto que se espera sea consumido por otro grupo de hilos.

im7 - problema productor-consumidor

Un ejemplo de este problema es un un proceso consumidor y un productor que agregan y extraen elementos del buffer de datos. Es necesario mantener la consistencia de la información a través de la exclusión mutua para no corromper los datos en el momento de acceso a la información. También se debe de tomar en cuenta que, al momento de que el consumidor o productor encuentren el buffer vacio o lleno, este debe de bloquearse hasta que se genere un producto o se retire un producto y  no realizar una espera activa.

  • Lectores-escritores: Este problema consiste en el acceso a la información por parte de varios hilos o procesos, estos son lectores y consiste en la escritura de la información por parte de varios procesos o hilos representados por escritores.

im8 - problema lectores escritores

Las reglas en este modelo son, los lectores pueden acceder al recurso al mismo tiempo, pero los escritores deben esperar a que el último lector abandone el recurso. Los escritores deben de acceder al recurso uno a la vez, si existe un escritor tanto lectores como escritores deben de esperar.

Un ejemplo de este problema es un chat con un servidor en la nube. Este debe de crear un recurso el cual será utilizado por los clientes y el cual deberá de ser escrito por un solo usuario a la vez, y leído por más de un lector. El historial local es únicamente lo mostrado en la pantalla del usuario, ocultándole este procedimiento al archivo local del cliente.

Referencias

[http://sistop.gwolf.org/html/02_administracion_de_procesos.htm]
[http://3.bp.blogspot.com/-5G6MPxCW5pI/T8eS0k2EBGI/AAAAAAAAADg/NW7oHOSLOuM/s1600/2.png]
[http://3.bp.blogspot.com/_2yKKqfseOV0/S6uTp7qOdII/AAAAAAAAAPI/rsoaWAyS5u8/s320/layout.jpg]
[http://www.fing.edu.uy/inco/cursos/sistoper/recursosTeoricos/5-SO-Teo-Procesos.pdf]
[http://eplauchu.wordpress.com/2013/01/31/procesos-en-linux-las-bases/]
[http://es.wikipedia.org/wiki/Hilo_de_ejecuci%C3%B3n]
[http://www.tutorialspoint.com/operating_system/images/thread_processes.jpg]
[http://www.tutorialspoint.com/operating_system/images/many_to_one.jpg]
[http://www.tutorialspoint.com/operating_system/images/one_to_one.jpg]
[http://www.tutorialspoint.com/operating_system/images/many_to_many.jpg]
[http://antologiaso.wordpress.com/2010/04/08/problema-productor-consumidor/]
[http://antologiaso.files.wordpress.com/2010/04/instantanea_p_c1.gif]
[http://es.wikipedia.org/wiki/Algoritmo_de_Dijkstra]
[http://es.wikipedia.org/wiki/Edsger_Dijkstra]
[http://www.coders.me/wp-content/uploads/2008/03/cliente-servidor.gif]
[http://bourneshell.wordpress.com/2012/10/28/problema-lectores-escritores/]
[http://administraciondeprocesos-naranjo.blogspot.com/2008/10/241-exclusin-mutua-de-secciones-crticas.html]
[http://en.wikipedia.org/wiki/Gary_L._Peterson]
[http://en.wikipedia.org/wiki/Peterson%27s_algorithm]
[http://es.wikipedia.org/wiki/Escalabilidad]
[http://www.guatewireless.org/hardware/el-hardware-de-los-servidores-de-google.html]
[http://es.wikipedia.org/wiki/Computaci%C3%B3n_distribuida]
[http://es.wikipedia.org/wiki/Google_File_System]
[http://fc00.deviantart.net/fs8/i/2005/325/2/1/GNU_Linux_by_levhita.jpg]


Para recibir boletines de información, por favor escribe tu correo electrónico:

Por favor ingrese un correo electrónico valido.
Registrado correctamente!