SlideShare una empresa de Scribd logo
1 de 7
Descargar para leer sin conexión
Sistemas Operativos
Ing. Lorena Conde.
ÁREA DE ENERGÍA, INDUSTRIAS Y RECURSOS NATURALES NO RENOVABLES
CARRERA DE INGENIERÍA EN SISTEMAS
Trabajo de:
VII Módulo “A”
Pertenece a:
Docente: Ing. Lorena Conde.
LOJA-ECUADOR
2014
Sistemas Operativos
Ing. Lorena Conde.
UNIVERSIDAD NACIONAL DE LOJA
AREA DE LA ENERGÍA LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES
CARRERA DE INGENIERÍA EN SISTEMAS
Nombres: Cristhian Eduardo Rosales Romero.
Paralelo: 7TO Sistemas “A”
Fecha: 11 de noviembre del 2014
Docente: Ing. Lorena Conde.
1. Tema:
SINCRONIZACIÓN DE PROCESOS
2. Descripción:
En los sistemas multiprogramados se define el proceso como entidad representante de la
ejecución de un programa en un determinado contexto. Aunque hoy en día se ha
generalizado este concepto para permitir flujos de ejecución concurrente dentro de un
mismo programa (threads), en lo que respecta al sistema operativo, la problemática es
esencialmente la misma: proporcionar una representación adecuada de los flujos y su
contexto, un mecanismo de cambio de contexto, medios de comunicación entre los procesos
y mecanismos eficientes para soportarlos, y políticas que eviten interbloqueos e inanición.
Estas materias son el objeto de este capítulo. Se requieren también políticas que permitan la
planificación del uso eficiente del procesador o los procesadores.
En general, un proceso es un flujo de ejecución, representado básicamente por un contador
de programa, y su contexto de ejecución, que puede ser más o menos amplio. Así, un proceso
UNIX incluye en su contexto el estado de la pila, el estado de la memoria y el estado de la
E/S, mientras que un thread1 típico tiene como contexto propio poco más que la pila.
Sistemas Operativos
Ing. Lorena Conde.
SINCRONIZACIÓN ENTRE PROCESOS
Un sistema operativo multiprogramado es un caso particular de sistema concurrente donde
los procesos compiten por el acceso a los recursos compartidos o cooperan dentro de una
misma aplicación para comunicar información. Ambas situaciones son tratadas por el
sistema operativo mediante mecanismos de sincronización que permiten el acceso
exclusivo de forma coordinada a los recursos y a los elementos de comunicación
compartidos.
El concepto de comunicación es algo más general y supone la existencia de algún
mecanismo de sincronización subyacente. Dentro del sistema operativo, el espacio de
direcciones es único, por lo que la comunicación se puede resolver mediante el uso de
variables en memoria compartida. Como contrapartida a la agilidad de este esquema, es
necesario utilizar mecanismos de sincronización explícitos para garantizar acceso
exclusivo a las variables compartidas y evitar condiciones de carrera. Puede producirse una
condición de carrera sobre una variable cuando varios procesos acceden concurrentemente
a la variable para actualizarla.
SECCIONES CRÍTICAS
Modelo de sección crítica
El modelo de sección crítica que vamos a utilizar sigue el siguiente protocolo genérico:
Entrar_SC(esta_SC) /* Solicitud de ejecutar esta_SC */
/* código de esta_SC */
Dejar_SC(esta_SC) /* Otro proceso puede ejecutar esta_SC */
Es decir, cuando un proceso quiere entrar a la sección crítica:
(1) ejecuta Entrar_SC(), y si la sección crítica está ocupada el proceso espera;
(2) ejecuta la sección crítica;
(3) ejecuta Dejar_SC(), permitiendo que entre uno de los procesos en espera.
Sistemas Operativos
Ing. Lorena Conde.
La decisión de qué proceso es el seleccionado para entrar en el paso (3) puede tener
consecuencias importantes, como se comentará más adelante. En general, puede asumirse
disciplina FIFO.
Un aspecto fundamental es cómo se realiza la espera en Entrar_SC(), lo que determina el
tipo de mecanismo de sincronización que se debe utilizar. Esto dependerá del tiempo que
el proceso deba esperar para entrar a la sección crítica.
Propiedades del acceso exclusivo a secciones críticas
Como criterios de validez de un mecanismo de sincronización nos referiremos al
cumplimiento de las siguientes condiciones para el acceso exclusivo a una sección crítica
SC:
(1) Exclusión mutua. No puede haber más de un proceso simultáneamente en la SC.
(2) No interbloqueo. Ningún proceso fuera de la SC puede impedir que otro entre a la SC.
(3) No inanición. Un proceso no puede esperar por tiempo indefinido para entrar a la SC.
(4) Independencia del hardware. No se pueden hacer suposiciones acerca del número de
procesadores o de la velocidad relativa de los procesos.
Además, existen otros criterios que determinan la calidad del mecanismo y que
fundamentalmente se refieren a su rendimiento, como son la productividad y el tratamiento
equitativo entre los procesos.
ESPERA POR OCUPADO
La espera por ocupado engloba una serie de mecanismos de sincronización que
proporcionan acceso a secciones críticas de corto plazo. El más sencillo y más utilizado en
los sistemas operativos clásicos es la inhibición de interrupciones. En multiprocesadores es
necesario utilizar cerrojos de espera activa.
Inhibición de interrupciones
Las secciones críticas protegidas por interrupciones se especifican de la siguiente forma:
s= inhibir() /* Entrar_SC(): se inhiben las interrupciones */
/* Sección crítica */
desinhibir(s) /* Dejar_SC(): restaura estado de interrupción previo */
Sistemas Operativos
Ing. Lorena Conde.
Este mecanismo lleva asociadas importantes restricciones. No cumple la condición de
independencia del hardware, ya que en un multiprocesador sólo se inhiben las
interrupciones en el procesador que ejecuta la inhibición, restringiéndose por tanto a las
implementaciones monoprocesador. Por otra parte, en monoprocesadores, un proceso que
utilizase la inhibición de interrupciones como forma de acceso exclusivo a secciones
críticas de duración arbitrariamente larga impediría a los demás procesos ejecutar código
alguno, aún ajeno a la sección crítica.
ESPERA POR BLOQUEADO
La espera por bloqueado se utiliza para implementar exclusión mutua de largo plazo y se
proporciona, en su forma más simple, mediante primitivas que producen un cambio de
estado en el sistema operativo, dormir o sleep para bloquear al proceso que la ejecuta, y
despertar o wake-up para desbloquear a un conjunto de procesos. Estas primitivas permiten
manejar eventos que sirven para gestionar el acceso a recursos compartidos.
Primitivas de dormir y despertar
Un evento se implementa mediante una variable booleana o flag y la cola asociada de
procesos bloqueados en él. Los procesos que ejecutan dormir sobre un flag activado pasan
a estado bloqueado, provocando un cambio de contexto. Cuando otro proceso o el propio
sistema operativo ejecutan despertar sobre ese flag, desbloquea a todos los procesos
dormidos en ese flag. Con dormir y despertar pueden construirse primitivas de exclusión
mutua de largo plazo, lock_lp y unlock_lp. Una implementación de lock_lp y unlock_lp es
la siguiente:
lock_lp (tipo_flag flag) { s= inhibir(); while (flag) dormir(flag); flag= 1;
desinhibir(s); }
unlock_lp (tipo_flag flag) { s= inhibir(); flag= 0; despertar(flag);
desinhibir(s); }
El código es de acceso exclusivo y, como se observa, se protege con una sección crítica de
corto plazo mediante inhibición de interrupciones. Pero un proceso no puede quedarse
dormido dentro de la sección crítica de corto plazo en lock_lp, ya que no permitiría la
Sistemas Operativos
Ing. Lorena Conde.
ejecución de despertar por otro proceso. Sin embargo, hay que tener en cuenta que dormir()
se encarga del cambio de contexto, lo que incluye, salvar y restaurar el estado de las
interrupciones. Tras la ejecución de despertar(), se restaurará el estado del proceso
planificado. En otras palabras, los procesos en estado bloqueado se consideran fuera de la
sección crítica.
Semáforos: Una abstracción más general es el semáforo, que permite, sobre la base de las
primitivas de dormir y despertar, almacenar los eventos ya producidos y despertar un único
proceso bloqueado cuando se produce un evento pendiente.
Un semáforo lleva asociada una cola de procesos bloqueados en él y una cuenta de señales
de despertar recibidas, lo que permite su utilización general para gestionar recursos
PASO DE MENSAJES
Cuando se trata de intercambiar información entre distintos espacios de direcciones (como
ocurre en los sistemas operativos basados en un micronúcleo) no es posible la utilización
de variables en memoria. Una solución general es utilizar un modelo de paso de mensajes
sobre algún tipo de objeto del sistema compartido por los procesos, sobre el que se copia la
información a intercambiar. Los mensajes se encolan (envían) y desencolan (reciben) de los
buzones siguiendo una disciplina FIFO.
Definiremos dos primitivas básicas y genéricas de comunicación, que permiten
enviar/recibir un mensaje a/en un puerto p:
enviar (p, mensaje) —también: send, escribir_mensaje, …
recibir (p, mensaje) —también: receive, leer_mensaje, …
El acceso a los mensajes del puerto se hace con disciplina FIFO. El puerto puede ser privado
de un proceso, y entonces sólo ese proceso puede recibir en ese puerto, o bien compartido
entre varios procesos que pueden recibir mensajes en él. En este último caso se requiere un
elemento compartido entre los procesos.
En general, los puertos presentan una característica, la capacidad del buzón (número de
mensajes que pueden almacenar), que determina la forma en que se sincronizan los
procesos que se comunican. Los buzones pueden tener:
Sistemas Operativos
Ing. Lorena Conde.
 Capacidad ilimitada. Es un buzón ideal que no se llena nunca.
 Capacidad limitada. El proceso que envía puede encontrar el buzón lleno.
 Capacidad nula. Como no se puede almacenar ningún mensaje, los dos procesos
