C Linux Semáforos System V ABoCDoE 07 — Transcript
Full transcript
- 0:00Muy buenas tardes, eh, en este vídeo
- 0:02vamos a mostrar un ejemplo, un ejercicio
- 0:05de una sincronización de ejecución de
- 0:08procesos independientes utilizando
- 0:11semáforos System 5.
- 0:14Bien, acá mostramos cuatro secuencias
- 0:16válidas de ejecución, siempre comienza
- 0:19el proceso A, después del proceso A eh,
- 0:22continúa el B o el C, no ambos, o uno u
- 0:27otro, B o C. Y después de B o C viene D
- 0:31o E, no ambos, D o E. Sí, siempre la
- 0:35secuencia empieza con A, después de A
- 0:37tiene que venir B o C y después tiene
- 0:39que venir D o E y después se empieza con
- 0:42A.
- 0:42Ahí vemos algunas secuencias válidas,
- 0:45por ejemplo, A B D A, ¿sí? Eh, durante
- 0:48la ejecución infinita de de los procesos
- 0:52puede ser que eh, la planificación
- 0:55cambie y eh, pase a a otra a otra
- 1:00secuencia, por ejemplo, esa que también
- 1:02es válida, ¿sí? Y también puede pasar al
- 1:05a la a la tercera o a la cuarta
- 1:07ejecución, pero siempre se tiene que
- 1:08mantener alguna de esas cuatro eh,
- 1:12secuencias válidas. Bien, acá vemos
- 1:14algunas secuencias inválidas, por
- 1:16ejemplo, la primera, eh, después de A no
- 1:18puede venir B y C, la segunda, después
- 1:22de B no puede venir D y E, la tercera,
- 1:25eh, mucho menos puede venir después de A
- 1:29B y C y después de D y E, eh, la cuarta
- 1:32no puede empezar una secuencia con B y
- 1:36la quinta no puede empezar una secuencia
- 1:38con D. Bueno, seguramente hay otras eh,
- 1:40secuencias inválidas.
- 1:42Bien, acá vemos la estructura gené-
- 1:45genérica de los procesos A, B, C, D y E,
- 1:49todos tienen la misma estructura, una
- 1:50función principal haciendo referencia al
- 1:52lenguaje C, a la función main, después
- 1:55van a entrar en un ciclo mientras por
- 1:57siempre, donde van a tener una sección
- 1:59de entrada, una sección crítica y una
- 2:01sección de salida, ¿sí? Donde en la
- 2:03sección de entrada nosotros vamos a
- 2:05tener que evaluar el semáforo, a ver si
- 2:07podemos entrar, y en la sección de
- 2:09salida vamos a tener que liberar el
- 2:10semáforo para indicar que ya dejamos eh
- 2:13la sección crítica. Bueno, ahí vemos
- 2:16este todos los procesos en una grilla.
- 2:19Tenemos en una fila la sección de
- 2:20entrada, en la segunda fila la sección
- 2:22crítica y en la tercera fila la sección
- 2:25de salida. Entonces, la idea es que en
- 2:28la sección de entrada vamos a hacer un
- 2:30wait evaluando a los semáforos, cada
- 2:32proceso hará una evaluación del del
- 2:34semáforo, a ver si puede entrar a la
- 2:36sección crítica y después en la sección
- 2:37de salida cada proceso liberará el
- 2:40semáforo correspondiente. Acá el
- 2:42problema es analizar y ver cuántos
- 2:44semáforos eh necesito y qué inici- qué
- 2:47inicialización debería tener cada
- 2:49semáforo para que todo esto funcione
- 2:51bien, ¿sí?
- 2:53Bien, empecemos con con el análisis.
- 2:56Entonces, nosotros sabemos que tiene que
- 2:57empezar el proceso A.
- 2:59Entonces, seguramente eh el proceso A va
- 3:03a tener que hacer un wait de un
- 3:05semáforo. Bueno, ya podemos llamar a ese
- 3:08semáforo de alguna manera y ya sabemos
- 3:10que tenemos que utilizar un semáforo.
- 3:13A ese semáforo lo podemos llamar
- 3:15semáforo A.
- 3:16Bien, ahora le toca el turno a B o a C.
- 3:20Entonces, si B encuentra el semáforo
- 3:23abierto, va a tomar el semáforo y va a
- 3:24pasar a la sección crítica y tiene que
- 3:26excluir a C. De la misma manera, si C
- 3:29encuentra el semáforo habilitado y pasa
- 3:31a su sección crítica, tiene que excluir
- 3:33a B. Entonces, deberían utilizar un
- 3:36mismo semáforo, los dos deberían hacer
- 3:38wait de un mismo semáforo. Bien, a ese
- 3:41semáforo lo podemos llamar sem BC.
- 3:45Bueno, luego de B o C, le toca el turno
- 3:48a D o E. Entonces, también ahora D, si
- 3:52entra a la sección
- 3:53crítica tiene que excluir al proceso E,
- 3:56y si E entra a la sección
- 3:58crítica tiene que excluir al proceso D.
- 4:01Entonces, van a compartir un mismo
- 4:02semáforo, ¿sí? O sea, que D y E van a
- 4:05hacer un wait del mismo semáforo. A ese
- 4:07semáforo lo podemos llamar eh sem DE.
- 4:12Bueno, ya tenemos los tres semáforos.
- 4:15Entonces, ahora hay que pensar eh en la
- 4:17inicialización de cada uno de los de los
- 4:19semáforos.
- 4:20Entonces, si si el proceso A va a hacer
- 4:23un wait del semáforo A, entonces ese
- 4:25semáforo debería estar en uno, porque si
- 4:28el semáforo A lo vamos lo inicializamos
- 4:31en cero, entonces cuando el proceso A
- 4:34haga un wait del semáforo A, lo va a
- 4:36encontrar en cero, y entonces eh se va a
- 4:38quedar todo el sistema bloqueado.
- 4:40Entonces, no cabe duda que el semáforo A
- 4:44tiene que estar inicializado en uno para
- 4:47que cuando el proceso A haga wait del
- 4:49semáforo A, entonces pase este a su
- 4:52sección crítica.
- 4:54Bien, también queda claro que eh el
- 4:56semáforo BC y el semáforo DE deberían
- 5:00estar inicializados en cero, ¿por qué?
- 5:02Porque puede darse el caso de que eh el
- 5:06sistema operativo planifique la
- 5:08ejecución de BCDE
- 5:11o E antes que planificar la ejecución
- 5:14del proceso A. Entonces, si inicializo
- 5:16el semáforo BC o el semáforo DE en uno,
- 5:20existe la posibilidad de que comience
- 5:23algún otro proceso la secuencia, ¿sí?
- 5:26Entonces, claramente el semáforo BC y el
- 5:28semáforo DE deberían estar inicializados
- 5:31en cero para que solo exista la
- 5:33posibilidad de que comience el proceso
- 5:36A.
- 5:37Bueno, entonces hasta ahí ya tenemos los
- 5:39tres semáforos que necesitamos y la
- 5:41inicialización correspondiente de cada
- 5:43semáforo.
- 5:45Bueno, acá también vemos cómo quedaría
- 5:47entonces la sección de entrada de cada
- 5:49uno de los procesos.
- 5:50Entonces, por ejemplo, si el sistema
- 5:52planifica el proceso B, se va a quedar
- 5:55bloqueado esperando eh que el semáforo
- 5:58BC valga eh tome el valor uno. Lo mismo
- 6:01pasa con el proceso C. Si hace un wait,
- 6:04se queda bloqueado esperando que el
- 6:06semáforo BC tome el valor de uno. Lo
- 6:08mismo pasa con el proceso D y lo mismo
- 6:10pasa con el proceso E. Entonces, todos
- 6:13están esperando el cambio del semáforo.
- 6:15¿Sí? Entonces, el único que podría
- 6:18llegar a entrar a su sección crítica y
- 6:20es el proceso A, que va a encontrar a su
- 6:24semáforo en uno, entonces va a va a
- 6:26pasar a su sección crítica.
- 6:28Cuando el proceso A eh salga de su de su
- 6:31sección crítica, entonces va a señalarse
- 6:34va a señalizar el semáforo BC. Eso
- 6:36quiere decir que lo va a poner en uno.
- 6:38Entonces, ahora los posibles procesos
- 6:41que podrían llegar a entrar a su sección
- 6:43crítica son el proceso B o el proceso C.
- 6:46¿De qué depende eh que pase B o pase C a
- 6:51su sección crítica? Bueno, depende de
- 6:54de a cuál de ellos planifique el sistema
- 6:56operativo. ¿Qué quiere decir planifique
- 6:58el sistema operativo? Planifique el
- 6:59sistema operativo quiere decir que el
- 7:02sistema operativo va a seleccionar a un
- 7:05proceso que esté este listo para
- 7:07ejecución y le va a asignar la CPU.
- 7:10Bueno, ¿cuál es? ¿El B o el C? Bueno,
- 7:12hay que preguntarle al sistema
- 7:14operativo. Sistema operativo, ¿a cuál
- 7:16vas a ¿sí? No a los
- 7:19dos.
- 7:21Bien, luego de que B o C salga de la
- 7:23sección crítica, uno de ellos, no los
- 7:26dos, en una secuencia dada, entonces va
- 7:30a señalizará el semáforo DE. Entonces,
- 7:33ahora DE se encuentra en la misma
- 7:36situación en la cual se encontraba B y C
- 7:38este anteriormente. Entonces, el sistema
- 7:41operativo va a seleccionar alguno de los
- 7:44dos,
- 7:45este, para asignarle la CPU. Eso depende
- 7:47del planificador de la CPU eh del
- 7:50sistema operativo. Mientras tanto, todos
- 7:53los demás procesos están, digamos,
- 7:55bloqueados esperando que el valor de su
- 7:58semáforo cambie. Los únicos que ahora
- 8:00que pueden competir por el ingreso a la
- 8:03sección crítica son D y E. Entonces,
- 8:06cualquiera de ellos va a ser
- 8:07seleccionado. Nosotros no lo sabemos, el
- 8:09sistema operativo sí.
- 8:11Bien, ahora vemos cómo quedarían las
- 8:13operaciones wait y signal en el
- 8:15pseudocódigo de cada proceso. En ese
- 8:17caso, el proceso A hace un wait del
- 8:20semáforo A y un signal del semáforo BC.
- 8:23Eh ahora el proceso B y C deberían tener
- 8:26la misma estructura, hacen un wait del
- 8:28semáforo BC y un signal del semáforo DE.
- 8:31Y eh también eh los procesos D y E
- 8:34tienen la misma estructura, harían un
- 8:37wait del semáforo DE y un signal del
- 8:39semáforo A para que el ciclo se repita
- 8:42infinitamente.
- 8:44Llegamos a la implementación en lenguaje
- 8:46C en Linux del ejemplo,
- 8:49así que vamos a comenzar.
- 8:51Bien, el primer paso sería crear los
- 8:53semáforos.
- 8:56Bueno, primero, lo primero que vamos a
- 8:58hacer es ver si eh qué semáforos tenemos
- 9:00creados
- 9:02con el comando ipcs
- 9:07argumento S.
- 9:08Entonces, ustedes ven que acá no tenemos
- 9:11ninguna matriz de semáforos creada.
- 9:13Entonces, vamos a crear
- 9:15este, los tres semáforos que
- 9:17necesitamos. Para ello, hay que hacer un
- 9:19código, lo vamos a llamar crea sem
- 9:22.c.
- 9:23Ya está hecho porque
- 9:25todos estos temas se explicaron en un
- 9:27video en mi canal y ahí tienen el link,
- 9:30si no lo vieron, lo pueden ir a ver,
- 9:32pero todo esto ya está explicado.
- 9:34Entonces, el semget ya se explicó. Lo
- 9:37único que vamos a ver es que acá estamos
- 9:39diciendo que vamos a crear tres
- 9:41semáforos en un array de semáforos, ¿sí?
- 9:44Así que esto ya ya está explicado. Vamos
- 9:46a crear tres semáforos. Bien.
- 9:49Ya está compilado también.
- 9:51Así que vamos a ejecutar crea.
- 9:55Ahí eh tenemos el ID, ¿sí? De la de la
- 10:00array de semáforos.
- 10:01Y ahora vamos a ver si realmente se creó
- 10:06el array de semáforos.
- 10:08Sí, correcto. Le le pusimos una clave de
- 10:13usuario o de programador 0x8.
- 10:16Y acá tenemos el ID con los tres eh
- 10:20semáforos creados.
- 10:22O sea, que ya tenemos el primer paso
- 10:25resuelto.
- 10:27El segundo paso entonces sería
- 10:29inicializar los semáforos.
- 10:32Bueno, como ya hemos visto también,
- 10:34tenemos que escribir un código para
- 10:35inicializar los semáforos. Ya está
- 10:37escrito.
- 10:39De nuevo, este tema fue explicado en el
- 10:41mismo video. Acá está el link. Entonces,
- 10:44obtenemos el ID de la array de semáforos
- 10:47y el semáforo cero de la array, que
- 10:51sería el semáforo A, el sema, lo
- 10:53inicializamos en uno. El semáforo uno de
- 10:56la array, que sería el sem BC, lo
- 10:58inicializamos en cero. Y el semáforo dos
- 11:01de la array, que sería el sem DE, lo
- 11:04inicializamos en cero, ¿sí? Bien,
- 11:06guardamos.
- 11:10Ya está compilado.
- 11:13Así que vamos a ejecutarlo.
- 11:20Ahí está. Y lo que vamos a hacer ahora
- 11:23es ver el código primero,
- 11:27que también ya fue explicado. Este,
- 11:30hacemos un código para obtener o ver,
- 11:33visualizar, poder este, hacer un get de
- 11:37cada semáforo, así que vamos a mostrar
- 11:40en pantalla eh el valor del semáforo A,
- 11:43el valor del semáforo BC y el valor del
- 11:47semáforo D, que para el sistema esto
- 11:49sería el semáforo 0 del array, el
- 11:52semáforo 1 del array,
- 11:54el semáforo 1 del array y el semáforo 2
- 11:56del array, bien.
- 11:58Vamos a guardar, esto ya está compilado,
- 12:01así que hacemos punto
- 12:04Y ahí está, ahí vemos, bueno, eh el
- 12:07segundo paso también ya está concluido.
- 12:12También hay que hay que recordar
- 12:15que hay que hacer un código para
- 12:17configurar las operaciones eh wait
- 12:20signal, esto también fue explicado.
- 12:24Este sería la función que equivale al
- 12:26wait, o sea, P de proberen
- 12:30y
- 12:34y la operación B
- 12:36que es la operación signal
- 12:38de verogen, ¿sí?
- 12:40Entonces, bueno, esto ya fue explicado
- 12:42también, la configuración de las
- 12:44operaciones wait signal en las funciones
- 12:47P
- 12:48y B.
- 12:53Bien.
- 12:54El paso 3 es escribir los códigos de
- 12:57todos los procesos, así que vamos a
- 12:59escribir los códigos que ya están
- 13:00escritos.
- 13:03Bueno, vamos a ver el código del proceso
- 13:05A.
- 13:07Acá tenemos entonces el mientras por
- 13:12siempre
- 13:13y acá tenemos la función principal, ¿sí?
- 13:16Entonces, fíjense en el mientras por
- 13:18siempre, la sección de entrada es hacer
- 13:20un
- 13:22un wait del semáforo A y la sección de
- 13:24salida es hacer un signal del semáforo
- 13:27BC, ¿sí?
- 13:32El proceso B
- 13:37es hacer un wait del semáforo BC y hacer
- 13:40un signal del semáforo
- 13:43DE.
- 13:46El proceso C es idéntico al B,
- 13:51hacer un un wait del semáforo BC y hacer
- 13:54un signal del semáforo DE.
- 14:00El proceso D
- 14:03es hacer un wait del semáforo DE y un
- 14:06signal del semáforo A.
- 14:10Y el proceso E
- 14:12es igual que el D,
- 14:14hacer un eh wait del semáforo DE
- 14:19y hacer un signal del semáforo A. Bueno.
- 14:23Bien.
- 14:26Entonces, para compilar vamos a usar
- 14:29este pequeño
- 14:30script.
- 14:35¿Sí?
- 14:37Porque a cada proceso, a cada proceso
- 14:41ABC,
- 14:43DE, hay que enlazarlo con el objeto de
- 14:47PIB. Entonces, primero hay que crear
- 14:50este todos los objetos, ¿sí?
- 14:54Y después enlazamos los objetos
- 14:57eh de cada proceso
- 15:00con eh el objeto PIB, que es la
- 15:03configuración
- 15:04de las operaciones wait y signal, ¿sí?
- 15:08Bien. Vamos a correr este script,
- 15:11entonces.
- 15:16Bueno, ahí en teoría está todo
- 15:19compilado y ya tenemos todos los
- 15:21ejecutables.
- 15:23Bueno, y el último paso sería ejecutar y
- 15:27ver a ver si todo anda bien. Muy bien.
- 15:33Bueno, yo acá preparé cinco terminales
- 15:35porque son cinco procesos
- 15:37independientes, así que voy a mandar
- 15:39ejecutar primero el proceso
- 15:42E, que se debería quedar bloqueado, se
- 15:44quedó bloqueado porque está haciendo un
- 15:47wait de su semáforo que está en cero.
- 15:50Voy a mandar ejecutar el proceso D,
- 15:52también se queda bloqueado. El proceso C
- 15:55se queda bloqueado, el proceso B se
- 15:58queda bloqueado. Y supongo que ahora
- 16:01cuando mande ejecutar el proceso A ya se
- 16:04van a empezar a ejecutar y van a generar
- 16:07una secuencia válida, ¿sí? Así que
- 16:10bueno, le voy a dar a enter. Ahí está.
- 16:13Bueno, ahí se van ejecutando, fíjense.
- 16:18A, C,
- 16:19E, A, B, D, A, C, E, A,
- 16:27B,
- 16:29D, A, C, A.
- 16:32Ahí me perdí yo.
- 16:34Bueno, creo que ahí está funcionando.
- 16:37Si ustedes se encuentran algún error,
- 16:39por favor, avísenme.
- 16:41Pero a mí me parece que que está
- 16:43funcionando que está funcionando bien,
- 16:45¿sí?
- 16:46Así que bueno, si lo dejamos ejecutar
- 16:48siempre debería generar una secuencia
- 16:51válida. Fíjense ahí cómo planifica, ¿no?
- 16:55El sistema, el planificador del sistema
- 16:58operativo. Esa planificación puede
- 17:00cambiar, ¿de qué depende? Depende mucho
- 17:03del nivel de de multiprogramación del
- 17:06sistema. Como en este caso yo estoy
- 17:09ejecutando nada más que estos cuatro
- 17:11procesos, estos cinco procesos, digamos,
- 17:14aparentemente el sistema siempre genera
- 17:17la misma planificación, la misma
- 17:19secuencia, pero si yo eh ahora mando
- 17:22ejecutar algún otro proceso, como lo
- 17:24hice en el video anterior, que generé un
- 17:27proceso simplemente que escribiera
- 17:29puntos eh en la pantalla, seguramente la
- 17:32planificación va a cambiar. Bueno, ahí
- 17:35está ahí está el ejercicio. Espero que
- 17:38les sirva, espero que les guste.
- 17:41Bueno, haciendo el video se puso se
- 17:43oscureció, ya se puso tarde.
- 17:45Este bueno, eh espero que esto, como ya
- 17:48les dije antes, que les sirva, que les
- 17:49guste, bueno.
- 17:51Eh y les voy a dejar un interrogante,
- 17:53¿sí? Les voy a dejar un interrogante
- 17:55para que piensen, para que lo pongan
- 17:57ustedes en funcionamiento en sus
- 17:58máquinas y vean a ver qué pasa. La
- 18:00pregunta, el interrogante la siguiente
- 18:02es el siguiente,
- 18:04¿qué pasa si yo eh en esa ejecución
- 18:07cancelo, por ejemplo, el proceso C?
- 18:10¿Sí?
- 18:11Con una con un control C, enviándole así
- 18:15una señal
- 18:16¿sí?
- 18:16¿Qué pasa?
- 18:18¿Qué pasa se Cuando digo qué pasa, qué
- 18:20quiere decir? ¿Que se bloquea todo, todo
- 18:22se para, sigue funcionando normalmente
- 18:24pero sin el proceso C? ¿Qué pasa si
- 18:27bloqueo el proceso D?
- 18:29¿Se bloquea todo?
- 18:30¿Eh? ¿Todo el sistema se bloquea o el
- 18:32sistema sigue funcionando sin el proceso
- 18:35D? ¿Sí? Bueno, ese es el interrogante
- 18:37que les dejo. Para responder este
- 18:41deberían ponerlo en funcionamiento y
- 18:43bueno, cancelar el proceso C, por
- 18:45ejemplo, y ver qué pasa, qué pasa con
- 18:47los demás procesos. O cancelar el
- 18:49proceso D, o cancelar el proceso C y el
- 18:51proceso D, o cancelar el B y el E.
- 18:55¿Sí? Y bueno, así ustedes se van
- 18:57metiendo en el comportamiento, ¿sí? En
- 19:00cómo funciona el sistema.
- 19:02Bueno,
- 19:03buenas noches, chao.
- 19:06Suerte, cuídense.
About this transcript
This page contains the full transcript of C Linux Semáforos System V ABoCDoE 07 by juancarlosjromer, generated from the public captions YouTube serves with the video. The transcript has 2,673 words across 439 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.