SBS2 - Semforos binarios divididos a Alberto...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
Sem´aforos binarios divididos Alberto Andreotti(Beto) Agosto del 2008 1 Introducci´on Vamos a considerar un programa compuesto de dos clases de procesos ıclicos, llamados ”readers” y ”writers” respectivamente. Llamando ncs a la secci´on no cr´ ıtica, el programa tiene el siguiente aspecto, reader: do(true) ncs; READ od writer: do(true) ncs; READ od Aqu´ ı READ y WRITE denotan las respectivas secciones cr´ ıticas, cr´ ıticas en el sentido de que cuando un writer est´a en su secci´on cr´ ıtica, este debe ser el ´unico processo en su secci´on cr´ ıtica. Este requerimiento se expresa formalmente de la siguiente manera: P 1 : aw = 0 ( aw = 1 ar = 0) Donde las variables aw y ar significan ”active writers” y ”active read- ers” respectivamente. El programa que consideramos es el siguiente, estado inicial: ar=0, aw=0, mutex=1 reader: do(true) ncs; P(mutex); ar := ar + 1;V(mutex); READ; P(mutex); ar := ar - 1;V(mutex) od writer: do(true) ncs; P(mutex); aw := aw + 1;V(mutex); 1
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
P(mutex); aw := aw - 1;V(mutex) od Para que se cumpla el invariante P1 transformamos los incrementos y decrementos sobre aw y ar en sentencias condicionales. Calculamos la wlp necesaria en cada comando para que el comando mantenga el invariante y ponemos la condicin como guarda de la sentencia condi- cional. Las derivaciones correspondientes llevan a los siguientes resul- tados: if ( aw = 0) ar := ar + 1 fi if( aw = ar = 0) aw := aw + 1 fi if( true ) ar := ar - 1 fi if( true ) aw := aw - 1 fi Insertando estas guardas el multiprograma queda de la siguiente man- era, estado inicial: ar = 0 ,aw = 0 ,mutex = 1 reader: do(true) ncs; *P(mutex); if ( aw = 0) ar := ar + 1 fi; V(mutex); READ; P(mutex); ar := ar - 1;V(mutex) od writer: do(true) ncs; **P(mutex); if ( aw = 0 ar = 0) aw := aw + 1 fi;V(mutex); WRITE; P(mutex); aw := aw - 1;V(mutex) od Este multiprograma que fue derivado para cumplir P1 tiene, sin em- bargo, un problema serio. Las sentencias condicionales pueden llevar a deadlock . Este se introduce cuando despues de una operaci´on P(), la guarda de la sentencia condicional no se cumple(espec´ ıficamente en las l´ ıneas marcadas con * y **). Por lo tanto la componente no lib- era el sem´aforo y las otras componentes no pueden hacer verdadera la guarda. 2
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

Page1 / 8

SBS2 - Semforos binarios divididos a Alberto...

This preview shows document pages 1 - 3. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online