SBS2 - Semforos binarios divididos a Alberto Andreotti(Beto...

Info icon This 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
Image of page 1

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

View Full Document Right Arrow Icon
READ; 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.
Image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

{[ snackBarMessage ]}

What students are saying

  • Left Quote Icon

    As a current student on this bumpy collegiate pathway, I stumbled upon Course Hero, where I can find study resources for nearly all my courses, get online help from tutors 24/7, and even share my old projects, papers, and lecture notes with other students.

    Student Picture

    Kiran Temple University Fox School of Business ‘17, Course Hero Intern

  • Left Quote Icon

    I cannot even describe how much Course Hero helped me this summer. It’s truly become something I can always rely on and help me. In the end, I was not only able to survive summer classes, but I was able to thrive thanks to Course Hero.

    Student Picture

    Dana University of Pennsylvania ‘17, Course Hero Intern

  • Left Quote Icon

    The ability to access any university’s resources through Course Hero proved invaluable in my case. I was behind on Tulane coursework and actually used UCLA’s materials to help me move forward and get everything together on time.

    Student Picture

    Jill Tulane University ‘16, Course Hero Intern