Operating Systems Concurrency Deadlock and Starvation

Andres Segreda www.youtube.com

Resumen Breve

Este video explica los conceptos de deadlock y starvation en sistemas operativos, proporcionando ejemplos y estrategias para prevenir, evitar y detectar deadlocks. Se discuten las condiciones necesarias para que ocurra un deadlock, así como diferentes enfoques para lidiar con ellos, incluyendo la prevención mediante la asignación anticipada de recursos, la evitación a través del algoritmo del banquero, y la detección con la posterior recuperación.

  • Deadlock ocurre cuando dos o más procesos están bloqueados indefinidamente, esperando por recursos que otros procesos tienen.
  • Starvation es cuando un proceso no puede acceder a los recursos que necesita debido a la continua asignación de esos recursos a otros procesos.
  • Hay tres estrategias principales para lidiar con deadlocks: prevención, evitación y detección.

Introducción al Deadlock y Starvation

El video introduce los temas de deadlock y starvation, explicando que se profundizará en estos escenarios y se explorarán medidas y mecanismos para abordar los problemas de concurrencia que estos generan. El objetivo es entender cómo los procesos pueden quedar bloqueados esperando recursos y cómo evitar o resolver estas situaciones.

¿Qué es un Deadlock?

Un deadlock ocurre cuando un proceso necesita un recurso que otro proceso tiene asignado, y este último a su vez necesita un recurso que el primero tiene, creando un ciclo de espera mutua. Ninguno de los procesos puede liberar sus recursos, resultando en un ciclo muerto donde ningún proceso puede avanzar. Se ilustra con el ejemplo de una intersección de tráfico donde los carros se bloquean mutuamente.

Visualización de Deadlocks con Diagramas

Para visualizar y evitar deadlocks, se pueden usar diagramas de procesos (JPDs) que muestran cómo los procesos se relacionan y solicitan recursos. Estos diagramas ayudan a identificar posibles escenarios de deadlock y a tomar medidas preventivas. Se explica cómo las rutas en estos diagramas pueden ayudar a evitar situaciones donde múltiples procesos compiten por los mismos recursos simultáneamente.

Tipos de Recursos: Reutilizables vs. Consumibles

Existen dos tipos de recursos que los procesos pueden solicitar: reutilizables y consumibles. Los recursos reutilizables, como la memoria o los dispositivos de entrada/salida, pueden ser usados repetidamente. Los recursos consumibles, como los mensajes o las señales, se "gastan" después de ser utilizados. Se dan ejemplos de cómo cada tipo de recurso puede llevar a un deadlock.

Ejemplo de Deadlock con Recursos Reutilizables

Se presenta un ejemplo de deadlock utilizando recursos reutilizables, específicamente la memoria. Dos procesos solicitan memoria en un sistema con capacidad limitada. Si ambos procesos solicitan una cantidad de memoria que excede la capacidad total y se esperan mutuamente para liberar memoria, se produce un deadlock.

Ejemplo de Deadlock con Recursos Consumibles

Se explica un ejemplo de deadlock con recursos consumibles, como mensajes entre procesos. Dos procesos necesitan información del otro para continuar, pero ambos están esperando un mensaje del otro, creando un ciclo de espera que impide que ambos avancen.

Gráficos de Asignación de Recursos

Se introducen los gráficos de asignación de recursos, donde los procesos se representan con círculos y los recursos con rectángulos. Las flechas indican si un proceso requiere un recurso o si un recurso está asignado a un proceso. Se muestra cómo una espera circular en estos gráficos indica un deadlock.

Espera Circular y Soluciones

Se explica la condición de espera circular, donde cada proceso en un ciclo está esperando un recurso que otro proceso en el ciclo tiene asignado. Una solución simple es agregar más instancias del recurso para romper el ciclo de espera. Se enfatiza que la definición de deadlock involucra dos o más procesos en espera circular.

Condiciones Necesarias para un Deadlock

Para que ocurra un deadlock, deben cumplirse cuatro condiciones: exclusión mutua, mantener y esperar, no apropiación y espera circular. Se explica cada una de estas condiciones y cómo su eliminación puede prevenir el deadlock.

Estrategias para Lidar con Deadlocks

Se describen tres enfoques para lidiar con deadlocks: prevención (asegurar que nunca ocurran), evitación (permitir que el sistema funcione pero tomar decisiones para evitar deadlocks) y detección (permitir que ocurran y luego recuperarse). Cada enfoque tiene sus propias técnicas y compromisos.

Prevención de la Exclusión Mutua

Para prevenir la exclusión mutua, se pueden emplear técnicas como solicitar todos los recursos al inicio del programa o liberar todos los recursos si un proceso se bloquea. Estas estrategias son estrictas y buscan evitar cualquier posibilidad de deadlock.

Prevención de la No Apropiación

Si se permite la capacidad de apropiación del sistema operativo, se pueden liberar los recursos originales de un proceso, guardando su estado en un "snapshot" y permitiendo que otros procesos utilicen los recursos. Esto requiere que el sistema operativo tenga la capacidad de apropiarse de los recursos.

Prevención de la Espera Circular

Para prevenir la espera circular, se puede definir un orden total de los tipos de recursos y hacer que los procesos los soliciten en orden ascendente. Esto evita que se formen ciclos de espera. Esta técnica es más adecuada para procesos batch donde se conoce el uso de los recursos de antemano.

Evitación de Deadlocks

La evitación de deadlocks implica tomar decisiones basadas en el conocimiento del futuro para evitar que ocurran. Esto se puede hacer denegando la asignación de un recurso o evitando que un proceso inicie si se prevé que causará un deadlock.

Algoritmo del Banquero

El algoritmo del banquero es una técnica para evitar deadlocks que utiliza matrices y vectores para determinar si un estado es seguro. Se analiza la matriz de solicitud (claim matrix), la matriz de asignación, y los vectores de recursos disponibles y totales para encontrar una ruta segura de asignación de recursos.

Ventajas y Limitaciones de la Evitación

La evitación de deadlocks no requiere la capacidad de apropiación del sistema operativo y es menos restrictiva que la prevención. Sin embargo, requiere monitorear matrices y tener una cantidad fija de recursos, lo que puede ser costoso y complicado.

Detección de Deadlocks

La detección de deadlocks implica permitir que ocurran y luego identificarlos. Esto requiere preguntar constantemente si hay deadlocks y tomar medidas para resolverlos. Los algoritmos de detección utilizan matrices similares a las del algoritmo del banquero.

Algoritmos para la Detección de Deadlocks