deben sincronizarse para cada comunicación: el primero que llega al punto de la
comunicación debe esperar al segundo. Este modelo también se conoce como
rendezvous. La ventaja es que, al no almacenarse el mensaje, no hay que copiarlo en
un buffer intermedio.
En lo que sigue, consideraremos las primitivas de paso de mensajes con semántica
bloqueante, lo que afecta especialmente a recibir, que bloquea al proceso cuando el buzón
está vacío. En el caso de enviar, se bloquea al proceso cuando el puerto haya alcanzado su
límite de capacidad. La alternativa es la semántica no bloqueante. En este caso, las primitivas
devuelven inmediatamente un código de estado indicando si se ha recibido/enviado un
mensaje.
3. Bibliografía
[1]Control de procesos y sincronización [En línea]
http://www.sc.ehu.es/acwlaroa/SO2/Apuntes/Cap2.pdf [Consulta: 10/11/2014]
[2]Sincronización de procesos [En línea]
http://www1.frm.utn.edu.ar/soperativos/Archivos/sincro.pdf [Consulta: 10/11/2014]
[2] Administrador de Procesos y del Procesador [En línea]
http://sistemasoperativos.angelfire.com/html/2.4.2.html [Consulta: 10/11/2014]

Más contenido relacionado

La actualidad más candente

