ejercicios de especificación recursos...

37
Ejercicios de Especicaci´ on Recursos Compartidos Guillermo Rom´ an [email protected] Concurrencia GRADO EN INGENIER´ IA INFORM´ ATICA/GRADO EN MATEM´ ATICAS E INFORM´ ATICA/ DOBLE GRADO EN ING.INFORM´ ATICA Y ADE Universidad Polit´ ecnica de Madrid http://babel.upm.es/teaching/concurrencia Abril 2020 Guillermo Rom´ an (UPM) Especicaci´ on Recursos Abril 2020 1 / 17

Upload: others

Post on 09-Jul-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios de Especificacion Recursos Compartidos

Guillermo Roman

[email protected]

ConcurrenciaGRADO EN INGENIERIA INFORMATICA/ GRADO EN MATEMATICAS E INFORMATICA/

DOBLE GRADO EN ING. INFORMATICA Y ADE

Universidad Politecnica de Madrid

http://babel.upm.es/teaching/concurrencia

Abril 2020

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 1 / 17

Page 2: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejemplo: lectores/escritores

Con acceso explıcito a los elementos del tipo

C-TAD GestorLEOPERACIONESACCION IL, FL, IE, FE:

SEMANTICADOMINIO:TIPO: GestorLE = (l : N× e : N)INICIAL: self.l = 0 ∧ self.e = 0INVARIANTE: (self.l > 0⇒ self.e = 0) ∧ (self.e > 0⇒ self.e = 1 ∧ self.l = 0)CPRE: self.e = 0IL

POST: self.e = selfpre .e ∧ self.l = selfpre .l + 1CPRE: CiertoFL

POST: self = selfpre \ self.l = selfpre .l − 1CPRE: self.e = 0 ∧ self.l = 0IE

POST: self.l = 0 ∧ self.e = 1

CPRE: CiertoFE

POST: self.l = 0 ∧ self.e = 0Guillermo Roman (UPM) Especificacion Recursos Abril 2020 2 / 17

Page 3: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejemplo: lectores/escritores

Usando pattern-matching para acceder al tipoC-TAD GestorLEOPERACIONESACCION IL, FL, IE, FE:

SEMANTICADOMINIO:TIPO: GestorLE = (l : N× e : N)INICIAL: self = (0, 0)INVARIANTE: (self.l > 0⇒ self.e = 0) ∧ (self.e > 0⇒ self.e = 1 ∧ self.l = 0)CPRE: self.e = 0IL

POST: selfpre = (lec , esc) ∧ self = (lec + 1, esc)CPRE: CiertoFL

POST: selfpre = (lec , esc) ∧ self = (lec − 1, esc)CPRE: self.e = 0 ∧ self.l = 0IE

POST: self = (0, 1)

CPRE: CiertoFE

POST: self = (0, 0)Guillermo Roman (UPM) Especificacion Recursos Abril 2020 3 / 17

Page 4: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

Se esta desarrollando una IA para competir en el campeonato del mundo del popular

juego de mesa Los nomadas que cantan. Los desarrolladores han ideado un recursocompartido para representar las materias primas que tiene el jugador, siendo estas

materias primas cereal, agua y madera.

Hay una operacion no bloqueante por cada materia prima para que el jugador coja esa

materia prima: cargarCereal, cargarAgua y cargarMadera. El jugador puede llevar a losumo una unidad de cada materia prima pero no puede llevar cereal y madera a la vez, si

carga una pierde la otra.

Por otro lado, hay dos operaciones que consumen materias primas: avanzar (consumecereal y agua) y reparar (consume agua y madera). Estas operaciones son bloqueanteshasta que se disponga de las materias primas necesarias.

Se pide: especificar el recurso compartido teniendo en cuenta que bastarıa un booleanopor cada materia prima para indicar que el jugador tiene dicha materia (porque la ha

cargado) o no tiene dicha materia (porque acaba de empezar el juego o la ha consumido

avanzando o reparando).

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 4 / 17

Page 5: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas =INICIAL:INVARIANTE:CPRE:cargarCereal

POST:CPRE:cargarAgua

POST:CPRE:cargarMadera