Los algoritmos de detección de deadlocks utilizan matrices de peticiones (Q), matrices de asignación y vectores de recursos reales y disponibles. A diferencia de la evitación, no se busca una ruta segura, sino identificar si existe un ciclo de espera que cause un deadlock.

Estrategias de Recuperación

Una vez detectado un deadlock, se pueden usar estrategias de recuperación como abortar todos los procesos o realizar una terminación selectiva de procesos para liberar los recursos y romper el ciclo de espera. Se pueden crear puntos de recuperación para restaurar los procesos a un estado anterior.

Resumen Comparativo de Enfoques

Se presenta un resumen comparativo de los tres enfoques: prevención, evitación y detección. La prevención es la más conservadora e ineficiente, la evitación requiere conocimiento futuro de los recursos, y la detección es la más liberal pero requiere monitoreo constante y acciones de recuperación.

El Problema de los Filósofos Cenando

Se presenta el problema clásico de los filósofos cenando, donde cinco filósofos necesitan dos palillos chinos para comer, pero solo hay cinco palillos en total. Se discuten soluciones como tener un mesero que arbitre quién come o asignar un número a cada palillo y que los filósofos sigan una regla para evitar el deadlock.

Summarize any YouTube video in seconds

Get summaries like this one for any video, in your language, with the free Summ app.

Download on the App Store
Get it on Google Play

Transcript

YouTube Transcript Generator

0:01 Buenas estudiantes. El día de hoy hablaremos sobre uno de los temas que hemos hablado a través del curso. Este es lo que es el desblock y el estation. Por supuesto, en la clase de hoy profundaremos más estos escenarios y veremos medidas o mecanismos que tenemos para tratar con estos males de la congruencia. Primeramente explicaré el concepto de de y luego les mostraré un ejemplo, pero básicamente el deck ocurre cuando un proceso requiere un recurso que otro proceso lo tiene asignado, pero este proceso a su vez en un conjunto de procesos que hagan un círculo, este proceso a su vez tiene un recurso del primero que lo solicitaba o de alguno que esté en este círculo y entonces eh

0:46 no pueden liberarse porque para que A pueda continuar necesita el recurso dos, pero el recurso dos lo tiene B, pero para que B pueda soltar ese recurso, necesita un recurso que tiene A. Y entonces como una pelea ahí constante en el cual mientras que usted no me lo, si usted no me da, yo no se lo doy, si usted no me lo doy. Y entonces no procede eh a terminar ninguno de los dos procesos y queda entonces en un ciclo muerto. Este es el claro ejemplo que nosotros vemos en las intersecciones cuando e por lo que ocurren muchos accidentes de tránsitos, cuando no respetamos la zona crítica que haciendo la intersección y que eh el carro a digamos el que viene en esta dirección necesita pasar pero me

1:32 lo está bloqueando este carro. Este carro necesita pasar, pero lo bloquea este carro, pero a la vez este carro no puede avanzar porque lo está bloqueando este y este no puede avanzar porque lo bloquea este. De una forma tal que si alguien nos echa para atrás no vamos a resolver ese deadlock que tenemos. y al no resolver el deadlock, entonces nadie se mueve y eh tendremos que buscar mecanismos o técnicas para lidiar con este teatro. visualizar a cubrir los dedos, podemos usar los JPDs o los join Process diagramas, que son proces diagramas que me permiten visualizar una representación de cómo un proceso va a estar relacionado con otros en el momento en que va a estar pidiendo las instrucciones que van a estar pidiendo

2:18 recursos. Por ejemplo, en este eje tenemos un proceso al que llamaron Q y en este otro eje, en el eje X tenemos el proceso llamado P. Vemos la línea de evolución que va haciendo como así en el tiempo en la diagonal y podemos ir viendo posibles escenarios. Por ejemplo, si este soluciona B en este momento y este soluciona A, aquí pudiera ocurrir un del que es inimitable. Mientras que estemos en estas zonas, aquí vemos que hay eh un posible deck porque tenemos un tiempo de espera, pero aquí no es tan problemático. Acá podría existir un deadlock, pero si por ejemplo el proceso A pide aquí, el proceso Q pide AB en este momento, pues entonces este no va a

3:05 liberar, va a generar una espera y el proceso P tampoco va a liberar. Entonces, pues va a estar esperando lo que Q tiene y nos va a generar un buscar estas rutas en diagramas sirve para evitar estos escenarios donde tenemos más de un proceso. Como vemos aquí, son dos por simplicidad. Obviamente esto se hace a nivel computacional y eh y dependiendo de la técnica que utilicemos y evita entonces esta disfrutante de recursos. Hay dos tipos de recursos que pueden ser solicitados por los procesos. Los que son reusables, o sea, que no se gastan después de utilizarse, y los que son consumibles. Por ejemplo, si yo mando un mensaje, este mensaje fue enviado. Una vez que se envía o lo lev una cola, ya

3:52 ese mensaje está igual una señal, eh, información que vengan los bofres, que son como más datos de manera más abstracta. Sin embargo, los que son reutilizables son aquellos que son como más físicos, por ejemplo, entradas y salidas. ¿Quién está usando el monitor? Porque un recurso utilice el monitor, no quiere decir que este ya no se pueda volver a usar. O eh la entrada y salida del audio con la que ustedes están viendo este video, la memoria del dispositivo, la memoria RAM sigue siendo un recurso importante que si no está eh pues alguien no estará usando, pero luego se puede reutilizar. Entonces tenemos los dos escenarios, los de tipo consumibles y los de tipo reutilizables. Por ejemplo, les muestro

4:38 un ejemplo de cómo podría ocurrir un dedo con recursos reutilizables. Como les mencionaba en la diapositiva anterior, el uso de la memoria es un recurso reutilizable porque físicamente esta no se gasta o desaparece después de utilizado. Supongamos que tenemos dos procesos y que mi sistema solo tiene para niveles académicos 200 GW. Esto podría ser un microcontrolador o muy pequeñito, pero lo importante acá es para la parte académica. Entonces, el primer proceso solicita 100 KB, perfecto, hay 200, me quedan 100. El segundo está en concurrentes, entonces este hizo 100 y el segundo llegó 100. Yo ya me quedo sin memoria. Cuando el proceso uno sea continuar, él necesita pedir 60 más y

5:24 dice, "Yo ocupo 60 más." Uy, no hay porque lo tiene el proceso dos. Entonces dice, "No, tranquilo, yo me espero que el proceso dos termine." Proceso dos, ¿cuándo usted va a terminar? Di, es que yo tengo que pedir 80 y hay menos, todavía hay menos de 80. Entonces, yo tampoco. Yo espero que usted termine. No, yo espero que usted termine. No, yo espero que usted termine. Y esto entonces hace que ni el proceso uno ni el proceso dos puedan terminar porque están esperando a que el otro libere el recurso reutilizable que tenían eh y que eh no lo va a soltar el otro hasta que no tenga toda su operación completa. Entonces, no genera un débito en una situación de recurso con eh utilizable. Bienestro el caso de que por un denedlo con recursos consumibles. Pongámonos la