Unidad 2 sist. oper. 1
Unidad 2 sist. oper. 1Unidad 2 sist. oper. 1
Unidad 2 sist. oper. 1honeyjimenez
 
Diapositivas sincronización
Diapositivas sincronizaciónDiapositivas sincronización
Diapositivas sincronizaciónCR9diego
 
Comunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de ProcesosComunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de ProcesosLorena Ramos
 
Coordinacion Y Sincronizacion De Procesos
Coordinacion  Y  Sincronizacion  De  ProcesosCoordinacion  Y  Sincronizacion  De  Procesos
Coordinacion Y Sincronizacion De ProcesosJessica Suarez
 
Sincronizacion de Procesos
Sincronizacion de ProcesosSincronizacion de Procesos
Sincronizacion de Procesosmastermind87
 
S Incronizacion De Procesos
S Incronizacion De ProcesosS Incronizacion De Procesos
S Incronizacion De ProcesosAcristyM
 
Unidad 2 AdministracióN De Procesos
Unidad 2 AdministracióN De ProcesosUnidad 2 AdministracióN De Procesos
Unidad 2 AdministracióN De ProcesosGUADALUPE
 
GESTION DE PROCESOS Sistemas Operativos
GESTION DE PROCESOS Sistemas OperativosGESTION DE PROCESOS Sistemas Operativos
GESTION DE PROCESOS Sistemas Operativosadriel91
 
Creacion y terminacion de procesos
Creacion y terminacion de procesosCreacion y terminacion de procesos
Creacion y terminacion de procesosCariEli
 