POST:CPRE:avanzar

POST:CPRE:reparar

POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 6: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL:INVARIANTE:CPRE:cargarCereal

POST:CPRE:cargarAgua

POST:CPRE:cargarMadera

POST:CPRE:avanzar

POST:CPRE:reparar

POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 7: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE:cargarCereal

POST:CPRE:cargarAgua

POST:CPRE:cargarMadera

POST:CPRE:avanzar

POST:CPRE:reparar

POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 8: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal

POST:CPRE: CiertocargarAgua

POST:CPRE: CiertocargarMadera

POST:CPRE:avanzar

POST:CPRE:reparar

POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 9: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal

POST:CPRE: CiertocargarAgua

POST:CPRE: CiertocargarMadera

POST:CPRE: self.cereal ∧ self.aguaavanzar

POST:CPRE: self.madera ∧ self.aguareparar

POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 10: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal

POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua

POST:CPRE: CiertocargarMadera

POST:CPRE: self.cereal ∧ self.aguaavanzar

POST:CPRE: self.madera ∧ self.aguareparar

POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 11: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal

POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua

POST: self = (selfpre .cereal ,Cierto, selfpre .madera)CPRE: CiertocargarMadera

POST:CPRE: self.cereal ∧ self.aguaavanzar

POST:CPRE: self.madera ∧ self.aguareparar

POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 12: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE:CPRE: CiertocargarCereal

POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua

POST: self = (selfpre .cereal ,Cierto, selfpre .madera)CPRE: CiertocargarMadera

POST: self = (Falso, selfpre .agua ,Cierto)CPRE: self.cereal ∧ self.aguaavanzar

POST:CPRE: self.madera ∧ self.aguareparar

POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 13: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE: ¬self.cereal ∨ ¬self.maderaCPRE: CiertocargarCereal

POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua

POST: self = (selfpre .cereal ,Cierto, selfpre .madera)CPRE: CiertocargarMadera

POST: self = (Falso, selfpre .agua ,Cierto)CPRE: self.cereal ∧ self.aguaavanzar

POST: self = (Falso,Falso, selfpre .madera)CPRE: self.madera ∧ self.aguareparar

POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 14: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Los nomadas que cantan

C-TADMateriasPrimasOPERACIONESACCION cargarCereal, cargarAgua, cargarMadera, avanzar, reparar:

SEMANTICADOMINIO:TIPO:MateriasPrimas = (cereal : B× agua : B×madera : B)INICIAL: self = (Falso,Falso,Falso)INVARIANTE: ¬self.cereal ∨ ¬self.maderaCPRE: CiertocargarCereal

POST: self = (Cierto, selfpre .agua ,Falso)CPRE: CiertocargarAgua

POST: self = (selfpre .cereal ,Cierto, selfpre .madera)CPRE: CiertocargarMadera

POST: self = (Falso, selfpre .agua ,Cierto)CPRE: self.cereal ∧ self.aguaavanzar

POST: self = (Falso,Falso, selfpre .madera)CPRE: self.madera ∧ self.aguareparar

POST: self = (selfpre .cereal ,Falso,Falso)

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 5 / 17

Page 15: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

Lo que veis a continuacion es la descripcion original de Edsger W. Dijkstra del problema de los

Dining Philosophers:La vida de un filosofo consiste en alternar pensar y comer en una especie de

bucle infinito. N filosofos, numerados del 0 al N−1, viven en una casa con una mesaen la que cada filosofo tiene su sitio asignado:

Su unico problema, al margen de los filosoficos, es que su menu consiste en un tipocomplicado de espagueti que es necesario comer con dos tenedores. Hay un unicotenedor a cada lado de cada plato. Eso no es un problema. Sin embargo, comoconsecuencia, no puede haber dos filosofos comiendo a la vez uno al lado del otro.

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 6 / 17

Page 16: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

Hemos decidido representar el problema en forma de un recurso compartidoMesa con:dos operaciones: mesa .cogerTenedores(i ) ymesa .soltarTenedores(i )Esas seran las operaciones que el filosofo i ejecutara antes y despues de comer:

I de forma que tendra que bloquear enmesa .cogerTenedores(i ) cuando alguno de lostenedores a los lados de su plato esten siendo usados (por el filosofo (i + 1) mod N o por elfilosofo (i − 1) mod N )

La operacionmesa .soltarTenedores(i ) no es bloqueanteNOTA: se sugiere que el dominio del recurso incluya una funcion parcial que hable de los

tenedores libres. Las funciones parciales formalizan las tablas

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 7 / 17

Page 17: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa =TIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:

INICIAL:

CPRE:cogerTenedores(i)POST:

CPRE:soltarTenedores(i)POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17

Page 18: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:

INICIAL:

CPRE:cogerTenedores(i)POST:

CPRE:soltarTenedores(i)POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17

Page 19: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:

INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE:cogerTenedores(i)POST:

CPRE:soltarTenedores(i)POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17

Page 20: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:

INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST:

CPRE:soltarTenedores(i)POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17

Page 21: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:

INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST:

CPRE: CiertosoltarTenedores(i)POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17

Page 22: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:

INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Cierto, i +N 1 7→ Cierto}

CPRE: CiertosoltarTenedores(i)POST:

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17

Page 23: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE:

INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Cierto, i +N 1 7→ Cierto}

CPRE: CiertosoltarTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Falso, i +N 1 7→ Falso}

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17

Page 24: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = tenedores : TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE: | {i ∈ TipoFilosofo • self .tenedores(i )} | mod2 = 0INICIAL: ∀ i ∈ TipoFilosofo • ¬self.tenedores(i )CPRE: ¬self.tenedores(i ) ∧ ¬self.tenedores(i +N 1)cogerTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Cierto, i +N 1 7→ Cierto}

CPRE: CiertosoltarTenedores(i)POST: self.tenedores = selfpre .tenedores ⊕ {i 7→ Falso, i +N 1 7→ Falso}

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 8 / 17

Page 25: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Dining Philisophers

C-TADMesaOPERACIONESACCION cogerTenedores: N[e]ACCION soltarTenedores: N[e]SEMANTICADOMINIO:TIPO:Mesa = TipoFilosofo 7→ BTIPO: TipoFilosofo = {0, ..,N − 1}INVARIANTE: | {i ∈ TipoFilosofo • self (i )} | mod2 = 0INICIAL: ∀ i ∈ TipoFilosofo • ¬self(i )CPRE: ¬self(i ) ∧ ¬self(i +N 1)cogerTenedores(i)POST: self = selfpre ⊕ {i 7→ Cierto, i +N 1 7→ Cierto}

CPRE: CiertosoltarTenedores(i)POST: self = selfpre ⊕ {i 7→ Falso, i +N 1 7→ Falso}

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 9 / 17

Page 26: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

Dado el siguiente CTAD:

C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE: ¬self(0) ∨ self(1)CPRE: ¬self(0) ∧ ¬self(1)uno()

POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()

POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()

POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}

Asumiendo que tenemos tres procesos que invocan repetidamente las operaciones uno(),dos() y tres() del recurso compartido. Se pide marcar la afirmacion correcta:(a) El sistema podrıa quedarse bloqueado

(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante

(c) Podrıa llegar a violarse la invariante

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 10 / 17

Page 27: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)

CPRE: ¬self(0) ∧ ¬self(1)uno()

POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()

POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()

POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}

(F,F)

(T,T)

(T,F)

(F,T)

(a) El sistema podrıa quedarse bloqueado

(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante

(c) Podrıa llegar a violarse la invariante

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17

Page 28: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)

CPRE: ¬self(0) ∧ ¬self(1)uno()

POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()

POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()

POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}

(F,F)

(T,T)

(T,F)

(F,T)

uno

(a) El sistema podrıa quedarse bloqueado

(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante

(c) Podrıa llegar a violarse la invariante

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17

Page 29: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)

CPRE: ¬self(0) ∧ ¬self(1)uno()

POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()

POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()

POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}

(F,F)

(T,T)

(T,F)

(F,T)

uno