6:12 idea de que hay dos procesos, estos tienen comunicación entre ellos y para que uno continúe, supongamos que es el proceso de traerse las cuentas bancarias, necesita una información del otro proceso que es eh usuarios, pero resulta que para que usuarios continúe necesita cierta información que le llegue de las cuentas bancarias. Entonces, cuentas bancarias no va a responder y no va a terminar y no va a poder continuar con su flujo hasta recibir un mensaje que es consumibles, que se desaparece de cuentas de usuario. Pero cuentas de usuario no le ha respondido porque a su vez está esperando a que cuentas bancarias, procesos, dos eh terminen y me mande un mensaje con la información de la cuenta bancaria, digamos, como para calcular el score crediticio. En este caso, si nos

6:58 damos cuenta, el proceso uno nunca va a avanzar porque está a la espera de un mensaje del proceso dos. Y el proceso dos nunca va a avanzar porque a la vez está a la espera del proceso uno. Esto podría ocurrir si yo me tiene un elemento más. Por ejemplo, que el bancario está a la espera de el de cliente, el de cliente el score crediticio y el score crediticio del bancario. Entonces nos vuelve a generar este círculo de espera que hablaremos a continuación. Acá entonces el ejemplo de un recurso consumible como es un mensaje que está provocando un estado dentro. Tenemos los gráficos de cómo un proceso se asigna a un recurso. Podemos

7:45 ver esto sacado de libro que el proceso uno, lo simbolizamos con un circulito, requiere a el proceso A. En este caso, eh, él está haciendo una petición, pero aquí más bien vemos que ahora el recurso A está asignado o lo mantiene el procesador. B. Básicamente, primero yo lo pido y una vez que lo pido, cambia la flechita a que a mí me lo asigna. Aquí podemos ver que solo existe una entidad por cada uno, mientras que acá podemos ver que existen, por ejemplo, tres del recurso A o tres instancias del recurso A y dos instancias del recurso B. En este caso vemos la espera circular, el proceso uno requiere a el

8:32 recurso A, pero resulta que el recurso A lo tiene el proceso dos. El proceso dos requiere el proceso B, pero resulta que el proceso B lo tiene asignado el uno. Entonces, para que uno termine necesita el A. Pero para que A termine, pero para que A se libere necesita que P2 termine. Pero para que P2 termine necesita el B. Pero para que B se libere necesita que termine el recurso uno. Pero para que el recurso uno y aquí nos podemos ir en toda la ocasión vemos de una manera bastante simple que una forma de solucionar el datlock cuando es posible es agregando más instancias, como siempre es posible podemos agregar más instancias del recurso y de esta manera.

9:17 Entonces, en este caso, pues no cubrironlo porque eh recurso A, por ejemplo podría pedir eh este que lo mantiene B, pero podría ir entonces este mantiene el segundo, el proceso dos mantiene el segundo, pero el proceso uno está manteniendo obtiendo el primero y para dar de esta forma aquí no nos ocurriría. Entonces, eh aquí podemos ver lo que les comentaba ahorita, que no necesariamente que hemos hablado por cuestión académica de solo dos procesos, la definición serían dos o más procesos, entran en una esfera circular. Aquí podemos ver que el recurso A tiene el uno, pero ocupa el B, pero que este lo tiene el dos, pero que

10:03 lo ocupa el C, pero este lo tiene el tres, pero ocupa el D, pero el D necesita el A. Y en esta forma vemos otra vez una espera circular. Importantísimo. Entonces, no decir que dos procesos, siempre la definición son dos o más procesos. están en una espera circular, que es cuando entonces el recurso de uno de ellos depende del recurso que tiene otro y así a su vez en esta cadena circular cada quien depende de otro hasta que eh si uno no suelta el recurso y decide soltarlo, pues entonces quedaremos en un ciclo infinito de esa esfera. Y ahorita necesitamos entonces que curra

10:51 la esfera circular, que esta es la condición que llamamos condición directa. Ahorita lo hablaremos más a profundidad, pero existen cuatro cosas que tienen que suceder o cuatro condiciones que tienen que suceder para que ocurra. De hecho, ya hemos visto cómo solucionar dos anteriormente. La primera es la exclusión mutua. Y entonces si yo digo en el caso anterior, cuando veíamos que yo les decía que tenía varias instancias, ahí no habría exclusión mutua eh de un solo recurso, sino yo tendría tres instancias o si el recurso puede ser accedido por varias personas a la vez, digamos que fuera una arquitectura pizarra que vemos ahí en el curso de arquitectura donde todos los consumidores lo que hacen es leer, entonces todos pudieran acceder a ese recurso, eso no va a implicar un bloqueo porque nadie lo necesita.

11:38 Entonces, la primera condición que no es la de las indirectas, como les digo, la más importante, la espera circular, la primera eh condición que tiene que haber es que necesitamos que haya exclusión mutua. Si no hay exclusión mutua, no tenemos que forzar exclusión mutua. Nunca va a ocurrir el oubiría menos que ya tenga más. hay un punto en que ya eh llegue la expresión muta. Por ejemplo, si tengo tres recursos y yo ocupo cuatro, pues ahí ya empezaría a tener el tema de eh lo segundo es que haya eh un tema de yo mantengo y tengo que esperar. Supongamos que si el recurso uno dice, "Ah, no, mientras que yo estoy en espera, mientras yo estoy bloqueado, no voy a mantener el recurso, entonces yo lo libero mientras que estoy bloqueado,

12:23 otra persona lo puede usar, ya no habría problema, porque entonces, ¿qué importa? Que yo esté esperando eh que A termine, yo no tendría el proceso B, no tendría que esperar a que el proceso A termine para que obtenga el recurso A. ¿Por qué? Porque el recurso uno dijo, "Ah, yo estoy en espera. Entonces, como yo proceso a estoy, el proceso uno, estoy en espera, voy a liberar el recurso A. Entonces, ya el procesador puede tomarlo. Pero si yo tengo esta condición de que el recurso que yo tenga lo mantengo eh para mi uso hasta que yo termine y no lo libero mientras que estoy bloqueado, entonces mientras que yo estoy en esperando, estoy manteniendo ese recurso, voy a provocar lo que viene siendo el deadlock. Si se cumplen las otras tres condiciones, en esto siempre tienen que cumplirse. Aunque una no se

