Hola bienvenidos de nueva cuenta a StudenPlace, el dia de hoy hablaremos de uno de los conceptos muy utilizados en programación y en el manejo de sistemas operativos, estamos hablando del tema de concurrencia y sencuencialidad, asi que acompañanos, te recomendamos visitar nuestra entrada anterior donde hablamos de Administración de Procesos y del Procesador y nuestra entrada posterior de Procesos lijeros: hilos o hebras pues estos temas tienen cierta relación entre si.
Concurrencia:
En fin empezemos definiendo concurrencia:
Concurrencia: es una propiedad de los sistemas en la cual los procesos de un cómputo se hacen simultáneamente, y pueden interactuar entre ellos, es decir son procesados al mismo tiempo, de manera que, para ejecutar uno de ellos, no hace falta que se haya ejecutado otro.
En otras palabras la concurrencia es simplemente la ejecución de varias tareas al mismo tiempo. Ahora esto de ejecutarse "al mismo tiempo" es relativo de acuerdo a la arquitectura del ordenador, -¿espera que? de seguro preguntaras- esto es debido a que de acuerdo a la arquitectura basica, el ordenador solo puede ejecutar un programa o tarea a la vez, y no mas, si nosotros persivimos la ilusion de que varios programas se ejecutan al mismo tiempo (Multiprogramación) es debido a que el sistema operativo intercala las tareas que se ejecutan en el procesador a una velocidad sumamente rapida.
Pongamos un ejemplo: digamos que estoy reproduciendo una canción al mismo tiempo que estoy escribiendo esta entrada, y a su vez estoy tengo un video abierto en youtube. Lo que en realidad sucede es que mi computadora hace esto:
Al poner todo junto y al hacerlo a una velocidad ultra rapida (1 nanosegundo) nos da la ilusión de que todo sucede al mismo instante, pero no es asi. En fin olvidemosnos de esto por un instante, pero conservemoslo para los ejemplos siguientes.
En fin, quedemosnos en decir que los procesos son concurrentes si existen simultáneamente. Los procesos concurrentes pueden funcionar en forma totalmente independiente unos de otros, o pueden ser asíncronos, lo cual significa que en ocasiones requieren cierta sincronización o cooperación.
La concurrencia puede presentarse en tres contextos diferentes:
Varias aplicaciones: para este caso se invento la multiprogramación, esto para permitir que el tiempo de procesador de la máquina fuese compartido dinámicamente entre varios trabajos o aplicaciones activas (lo que acabamos de explicar arriba). Es decir, dentro de nuestro computador podemos tener abiertas varias aplicaciones, cada aplicación es un hilo diferente, es decir una tarea que se ejecuta independientemente de otra, por decirlo de algun modo, no necesito tener abierto Word para poder escuchar musica ¿O si?, cada programa en este caso es independiente del otro.
Aplicaciones estructuradas: Como ampliación de los principios del diseño modular y la programación estructurada, algunas aplicaciones pueden implementarse eficazmente como un conjunto de procesos concurrentes. En español esto quiere decir, que existen programas que por lo regular para funcionar requieren ejecutar varias tareas a la vez o tener varios hilos de ejecución. Si no me explico abre tu administrador de tareas (estoy seguro que usas google Chrome) y despliega los procesos del navegador:
Te das cuenta de que el solo navegador tiene incluidos varios subprocesos, estos en si es lo que estoy tratando de explicar, cada uno de estos son un proceso, una tarea, un hilo que esta funcionando al mismo instante, si cerramos o forzamos el termino de uno de ellos probablemente provocaremos que el navegador de Google Chrome se cierre o empieze a funcionar mal, esto debido a que los necesita para funcionar correctamente.
Otro ejemplo mucho mas claro podemos verlo con Opera Browser, el cual tiene incorporado su propio administrador de procesos:
Si te das cuenta aunque el proceso o programa central esta funcionando (Navegador) este a su vez tiene varias ventanas y extensiones funcionando y que funjen su tarea como hilos trabajando a la par del proceso central.
Estructura del sistema operativo: Las mismas ventajas de estructuración son aplicables a los programadores de sistemas y se ha comprobado que algunos sistemas operativos están implementados como un conjunto de procesos. En otras palabras lo mismo que acabamos de explicar con los navegadores se puede aplicar aqui, un Sistema Operativo es basicamente un conjunto de programas que se ejecutan concurrentemente para ofrecerte la mejor experiencia de trabajo. Si ponemos un ejemplo practico podriamos mencionar todos los servicios de windows, desde el servicio de cola de impresion hasta el servicio de actualización de windows update, cada uno de estos son procesos que se ejecutan en segundo plano, si cerramos por error (o por andar jugando) podemos causar un mal funcionamiento de windows o inclusive dañarlo.
Ahora hace momentos comente la forma de ejecutarse los procesos al mismo tiempo es relativo de acuerdo a la arquitectura del equipo, ahora si toca explicar esto, para empezar debemos saber que existen tres modelos de computadora en los que se pueden ejecutar procesos concurrentes:
Multiprogramación con un único procesador. El sistema operativo se encarga de ir repartiendo el tiempo del procesador entre los distintos procesos, intercalando la ejecución de los mismos para dar así una apariencia de ejecución simultánea.
En este caso se cumple la explicación que mencionaba al principio de la entrada, y si consultamos nuestra entrada pasada (Administración de procesos y del procesador) sabremos que cada proceso tiene un tiempo determinado para ejecutarse dentro del procesador, una vez este termina pasa a ceder su lugar a otro proceso y espera nuevamente su turno, al hacer esto varias veces por sugundo (inclusive millones) hace la ilusión de que todo sucede al mismo tiempo.
Multiprocesador. Es una maquina formada por un conjunto de procesadores que comparten memoria principal. En este tipo de arquitecturas, los procesos concurrentes no sólo pueden intercalar su ejecución sino también superponerla.
Ahora en este lo que sucede es que si el anterior la ejecución de varias tareas a la vez al mismo tiempo era una mera ilusión aqui no lo es tanto, puesto que como el computador trabaja con 2 o mas procesadores, este puede asignar una tarea o proceso por cada CPU reconocido, provocando que sea posible la ejecución real de varias tareas.
Multicomputadora. Es una maquina de memoria distribuida, que está formada por una serie de computadoras. En este tipo de arquitecturas también es posible la ejecución simultánea de los procesos sobre los diferentes procesadores
En este basicamente se basa en un ordenador que utiliza los recursos de otros ordenadores, permitiendo ejecutar varias tareas al instante y al momento.
Tipos de Procesos Concurrentes:
Los procesos que ejecutan de forma concurrente en un sistema se pueden clasificar como:
Proceso independiente: Es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos. Un claro ejemplo de procesos independientes son los diferentes shells que se ejecutan de forma simultánea en un sistema. En español es todo aquel proceso que trabaja por si solo y que no requiere de ayuda de otro para funcionar adecuadamente.
Procesos son cooperantes: Son aquellos que están diseñados para trabajar conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos.
En ambos tipos de procesos (independientes y cooperantes), puede producirse una serie de interacciones entre ellos y pueden ser de dos tipos:
Sincronización:
Otro punto interesante a tratar es la sincronización, pero que es esta:
Bueno segun rae.es podemos definir sincronización al hecho de hacer que coincidan en el tiempo dos o más movimientos o fenómenos. Esto es basicamente provocar que 2 o mas procesos trabajen secuencialmente de una forma tal que ninguno interfiera con otro y puedan de esa manera sacar un trabajo adelante. Es decir es cuando se necesita que se realizen 2 o mas tareas en un orden especifico para que no interfieran una con la otra y altere su funcionamiento.
Si no entendiste te lo prondre simple, la sincronización es el hecho de realizar un conjunto de tareas de manera consecutiva, secuencial y coordinadamente.
Si aún no entiendes te pondre un ejemplo sencillo y de manera grafica (si eres fan de dragón ball agradeceras la referencia), esto es presisamente lo que pasa cuando haces una fusión pero no estan sincronizados tus movimientos con los de tu compañero, la fusion falla y sale esto:
La sincronización entre procesos es necesaria para prevenir y/o corregir errores de sincronización debidos al acceso concurrente a recursos compartidos.
La sincronización permite intercambiar señales de tiempo (ARRANQUE/PARADA) entre procesos cooperantes para garantizar las relaciones específicas de precedencia impuestas por el problema que se resuelve. Sin una sincronización adecuada entre procesos, la actualización de variables compartidas puede inducir a errores de tiempo relacionados con la concurrencia que son con frecuencia difíciles de depurar.
El ejemplo tipico que manejan los profesores de programación hasta el cansancio para explicar este termino es el ejemplo de los cajeros bancarios.
Imagina que tienes 50 pesos en la cuenta bancaria que quieras y tienes acceso tu como titular y tu esposa. Ambos estan en 2 partes diferentes de la ciudad y deciden sacar dinero del cajero al mismo tiempo. (Existe un acceso concurrente a los recursos bancarios)
¿Que deberia suceder?
Pues basicamente el cajero que mas rapido se conecte a la red del banco accedera a tu cuenta y deberia mandar una señal al otro cajero para que espere a que este termine de hacer las transacciones, pues de lo contrario podrian provocar cuentas erroneas en los balances de cuentas (si no existiese esta sincronización de conectarse a la cuenta y bloquear todos los accesos para los otros cajeros, ambos podrian retirar los 50 pesos de la cuenta, pero como ambos lo hicieron al mismo tiempo engañarian al sistema y te daria 50 pesos a ti y 50 pesos a tu esposa, entonces se sobregiraria tu cuenta.).
Para que los procesos puedan sincronizarse es necesario disponer de servicios que permitan bloquear o suspender bajo determinadas circunstancias la ejecución de un proceso. Los principales mecanismos de sincronización que ofrecen los sistemas operativos son:
Fuentes:
http://administraciondeprocesos2.blogspot.com/2011/09/24-concurrencia-secuenciabilidad.html
https://sites.google.com/site/materiasisoperativo/unidad-2-administrador-del-proceso-y-del-procesador/2-4-concurrencia-y-secuenciabilidad
http://administraciondeprocesos-barrueta.blogspot.com/2008/10/24-concurrencia-y-secuenciabilidad.html
http://dle.rae.es/srv/search?m=30&w=sincronizar
http://sisinfo.itc.mx/ITC-APIRGG/Materias/Mat1/SistOp-I_Unid3.php
Concurrencia:
En fin empezemos definiendo concurrencia:
Concurrencia: es una propiedad de los sistemas en la cual los procesos de un cómputo se hacen simultáneamente, y pueden interactuar entre ellos, es decir son procesados al mismo tiempo, de manera que, para ejecutar uno de ellos, no hace falta que se haya ejecutado otro.
En otras palabras la concurrencia es simplemente la ejecución de varias tareas al mismo tiempo. Ahora esto de ejecutarse "al mismo tiempo" es relativo de acuerdo a la arquitectura del ordenador, -¿espera que? de seguro preguntaras- esto es debido a que de acuerdo a la arquitectura basica, el ordenador solo puede ejecutar un programa o tarea a la vez, y no mas, si nosotros persivimos la ilusion de que varios programas se ejecutan al mismo tiempo (Multiprogramación) es debido a que el sistema operativo intercala las tareas que se ejecutan en el procesador a una velocidad sumamente rapida.
Pongamos un ejemplo: digamos que estoy reproduciendo una canción al mismo tiempo que estoy escribiendo esta entrada, y a su vez estoy tengo un video abierto en youtube. Lo que en realidad sucede es que mi computadora hace esto:
- Reproduce la canción durante 1 nanosegundo y se detiene
- Escribe una letra durante 1 nanosegundo y se detiene
- Reproduce una parte del video durante 1 nanosegundo y se detiene
- Repite estas instrucciones otra vez miles de veces por segundo.
Al poner todo junto y al hacerlo a una velocidad ultra rapida (1 nanosegundo) nos da la ilusión de que todo sucede al mismo instante, pero no es asi. En fin olvidemosnos de esto por un instante, pero conservemoslo para los ejemplos siguientes.
En fin, quedemosnos en decir que los procesos son concurrentes si existen simultáneamente. Los procesos concurrentes pueden funcionar en forma totalmente independiente unos de otros, o pueden ser asíncronos, lo cual significa que en ocasiones requieren cierta sincronización o cooperación.
La concurrencia puede presentarse en tres contextos diferentes:
Varias aplicaciones: para este caso se invento la multiprogramación, esto para permitir que el tiempo de procesador de la máquina fuese compartido dinámicamente entre varios trabajos o aplicaciones activas (lo que acabamos de explicar arriba). Es decir, dentro de nuestro computador podemos tener abiertas varias aplicaciones, cada aplicación es un hilo diferente, es decir una tarea que se ejecuta independientemente de otra, por decirlo de algun modo, no necesito tener abierto Word para poder escuchar musica ¿O si?, cada programa en este caso es independiente del otro.
Aplicaciones estructuradas: Como ampliación de los principios del diseño modular y la programación estructurada, algunas aplicaciones pueden implementarse eficazmente como un conjunto de procesos concurrentes. En español esto quiere decir, que existen programas que por lo regular para funcionar requieren ejecutar varias tareas a la vez o tener varios hilos de ejecución. Si no me explico abre tu administrador de tareas (estoy seguro que usas google Chrome) y despliega los procesos del navegador:
Te das cuenta de que el solo navegador tiene incluidos varios subprocesos, estos en si es lo que estoy tratando de explicar, cada uno de estos son un proceso, una tarea, un hilo que esta funcionando al mismo instante, si cerramos o forzamos el termino de uno de ellos probablemente provocaremos que el navegador de Google Chrome se cierre o empieze a funcionar mal, esto debido a que los necesita para funcionar correctamente.
Otro ejemplo mucho mas claro podemos verlo con Opera Browser, el cual tiene incorporado su propio administrador de procesos:
Si te das cuenta aunque el proceso o programa central esta funcionando (Navegador) este a su vez tiene varias ventanas y extensiones funcionando y que funjen su tarea como hilos trabajando a la par del proceso central.
Estructura del sistema operativo: Las mismas ventajas de estructuración son aplicables a los programadores de sistemas y se ha comprobado que algunos sistemas operativos están implementados como un conjunto de procesos. En otras palabras lo mismo que acabamos de explicar con los navegadores se puede aplicar aqui, un Sistema Operativo es basicamente un conjunto de programas que se ejecutan concurrentemente para ofrecerte la mejor experiencia de trabajo. Si ponemos un ejemplo practico podriamos mencionar todos los servicios de windows, desde el servicio de cola de impresion hasta el servicio de actualización de windows update, cada uno de estos son procesos que se ejecutan en segundo plano, si cerramos por error (o por andar jugando) podemos causar un mal funcionamiento de windows o inclusive dañarlo.
Todo proceso de windows en su mayoria se ejecuta concurrentemente. |
Ahora hace momentos comente la forma de ejecutarse los procesos al mismo tiempo es relativo de acuerdo a la arquitectura del equipo, ahora si toca explicar esto, para empezar debemos saber que existen tres modelos de computadora en los que se pueden ejecutar procesos concurrentes:
Multiprogramación con un único procesador. El sistema operativo se encarga de ir repartiendo el tiempo del procesador entre los distintos procesos, intercalando la ejecución de los mismos para dar así una apariencia de ejecución simultánea.
En este caso se cumple la explicación que mencionaba al principio de la entrada, y si consultamos nuestra entrada pasada (Administración de procesos y del procesador) sabremos que cada proceso tiene un tiempo determinado para ejecutarse dentro del procesador, una vez este termina pasa a ceder su lugar a otro proceso y espera nuevamente su turno, al hacer esto varias veces por sugundo (inclusive millones) hace la ilusión de que todo sucede al mismo tiempo.
Multiprocesador. Es una maquina formada por un conjunto de procesadores que comparten memoria principal. En este tipo de arquitecturas, los procesos concurrentes no sólo pueden intercalar su ejecución sino también superponerla.
Ahora en este lo que sucede es que si el anterior la ejecución de varias tareas a la vez al mismo tiempo era una mera ilusión aqui no lo es tanto, puesto que como el computador trabaja con 2 o mas procesadores, este puede asignar una tarea o proceso por cada CPU reconocido, provocando que sea posible la ejecución real de varias tareas.
Multicomputadora. Es una maquina de memoria distribuida, que está formada por una serie de computadoras. En este tipo de arquitecturas también es posible la ejecución simultánea de los procesos sobre los diferentes procesadores
En este basicamente se basa en un ordenador que utiliza los recursos de otros ordenadores, permitiendo ejecutar varias tareas al instante y al momento.
Tipos de Procesos Concurrentes:
Los procesos que ejecutan de forma concurrente en un sistema se pueden clasificar como:
Proceso independiente: Es aquel que ejecuta sin requerir la ayuda o cooperación de otros procesos. Un claro ejemplo de procesos independientes son los diferentes shells que se ejecutan de forma simultánea en un sistema. En español es todo aquel proceso que trabaja por si solo y que no requiere de ayuda de otro para funcionar adecuadamente.
Procesos son cooperantes: Son aquellos que están diseñados para trabajar conjuntamente en alguna actividad, para lo que deben ser capaces de comunicarse e interactuar entre ellos.
En ambos tipos de procesos (independientes y cooperantes), puede producirse una serie de interacciones entre ellos y pueden ser de dos tipos:
- Interacciones motivadas porque los procesos comparten o compiten por el acceso a recursos físicos o lógicos. Por ejemplo, dos procesos independientes compiten por el acceso a disco o para modificar una base de datos.
- Interacción motivada porque los procesos se comunican y sincronizan entre sí para alcanzar un objetivo común, Por ejemplo, un compilador que tiene varios procesos que trabajan conjuntamente para obtener un solo archivo de salida.
Sincronización:
Otro punto interesante a tratar es la sincronización, pero que es esta:
Bueno segun rae.es podemos definir sincronización al hecho de hacer que coincidan en el tiempo dos o más movimientos o fenómenos. Esto es basicamente provocar que 2 o mas procesos trabajen secuencialmente de una forma tal que ninguno interfiera con otro y puedan de esa manera sacar un trabajo adelante. Es decir es cuando se necesita que se realizen 2 o mas tareas en un orden especifico para que no interfieran una con la otra y altere su funcionamiento.
Si no entendiste te lo prondre simple, la sincronización es el hecho de realizar un conjunto de tareas de manera consecutiva, secuencial y coordinadamente.
Si aún no entiendes te pondre un ejemplo sencillo y de manera grafica (si eres fan de dragón ball agradeceras la referencia), esto es presisamente lo que pasa cuando haces una fusión pero no estan sincronizados tus movimientos con los de tu compañero, la fusion falla y sale esto:
La sincronización entre procesos es necesaria para prevenir y/o corregir errores de sincronización debidos al acceso concurrente a recursos compartidos.
La sincronización permite intercambiar señales de tiempo (ARRANQUE/PARADA) entre procesos cooperantes para garantizar las relaciones específicas de precedencia impuestas por el problema que se resuelve. Sin una sincronización adecuada entre procesos, la actualización de variables compartidas puede inducir a errores de tiempo relacionados con la concurrencia que son con frecuencia difíciles de depurar.
El ejemplo tipico que manejan los profesores de programación hasta el cansancio para explicar este termino es el ejemplo de los cajeros bancarios.
Imagina que tienes 50 pesos en la cuenta bancaria que quieras y tienes acceso tu como titular y tu esposa. Ambos estan en 2 partes diferentes de la ciudad y deciden sacar dinero del cajero al mismo tiempo. (Existe un acceso concurrente a los recursos bancarios)
¿Que deberia suceder?
Pues basicamente el cajero que mas rapido se conecte a la red del banco accedera a tu cuenta y deberia mandar una señal al otro cajero para que espere a que este termine de hacer las transacciones, pues de lo contrario podrian provocar cuentas erroneas en los balances de cuentas (si no existiese esta sincronización de conectarse a la cuenta y bloquear todos los accesos para los otros cajeros, ambos podrian retirar los 50 pesos de la cuenta, pero como ambos lo hicieron al mismo tiempo engañarian al sistema y te daria 50 pesos a ti y 50 pesos a tu esposa, entonces se sobregiraria tu cuenta.).
Para que los procesos puedan sincronizarse es necesario disponer de servicios que permitan bloquear o suspender bajo determinadas circunstancias la ejecución de un proceso. Los principales mecanismos de sincronización que ofrecen los sistemas operativos son:
- Señales
- Tuberías
- Semáforos
- Mutex y variables condicionales
- Paso de mensajes
Fuentes:
http://administraciondeprocesos2.blogspot.com/2011/09/24-concurrencia-secuenciabilidad.html
https://sites.google.com/site/materiasisoperativo/unidad-2-administrador-del-proceso-y-del-procesador/2-4-concurrencia-y-secuenciabilidad
http://administraciondeprocesos-barrueta.blogspot.com/2008/10/24-concurrencia-y-secuenciabilidad.html
http://dle.rae.es/srv/search?m=30&w=sincronizar
http://sisinfo.itc.mx/ITC-APIRGG/Materias/Mat1/SistOp-I_Unid3.php
Me ayudo demasiado este artículo
ResponderEliminarGracias al Dr. Oniha que me curó de la hepatitis B con su medicación a base de hierbas, también puede contactarlo a su número de teléfono celular al +2347089275769 o enviarle un correo electrónico a dronihaspell@yahoo.com
EliminarDating for everyone is here: ❤❤❤ Link 1 ❤❤❤
EliminarDirect sexchat: ❤❤❤ Link 2 ❤❤❤
kr ..
Muy bueno!!!!!
ResponderEliminarbuenisimo
ResponderEliminarTanto la información como el autor que la presenta son increíbles, gracias.
ResponderEliminarPero y la Secuencialidad xd?
ResponderEliminarDating for everyone is here: ❤❤❤ Link 1 ❤❤❤
ResponderEliminarDirect sexchat: ❤❤❤ Link 2 ❤❤❤
PA