dos

(a) El sistema podrıa quedarse bloqueado

(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante

(c) Podrıa llegar a violarse la invariante

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17

Page 30: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)

CPRE: ¬self(0) ∧ ¬self(1)uno()

POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()

POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()

POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}

(F,F)

(T,T)

(T,F)

(F,T)

uno

dos

tres

(a) El sistema podrıa quedarse bloqueado

(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante

(c) Podrıa llegar a violarse la invariante

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17

Page 31: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

C-TADMiCTADTIPO:MiCTAD = Indice → BTIPO: Indice = {0, 1}INICIAL: ∀ i ∈ Indice • ¬self(i )INVARIANTE:¬self(0) ∨ self(1)

CPRE: ¬self(0) ∧ ¬self(1)uno()

POST: self = selfpre ⊕ {1 7→ Cierto}CPRE: ¬self(0) ∧ self(1)dos()

POST: self = selfpre ⊕ {0 7→ Cierto}CPRE: self(1)tres()

POST: self = selfpre ⊕ {0 7→ Falso} ⊕ {1 7→ Falso}

(F,F)

(T,T)

(T,F)

(F,T)

uno

dos

tres tres

(a) El sistema podrıa quedarse bloqueado

(b) El sistema nunca quedara bloqueado y siempre se cumplira la invariante

(c) Podrıa llegar a violarse la invariante

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 11 / 17

Page 32: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

Dado el siguiente programa

c l a s s Hi los {s t a t i c c l a s s MiHilo extends Thread {i n t n ;publ i c void run ( ) {for ( i n t i =0; i<100; i ++) {n ++;

}}}

publ i c void main ( S t r i ng [ ] args ) {Thread t = new MiHilo ( ) ;

t . s t a r t ( ) ;

t . run ( ) ;

hacerAlgo ( ) ; / / hace algo . . .t r y { t . j o i n ( ) ;}catch ( InterruptedExcept ion e ){}System . out . p r i n t l n ( t . n ) ;

}

¿Cual sera la salida por consola al ejecutar el main? Se pidemarcar la afirmacion correcta.

(a) 200

(b) No se puede saber porque podrıa haber condiciones de carrera.

(c) 100

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 12 / 17

Page 33: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

Dado el siguiente programa

c l a s s Hi los {s t a t i c c l a s s MiHilo extends Thread {i n t n ;publ i c void run ( ) {for ( i n t i =0; i<100; i ++) {n ++;

}}}

publ i c void main ( S t r i ng [ ] args ) {Thread t = new MiHilo ( ) ;

t . s t a r t ( ) ;

t . run ( ) ;

hacerAlgo ( ) ; / / hace algo . . .t r y { t . j o i n ( ) ;}catch ( InterruptedExcept ion e ){}System . out . p r i n t l n ( t . n ) ;

}

¿Cual sera la salida por consola al ejecutar el main? Se pidemarcar la afirmacion correcta.

(a) El numero maximo de procesos ejecutando a la vez sera 2 y el metodo main podraterminar antes que el thread t

(b) El numero maximo de procesos ejecutando a la vez sera 3 y el metodo main terminarasiempre despues que el thread t

(c) El numero maximo de procesos ejecutando a la vez sera 2 y el metodo main terminarasiempre despues que el thread t

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 13 / 17

Page 34: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

Dado un programa concurrente en la que tres threads instancias de las clases A, B y Ccomparten una variable n:

s t a t i c v o l a t i l e i n t n = 0 ;s t a t i c Semaphore s1 = new Semaphore ( 1 ) ;s t a t i c Semaphore s2 = new Semaphore ( 0 ) ;

c l a s s A extends Thread {publ i c void run ( ) {s2 . await ( ) ;

n = 2 ∗ n ;s1 . s i gna l ( ) ;

}}

c l a s s B extends Thread {publ i c void run ( ) {s1 . await ( ) ;

n = n ∗ n ;s2 . s i gna l ( ) ;

}}

c l a s s C extends Thread {publ i c void run ( ) {s1 . await ( ) ;

n = n + 2 ;

s2 . s i gna l ( ) ;

}}

¿Cual es el valor de n tras terminar los tres threads?

(a) 4

(b) 4 o 16

(c) 2 o 16

Si en el codigo anterior los semaforos s1 y s2 se inicializan a 1.

(a) No esta garantizada la exclusion mutua en el acceso a n(b) No esta garantizada la terminacion de las tres tareas

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 14 / 17

Page 35: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicios: Examen 18/19 Mayo

Dada la siguiente implementacion de una solucion al problema de la exclusion mutua con

espera activa :s t a t i c v o l a t i l e boolean i nc qu iere = f a l s e ;s t a t i c v o l a t i l e boolean dec quiere = f a l s e ;s t a t i c v o l a t i l e i n t cont = 0 ;

c l a s s Incrementador extends Thread {publ i c void run ( ) {for ( i n t i = 0 ; i < N OPS ; i ++) {i nc qu iere = true ;while ( dec quiere ) {}cont ++; / / SCi nc qu iere = f a l s e ;

}}}

c l a s s Decrementador extends Thread {publ i c void run ( ) {for ( i n t i = 0 ; i < N OPS ; i ++) {dec quiere = true ;while ( i nc qu iere ) {}cont−−; / / SCdec quiere = f a l s e ;

}}}

Suponiendo que tenemos un proceso de tipo Incrementador y otro proceso Decrementador,se pidemarcar la afirmacion correcta.(a) El programa no garantiza la exclusion mutua en el acceso a la seccion crıtica (cont++ y

cont--)(b) El programa no garantiza la propiedad de ausencia de interbloqueo

(c) El programa no garantiza la ausencia de esperas innecesarias

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 15 / 17

Page 36: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Secuencias ordenadas de enteros

El recurso compartido OrdMezclamezcla dos secuencias ordenadas de numeros enteros paraformar una unica secuencia ordenada.

En este recurso interactuan tres procesos: dos productores que van pasando numeros de

sus secuencias de uno en uno y un consumidor que va extrayendo los numeros en orden

El recurso sera capaz de almacenar, como mucho, un dato de la secuencia que

llamaremos “izquierda” y un dato de la secuencia “derecha”

Cuando hay datos de ambas secuencias la operacion extraerMenor tomara el menor deambos y permitira que se anada un nuevo dato de la secuencia correspondiente

La operacion insertarIzda(d) inserta el dato d como parte de la secuencia izquierda ybloquea hasta que el hueco para el dato izquierdo esta disponible

La operacion insertarDcha es analoga por lo que no es necesario implementarla

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 16 / 17

Page 37: Ejercicios de Especificación Recursos Compartidosbabel.ls.fi.upm.es/teaching/concurrencia/material/slides/groman/sesi… · Ejercicio:Losn´omadasquecantan C-TADMateriasPrimas OPERACIONES

Ejercicio: Secuencias Ordenadas de enteros

C-TAD OrdMezclaOPERACIONESACCION insertarIzda: Z[e]ACCION insertarDcha: Z[e]ACCION extraerMenor: Z[s]

SEMANTICADOMINIO:TIPO: OrdMezcla = 〈hayDato : Lado → B× dato : Lado → Z〉TIPO: Lado = Izda | DchaINICIAL: ∀ i ∈ Lado • ¬self .hayDato(i )CPRE: ¬self.hayDato(Izda)insertarIzda(d)

POST: self.hayDato = selfpre .hayDato ⊕ {Izda 7→ Cierto} ∧self.dato = selfpre .dato ⊕ {Izda 7→ d}

CPRE: self .hayDato(Izda) ∧ self .hayDato(Dcha)extraerMenor(min)

POST: (selfpre .dato(Izda) ≤ selfpre .dato(Dcha) ∧self.hayDato = selfpre .hayDato ⊕{Izda 7→ Falso} ∧ min = self pre .dato(Izda)) ∨(selfpre .dato(Dcha) ≤ selfpre .dato(Izda) ∧self.hayDato = selfpre .hayDato ⊕ {Dcha 7→ Falso} ∧ min = self pre .dato(Dcha))

Guillermo Roman (UPM) Especificacion Recursos Abril 2020 17 / 17