13:09 cumpla, ya automáticamente eh salimos del Después tenemos la no apropiatividad del sistema operativo. Recuerden que apropiatividad era que el sistema operativo podía apropiarse de los recursos. Si el sistema puede llegar y decir, "Man, ocupo el recurso porque si no tener este delock, entonces el de va a cubrir, pero en el momento en que yo pueda llegar y decir como sistema operativo, uy Carlos, hágase para atrás para dejar que pase como un tráfico, uy, hágase para atrás para dejar que pasen los vehículos, le quito el recurso, lo muevo de la zona eh de exclusión mutua, que eso es lo que estaría haciendo el sistema operativo, apropiándose ese espacio para que fluya el tránsito, en este caso fluya el tránsito de datos. Ya aquí entonces podríamos eliminar el dato

13:56 ocurrió, pero lo eliminamos digamos en cierta forma, ¿verdad? Entonces, si esto hay ya del no va a ser un deblock observado, sino que podemos abrir. Y por supuesto lo que hemos hablado todo el rato es la espera circular, eh, que como les digo es que tiene que ver que un recurso depende del otro, que recurso depende del otro haciendo esa circularidad para hacer que realmente eh al dar esa circularidad hasta que uno termine, el otro no falla. Si estuviera en una línea recta, pues solo se propagaría y una vez que se termine se resolvería para atrás. Pero como tenemos un círculo, necesitamos que este termine para que se termine, para que este y quedamos en ese círculo vicioso. Por eso esa es la condición directa que hablaremos en las siguientes

14:44 diapositivas. ¿Cómo podemos lidiar? ¿Cuáles son estos enfoques para lidiar? Hay tres enfoques y por esto digo la palabra lidiar. Lo primero es que podemos prevenirlo, o sea, nunca va a ocurrir. Lo segundo es que podemos evitar, somos más permisivos, dejamos que eh el programa pueda funcionar, pero hacemos tomamos decisiones que cuando vaya a suceder antes de que suceda, evitamos de que suceda. Entonces, en el primero es imposible que suceda, por ejemplo, poniendo ninguna intersección en la calle, ¿verdad? intersecciones, no haría delux o evitando esas intersecciones donde podría ocurrir un delux, intersecciones más simples e en evitar dejamos que pasen, pero usamos como semáforos o técnicas para que la

15:30 gente invada la zona crítica cuando se puede y la más permisiva es dejamos que el deslog ocurra, lo detectamos. para detectar algo, eso se tuvo que haber pasado. Evitarlo es antes de que pase. Detectarlo es ya pasó. Entonces, ¿cómo hago yo para re digamos resumir el proceso, recobrearme el proceso y volver a imponer que todo marche en orden, como decía el caso ahorita, donde los carros ya estaban ahí bloqueando todo, la gente pitando y alguien se hace para atrás eliminando, pitando las condiciones, una de las condiciones de necesarias para estas formas son las que vamos a estar explorando en las próximas diapositivas. ¿Cuáles son las estrategias entonces

16:18 para la prevención de el de? Como les mencionaba, teníamos la directa que va directamente en eliminar lo que es la esfera circular y las indirectas que van eliminar cualquiera de las otras causas. por ejemplo, eliminar la solución mutua, agregando más recursos, eh de eliminando la espera y mantiene las condiciones para que mantienen o permitiendo que se pueda dar sistema operativo apropiar de los recursos. Estas serían las indirectas. Insisto, la directa sería cualquier técnica o método que me limite la espera circular. ¿Cómo prevenimos eh la exclusión? Cuando estamos trabajando lidiando mediante la prevención de la exclusión mutual, hay varias formas en

17:05 que podemos hacer esto. Y eh normalmente se ocurre incluso a veces en tiempo de compilación. Por ejemplo, una de las técnicas que hay es pedir todos los recursos tan pronto se va a iniciar el programa. Deámoslo así. Si el proceso A dice, miren, yo soy el proceso A, voy a ocupar el curso A, dos, bueno, el uno, el dos, el tres y el cuatro, entonces el sistema operativo me va a decir desde el inicio, mm, es que el cuatro no está listo, entonces mejor no se lo doy. ¿Por qué? Porque voy a prevenir un delock. Ahí nunca va a pasar unlock porque entonces solo le voy a dejar que inicie el proceso a cuando 1 2 3 y cu estén listos para evitar que en algún otro momento en futuro resulta que el cuatro es el que está haciendo el verdad porque lo necesita y alguien más lo tiene,

17:51 entonces no termina y genera un Entonces esta técnica de prevención lo que hace es pedir todos los recursos de manera anticipada y de esta forma entonces eh evita Evita no previene la palabra clave previene que ocurra el tenemos el primero que es o todo o nada se ubica. Lo otro que hacemos es que también se puede decir que si un proceso necesitar un nuevo recurso y este está bloqueado el recurso que necesito para e para prevenir que ocurra porque ojo es prevenir porque yo no sé si va a ocurrir, simplemente es muy estricto. Yo para prevenir mejor es que

18:36 podría que nunca pase, así, pero mejor prevengamos, no somos tan liberales. lo que hacemos es mejor para prevenir suelte todos los recursos que usted tiene hasta que sepamos que el que usted necesita para continuar esté disponible en este caso. Entonces, le damos la oportunidad a que si alguien más ocupa este recursos los tenga y demás y cuando usted todo el set el conjunto de recursos que usted necesita para continuar, entonces usted va a continuar y en ese momento lo desbloqueamos. ya no lo desbloqueamos con una espera solo del recurso que usted necesita, sino era de todos los recursos que usted tenía asignados y que sigue necesitando, porque de esta forma podemos garantizar que no va a entrar jamás en un del ya no es evitarlo porque

19:23 aquí no es que vemos una eminente dellock, ¿verdad? y entonces hacemos algo para evitarlo. Aquí es que lo estamos previniéndose. Mejor antes de que pase algo, no dejemos de que suceda el Si permitimos la capacidad prospectiva del sistema operativo, si un proceso está manteniendo reteniendo una cantidad de recursos, entonces nosotros podríamos liberar los recursos originales. En esto pasaríamos a un estado de preservación que es con un Snapchat, ¿verdad?, instantánea de cómo está en donde guardamos el estado, el contexto y todo lo que hemos visto del proceso, que sabemos que era datos, ¿verdad? Entonces, guardamos todos esos

20:09 elementos instantáneo y luego podemos eh hacerle como el zoom, ¿verdad? volver a continuar desde el punto donde habíamos dejado instantáneo con todos los recursos que estuvieron después. Acá lo importante es que el sistema operativo tiene que tener la capacidad de eh tener esta capacidad de apropiad, de poder apropiar de los recursos son procesos. Y por último tenemos cómo prevenir mediante la esfera circular. Si yo ya defino los recursos antes de que se ejecutan, logro definir el orden de todos los tipos de recursos y entonces puedo hacer que se pidan en orden ascendente, esto va a evitar de que