SICRONIZACION DE PROCESOS
SICRONIZACION DE PROCESOSSICRONIZACION DE PROCESOS
SICRONIZACION DE PROCESOSlorenapardo
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en javaLaboratorios ACME
 
Unidad 2 jacinto
Unidad 2 jacintoUnidad 2 jacinto
Unidad 2 jacintoAreli996
 
Sistemas operativos procesos
Sistemas operativos   procesosSistemas operativos   procesos
Sistemas operativos procesosayreonmx
 
Sincronización entre procesos
Sincronización entre procesosSincronización entre procesos
Sincronización entre procesosIchinose 11
 

La actualidad más candente (20)

Unidad2
Unidad2Unidad2
Unidad2
 
Procesos de los Sistemas Operativos
Procesos de los Sistemas OperativosProcesos de los Sistemas Operativos
Procesos de los Sistemas Operativos
 
Unidad 2 sist. oper. 1
Unidad 2 sist. oper. 1Unidad 2 sist. oper. 1
Unidad 2 sist. oper. 1
 
Diapositivas sincronización
Diapositivas sincronizaciónDiapositivas sincronización
Diapositivas sincronización
 
Comunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de ProcesosComunicación y Sincronizacion de Procesos
Comunicación y Sincronizacion de Procesos
 
Coordinacion Y Sincronizacion De Procesos
Coordinacion  Y  Sincronizacion  De  ProcesosCoordinacion  Y  Sincronizacion  De  Procesos
Coordinacion Y Sincronizacion De Procesos
 
SISTEMAS OPERATIVOS
SISTEMAS OPERATIVOSSISTEMAS OPERATIVOS
SISTEMAS OPERATIVOS
 
Clase 3 ene 8
Clase 3 ene 8Clase 3 ene 8
Clase 3 ene 8
 
Sincronizacion de Procesos
Sincronizacion de ProcesosSincronizacion de Procesos
Sincronizacion de Procesos
 
S Incronizacion De Procesos
S Incronizacion De ProcesosS Incronizacion De Procesos
S Incronizacion De Procesos
 
Unidad 2 AdministracióN De Procesos
Unidad 2 AdministracióN De ProcesosUnidad 2 AdministracióN De Procesos
Unidad 2 AdministracióN De Procesos
 
GESTION DE PROCESOS Sistemas Operativos
GESTION DE PROCESOS Sistemas OperativosGESTION DE PROCESOS Sistemas Operativos
GESTION DE PROCESOS Sistemas Operativos
 
Creacion y terminacion de procesos
Creacion y terminacion de procesosCreacion y terminacion de procesos
Creacion y terminacion de procesos
 
SICRONIZACION DE PROCESOS
SICRONIZACION DE PROCESOSSICRONIZACION DE PROCESOS
SICRONIZACION DE PROCESOS
 
Programación multihebra en java
Programación multihebra en javaProgramación multihebra en java
Programación multihebra en java
 
Unidad 2 jacinto
Unidad 2 jacintoUnidad 2 jacinto
Unidad 2 jacinto
 
Proceso
ProcesoProceso
Proceso
 
Sistemas operativos procesos
Sistemas operativos   procesosSistemas operativos   procesos
Sistemas operativos procesos
 
Tipos de procesos
Tipos de procesosTipos de procesos
Tipos de procesos
 
Sincronización entre procesos
Sincronización entre procesosSincronización entre procesos
Sincronización entre procesos
 

Similar a Sincronización de Procesos

Similar a Sincronización de Procesos (20)

Descripcion y control de procesos
Descripcion y control de procesosDescripcion y control de procesos
Descripcion y control de procesos
 
104842258 unidad-2-administracion-de-procesos-del-procesador
104842258 unidad-2-administracion-de-procesos-del-procesador104842258 unidad-2-administracion-de-procesos-del-procesador
104842258 unidad-2-administracion-de-procesos-del-procesador
 
UNIDAD II ADMINISTRADOR DE PROCESADOR
UNIDAD II ADMINISTRADOR DE PROCESADORUNIDAD II ADMINISTRADOR DE PROCESADOR
UNIDAD II ADMINISTRADOR DE PROCESADOR
 
Tarea3 fernando lopez
Tarea3   fernando lopezTarea3   fernando lopez
Tarea3 fernando lopez
 
