Objetivo general El alumno ser capaz de Identificar los problemas que plantea la existencia de varios procesos ejecutndose a la vez en el sistema, compartiendo recursos, y las herramientas que se utilizan para resolver esos problemas. Analizar el problema que supone la aparicin de interbloqueos en un sistema informtico, as como las tcnicas apropiadas para tratarlo.
Pgina 2
Mecanismos IPC
Contenido
Parte I: Comunicacin y sincronizacin de procesos (Tema 6) 1. Introduccin a la programacin Concurrente (6.1) 2. Modelos de Comunicacin y Sincronizacin (6.2) 3. Mecanismos de sincronizacin y comunicacin (6.3, 6.4 ) 4. Comu. y sincr. de procesos en POSIX y Windows (6.6 y 6.7) Parte II: Interbloqueo 1. Introduccin (7.1 y 7.2) 2. Modelo del sistema. (7.3) 3. Condiciones para el interbloqueo. (7.4) 4. Tratamiento del interbloqueo: Prevencin (7.5 y 7.7) 5. Tratamiento del interbloqueo: Prediccin (7.8) 6. Tratamiento del interbloqueo: Deteccin y recuperacin. (7.6) 7. Aplicacin a los Sistemas Operativos (7.9)
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 5
Procesos (o hilos) concurrentes Aquellos que existen simultneamente en el sistema y pueden tener que compartir recursos. Concurrencia real (Paralelismo) La ejecucin de los procesos se realiza en diferentes procesadores Modelos de Multiprocesador (una mquina con varios procesadores) Multicomputadora (mltiples mquinas conectadas en red) Concurrencia aparente La simultaneidad se simula. Los procesos intercalan su ejecucin en el tiempo. Modelo con un nico procesador
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 6
Pgina 7
Tipos de Procesos Concurrentes Independientes Se ejecutan sin requerir la ayuda o cooperacin de otros procesos En general la mayor parte de los procesos se ejecutan independientemente de ningn otro. Cooperantes Diseados para trabajar conjuntamente en alguna actividad. Deben ser capaces de comunicarse e interactuar entre ellos
Pgina 8
Interacciones entre procesos (de cualquier tipo) Comparten o compiten por el acceso a un recurso fsico o lgico Ej. Dos procesos independientes pueden competir por el acceso a disco Ej. Dos procesos desean modificar el contenido de un registro de la base de datos Se comunican o sincronizan para alcanzar un objetivo comn Ej. (a+b)*(a-b) El proceso que realiza el producto no puede empezar hasta que los que realizan la suma y resta no hayan acabado. Necesidad de control por parte del Sistema operativo Inclusin de servicios que permitan sincronizacin y comunicacin (explcita).
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 9
Problemas que presenta la concurrencia Condiciones de carrera: El resultado final de la ejecucin de varios procesos concurrentes depende de la secuencia de ejecucin. Interbloqueo: bloqueo permanente de varios procesos que compiten por recursos o se sincronizan entre s.
Pgina 10
10
3. Mecanismos de sincronizacin y comunicacin (6.3, 6.4 ) 4. Aspectos de diseo (6.5) 5. Comu. y sincr. de procesos en POSIX y Windows (6.6 y 6.7)
Pgina 11
11
Parte I: Comunicacin y sincronizacin entre procesos 2.- Problemas clsicos: El problema de la seccin crtica
void ingresar(char *cuenta, int cantidad) { int saldo, fd; fd = open(cuenta, O_RDWR); read(fd, &saldo, sizeof(int)); saldo = saldo + cantidad; lseek(fd, 0, SEEK_SET); write(fd, &saldo, sizeof(int)); close(fd); return; J. Carretero, F. Garca, P. de Miguel, F. Prez } Si dos procesos ejecutan concurrentemente este cdigo se puede perder algn ingreso. Solucin: secciones crticas
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 12
12
Los procesos concurrentes suelen compartir recursos (perifricos, variables..) Puede ocurrir que se intente acceder al mismo recurso y que ste no pueda ser usado por varios procesos a la vez. (Ej. Impresora, saldo)
Seccin crtica Segmento de cdigo de un programa que accede a recursos compartidos con otros procesos, siendo imprescindible un acceso exclusivo a dichos recursos.
Pgina 13
13
Mecanismo de proteccin de una seccin crtica (Condiciones de carrera) Cada proceso debe solicitar permiso a su seccin crtica Cuando un proceso sale de su seccin crtica debe indicarlo Estructura general del mecanismo Entrada a la seccin crtica Cdigo de la seccin crtica Salida de la seccin crtica
Pgina 14
14
void ingresar(char *cuenta, int cantidad) { int saldo, fd; fd = open(cuenta, O_RDWR); <Entrada en la seccin crtica> read(fd, &saldo, sizeof(int)); saldo = saldo + cantidad; lseek(fd, 0, SEEK_SET); write(fd, &saldo, sizeof(int)); <Salida de la seccin crtica> close(fd); return; J. Carretero, F. Garca, P. de Miguel, F. Prez
}
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 15
15
Proceso Productor
Flujo de datos
Proceso Consumidor
Mecanismo de comunicacin
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 16
16
Uno o ms procesos generan ciertos datos (producen) Uno o ms procesos utilizan esos datos (consumen) Ej: cadena de montaje Ej: compilador: el productor genera cdigo ensamblador. El consumidor (ensamblador) transforma ese cdigo en cdigo mquina
Se debe disponer de algn mecanismo de comunicacin y de sincronizacin entre ambos. Se deben enviar datos del productor al consumidor Si se llena el mecanismo el productor deber esperar a que el consumidor consuma
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 17
17
Lector
Lector
Escritor
Lector
Escritor
Recurso
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 18
18
Existe un recurso (fichero, registro, etc) que va a ser utilizado por una serie de procesos concurrentes Algunos procesos accedern sin modificarlo (lectores) y otros lo modificarn (escritores) Restricciones Slo se permite que un escritor tenga acceso al recurso al mismo tiempo (no habr ms escritores ni lectores) Se permite que mltiples lectores tengan acceso al recurso simultneamente Es necesario disponer de servicios de sincronizacin que controlen el acceso
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 19
19
Computador
Proceso servidor
Pgina 20
20
En el modelo cliente-servidor dos procesos se comunican para enviar peticin (cliente) y devolver resultados (servidor) El cliente y servidor pueden estar en distintas mquinas (Ej: correo electrnico, transferencia de ficheros, etc) El SO debe ofrecer servicios que permitan comunicacin entre estos procesos Si los procesos estn en la misma mquina Tcnicas de memoria compartida o archivos Si los procesos estn en distintas mquinas Tcnicas de envo de mensajes
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 21
21
Es una metfora para representar a un conjunto de procesos que comparten un conjunto limitado de recursos. En un monasterio hay 5 filsofos que se pasan la vida pensando y comiendo. Cuando necesitan comer, van a una mesa donde hay 5 platos y cinco tenedores. Para comer, necesitan dos tenedores. Hay que garantizar que todo filsofo pueda comer en un tiempo finito cuando tenga hambre. que no se producen interbloqueos.
Pgina 22
22
4. Aspectos de diseo (6.5) 5. Comu. y sincr. de procesos en POSIX y Windows (6.6 y 6.7)
Pgina 23
23
Pgina 24
24
Los ficheros pueden utilizarse para comparticin de datos por parte de varios procesos. Son fciles de usar, al basarse la comunicacin en las operaciones de leer y escribir. Pueden comunicar un nmero potencialmente ilimitado de procesos. Es poco eficiente, al ser operaciones lentas. Se necesita un mecanismo de sincronizacin para ordenar el acceso al fichero.
Pgina 25
25
write
Proceso de Usuario
Proceso de Usuario
read
Pgina 26
26
27
Envo de seales entre procesos Un proceso puede bloquearse (dormirse) hasta que reciba una seal (llamada pause). Un proceso puede despertar a otro enviando una seal (llamada kill). Problemas del mecanismo Un proceso puede recibir seales aunque no est esperando por ellas (son asncronas). Las seales no se encolan. Si hay una seal pendiente de tratar y se recibe otra del mismo tipo, slo queda constancia de que ha llegado una seal.
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 28
28
(Dijkstra 1965) Estructura con tres operaciones definidas: Inicializacin, wait, signal. Todas las operaciones son atmicas . Internamente constituido por un valor entero.
wait (s) { s=s-1; if (s<0) dormir(); } signal (s) { s=s+1; if (s<=0) Despertar a un proceso dormido sobre s; }
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 29
29
El valor de s debe ser inicializado a 1. La solucin es vlida para n procesos. No presenta espera activa (los procesos que esperan estn dormidos).
Pgina 30
30
P0
wait(s)
P1
wait(s)
P2
wait(s)
desbloquea
-1
signal(s)
desbloquea
J. Carretero, F. Garca, P. de Miguel, F. Prez Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 31
31
11
J. Carretero, F. Garca, P. de Miguel, F. Prez
(b)
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 32
32
Pgina 33
33
Colas de mensajes. El destino y el origen identifican una entidad intermedia: un buzn. Puede haber mltiples emisores y mltiples receptores. Puertos. Caso especfico de un buzn, donde slo hay un receptor, pudiendo haber mltiples emisores. El puerto suele pertenecer al proceso receptor:
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 34
34
Proceso cliente
send
Proceso cliente
mensaje
Pgina 35
35
Pila
Pila
J. Carretero, F. Garca, P. de Miguel, F. Prez
Pgina 36
36
La memoria compartida se utiliza para comunicar (no para sincronizar) procesos dentro de la misma mquina. El sistema operativo permite a varios procesos acceder a la misma zona de memoria a travs de llamadas al sistema especficas de creacin de memoria compartida. Los procesos que comparten memoria pueden utilizar esa zona para dejar datos que deben ser accesibles por todos ellos. En un sistema basado en hilos todos los hilos del mismo proceso comparten la memoria sin necesidad de intervencin del S.O.
Pgina 37
37
Mutex Mecanismo de sincronizacin para hilos. Se emplea para obtener acceso exclusivo a una seccin crtica Operaciones bsicas atmicas: Lock (m) seccin crtica Unlock (m) Equivalente a los semforos pero de uso sobre los hilos
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 38
38
Variables condicionales Variable asociada a un mutex que bloquea un hilo hasta que se produzca una condicin. Operaciones 1. c_wait. Bloquea al hilo que ejecuta la llamada y lo expulsa del mutex dentro del cual se ejecuta, al que est asociado la variable condicional 2. c_signal. Desbloquea uno o varios hilos til si un proceso dentro de una seccin crtica debe bloquearse por otra causa. Con c_wait se bloquea y libera la seccin crtica
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 39
39
Productor
Consumidor
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 40
40
#define TAMAO_BUFFER 1024 Productor() /* codigo del productor */ { int posicion = 0; /* posicion dentro del buffer */ for(;;) { producir dato wait(huecos); buffer[posicion] = dato; posicion = (posicion + 1) % TAMAO_BUFFER; signal(elementos); } }
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 41
41
Consumidor() /* codigo del Consumidor */ { int posicion = 0; for(;;) { wait(elementos); dato = buffer[posicion]; posicion = (posicion + 1) % TAMAO_BUFFER; signal(huecos); /* cosumir dato */ } }
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 42
42
Lector
Lector
Escritor
Lector
Escritor
Recurso
Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 43
43
44
pthread_join(th1, NULL); pthread_join(th2, NULL); pthread_join(th3, NULL); pthread_join(th4, NULL); /* cerrar todos los semaforos */ sem_destroy(&mutex); sem_destroy(&sem_lec); exit(0); }
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 45
45
Pgina 46
46
/* cdigo del escritor */ void Escritor(void) { */ sem_wait(&mutex); dato = dato + 2; */ sem_post(&mutex); pthread_exit(0); }
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 47
/* modificar el recurso
47
Ejercicio Crea el seudocdigo de un proceso P1 que ejecute R1=(a+b) Crea el seudocdigo de un proceso P2 que ejecute R2=(a-b) y luego R1*R2. Qu mecanismos de comunicacin y de sincronizacin podras usar si son procesos? Y si son hilos? . Crea distintas versiones con diferentes mecanismos de sincronizacin. Indica cuales seran los valores iniciales de estos mecanismos. Ejercicio Divide el cdigo de P2 del ejercicio anterior en dos procesos diferentes, uno que ejecute R2 y otro que haga R1*R2. Plantea diferentes mecanismos de sincronizacin para dar solucin al problema (semforos, pipes, y mensajes)
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 48
48
49
50
Pgina 51
51
Pgina 52
52
Pgina 53
53
Contenido
Parte I: Comunicacin y sincronizacin de procesos (Tema 6) 1. Introduccin a la programacin Concurrente (6.1) 2. Modelos de Comunicacin y Sincronizacin (6.2) 3. Mecanismos de sincronizacin y comunicacin (6.3, 6.4 ) 4. Comu. y sincr. de procesos en POSIX y Windows (6.6 y 6.7) Parte II: Interbloqueo 1. Introduccin (7.1 y 7.2) 2. Modelo del sistema. (7.3) 3. Condiciones para el interbloqueo. (7.4) 4. Tratamiento del interbloqueo: Prevencin (7.5 y 7.7) 5. Tratamiento del interbloqueo: Prediccin (7.8) 6. Tratamiento del interbloqueo: Deteccin y recuperacin. (7.6) 7. Aplicacin a los Sistemas Operativos (7.9)
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 54
54
Introduccin
Definicin de Interbloqueo Interbloqueo Es una anomala que se produce cuando un proceso se encuentra esperando a un suceso que no puede ocurrir. La causa fundamental es el uso exclusivo de recursos compartidos por varios procesos. En el interbloqueo suele haber implicados conjuntos de procesos. No hay que confundirlo con inanicin o aplazamiento indefinido. Este problema se da por una mala poltica de asignacin de recursos.
Pgina 55
55
Introduccin
Ejemplos de Interbloqueo De un solo proceso 1. El proceso espera por un evento que no va a ocurrir. Por ejemplo, dormir hasta que sean las 12.00 del 1 de enero de 2000. De un dos procesos
Proceso 1 Solicitar Cinta Solicitar Impresora USAR Liberar Impresora Liberar Cinta
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo
Proceso 2 Solicitar Impresora Solicitar Cinta USAR Liberar Cinta Liberar Impresora
Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 56
56
Introduccin
Ejemplos de Interbloqueo De un dos procesos. Sea un sistema con 200 KB de memoria
Proceso 1 Solicitar 80 KB Solicitar 60 KB Liberar 140 KB Solicitar 80 KB Liberar 150 KB Proceso 2 Solicitar 70 KB
Los procesos pueden quedar bloqueados si se atiende la primera peticin de cada proceso.
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 57
57
Introduccin
Tipos de recursos Los interbloqueos se producen al compartir recursos por parte de los procesos. Los recursos pueden ser tanto fsicos (Hardware) como lgicos. Los recursos podemos clasificarlos en: Reutilizables o consumibles: los recursos reutilizables siguen existiendo despus de haber sido utilizados. Los consumibles desaparecen despus de que un proceso los utilice. Compartibles o de uso exclusivo: los primeros pueden ser utilizados a la vez por varios procesos, mientras que los segundos no. Con un nico ejemplar o con varios: De un recurso puede haber una sola copia o varias. Apropiables (o expropiables) o no apropiables. Los primeros no se les puede quitar al proceso que los tiene asignados.
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 58
58
Introduccin
Tipos de recursos Van a ser problemticos los recursos reutilizables de uso exclusivo no apropiables. Los recursos compartibles no presentan problemas de interbloqueo. Los recursos apropiables no presentan problemas de interbloqueo. Los recursos consumibles pueden dar problemas de interbloqueo, pero son especficos y no los vamos a estudiar.
Pgina 59
59
Tabla de contenidos
Parte II: Interbloqueo Introduccin (7.1 y 7.2) Modelo del sistema. (7.3) Condiciones para el interbloqueo. (7.4) Tratamiento del interbloqueo: Prevencin (7.5 y 7.7) Tratamiento del interbloqueo: Prediccin (7.8) Tratamiento del interbloqueo: Deteccin y recuperacin. (7.6) Aplicacin a los Sistemas Operativos (7.9)
Pgina 60
60
Pgina 61
61
62
63
Pgina 64
64
Pgina 65
65
Tabla de contenidos
Parte II: Interbloqueo Introduccin (7.1 y 7.2) Modelo del sistema. (7.3) Condiciones para el interbloqueo. (7.4) Tratamiento del interbloqueo: Prevencin (7.5 y 7.7) Tratamiento del interbloqueo: Prediccin (7.8) Tratamiento del interbloqueo: Deteccin y recuperacin. (7.6) Aplicacin a los Sistemas Operativos (7.9)
Pgina 66
66
67
Tabla de contenidos
Parte II: Interbloqueo Introduccin (7.1 y 7.2) Modelo del sistema. (7.3) Condiciones para el interbloqueo. (7.4) Tratamiento del interbloqueo: Prevencin (7.5 y 7.7) Tratamiento del interbloqueo: Prediccin (7.8) Tratamiento del interbloqueo: Deteccin y recuperacin. (7.6) Aplicacin a los Sistemas Operativos (7.9)
Pgina 68
68
Pgina 69
69
Pgina 70
70
Pgina 71
71
Pgina 72
72
Pgina 73
73
Tabla de contenidos
Parte II: Interbloqueo Introduccin (7.1 y 7.2) Modelo del sistema. (7.3) Condiciones para el interbloqueo. (7.4) Tratamiento del interbloqueo: Prevencin (7.5 y 7.7) Tratamiento del interbloqueo: Prediccin (7.8) Tratamiento del interbloqueo: Deteccin y recuperacin. (7.6) Aplicacin a los Sistemas Operativos (7.9)
Pgina 74
74
75
Pgina 76
76
Si al final se consigue eliminar todos los procesos el estado es seguro Inconvenientes Necesidad de conocer a priori las necesidades de cada proceso Sobrecarga
Asignatura: Sistemas Operativos Tema 3: Com., Sincr. e Interbloqueo Miguel R. Albizu / Marin D. Fondn EUITIO curso 2009-2010 Pgina 77
77
Tabla de contenidos
Parte II: Interbloqueo Introduccin (7.1 y 7.2) Modelo del sistema. (7.3) Condiciones para el interbloqueo. (7.4) Tratamiento del interbloqueo: Prevencin (7.5 y 7.7) Tratamiento del interbloqueo: Prediccin (7.8) Tratamiento del interbloqueo: Deteccin y recuperacin. (7.6) Aplicacin a los Sistemas Operativos (7.9)
Pgina 78
78
79
80
Tabla de contenidos
Parte II: Interbloqueo Introduccin (7.1 y 7.2) Modelo del sistema. (7.3) Condiciones para el interbloqueo. (7.4) Tratamiento del interbloqueo: Prevencin (7.5 y 7.7) Tratamiento del interbloqueo: Prediccin (7.8) Tratamiento del interbloqueo: Deteccin y recuperacin. (7.6) Aplicacin a los Sistemas Operativos (7.9)
Pgina 81
81
Pgina 82
82
Pgina 83
83
Ejemplos
Sea un sistema con 5 procesos y 3 tipos de recursos. La situacin actual del sistema es la que se muestra a continuacin. Est en un estado seguro? Asignacin A p1 p2 p3 p4 p5 0 2 3 2 0 B 1 0 0 1 0 C 0 0 2 1 2 p1 p2 p3 p4 p5 Mximo A 7 3 9 2 4 B 5 2 0 2 3 C 3 2 2 2 3 Disponibles A 3 B 3 C 2
Pgina 84
84
Ejemplos
1.- Calculamos las necesidades pendientes, (Mximo Asignacin) Asignacin A p1 p2 p3 p4 p5 0 2 3 2 0 B 1 0 0 1 0 C 0 0 2 1 2 p1 p2 p3 p4 p5 Mximo A 7 3 9 2 4 B 5 2 0 2 3 C 3 2 2 2 3 p1 p2 p3 p4 p5 Pendientes A 7 1 6 0 4 B 4 2 0 1 3 C 3 2 0 1 1 Disponibles A 3 B 3 C 2
2.- Buscamos una secuencia segura: <p4, p2, p5, p1, p3>
Pgina 85
85