20:55 ocurre una espera circular porque los he asignado de manera tal que no puedan ocurrir, que es imposible que ocurra y que en ningún momento va a ocurrir. Por supuesto, esta es un poco más complicada porque necesita conocimiento completo de cómo está haciendo o cómo van a ser utilizados los recursos. Sobre todo en procesos batch eh que no tienen tanta intervención del ser humano. Esto es más sencillo enbatch. En time sharing es un poco más complejos estos enfoques porque yo es más heurístico, desconozco, o sea, cero determinístico, yo desconozco cómo va a ser el orden o que van a aparecer los recursos y por ende eh es un poco más complejo implementar esta técnica de

21:40 prevención. Luego vamos a hablar de cómo evitamos que ocurra el aquí el delogivos. Aquí no es como con ese miedo de parar por si lejana posibilidad que ocurriera, ¿no? Aquí sabemos, la estamos viendo que va a ocurrir. Tenemos conocimiento del futuro y haciendo un análisis antes de que ocurra el deadlock tomamos una decisión. ¿Cómo lo hacemos? Bueno, hay varias formas en que podemos estrategias en que podemos hacer de que no ocurra el deck. por ejemplo, mantener un estado seguro, que ahorita haremos el el algoritmo del banquero, eh, haciendo denegando la asignación de un recurso, yo le deniego, digo, no, no le

22:27 voy a dar el recurso porque si le doy este recurso, el proceso dos se va a bloquear. Entonces, eso le llamamos denegación de locación de recurso. No asignamos un recurso porque ya previendo el futuro y una condición que viene futuro, sabemos que el proceso tres está utilizando el recurso y que si yo se lo asigno ahorita voy a causar un dellock. Entonces lo vemos, vemos la condición y le digo, "No, no te voy a dar recurso todavía." Pero es que nadie lo está usando. Sí, pero es que si se lo doy va a causar un deadlock, entonces no se lo voy a dar. La otra es evitando que un proceso inicie. Ya aquí ya no es el recurso, sino que evitamos que el proceso inicie. Lo mismo si yo veo que la inici inicialización de este proceso va a demandar recursos que me van a producir un de entonces digo, no, todavía no inicie, ni siquiera se

23:13 bloquea, no inicie, está prohibido que inicie hasta que se resuelva la situación que en la que usted participaría para causar una situación de ver estas estrategias. Entonces, tanto la de eh evitar que un proceso inicie como la de evitar asignar un recurso nos permiten evitar entonces el delux y para esto hay un algoritmo bastante empleado que es el algoritmo del Este algoritmo lo que nos permite es a través de una serie de matrices y vectores de los recursos necesarios y existentes reales nos permite conocer si hay un estado seguro por el cual podemos eh ordenar Claro, o cómo es que deberían irse asignando los recursos para evitar

23:58 que el deslo ocurra. Vamos a ver un ejemplo en la siguiente diapositiva. Acá podemos ver que e tenemos la matriz de lo que se solicita. Esta es la matriz C o la claim matrix, que es lo que sea solicitando cada proceso. Y tenemos en este caso tres recursos, cuatro procesos. Esto también viene en un Entonces uno requiere 3 de un 2 de 2 y 2 de tres. En este momento él ya tiene en la matriz de asignación es lo que ya él realmente ha utilizado y tiene asignado. Entonces sabemos que él va a requerir tres. En este momento tiene asignado uno. Quiere decir que 3 -

24:43 2 quiere decir que 3 - 2 nos va a dar la matriz C - A, que esta es una matriz calculada que uno podría ser. Y esta matriz 3 - 2, 3 - 1 nos da 2. O sea, que él todavía le queda pendiente por pedir dos. Esos son los que necesitaba, esos los que ya tiene y esto realmente sería lo que me hace falta por pedir. En este caso tenemos eh para este tenemos seis, ya tengo asignado seis, o sea, no me hace falta ningún recurso. Y así sucesivamente. Abajo tenemos eh dos vectores. Esos son vectores porque ya no dependen de proceso, sino ya de los recursos, los reales que tiene el sistema, o sea, el tope, por ejemplo, el uno tengo nueve y los disponibles tengo cero. ¿Cómo sé en

25:30 este momento que tengo ceros disponibles? Bueno, agarro y digo 1 + 6 + 2 da 1 + 6 7 + 2, 9, hay 9. 9 - 9 da 0. Sencillo. El que sigue del curso dos dice que tengo tres y tengo asignado 2 y 2. Quiere decir que tengo disponible 3 - 1 - 1 me queda 1. Del recurso 3 tengo 6 - 2 me quedan 4 - 1 me quedan 3 y -2 me queda 1, que sería este que está acá. Entonces, con esta matriz, yo puedo tratar de buscar cuál es la ruta segura. Y por ejemplo, si yo quisiera correr en

26:17 este momento, voy a agarrar el lápiz para poder ilustrar. Si yo en este momento quisiera correr el proceso uno, vamos a notar algo bastante curioso. Vamos a notar que el proceso uno requiere dos. Requiere dos de el recurso uno. Pero, ¿qué sucede? Tengo dos. No, no tengo dos. Entonces, no podemos ejecutar ese. Entonces, decimos que no es una ejecución segura. No tengo dos de este, no tengo dos del uno y no tengo dos del tres. O sea, para todos lados se nota, aunque yo pudiera estar pidiendo en este momento el recurso dos, ya se nota que permitir continuar con esto va a provocar un deadlock porque entonces no me va a permitir que ningún otro funcione. Por ejemplo, este dice que

27:02 todavía necesita uno y ya no hay y necesita cuatro y ya no hay. Vemos que la única posibilidad en este momento es ejecutar el número dos. Entonces, ¿qué hacemos? Ejecutamos dos y vemos cuánto necesito. Necesito uno del tres. Si necesito uno del tres, tengo uno. Sí, tengo uno. Entonces, puedo ejecutar esto. El programa termina tuc, termina la ruta segura y entonces todo esto que está aquí ya no existe. Ya me queda en el proceso 1, 3 y cu. ¿Y qué sucedería ahora? Bueno, lo que nos va a pasar es que estos recursos que estaban ahora asignados tengo que subirlos. Entonces, ahora tendría seis de este, ¿verdad? Porque volvería a ser la resta. 9 - 1 -