Tarea3 fernando lopez
Tarea3   fernando lopezTarea3   fernando lopez
Tarea3 fernando lopez
 
S..O. Unidad 2
S..O. Unidad 2S..O. Unidad 2
S..O. Unidad 2
 
Portafolio 2
Portafolio 2Portafolio 2
Portafolio 2
 
Procesos_so
Procesos_soProcesos_so
Procesos_so
 
Unidad 2 AdministracióN De Procesos
Unidad 2 AdministracióN De ProcesosUnidad 2 AdministracióN De Procesos
Unidad 2 AdministracióN De Procesos
 
Vega_NoAnimation.pptx
Vega_NoAnimation.pptxVega_NoAnimation.pptx
Vega_NoAnimation.pptx
 
Presentación1
Presentación1Presentación1
Presentación1
 
Inf 324 01 07 Procesos
Inf 324 01 07  ProcesosInf 324 01 07  Procesos
Inf 324 01 07 Procesos
 
Sistema operativo
Sistema operativoSistema operativo
Sistema operativo
 
Sistema Jerarquico
Sistema JerarquicoSistema Jerarquico
Sistema Jerarquico
 
Funciones de un SO
Funciones de un SOFunciones de un SO
Funciones de un SO
 
2° unidad sistemas operativos
2° unidad sistemas operativos2° unidad sistemas operativos
2° unidad sistemas operativos
 
Comunicación y sicronización entre procesos
Comunicación y sicronización entre procesosComunicación y sicronización entre procesos
Comunicación y sicronización entre procesos
 
Administrador de procesos
Administrador de procesosAdministrador de procesos
Administrador de procesos
 
Sistemas operativos
Sistemas operativosSistemas operativos
Sistemas operativos
 
Las funciones de los sistemas operativos
Las funciones de los sistemas operativosLas funciones de los sistemas operativos
Las funciones de los sistemas operativos
 

