Semáforos Posix Nombrados 01 — Transcript
Full transcript
- 0:00Muy buenos días, en este vídeo vamos a
- 0:02hacer un ejemplo con semáforos Posix
- 0:05nombrados, eh, una sincronización entre
- 0:08dos procesos independientes, la
- 0:10sincronización va a ser ABAB y así
- 0:13indefinidamente y vamos a nombrar eh,
- 0:16las características principales.
- 0:20Bien, el ejemplo de sincronización que
- 0:21vamos a hacer va a ser el siguiente.
- 0:26El proceso A va a producir para el
- 0:28proceso B.
- 0:30El proceso A produce para el proceso B,
- 0:33el proceso A produce para el proceso B y
- 0:36así siguen indefinidamente, ¿sí?
- 0:39Entonces, para esta sincronización tan
- 0:40simple de sincronización de ejecución de
- 0:44la sección crítica, vamos a tener un
- 0:47semáforo,
- 0:48el semáforo A,
- 0:51¿sí? Igual a 1, inicializado en 1 y
- 0:54vamos a tener el semáforo
- 0:57B inicializado en 0.
- 1:00¿Sí?
- 1:01Vamos a hacer la sección de entrada y la
- 1:03sección de salida de cada proceso.
- 1:05Entonces, tenemos el proceso A, el
- 1:07proceso B, tenemos la sección crítica
- 1:11del proceso A, tenemos la sección
- 1:13crítica del proceso B.
- 1:15La sección de entrada del proceso A
- 1:17sería entonces un wait del semáforo
- 1:21A.
- 1:23¿Sí? Y la sección de salida del proceso
- 1:25A sería un signal del semáforo
- 1:30B.
- 1:31¿Sí?
- 1:33De la misma manera, la sección de
- 1:35entrada del proceso B sería un wait del
- 1:37semáforo B, que está inicializado en 0.
- 1:42Y la sección de salida del proceso B
- 1:45sería el signal del semáforo
- 1:49A.
- 1:51Entonces,
- 1:53con esta inicialización, el único
- 1:54proceso que podría entrar a su sección
- 1:56crítica sería el proceso A.
- 1:59Si mando ejecutar el proceso B, se queda
- 2:01bloqueado en el semáforo B, esperando la
- 2:04señalización que va a hacer el proceso A
- 2:06cuando salga de su sección crítica, ¿sí?
- 2:09Cuando sale de su sección crítica el
- 2:11proceso A,
- 2:12deja el semáforo A en cero y habilita el
- 2:15semáforo B para que el proceso B pueda
- 2:17entrar en su en su sección crítica.
- 2:20Y el proceso B, cuando sale de su
- 2:21sección crítica, habilita al proceso A.
- 2:24¿Qué quiere decir?
- 2:25Que si llega el proceso B, va a quedar
- 2:28bloqueado acá, en el wait en el wait del
- 2:31semáforo B porque está inicializado en
- 2:33cero.
- 2:34El único proceso que puede entrar es el
- 2:36proceso A,
- 2:37va a hacer un wait eh del semáforo A
- 2:41y va a quedar este semáforo en cero.
- 2:46¿Sí? Entonces, tengo el semáforo A y el
- 2:48semáforo B en cero, pero el proceso A
- 2:51está dentro de la sección crítica.
- 2:54Ahora, cuando salga de la sección
- 2:55crítica el proceso A, va a señalizar el
- 2:57semáforo B, el semáforo B, entonces, va
- 3:00a tomar el valor uno. El único proceso
- 3:03que puede entrar en su sección crítica
- 3:04es el proceso B,
- 3:06que cuando entre en su sección crítica,
- 3:08va a dejar el semáforo B en cero.
- 3:11¿Sí? Ahora, el proceso B,
- 3:14eh ya en su sección crítica, cuando
- 3:17salga, va a señalizar al semáforo A, lo
- 3:20va a dejar en uno y así van a seguir
- 3:23indefinidamente. Bueno, esto un poco
- 3:25sería la descripción de el problema que
- 3:27queremos resolver con semáforos POSIX
- 3:30nombrados.
- 3:32Bien, vamos a ver un poco el código que
- 3:34permite crear los semáforos nombrados.
- 3:37Esta es una versión.
- 3:40Bueno, acá tenemos las características,
- 3:42algunas características este de los
- 3:46semáforos nombrados.
- 3:48La primera característica es
- 3:51que los semáforos nombrados, cuando se
- 3:53crean los podemos encontrar en este
- 3:55directorio en Linux en barra de barra
- 3:58SHM
- 3:59si nosotros cuando creamos un semáforo
- 4:03nombrado le ponemos por ejemplo el
- 4:05nombre sema
- 4:06si
- 4:08lo vamos a encontrar en barra de barra
- 4:11SHM con el nombre sem.sema
- 4:15ahí lo vamos a encontrar
- 4:17otra de las características es que si en
- 4:20la creación
- 4:21usando la llamada semopen
- 4:24al nombre le antepongo una barra
- 4:27entonces eso quiere decir que este
- 4:29semáforo lo podemos usar en forma
- 4:31compartida entre procesos independientes
- 4:36procesos independientes eh son procesos
- 4:39no emparentados y si en la creación no
- 4:42le antepongo una barra solo lo podemos
- 4:45usar entre procesos emparentados si
- 4:49bien
- 4:52acá tenemos
- 4:55acá tenemos el código
- 4:57si tenemos que incluir la cabecera
- 5:01semáforo.h
- 5:07el
- 5:09semopen
- 5:11el semopen
- 5:13nos devuelve
- 5:15un tipo de dato puntero
- 5:20a sem_t así que defino una variable que
- 5:25se llama sema que no necesariamente
- 5:26tiene que coincidir con el mismo nombre
- 5:29que le doy al semáforo puede ser otro
- 5:31nombre entonces en este caso le dimos el
- 5:34mismo nombre no necesariamente entonces
- 5:36tengo una variable sema de tipo puntero
- 5:38a sem_t
- 5:40eso es lo que me va a devolver semopen
- 5:43el primer argumento de semopen es el
- 5:45nombre del semáforo si le antepongo la
- 5:47barra, lo vamos a usar entre procesos
- 5:50independientes, va a ser un semáforo
- 5:52compartido. Después vienen los flag, lo
- 5:55creo y si existe este flag exclusivo, me
- 6:01va a dar, me va a hacer que sem A tome
- 6:03el valor -1.
- 6:05Estos son los permisos de lectura y
- 6:08escritura y esto es, este es la
- 6:11inicialización del semáforo.
- 6:13El 1 que está ahí,
- 6:16esto es un 1,
- 6:18este 1 es la inicialización del semáforo
- 6:20A, quiere decir que creamos el semáforo,
- 6:23si existe, me va a dar error,
- 6:27le doy los permisos de lectura y
- 6:28escritura y la inicialización. Bueno,
- 6:31con el semáforo B pasa exactamente lo
- 6:33mismo,
- 6:35después acá tenemos una función que es
- 6:38sem get value, mhm, que me muestra,
- 6:42que toma el valor del semáforo y lo
- 6:45guarda en la variable
- 6:47eh val sem A, que es de tipo entero,
- 6:51pero el get value me obliga a pasarle la
- 6:53dirección eh de esa variable entera. En
- 6:57esa variable me va a poner el valor del
- 6:59semáforo A, lo mismo con el semáforo B.
- 7:02Y después acá, en esta creación e
- 7:05inicialización
- 7:06de semáforos este
- 7:09nombrados, lo que ha, lo que hacemos es
- 7:13ver el contenido, lo que hacemos es
- 7:16mostrar en pantalla el contenido de la
- 7:19inicialización para sem A y sem B, ¿sí?
- 7:22Esta sería eh la versión 1, ¿sí?
- 7:27Bien.
- 7:28Vamos a cerrar esta.
- 7:31Bien, lo que vamos a hacer ahora es ver
- 7:33si
- 7:34qué tenemos en el directorio /dev
- 7:37/shm.
- 7:40Bueno, como ustedes ven, no tenemos
- 7:43ningún semáforo. Entonces, ¿qué vamos a
- 7:45hacer? Vamos a compilar la versión 1.
- 7:50Es la versión 1 de AB.
- 7:54Ahí está, punto C. Le vamos a dar un
- 7:57nombre al ejecutable.
- 8:00Crear y vamos a vincularlo con la
- 8:03librería P3.
- 8:06¿Sí? Si no, no va a compilar.
- 8:09Bueno, ahí está. Vamos a ejecutar crear.
- 8:15Vamos a ejecutar crear.
- 8:18Ahí vemos la inicialización del semáforo
- 8:20A, la inicialización la inicialización
- 8:23del semáforo B y vamos a ver el
- 8:25contenido
- 8:27de barra dev barra shm.
- 8:32Y ahí aparecen los semáforos nombrados.
- 8:35Acuérdense que los creamos con una
- 8:36barra, así que ahora podemos escribir el
- 8:40código del proceso A y el código del
- 8:43proceso B para ver cómo funciona la
- 8:45sincronización, ¿sí? Pero ahí están los
- 8:47semáforos nombrados, colgados del file
- 8:49system.
- 8:51Bien, aquí estamos viendo el código del
- 8:53proceso independiente PA.
- 8:55Eh lo que podemos destacar acá es la
- 8:59sintaxis del sem open que eh
- 9:04que lo vemos con dos argumentos. El
- 9:05primer argumento es el nombre del
- 9:07semáforo, con la barra incluida, y el
- 9:09segundo argumento es un cero. Esto no
- 9:11quiere decir, esto no es inicialización,
- 9:13es un cero en el segundo argumento.
- 9:16Cuando se ejecuta este sem open, lo que
- 9:18lo que obtengo es en sem A es el
- 9:21identificador del semáforo A que cuelga
- 9:25del file system en barra dev barra shm.
- 9:29¿Sí? Para que lo pueda utilizar en
- 9:31dónde, en el wait, ¿sí? Y para que lo
- 9:35pueda utilizar en el signal que acá se
- 9:37llama sempos. Entonces, lo demás es todo
- 9:41conocido por ustedes, ¿no? Es el ciclo
- 9:44infinito donde se ejecuta el la sección
- 9:48crítica del proceso A que estaría
- 9:51formada por estas dos líneas. Acá
- 9:53tenemos la sección de entrada, acá
- 9:55tenemos la sección de salida, ¿sí?
- 9:57Sección de entrada, no quiero escribir
- 10:00mucho con el mouse porque me frust,
- 10:01¿ven? Frustro. Este,
- 10:06cuando escribo tan mal. Sección de
- 10:07salida, ¿sí?
- 10:09Bien.
- 10:11Y, por supuesto, que el código del
- 10:14proceso
- 10:16B
- 10:17es el mismo, ¿sí? Vamos a abrir el
- 10:21el proceso B.
- 10:32El proceso B es igual, excepto que acá
- 10:36se un wait del semáforo B y acá se un
- 10:38wait del semáforo A, ¿sí? Esa es la
- 10:41diferencia.
- 10:43Bien.
- 10:45Vamos a ejecutar, vamos a compilar.
- 10:48Vamos a compilar el proceso A.
- 10:52CC
- 10:56guion O, le ponemos PA.
- 11:00Vamos a vincularlo con
- 11:05P3.
- 11:08Y vamos a compilar el proceso B, le
- 11:10vamos a poner B. ¿Ven que son procesos
- 11:12independientes, no? No son procesos
- 11:15emparentados, son dos ejecutables.
- 11:18¿Sí? Bueno, clear.
- 11:20¿Qué pasa si ejecutamos el proceso
- 11:24B?
- 11:25Bueno, se bloquea. Vamos a abrir otra
- 11:29terminal, como es
- 11:31eh nuestra costumbre,
- 11:34entonces abrimos otra terminal, nos
- 11:37movemos a
- 11:43sem posix
- 11:45y aquí ejecutamos el proceso A.
- 11:49Bueno, ahí está la sincronización AB AB
- 11:51AB AB indefinidamente,
- 11:54¿sí?
- 11:55Podríamos abrir otra terminal
- 11:59y vemos que ahí están los semáforos.
- 12:08Ahí están los semáforos, ¿sí?
- 12:10Bien. Bueno, vamos a cancelar este
- 12:13proceso, vamos a cancelar este proceso,
- 12:17vamos a cerrar esta terminal, esta
- 12:19terminal maximizada, bien.
- 12:22Nos podemos mover a sem
- 12:25aunque no haría falta.
- 12:30Bien. Otra forma de, digamos, dentro de
- 12:34una aplicación podemos borrar eh un
- 12:38semáforo
- 12:39nombrado con sem unlink, ¿sí?
- 12:44Acá iba el valor del semáforo,
- 12:46simplemente estoy escribiendo esto para
- 12:48que lo vean, no para ejecutarlo porque
- 12:49esto lo puedo ejecutar desde acá,
- 12:52¿sí?
- 12:53O sea, así borraríamos dentro de una
- 12:55aplicación ejecutando sem unlink este el
- 13:00el semáforo.
- 13:02Vamos a ver si están ahí.
- 13:05Están están ahí, ¿sí? Bueno, también lo
- 13:09puedo ejecutar, también lo puedo borrar
- 13:11de esta manera, simplemente haciendo una
- 13:14RM remove, ¿sí? {barra} sem {punto}
- 13:19sem A
- 13:22y
- 13:23lo mismo para sem B.
- 13:26Ahora si vemos los semáforos se
- 13:28borraron. Bueno, esto es un pequeño
- 13:30ejemplo, una introducción porque habían
- 13:31hecho una pregunta este acerca de los
- 13:35semáforos nombrados, así que bueno, les
- 13:38dejo este este videito para para que
- 13:40empiecen.
- 13:42Bueno, eh este es el primer ejemplo,
- 13:45espero que les sirva y que tengan una
- 13:47muy buena semana.
About this transcript
This page contains the full transcript of Semáforos Posix Nombrados 01 by juancarlosjromer, generated from the public captions YouTube serves with the video. The transcript has 1,664 words across 302 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.