27:48 2 da 3 porque ya este 6 ya no está. Tendría dos uno de estes 1 si queremos 3 - 1 me da 2. Me daría dos, que sería el que liberó él. Y este igual me daría 6 - 1 y 5 y aquí serían tres, que sería lo mismo que sumar estos tres a estos dos. Ahora tengo estos nuevos recursos. ¿Cuál matriz puedo seguir corriendo? Vamos con el proceso uno y nos vamos a dar cuenta que tengo seis, me sirven. Tengo dos, me sirven y tengo tres, me sirven. Entonces ahorita este yo le puedo asignar todos los recursos para que terminen esa carrera simple y decir, "Ah, usted ocupa dos." Listo, yo le voy

28:35 a traer esos dos a usted. Entonces ahora usted va a tener los tres asignados. Ya tiene los tres asignados. Voy a ponerlo en color verde para que nos quede más sencillo. Él tiene los tres asignados. Ya, ahora tiene los dos asignados y ahora tiene los eh dos asignados que faltaban acá. Esto quiere decir que ahora este ya puede correr y quiere decir que en este momento, por supuesto, estos ya se vuelven a recontar. Entonces ahora me queda 3 y 2. Esta colda verde. 3 y

29:20 2 nos da 5. Nos da 4. Eh, luego es tenemos este nos dice que tenemos 2 y 1 3. Nos da cero de este, o sea, que este no podría y nos da 2 1 y 2. nos da cinco de seis, nos sobra uno. O sea, que ninguno de estos dos procesos, ni el tres ni el cuatro pueden seguir, porque en este caso, en el proceso cuatro, eh necesito cuatro de A y no tengo cuatro de A, está este sí están disponibles. Y eh necesito eh dos del B del recurso dos, pero vemos aquí que el recurso dos necesito dos que no

30:05 los tengo porque ahorita tengo cero. Y en el caso del proceso tres, no puedo correrlo porque necesito dos del curso tres que no los tengo. Entonces esto lo vamos actualizando, pero vemos que ya el proceso uno puede correr de manera solo individual. maquillando con concurrencia por dado que no nos salen las no nos salen los eh los recursos disponibles, pero una vez que este se termina de correr, entonces se devuelven los recursos, este termina y podríamos ir con el que sigue. En este caso, ¿qué se hizo? Se entregó y se acaba de dar entonces una liberación de recursos otra vez. Ahora, ¿qué tendría? dos recursos de este, tendría siete disponibles de este. Ahora, ¿qué pasa? Tendría uno nada

30:52 más ubicado de este y tenía tres, tendría dos, ¿verdad? 1 - 3 da 2. Y en este que tengo, tengo 1 + 2, 3 y tengo 6, me quedan tres. Aquí si vemos eh ya pueden ejecutarse sin ningún problema eh los dos recursos. Este ocupa cuatro y este ocupa uno. Me da cinco, se puede ejecutar. Este ocupa cer0, este ocupa dos, me da dos. Eh, tengo dos disponibles, se puede ejecutar. Este ocupa tres, este cer se acá. Y entonces P3 y P4 se pueden ejecutar simultáneamente de manera concurrente, ya sin problemas y resolviendo el de nunca ocurrió, lo logramos evitar de manera exitosa. Repitiendo entonces el proceso con estas matrices, la matriz de

31:38 cuánto es lo que voy a necesitar en el futuro, en todo momento, cuánto es lo que tengo asignada. que sería esta matriz, cuánto tengo asignada. Y acá me da la resta de las matrices que eh me dando la resta de las matrices eh de pedido contra lo que ya está ubicado. Luego de esto, busco entonces dónde está la ruta. Tengo esta siempre es estática, esta me la darían siempre en los problemas. un problema en el quiz. Esto vendría siempre en los problemas y esto simplemente se obtiene entonces de lo que está disponible, que sería lo que está ubicado menos o lo que tengo disponible lo realado, que sería la suma en esa columna, una álgebra matricial bastante simple. Y con esto busco el camino

32:24 seguro que pueda tomar para terminar y ojalá lograr la paralelidad de la manera más eficiente. Con eso terminamos lo que es el algoritmo de el panque. Ahora bien, ¿cuáles son las ventajas de prevenir que puedo vender? Lo primero es que no ocupamos que el sistema operativo maneje la capacidad prospiva. Ojo, la capacidad prospectiva siempre o por lo general está, pero esto me lleva un momento en que cuando el sistema operativo se apropia, entonces implica que el hay que guardar una instantánea de los recursos para luego yo volver a como estaba anteriormente. Esto nos hace gasto de tiempo entre recuperar una imagen, sacarla, resumirla, continuar con esa imagen y

33:11 eso hace que el sistema sea un poco más lento. Es eh menos restrictivo, como ven, a diferencia de el que previene y ni siquiera sale de la calle para evitar un accidente, ¿verdad? Y se queda en su casa encerrado para evitar que nunca lo atropelle un carro. En este es menos restrictivo, el si sale a la calle, pero hace los altos y toma todo bien y cruza, evitando que no ocurra, ¿verdad? a cada lado las distancias y entonces sí es tiene una actitud más proactiva. Eh, ya no es que tomo todas las decisiones para que son incapaces de que salir de la casa, sino que de una manera proactiva él va viendo lo que va a pasar para evitar una situación diética, pero tiene sus

33:56 limitaciones. Obviamente, como vieron, hay un algoritmo del banquero. Eso significa que yo tengo que estar viendo monitoreando estas matrices y eh tengo además o creo que tengo una cantidad fija de recursos y esto entonces gasto de tanto el recurso que estoy usando para implementar esta lógica, sino que también yo tengo una cantidad de recursos creados de manera fija para poder hacer estos cálculos y se complica un poco más. Entonces, estas limitaciones, todas esas dos, que son las más importantes, eh nos traen problemas eh sobre la implementación del técnico. Realmente muchas veces lo que hac es que se mezcan un poco las tres formas de lidiar, un poquito de cada uno para que un sistema operativo funcione

34:42 de la manera corre. Si comparamos a las estrategias del Deadbook y dear con las estrategias de detección, lo más importante es que en detectar el delux ocurre, porque para detectar algo esto que ocurrir, ¿verdad? para que usted pueda detectar que una persona ingresó a su casa de manera ilegal, eso tiene que ocurrir. Usted puede tener una estrategia de prevención que es que cierre todo. Puede tener una alarma que cuando la persona intente ingresar suene, entonces está evitando que la persona ingrese o que cuando va a entrar le cierre la puerta rapidísimo para evitar que entre. Pero si tiene una cámara dentro de movimiento, esto lo que hace es detectar al intros. Entonces ya sucedió, ya la intromisión entró ya elo que entró. Entonces, cuando hablamos de