Sincronización de Procesos

  • 1. Sistemas Operativos Ing. Lorena Conde. ÁREA DE ENERGÍA, INDUSTRIAS Y RECURSOS NATURALES NO RENOVABLES CARRERA DE INGENIERÍA EN SISTEMAS Trabajo de: VII Módulo “A” Pertenece a: Docente: Ing. Lorena Conde. LOJA-ECUADOR 2014
  • 2. Sistemas Operativos Ing. Lorena Conde. UNIVERSIDAD NACIONAL DE LOJA AREA DE LA ENERGÍA LAS INDUSTRIAS Y LOS RECURSOS NATURALES NO RENOVABLES CARRERA DE INGENIERÍA EN SISTEMAS Nombres: Cristhian Eduardo Rosales Romero. Paralelo: 7TO Sistemas “A” Fecha: 11 de noviembre del 2014 Docente: Ing. Lorena Conde. 1. Tema: SINCRONIZACIÓN DE PROCESOS 2. Descripción: En los sistemas multiprogramados se define el proceso como entidad representante de la ejecución de un programa en un determinado contexto. Aunque hoy en día se ha generalizado este concepto para permitir flujos de ejecución concurrente dentro de un mismo programa (threads), en lo que respecta al sistema operativo, la problemática es esencialmente la misma: proporcionar una representación adecuada de los flujos y su contexto, un mecanismo de cambio de contexto, medios de comunicación entre los procesos y mecanismos eficientes para soportarlos, y políticas que eviten interbloqueos e inanición. Estas materias son el objeto de este capítulo. Se requieren también políticas que permitan la planificación del uso eficiente del procesador o los procesadores. En general, un proceso es un flujo de ejecución, representado básicamente por un contador de programa, y su contexto de ejecución, que puede ser más o menos amplio. Así, un proceso UNIX incluye en su contexto el estado de la pila, el estado de la memoria y el estado de la E/S, mientras que un thread1 típico tiene como contexto propio poco más que la pila.
  • 3. Sistemas Operativos Ing. Lorena Conde. SINCRONIZACIÓN ENTRE PROCESOS Un sistema operativo multiprogramado es un caso particular de sistema concurrente donde los procesos compiten por el acceso a los recursos compartidos o cooperan dentro de una misma aplicación para comunicar información. Ambas situaciones son tratadas por el sistema operativo mediante mecanismos de sincronización que permiten el acceso exclusivo de forma coordinada a los recursos y a los elementos de comunicación compartidos. El concepto de comunicación es algo más general y supone la existencia de algún mecanismo de sincronización subyacente. Dentro del sistema operativo, el espacio de direcciones es único, por lo que la comunicación se puede resolver mediante el uso de variables en memoria compartida. Como contrapartida a la agilidad de este esquema, es necesario utilizar mecanismos de sincronización explícitos para garantizar acceso exclusivo a las variables compartidas y evitar condiciones de carrera. Puede producirse una condición de carrera sobre una variable cuando varios procesos acceden concurrentemente a la variable para actualizarla. SECCIONES CRÍTICAS Modelo de sección crítica El modelo de sección crítica que vamos a utilizar sigue el siguiente protocolo genérico: Entrar_SC(esta_SC) /* Solicitud de ejecutar esta_SC */ /* código de esta_SC */ Dejar_SC(esta_SC) /* Otro proceso puede ejecutar esta_SC */ Es decir, cuando un proceso quiere entrar a la sección crítica: (1) ejecuta Entrar_SC(), y si la sección crítica está ocupada el proceso espera; (2) ejecuta la sección crítica; (3) ejecuta Dejar_SC(), permitiendo que entre uno de los procesos en espera.
  • 4. Sistemas Operativos Ing. Lorena Conde. La decisión de qué proceso es el seleccionado para entrar en el paso (3) puede tener consecuencias importantes, como se comentará más adelante. En general, puede asumirse disciplina FIFO. Un aspecto fundamental es cómo se realiza la espera en Entrar_SC(), lo que determina el tipo de mecanismo de sincronización que se debe utilizar. Esto dependerá del tiempo que el proceso deba esperar para entrar a la sección crítica. Propiedades del acceso exclusivo a secciones críticas Como criterios de validez de un mecanismo de sincronización nos referiremos al cumplimiento de las siguientes condiciones para el acceso exclusivo a una sección crítica SC: (1) Exclusión mutua. No puede haber más de un proceso simultáneamente en la SC. (2) No interbloqueo. Ningún proceso fuera de la SC puede impedir que otro entre a la SC. (3) No inanición. Un proceso no puede esperar por tiempo indefinido para entrar a la SC. (4) Independencia del hardware. No se pueden hacer suposiciones acerca del número de procesadores o de la velocidad relativa de los procesos. Además, existen otros criterios que determinan la calidad del mecanismo y que fundamentalmente se refieren a su rendimiento, como son la productividad y el tratamiento equitativo entre los procesos. ESPERA POR OCUPADO La espera por ocupado engloba una serie de mecanismos de sincronización que proporcionan acceso a secciones críticas de corto plazo. El más sencillo y más utilizado en los sistemas operativos clásicos es la inhibición de interrupciones. En multiprocesadores es necesario utilizar cerrojos de espera activa. Inhibición de interrupciones Las secciones críticas protegidas por interrupciones se especifican de la siguiente forma: s= inhibir() /* Entrar_SC(): se inhiben las interrupciones */ /* Sección crítica */ desinhibir(s) /* Dejar_SC(): restaura estado de interrupción previo */
  • 5. Sistemas Operativos Ing. Lorena Conde. Este mecanismo lleva asociadas importantes restricciones. No cumple la condición de independencia del hardware, ya que en un multiprocesador sólo se inhiben las interrupciones en el procesador que ejecuta la inhibición, restringiéndose por tanto a las implementaciones monoprocesador. Por otra parte, en monoprocesadores, un proceso que utilizase la inhibición de interrupciones como forma de acceso exclusivo a secciones críticas de duración arbitrariamente larga impediría a los demás procesos ejecutar código alguno, aún ajeno a la sección crítica. ESPERA POR BLOQUEADO La espera por bloqueado se utiliza para implementar exclusión mutua de largo plazo y se proporciona, en su forma más simple, mediante primitivas que producen un cambio de estado en el sistema operativo, dormir o sleep para bloquear al proceso que la ejecuta, y despertar o wake-up para desbloquear a un conjunto de procesos. Estas primitivas permiten manejar eventos que sirven para gestionar el acceso a recursos compartidos. Primitivas de dormir y despertar Un evento se implementa mediante una variable booleana o flag y la cola asociada de procesos bloqueados en él. Los procesos que ejecutan dormir sobre un flag activado pasan a estado bloqueado, provocando un cambio de contexto. Cuando otro proceso o el propio sistema operativo ejecutan despertar sobre ese flag, desbloquea a todos los procesos dormidos en ese flag. Con dormir y despertar pueden construirse primitivas de exclusión mutua de largo plazo, lock_lp y unlock_lp. Una implementación de lock_lp y unlock_lp es la siguiente: lock_lp (tipo_flag flag) { s= inhibir(); while (flag) dormir(flag); flag= 1; desinhibir(s); } unlock_lp (tipo_flag flag) { s= inhibir(); flag= 0; despertar(flag); desinhibir(s); } El código es de acceso exclusivo y, como se observa, se protege con una sección crítica de corto plazo mediante inhibición de interrupciones. Pero un proceso no puede quedarse dormido dentro de la sección crítica de corto plazo en lock_lp, ya que no permitiría la
  • 6. Sistemas Operativos Ing. Lorena Conde. ejecución de despertar por otro proceso. Sin embargo, hay que tener en cuenta que dormir() se encarga del cambio de contexto, lo que incluye, salvar y restaurar el estado de las interrupciones. Tras la ejecución de despertar(), se restaurará el estado del proceso planificado. En otras palabras, los procesos en estado bloqueado se consideran fuera de la sección crítica. Semáforos: Una abstracción más general es el semáforo, que permite, sobre la base de las primitivas de dormir y despertar, almacenar los eventos ya producidos y despertar un único proceso bloqueado cuando se produce un evento pendiente. Un semáforo lleva asociada una cola de procesos bloqueados en él y una cuenta de señales de despertar recibidas, lo que permite su utilización general para gestionar recursos PASO DE MENSAJES Cuando se trata de intercambiar información entre distintos espacios de direcciones (como ocurre en los sistemas operativos basados en un micronúcleo) no es posible la utilización de variables en memoria. Una solución general es utilizar un modelo de paso de mensajes sobre algún tipo de objeto del sistema compartido por los procesos, sobre el que se copia la información a intercambiar. Los mensajes se encolan (envían) y desencolan (reciben) de los buzones siguiendo una disciplina FIFO. Definiremos dos primitivas básicas y genéricas de comunicación, que permiten enviar/recibir un mensaje a/en un puerto p: enviar (p, mensaje) —también: send, escribir_mensaje, … recibir (p, mensaje) —también: receive, leer_mensaje, … El acceso a los mensajes del puerto se hace con disciplina FIFO. El puerto puede ser privado de un proceso, y entonces sólo ese proceso puede recibir en ese puerto, o bien compartido entre varios procesos que pueden recibir mensajes en él. En este último caso se requiere un elemento compartido entre los procesos. En general, los puertos presentan una característica, la capacidad del buzón (número de mensajes que pueden almacenar), que determina la forma en que se sincronizan los procesos que se comunican. Los buzones pueden tener:
  • 7. Sistemas Operativos Ing. Lorena Conde.  Capacidad ilimitada. Es un buzón ideal que no se llena nunca.  Capacidad limitada. El proceso que envía puede encontrar el buzón lleno.  Capacidad nula. Como no se puede almacenar ningún mensaje, los dos procesos deben sincronizarse para cada comunicación: el primero que llega al punto de la comunicación debe esperar al segundo. Este modelo también se conoce como rendezvous. La ventaja es que, al no almacenarse el mensaje, no hay que copiarlo en un buffer intermedio. En lo que sigue, consideraremos las primitivas de paso de mensajes con semántica bloqueante, lo que afecta especialmente a recibir, que bloquea al proceso cuando el buzón está vacío. En el caso de enviar, se bloquea al proceso cuando el puerto haya alcanzado su límite de capacidad. La alternativa es la semántica no bloqueante. En este caso, las primitivas devuelven inmediatamente un código de estado indicando si se ha recibido/enviado un mensaje. 3. Bibliografía [1]Control de procesos y sincronización [En línea] http://www.sc.ehu.es/acwlaroa/SO2/Apuntes/Cap2.pdf [Consulta: 10/11/2014] [2]Sincronización de procesos [En línea] http://www1.frm.utn.edu.ar/soperativos/Archivos/sincro.pdf [Consulta: 10/11/2014] [2] Administrador de Procesos y del Procesador [En línea] http://sistemasoperativos.angelfire.com/html/2.4.2.html [Consulta: 10/11/2014]