C Linux Posible Abrazo Mortal - 08 — Transcript
Full transcript
- 0:01Muy buenos días, hoy vamos a hacer un
- 0:02vídeo que muestra un ejemplo de una una
- 0:06secuencia de ejecución de dos procesos
- 0:10donde eh se puede producir un abrazo
- 0:13mortal, ¿sí?
- 0:14Bueno, con respecto al asombro que
- 0:16ustedes pueden tener con respecto a
- 0:17esto, este sobre el final del vídeo
- 0:20vamos a dar la explicación.
- 0:25En este ejemplo no queremos construir
- 0:27una sección de entrada y una sección de
- 0:29salida
- 0:30en base a una secuencia de ejecución de
- 0:33procesos
- 0:34preestablecida. Al contrario, en este
- 0:36caso queremos analizar dada una
- 0:39situación o dada o dos procesos con su
- 0:42sección de entrada su sección de salida
- 0:45sí eh y dos semáforos inicializados en
- 0:49uno queremos ver si se eh esa esta
- 0:53situación eh produce eh en una secuencia
- 0:56de ejecución
- 0:58un bloqueo de proceso
- 1:00y un bloqueo de proceso B. Bien, estas
- 1:02son algunas de las secuencias posibles
- 1:04que se pueden generar durante la
- 1:07ejecución de los procesos A y B.
- 1:09Por ejemplo, podría ejecutar el proceso
- 1:11A sin ningún problema y funcionaría
- 1:12bien. Entonces, solamente el proceso A
- 1:15entraría en su sección de en su sección
- 1:17crítica. Lo mismo pasaría con el proceso
- 1:19A proceso B, perdón. Podría entrar en su
- 1:22sección crítica y seguir continuamente
- 1:25ejecutando en su sección crítica,
- 1:27entrando y saliendo de su sección
- 1:29crítica,
- 1:30no quedándose siempre en su sección
- 1:32crítica.
- 1:34También se podría dar la secuencia B A B
- 1:37este A B A B ininterrumpidamente,
- 1:40también se puede dar la secuencia B A B
- 1:42A B A ininterrumpidamente, lo mismo con
- 1:46A A B B A A y continuar A infinitamente
- 1:50y también se puede dar
- 1:52B B A A infinitamente, ¿sí? Bueno, y
- 1:55también puede pasar que cualquier
- 1:58secuencia que hagan puede terminar en un
- 2:01abrazo mortal, ¿sí?
- 2:03Y también podrían comenzar en un abrazo
- 2:05mortal,
- 2:06¿sí? Ahora vamos a tratar de ver eh con
- 2:09alguna explicación más en detalle por
- 2:11qué sucede esto o dar la explicación de
- 2:13por qué puede producirse un abrazo
- 2:15mortal en cualquier momento o comenzar
- 2:17con un abrazo mortal.
- 2:19También tiene que quedar claro que estas
- 2:20son algunas secuencias posibles, puede
- 2:22haber muchas más secuencias posibles de
- 2:25ejecución, ¿sí? De hecho, esta situación
- 2:29planteada aparece en algunos libros de
- 2:31sistemas operativos
- 2:32eh cuando se explica el problema del
- 2:35abrazo mortal, que donde el abrazo
- 2:37mortal es un este interbloqueo de
- 2:41procesos que intervienen en un sistema,
- 2:44¿sí? Así que bueno, eh es un, digamos,
- 2:47un ejemplo muy conocido, ¿sí?
- 2:51Bien, para entender esta situación eh
- 2:54del bloqueo del proceso A y el bloqueo
- 2:57del proceso B, aparecen tiene tenemos
- 3:00que volver a conceptos a conceptos
- 3:02básicos que aparecen siempre, siempre
- 3:04van a aparecer estos conceptos durante
- 3:07todos estos temas. Es como el caballo en
- 3:10una calesita y la calesita gira, el
- 3:12caballo siempre va a aparecer, si te
- 3:14quedas mirando la calesita desde
- 3:15cualquier punto, siempre el caballito va
- 3:18a aparecer, aparece el caballito, pega
- 3:19una vuelta, aparece el caballito, bueno,
- 3:21¿cuál es el caballito acá? ¿Cuál es que
- 3:23es cuáles son los conceptos caballito
- 3:25que tienen que aparecer? Bueno, un
- 3:27concepto es el de la multiprogramación.
- 3:29Otro concepto es el de
- 3:30monoprocesamiento, ¿sí?
- 3:32Y otro concepto es el de planificación
- 3:34de CPU. O sea, esos tres conceptos
- 3:37tienen que quedar claros porque son los
- 3:39que nos hacen entender por qué se puede
- 3:43eh llegar a un bloqueo del proceso A y
- 3:46un bloqueo del proceso B, ¿sí? Así que
- 3:48vamos a repasar esos conceptos con esta
- 3:50diapositiva. Concepto de
- 3:52monoprocesamiento.
- 3:54Entonces, eh el ejemplo que estamos
- 3:57proponiendo
- 3:59eh lo estamos desarrollando o pensando
- 4:01sobre un sistema operativo que está
- 4:03montado sobre un hardware con un solo
- 4:06procesador.
- 4:07Entonces, esto es como eh tener una
- 4:10bicicleta en casa y somos muchos
- 4:12hermanos. Entonces, esa bicicleta hay
- 4:15que compartirla. La bicicleta es el eh
- 4:18procesador y eh todos nosotros somos
- 4:22procesos. Entonces,
- 4:24la única forma de usar la bicicleta,
- 4:26digamos, sin peligro es usarlo por
- 4:30turnos y de a una persona, ¿sí?
- 4:33Entonces, un proceso toma el procesador
- 4:35y los demás esperan, ¿sí? Su turno.
- 4:39Otro concepto, el concepto de
- 4:40multiprogramación.
- 4:42Y otra vez aparece esta diapositiva.
- 4:45Sí, y otra vez aparece el caballito de
- 4:47la calesita. Entonces, un proceso está
- 4:50running, ¿sí? Cuando está usando el CPU,
- 4:53o sea, acá tenemos la bicicleta que está
- 4:55siendo usada por un por un hermano, por
- 4:57una persona, ¿sí? Ahora bien, puede
- 5:00haber una interrupción, entonces, el
- 5:02proceso deja la deja la el procesador eh
- 5:06o el hermano deja la bicicleta y vuelve
- 5:09a esperar por el procesador o por la
- 5:11bicicleta. Esa es una posibilidad. O que
- 5:14el proceso termine, ¿sí? Que sería lo
- 5:16mismo que una persona dice, "Bueno, yo
- 5:18ya no uso más la bicicleta." Me
- 5:20¿sí? Otra alternativa sería que eh el
- 5:24proceso decida hacer otra cosa, llevar
- 5:26adelante una actividad. Por ejemplo, el
- 5:28proceso dice, "Voy a hacer una
- 5:29entrada-salida." O eh la persona que
- 5:31está en la bicicleta dice, "Bueno, voy a
- 5:33parar este un poco a juntar flores,
- 5:35después vuelvo a esperar mi turno para
- 5:37eh usar de nuevo la bicicleta." La
- 5:39multiprogramación se da cuando un
- 5:42proceso
- 5:43deja la CPU por una interrupción o
- 5:45porque terminó o porque decide hacer una
- 5:48espera de entrada salida o espera un
- 5:50evento, entonces el sistema selecciona
- 5:54un proceso de los que están en ready o
- 5:56en listos para que tome la CPU, ¿sí?
- 6:00Bueno, ese proceso va a tomar la CPU y
- 6:01puede pasar exactamente lo mismo, puede
- 6:03ocurrir una interrupción, puede terminar
- 6:05o puede también decidir realizar una
- 6:07entrada salida o esperar por un evento,
- 6:10¿sí? Eh, entonces de nuevo el sistema
- 6:14selecciona un proceso eh
- 6:17de los que están esperando en listos, en
- 6:18ready, para asignarle la CPU, ¿sí?
- 6:21Bueno, el proceso de la selección
- 6:23después este veremos los planificadores
- 6:26de CPU, cuál es el criterio o cuáles son
- 6:28los criterios que utiliza el sistema
- 6:31para determinar quién qué proceso toma
- 6:35la CPU o a ver, ¿a quién le damos la
- 6:38bicicleta porque se ganó porque se
- 6:39porque se portó bien, ¿sí? Bueno, eh ese
- 6:43sería el concepto de multiprogramación
- 6:45concurrente, porque hay un solo
- 6:47procesador, ¿sí?
- 6:48Bueno, acá vemos la estructura del
- 6:50proceso A, tal cual lo planteamos este
- 6:52al comienzo del video, ¿sí? Ahí vemos la
- 6:55sección de entrada, la sección crítica y
- 6:57la sección de salida, ¿sí?
- 6:59Eh, sin olvidar que los los perdón, los
- 7:02semáforos están inicializados
- 7:04originalmente en uno.
- 7:06Bueno, acá vemos la estructura del
- 7:08proceso B
- 7:10con su sección de entrada, su sección
- 7:12crítica y su sección de salida, pero
- 7:15hay un detalle muy importante,
- 7:18que en la sección de entrada del proceso
- 7:20B
- 7:21el primer wait es sobre el semáforo B y
- 7:24el segundo wait es sobre el semáforo A.
- 7:27En cambio, si volvemos al pseudocódigo
- 7:30del proceso A, vemos que en la sección
- 7:32de entrada del proceso A, tenemos
- 7:34primero el wait sobre el semáforo A y
- 7:36después el wait sobre el semáforo B, o
- 7:38sea, que están invertidos los wait en
- 7:41las secciones de entrada de los eh dos
- 7:44procesos, ¿sí?
- 7:46Bueno, ahora vamos a entrar en el
- 7:47terreno de las suposiciones
- 7:49y vamos a suponer que en algún momento
- 7:52el semáforo A y el semáforo B están en
- 7:54uno, pero resulta ser que eh el sistema
- 7:58le otorga el procesador al proceso A.
- 8:01Entonces, el proceso A hace un wait del
- 8:04semáforo A que está en uno,
- 8:06entonces pasa
- 8:08eh esa instrucción la pasa porque el
- 8:11semáforo A está en uno, entonces después
- 8:13de pasarla el semáforo A queda en cero,
- 8:15pero justo antes de comenzar a hacer el
- 8:17wait del semáforo B hay una
- 8:19interrupción.
- 8:21Entonces, ya dijimos que es eh en
- 8:23diapositivas ante en la en diapositivas
- 8:25anteriores que si un proceso está en
- 8:27ejecución y hay una interrupción,
- 8:30entonces puede pasar que ese proceso
- 8:33vaya a a estado de listo, o sea, cambie
- 8:36estado de listo y deje la CPU. Bueno, en
- 8:38ese momento el sistema operativo decide
- 8:40darle el procesador al proceso B, el
- 8:42proceso B hace un wait del semáforo B
- 8:44que está en uno, entonces lo pasa y lo
- 8:46deja en cero y ahora se enfrenta al wait
- 8:49del semáforo A. ¿Qué sucede en ese
- 8:51momento? Bueno, el proceso B se bloquea
- 8:53porque el semáforo A está en cero,
- 8:56entonces seguramente
- 8:59el sistema le va a quitar el procesador
- 9:01y se lo va a dar a otro proceso,
- 9:03entonces suponemos que se lo da
- 9:05nuevamente al proceso A, pero el proceso
- 9:07A entra ahora en el wait sem B, entonces
- 9:10ahora el semáforo B está en cero,
- 9:12entonces el proceso A también queda
- 9:14bloqueado, ¿sí?
- 9:16Bueno, ahí estamos en la explicación de
- 9:18por qué en algún momento de eh la
- 9:20ejecución los procesos pueden quedar
- 9:23bloqueados.
- 9:24Bueno, vamos a ver qué pasa en el Linux.
- 9:28Como siempre, primer paso, crear
- 9:30semáforos.
- 9:32Bueno, estos pasos los vamos a hacer
- 9:33rápido porque ya lo venimos viendo en
- 9:35otros videos, así que bueno, ejecutamos
- 9:37el comando ipcs -s.
- 9:40Vemos que no tenemos ningún semáforo
- 9:41creado, vamos a editar
- 9:44el programa fuente que crea semáforos.
- 9:47Acá lo tenemos, vamos a indicar
- 9:49solamente que
- 9:50en este programita ahí marco solamente
- 9:53que queremos crear dos semáforos, el
- 9:55semáforo cero y el semáforo uno.
- 9:59Así que ya compilé para no perder tiempo
- 10:03y vamos a ejecutar crea.
- 10:05Perfecto y ahora
- 10:08entonces tenemos dos semáforos en el
- 10:11array 589840,
- 10:13con clave de usuario
- 10:15número hexadecimal A, ¿sí? Bueno.
- 10:18Primer paso cumplido.
- 10:20Segundo paso, inicializar semáforos.
- 10:24Bueno, vamos a ver el programa que
- 10:28inicializa los semáforos.
- 10:30Eh, acá tenemos
- 10:33el semcontrol para iniciar el semáforo
- 10:36cero, que sería el semáforo A en uno
- 10:38y el semcontrol para inicializar el
- 10:41semáforo uno, que sería el semáforo B en
- 10:43uno, o sea, que ya tenemos
- 10:45cuando ejecutemos este programa, vamos a
- 10:48tener los dos semáforos inicializados en
- 10:50uno.
- 10:51Bueno, ya lo compilé para no, para hacer
- 10:53más rápido.
- 10:55Bueno, no nos dio ningún tipo de de
- 10:58información en el shell, así que
- 10:59suponemos que ejecutó bien. Entonces,
- 11:02ahora vamos a ejecutar el programa que
- 11:04ve
- 11:05eh, qué valor tienen los semáforos.
- 11:08Vamos a mostrarlo.
- 11:10Versem.
- 11:15Bueno, acá tenemos el código de versem.
- 11:18El semcontrol, ¿sí? Dentro de un printf
- 11:22para mostrar el valor del semáforo A.
- 11:25Eh, mostrame, dame el valor, devolveme
- 11:27el valor del semáforo cero
- 11:30y lo mismo para el semáforo 1,
- 11:32devuélveme el valor de el semáforo 1,
- 11:35que es el semáforo B.
- 11:37Bien.
- 11:38Ya lo tengo compilado, así que
- 11:41vamos a ejecutar ver. Ahí vemos, la
- 11:44inicialización fue correcta.
- 11:47¿Sí? Así que ya tenemos el paso 2
- 11:50hecho.
- 11:51Bueno, vemos los códigos de los eh
- 11:54procesos A y B.
- 11:56Vamos a ver el código del proceso A.
- 12:02¿Sí? Bien. Bueno, acá tenemos el ciclo
- 12:05infinito,
- 12:07la sección de entrada,
- 12:10la sección de entrada del proceso A, un
- 12:13wait del semáforo A, o un wait del
- 12:15semáforo B,
- 12:17la sección crítica
- 12:19y la sección de salida, un signal del
- 12:21semáforo B y un signal del semáforo A.
- 12:25Bien.
- 12:26Y
- 12:29ya habíamos explicado
- 12:31qué sucedía con la sección de entrada
- 12:34del proceso B,
- 12:36¿sí? Está invertida, los wait ahora
- 12:39corresponde el primer wait al semáforo B
- 12:42y al segundo wait del semáforo A en la
- 12:44sección de entrada y la sección de
- 12:46salida es indistinto si hacemos un
- 12:50signal de A y después un signal de B o
- 12:52un signal de B y después un signal de A.
- 12:55¿Sí? Recuerden las operaciones P de
- 12:58proberen, de wait, B de verogen, de
- 13:02signal, ¿sí? Eh y
- 13:06recuerden que hay un archivo que se
- 13:08llama
- 13:09P y B,
- 13:11¿sí? Que configura
- 13:14que configura el este
- 13:18la operación wait y la operación signal,
- 13:21¿sí? Esto lo podemos sacar ya.
- 13:26Bien.
- 13:29Bueno,
- 13:31ya hemos eh compilado con el script
- 13:35compilar,
- 13:37¿sí? Hay que enlazar los objetos,
- 13:41pero lo ejecutamos de nuevo, ahí está,
- 13:45así que ya tenemos nuestros ejecutables
- 13:48proceso A PA y proceso B PB, ¿sí?
- 13:53Bueno, ahora solo nos queda ejecutar y
- 13:55ver qué pasa.
- 13:57Bueno, ahí abrimos dos terminales, una
- 13:59para ejecutar el proceso A
- 14:03y otra para ejecutar el proceso B.
- 14:05Recuerden que son procesos
- 14:07independientes,
- 14:10¿sí?
- 14:11Así que bueno, vamos a ver qué pasa si
- 14:12mandamos ejecutar el proceso A. Fíjense
- 14:15que tenemos una secuencia infinita,
- 14:17¿sí? Sin ningún problema.
- 14:20Eh y vamos a ver ahora si mandamos
- 14:23ejecutar el proceso B.
- 14:25Fíjense, se bloqueó, ¿sí? Ahí tenemos un
- 14:28bloqueo.
- 14:29¿Sí? Esto puede suceder o no puede
- 14:32suceder, eso depende, ¿sí? Se pueden
- 14:34generar distintos tipos de secuencias,
- 14:38¿sí? Puede haber bloqueo o no
- 14:40necesariamente puede haber bloqueo, ¿sí?
- 14:42Vamos a Fíjense que también se canceló
- 14:45acá, se bloqueó el proceso se bloqueó el
- 14:48proceso A, ¿no?
- 14:49Bueno, vamos a cerrar esto, vamos a
- 14:51terminar el proceso porque están
- 14:52bloqueados
- 14:54con control C, sigint.
- 14:57Bien, vamos eh a hacer otra prueba.
- 15:03Bien, vamos a ver cómo quedaron los
- 15:06semáforos.
- 15:09En cero, ¿ven? Están los dos semáforos
- 15:10en cero, así que vamos a inicializarlos
- 15:12de nuevo.
- 15:15Ahí está.
- 15:17Bien, los dos semáforos quedaron en
- 15:18cero, si se los procesos A y B están
- 15:20bloqueados es porque los dos semáforos
- 15:21están en cero. Lo iniciamos ya, lo
- 15:23inicializamos de nuevo, lo vemos,
- 15:25limpiamos y ahora vamos a mandar
- 15:27ejecutar primero el proceso B. Fíjense,
- 15:31ahí tenemos una secuencia infinita de B
- 15:33y ahora mandamos ejecutar el proceso A.
- 15:35Fíjense que ahora ni siquiera
- 15:38ahí tenemos otra secuencia porque ahí se
- 15:40bloqueó y ni siquiera este el proceso A
- 15:44pudo eh hacer una vez la sección
- 15:47crítica. En el ejemplo anterior este
- 15:50entró una vez a la sección crítica. Así
- 15:52que bueno, podríamos seguir probando y
- 15:54seguramente tendríamos distintas
- 15:57este veríamos distintas secuencias de
- 15:58ejecución, ¿sí? Y si modificamos eh el
- 16:02nivel de multiprogramación
- 16:04o si ponemos más instrucciones dentro de
- 16:05la sección crítica, seguramente las este
- 16:09digamos las secuencias van a ir
- 16:11cambiando, pero obtuvimos un dos
- 16:13ejemplos con bloqueo. Bueno,
- 16:16perfecto.
- 16:19Bueno, espero que haya aclarado algunas
- 16:21dudas y bueno, acá termina el video.
- 16:25Eh bueno, en realidad no, el video no
- 16:27termina acá, termina acá la explicación.
- 16:28Ahora viene el video sigue, pero para
- 16:30los que se quieran quedar, para los que
- 16:32se quieran ir, este cerrar la ventana
- 16:35puede pueden hacerlo sin ningún
- 16:36problema. De hecho no los estoy mirando,
- 16:38así que
- 16:41este bueno, eh le quiero agradecer a
- 16:44Nahuel por su comentario en el video
- 16:47anterior a este, en el último.
- 16:49Eh
- 16:51en el último anterior a este, por su
- 16:52comentario, la verdad que me me cayó muy
- 16:54bien.
- 16:55Eh Nahuel dice en el en el en el
- 16:58comentario que extraña eh mis
- 17:00carcajadas, la verdad que me cayó muy
- 17:02bien ese comentario y me hizo
- 17:05reflexionar porque tenía un poco
- 17:08olvidada esa parte de mí. Este así que
- 17:11bueno, decidí reflotar o mejor dicho
- 17:14decidí
- 17:15ser el que fui siempre, ¿no? Pero bueno,
- 17:18por motivos que todos estamos viviendo
- 17:20un poco la carcajada, este, no no tenía
- 17:24con quién compartirla en casa, si me
- 17:26yo me río, pero
- 17:28algunas veces se cansan de escucharme
- 17:29reír, así que bueno,
- 17:31este, y bueno, eh cuando estoy en el
- 17:34aula no se cansan porque porque me
- 17:36tienen respeto nada más.
- 17:39Y miedo quizás, no sé.
- 17:41Pero entonces dije, bueno, no, vuelve la
- 17:44carcajada, pero bueno, decidí
- 17:46yo decidí convertirme en un en un
- 17:49superhéroe sin poderes o en un
- 17:50antiheroe, un tipo Hancock, Hancock
- 17:52tiene poderes, ¿no? Pero yo si fuera un
- 17:54superhéroe seguramente sería muy
- 17:55parecido a Hancock. Este, pero sin
- 17:58poderes, así que bueno, este,
- 18:01me voy a poner nombre, me voy a poner
- 18:03nombre, este,
- 18:05voy a ser el payaso Risota, ¿sí? Mmm, si
- 18:09quieren que me lo cambie después me
- 18:11dicen, cámbiese el nombre que Risota no
- 18:12me gusta, pero una vez que uno, este, eh
- 18:15ya saca Risota, este,
- 18:19le va a quedar de por vida, así que
- 18:20bueno, y yo no sé si voy a poder sacarme
- 18:23esto alguna vez, mmm porque intento
- 18:25sacármelo hace ya hace desde que leí el
- 18:27comentario duermo con esto y no me lo
- 18:30puedo sacar, la nariz tampoco me la
- 18:31puedo sacar, así que bueno, sé, me baño
- 18:33con esto, este, después tengo que salir
- 18:35al sol para secarme, así que bueno, pero
- 18:37bueno, eh Risota, que es un tipo un
- 18:40payaso, con el perdón de los payasos
- 18:42profesionales, este, yo soy realmente un
- 18:46payaso,
- 18:47¿sí? Así que bueno, eh bienvenido Risota
- 18:51al mundo de de la risa y bueno, mmm me
- 18:56autoprocla me autoproclamo
- 18:58paladín de la risa, ¿sí? Así que bueno,
- 19:01muchas gracias Nahuel, este, me hiciste
- 19:04reflexionar y bueno, entonces
- 19:08cuidado con Risota,
- 19:10que es de temer.
- 19:12que es de temer.
About this transcript
This page contains the full transcript of C Linux Posible Abrazo Mortal - 08 by juancarlosjromer, generated from the public captions YouTube serves with the video. The transcript has 2,769 words across 472 segments, with the original timestamps preserved so you can click any line to jump to that moment in the embedded player.
What you can do with it
Use the transcript to take notes, quote the speaker, build a study guide, generate a summary with ChatGPT or Claude via the YouTube Summary tool, or export it as a timed subtitle file with YouTube to SRT. You can also re-open it in the transcriber to translate the transcript into 100+ languages.
Free YouTube transcript tool
YouTube2Text is a free YouTube transcript generator — no signup, no daily limit. Paste any YouTube link and get the full transcript instantly, with timestamps, click-to-jump, translation to 100+ languages, AI prompts for ChatGPT, Claude, and Gemini, and exports to TXT, SRT, VTT, or Markdown.