35:28 evitar, estamos hablando de que las cosas no pasen, pero dejamos que sucedan y antes de que pasen actuamos. Cuando hablamos de prevenir es acciones que hacemos completamente para que esa situación ni siquiera tenga que pensar en la posibilidad de que exista. Y cuando hablamos de detectar tiene que suceder. Entonces, para hacer esto, para estar detectando, yo tengo que estar constantemente preguntando si eh hay deadlock, si hay deadlock, si hay y tomar alguna carta en el asunto cuando de poco. Entonces, los algoritmos para la detección dellock normalmente usan una técnica de frecuencia, hay dellock, hay dellock, hay del, hay dellock y hacen que aunque son muy permisivos y dejan de que el deck ocurra, las más fáciles de

36:13 implementar, eh van a estar gastando recursos haciendo esta pregunta que si tienen o por supuesto entre más frecuente sea este muestreo de sielo con idelo, entonces la detección va a ser relativamente rápida, no va a dejar muchos daños y es lo más sencillo de implementar, pero siempre requiere una cantidad de tiempo considerable. Entonces, el algoritmo que utilizamos para poder detectar un deck nos usa las matrices más o menos similares a las que utilizábamos en las eh matrices de evitar para detectar acá. Entonces, las matrices de detectar, a diferencia de la de evitar, utilizamos la Q. Como van a ver en la matriz Q tenemos las peticiones que se van a realizar, ya no lo que estaba

36:59 solicitado, sino lo que se va a solicitar en general a futuro, nada más en general complementario. Acá tenemos la matriz igual de lo que está ubicado y al igual que en la de evitar tenemos eh la matriz de vectores eh real de cuántos recursos hay y lo que está disponible. Básicamente lo que está disponible se saca sumando igual la matriz de ubicación. Por ejemplo, digo que tengo dos y hago uno. Tengo dos del recurso uno y hago 1 - 1 me da 0 dos otra vez -1 - 1 me da 0. De esta forma podemos entonces decir que eh se

37:47 parece bastante al algoritmo del banquero, a excepción de que aquí no estamos buscando una ruta segura, sino viendo si ocurre un delito. Por ejemplo, aquí podemos ver claramente que el proceso uno, lo vemos, el proceso uno requiere un recurso de el proceso dos, pero vemos que ya el recurso dos no tiene eh disponibles y este si nos fijamos en la tabla, este único recurso lo tiene el proceso dos. Entonces, ¿qué sucede? Bueno, que ocupamos que termine el proceso dos, pero cuando nos fijamos en el proceso dos, podemos ver que el proceso dos para terminar requiere el recurso tres. El recurso tres no lo tiene el asignado, dice que ya no hay disponibles. Y cuando

38:33 nos fijamos en la matriz, quien no tiene es el proceso uno. Entonces, podemos ver que esta parte de aquí nos está generando esta partecita de aquí, que viene siendo esta parte de aquí y que yo no puedo ubicarlo porque ya están en ceros estos dos recursos. Me está generando un deadlock entre el proceso uno y el proceso dos. Entonces, cuando ya sucede esto y vemos que ha sucedido el deock, cuáles son las estrategias que podríamos seguir para resolver este problema del del una vez que ya detectamos qué ocurre. La más básica es abortar todos los procesos y entonces si aborto todos los procesos,

39:19 libero todos los recursos y luego puedo ordenarlos para irlos encendiendo de manera correcta. Eh, para hacer esto, entonces hacemos todos los que están en verdad eh para hacer esto eh hacemos y podemos hacer puntos de Rmax. Entonces, lo que hago es que guardo esa instantánea otra vez y vuelvo a cuando inicio los procesos los dejo en el momento en que estaban. Recuerden que al final la ventaja es que todos son datos y los datos del proceso pues pasar a la memoria secundaria eventualmente y restituirlos. Si fue la memoria rama el problema. Si memoria el problema, eh pues incluso podría estar en la RAM. Eh, luego de que ya tenemos apagamos los procesos en problema y eh creamos puntos de recuperación, hacemos una terminación o podemos hacer una terminación más bien

40:06 selectiva para eh en lugar de apagarlos todos decir, "Bueno, voy a apagar este a ver si resuelve el ah, no lo resuelvó, entonces apago este, a ver si lo resuelve y vamos haciendo hasta que se resuelva el de lo que hay." Entonces haces, no hace falta quitar todos los carros del tránsito. Con que yo quite un carro es más que suficiente, ¿verdad? Pero si quito uno y no resuelve, pues tengo que quitar otro y así sucesivamente. Y eh la otra es que entonces el sistema operativo va a ir sucesivamente quitando estos eh quitando estos delux, ¿verdad? Conforme ya ocurrieron. Vea que aquí ya no es cuando puede ocurrir o cuando yo veo que va a ocurrir. Aquí es ya el delux sucedió. Ya tiene tiempo estar corriendo. Unos milisegundos. unos segundos, ¿verdad? milisegundos está recurriendo y entonces el sistema operativo decide quitar eh el proceso de

40:55 actuación de estas maneras siendo abortando todo o de manera selectiva. Entonces como un resumen comparativo, podemos decir que tenemos tres enfoques para lidiar con los delux, prevenirlo, evitarlo y detectarlo. Como vemos, el más conservador es el que lo previene. Este es el que evita toda costa que pueda suceder. previene toda costa para ser consistente con el vocabulario de que pueda suceder. Eh, tiene como desventaja grandes que es ineficiente porque entonces no está usando el máximo provecho, no está no dejar avanzar las cosas, no está sacando el máximo provecho de de la concurrencia, prácticamente está siendo tan estricto y tan evitando que algo o previniendo que algo suceda que toma decisiones que no

41:41 sacan el máximo provecho de los recursos del sistema. Por otro lado, tenemos la capa media, que es evitarlo. Aquí ya no necesitamos que haya la capacidad prospectiva, que es un eh ventaja. Y eh podemos decir que como desventaja es que sí necesitamos saber cuáles son los recursos que van a ser utilizados en el futuro. Vean que a diferencia del de detectar es lo que ya está en el momento, la instantánea y cómo está en el momento. Entonces este es el más liberal de detectar. Aquí ocurren las cosas y como les decía, la diferencia entre la matriz Q y la matriz C, la claim y la request es que la matriz claim es el conocimiento futuro. La request es una instantánea lo que está pasando ahorita. Esto es lo que me están pidiendo y esto es lo que yo tengo ubicado y esto es lo que tengo disponible. Entonces en esta permite que

42:28 absolutamente todo suceda y cuando se el de toma una acción que obviamente esta acción de de si ocurre poco, pues es la mejor opción y más fácil implementar, pero cuando ocurre o si ocurre muy frecuentemente pues eh necesita entonces hacer una rutina de de cooperación y el de y demás. Cada eh una de estas opciones tiene sus ventajas, sus desventajas. Como les digo, la más sencilla de implementar es la de detección porque ocurrió nada más que se está monitoreando, eso también gasta recursos y cuando ocurre pues sí tenemos que apropiarnos de los recursos y eso le uno o todos muéranse y establezcanse. En el caso de lación, en el caso de evitar meramente no lo dejo iniciar, no lo dejo que corra, no le doy los

43:14 recursos o verdad le niego los recursos o le niego que inicie, entonces no ocupa ser apropiativo, vea que las dos decisiones no son aproposivas a diferencia de los otros dos enfoques que pueden usar eh la propia actividad. Digo, pueden usar porque en el caso de la detección es obligatorio puede apropiar. En el caso de la prevención, puede ser que sea mediante actividad o puede ser que sea mediante pedir todos los recursos al inicio. Entonces, eh no está sacando la mayor ventaja de la concurrencia que cuando yo no estoy usando un recurso, alguien más lo pueda estar usando, pero también está la propetía. Entonces, en ese puede ser. Y viendo aquí el tema de los cinco filósofos que toman una cena, cada quien

44:00 tiene un tenedor eh al lado derecho. Dijo que fueron palitos chinos. Me parece más convincente que para comer necesitan los palitos chinos. Dice que es un for, que es un tenedor, pero digamos que los palitos chinos suenan más convincentes. Solo hay cinco palitos chinos y tienen uno a la derecha y uno a la izquierda. Entonces, para poder comer cierto que usted lose como ch pinzón, pues ocupa los dos palitos chinos, ¿verdad? Para poder ahí agarrar la comida. Claro, los filósofos no eran griegos, sino asiáticos, entonces no quedó con que es que me parece que eran con palitos, pero bueno, el tema es que cómo podemos hacer que todos coman sin caer en hambruna. Entonces, para lidiar con este problema, digamos, hay tres enfoques en que se podría solucionar. es uno de los

44:45 primeros más tradicionales del mundo de concurrencia, lo verán en probablemente está en TikTok y básicamente eh podríamos tener una solución en la que yo tengo un mesero wiers, ¿verdad? Y entonces él diga quién come. Entonces es como que árbitre dice para coma primero usted, use los dos palitos. Ahora dice, "Tengo cinco palitos, eh, y cada uno ocupa dos y tengo cinco personas, solo pueden comer dos al mismo tiempo. Entonces, coman ustedes dos, luego coman ustedes dos y ya se arregló el problema y luego come el último, eh, y quedaría arreglado con que alguien lo arbitre o que alguien sea el dueño de los palitos que tenga el monitor y él los vaya dando conforme se van necesitando y diciendo quién va comiendo. Esos son muy parecidos. La diferencia es que el árbitro no toca los palitos y el monitor

45:31 es el que los entrega porque es el dueño de los palitos. Pero hay otra forma que es eh dándole un número, digamos, a cada uno de los recursos y que no necesita de un áreo, sino que todos acuerdan ponerse una regla para no meter a nadie más y dicen, "Bueno, vamos a agarrar empezando con a." Vamos a agarrar y vamos a decir eh voy a poner aquí un color a los muchachos. Entonces, te vas a llamarse A. el filósofo A, el filósofo B, el filósofo C y el filósofo D. Y también pongámosle un nombre a los palitos. Eso sería el palito uno, el palito dos, el palito tres y el palito cuatro. Entonces, a llega y dice, "Todos van a agarrar el palito que tengan a su lado,

46:18 el de menor número." El del menor número. Entonces, A dice, "Sí, el de menor número. Primero agarro esto, yo tengo el uno. Luego Bien dice, yo puedo agarrar el dos. Luego viene C y dice, de menor número mío es tres, ¿verdad? Lo podemos ver ahí. Y luego viene D y Dice, "El menor de D sería entre 1 y 4, que son los dos palitos que él tiene. Entre 1 y 4. El palito de menor número es el uno, pero el uno ya lo tiene a. Entonces, a le toca esperar. Y entonces viene ahora dice, bueno, viene a y dice, bueno, yo voy a agarrar el palito que tengo de segundo orden. Ah, pero es el dos. Y el dos, ¿quién lo tiene? Lo tiene B. No, yo todavía no puedo comer. Viene B y dice, "Yo voy a intentar." Dice, "El mío sería dos y tres. Yo ya tengo el

47:04 dos." Me toca agarrar el tres. Uy, tres lo tiene. C. Yo todavía no puedo comer. Pero viene Cis. Se dice, "El que yo tengo es cuatro y cuatro nadie lo tiene. Entonces yo puedo comer como verdad los palitos y hace empieza a comer, termina de comer y entonces cuando él termina de comer ya se sale de la jugada. Pero D todavía no puede entrar porque D ocupa uno y uno lo tiene A. Entonces A dice, "Bueno, yo puedo, pero A sigue ocupando dos y dos todavía lo tiene B, pero en este momento B ya puede continuar porque 13 se fue. Como 13 se fue, liberó el palito, el palito tres lo liberó. Entonces B puede tomar este palito, come y se puede ir liberando el

47:52 palito dos y tres. Viene D y Dice, yo ya puedo comer. Bueno, en este caso ya tendría palitos para comer, ¿verdad? Pero suponiendo que eran la orden de recursos que iba a tener, a de entonces se le dice, bueno, usted tiene el palito, eh, podría agarrar el 413 dependiendo en cómo haya sido las velas que se hayan puesto, ¿verdad? Porque ya ahí tendría, de hecho, ya tendrían suficientes palitos en este momento. Ahí están los dos que podrían comer simultáneamente y podríamos en el peor de los escenarios llegar y decir que ahora Aí puede comer porque A tiene dos. Entonces, A puede terminar de comer y por último ya quedaría B comiendo solo. Ojo que aquí pueden aplicarse eh, como

48:38 les digo, si los palitos es el mismo recurso, el mismo tipo de recurso, como en este caso que es palitos, lo más lógico entonces era que era comido, como ven, primero comía C, cuando ya comía C se liberaba dos palitos. Entonces, le podía dar un palito a A y un palito a B. Cuando estos dos terminaban, pues ya le dejaban comer a D. Eh, pero aquí es pensando que los recursos pueden ser el mismo y la regla decía que tenía que ser uno de los dos palitos que está a su lado, no cualquiera, sino los que están a los lados los que él ocupaba por esa razón de que no el último, pero se solucionó sin llegar a Bueno, eso sería todo por esta semana. Muchas gracias. M.

Share

YouTube Video Summaries