YouTube2Text

Semáforos Posix Nombrados 01 — Transcript

by juancarlosjromer · 1,664 words · 302 segments · language en · Watch on YouTube

Full transcript

  1. 0:00Muy buenos días, en este vídeo vamos a
  2. 0:02hacer un ejemplo con semáforos Posix
  3. 0:05nombrados, eh, una sincronización entre
  4. 0:08dos procesos independientes, la
  5. 0:10sincronización va a ser ABAB y así
  6. 0:13indefinidamente y vamos a nombrar eh,
  7. 0:16las características principales.
  8. 0:20Bien, el ejemplo de sincronización que
  9. 0:21vamos a hacer va a ser el siguiente.
  10. 0:26El proceso A va a producir para el
  11. 0:28proceso B.
  12. 0:30El proceso A produce para el proceso B,
  13. 0:33el proceso A produce para el proceso B y
  14. 0:36así siguen indefinidamente, ¿sí?
  15. 0:39Entonces, para esta sincronización tan
  16. 0:40simple de sincronización de ejecución de
  17. 0:44la sección crítica, vamos a tener un
  18. 0:47semáforo,
  19. 0:48el semáforo A,
  20. 0:51¿sí? Igual a 1, inicializado en 1 y
  21. 0:54vamos a tener el semáforo
  22. 0:57B inicializado en 0.
  23. 1:00¿Sí?
  24. 1:01Vamos a hacer la sección de entrada y la
  25. 1:03sección de salida de cada proceso.
  26. 1:05Entonces, tenemos el proceso A, el
  27. 1:07proceso B, tenemos la sección crítica
  28. 1:11del proceso A, tenemos la sección
  29. 1:13crítica del proceso B.
  30. 1:15La sección de entrada del proceso A
  31. 1:17sería entonces un wait del semáforo
  32. 1:21A.
  33. 1:23¿Sí? Y la sección de salida del proceso
  34. 1:25A sería un signal del semáforo
  35. 1:30B.
  36. 1:31¿Sí?
  37. 1:33De la misma manera, la sección de
  38. 1:35entrada del proceso B sería un wait del
  39. 1:37semáforo B, que está inicializado en 0.
  40. 1:42Y la sección de salida del proceso B
  41. 1:45sería el signal del semáforo
  42. 1:49A.
  43. 1:51Entonces,
  44. 1:53con esta inicialización, el único
  45. 1:54proceso que podría entrar a su sección
  46. 1:56crítica sería el proceso A.
  47. 1:59Si mando ejecutar el proceso B, se queda
  48. 2:01bloqueado en el semáforo B, esperando la
  49. 2:04señalización que va a hacer el proceso A
  50. 2:06cuando salga de su sección crítica, ¿sí?
  51. 2:09Cuando sale de su sección crítica el
  52. 2:11proceso A,
  53. 2:12deja el semáforo A en cero y habilita el
  54. 2:15semáforo B para que el proceso B pueda
  55. 2:17entrar en su en su sección crítica.
  56. 2:20Y el proceso B, cuando sale de su
  57. 2:21sección crítica, habilita al proceso A.
  58. 2:24¿Qué quiere decir?
  59. 2:25Que si llega el proceso B, va a quedar
  60. 2:28bloqueado acá, en el wait en el wait del
  61. 2:31semáforo B porque está inicializado en
  62. 2:33cero.
  63. 2:34El único proceso que puede entrar es el
  64. 2:36proceso A,
  65. 2:37va a hacer un wait eh del semáforo A
  66. 2:41y va a quedar este semáforo en cero.
  67. 2:46¿Sí? Entonces, tengo el semáforo A y el
  68. 2:48semáforo B en cero, pero el proceso A
  69. 2:51está dentro de la sección crítica.
  70. 2:54Ahora, cuando salga de la sección
  71. 2:55crítica el proceso A, va a señalizar el
  72. 2:57semáforo B, el semáforo B, entonces, va
  73. 3:00a tomar el valor uno. El único proceso
  74. 3:03que puede entrar en su sección crítica
  75. 3:04es el proceso B,
  76. 3:06que cuando entre en su sección crítica,
  77. 3:08va a dejar el semáforo B en cero.
  78. 3:11¿Sí? Ahora, el proceso B,
  79. 3:14eh ya en su sección crítica, cuando
  80. 3:17salga, va a señalizar al semáforo A, lo
  81. 3:20va a dejar en uno y así van a seguir
  82. 3:23indefinidamente. Bueno, esto un poco
  83. 3:25sería la descripción de el problema que
  84. 3:27queremos resolver con semáforos POSIX
  85. 3:30nombrados.
  86. 3:32Bien, vamos a ver un poco el código que
  87. 3:34permite crear los semáforos nombrados.
  88. 3:37Esta es una versión.
  89. 3:40Bueno, acá tenemos las características,
  90. 3:42algunas características este de los
  91. 3:46semáforos nombrados.
  92. 3:48La primera característica es
  93. 3:51que los semáforos nombrados, cuando se
  94. 3:53crean los podemos encontrar en este
  95. 3:55directorio en Linux en barra de barra
  96. 3:58SHM
  97. 3:59si nosotros cuando creamos un semáforo
  98. 4:03nombrado le ponemos por ejemplo el
  99. 4:05nombre sema
  100. 4:06si
  101. 4:08lo vamos a encontrar en barra de barra
  102. 4:11SHM con el nombre sem.sema
  103. 4:15ahí lo vamos a encontrar
  104. 4:17otra de las características es que si en
  105. 4:20la creación
  106. 4:21usando la llamada semopen
  107. 4:24al nombre le antepongo una barra
  108. 4:27entonces eso quiere decir que este
  109. 4:29semáforo lo podemos usar en forma
  110. 4:31compartida entre procesos independientes
  111. 4:36procesos independientes eh son procesos
  112. 4:39no emparentados y si en la creación no
  113. 4:42le antepongo una barra solo lo podemos
  114. 4:45usar entre procesos emparentados si
  115. 4:49bien
  116. 4:52acá tenemos
  117. 4:55acá tenemos el código
  118. 4:57si tenemos que incluir la cabecera
  119. 5:01semáforo.h
  120. 5:07el
  121. 5:09semopen
  122. 5:11el semopen
  123. 5:13nos devuelve
  124. 5:15un tipo de dato puntero
  125. 5:20a sem_t así que defino una variable que
  126. 5:25se llama sema que no necesariamente
  127. 5:26tiene que coincidir con el mismo nombre
  128. 5:29que le doy al semáforo puede ser otro
  129. 5:31nombre entonces en este caso le dimos el
  130. 5:34mismo nombre no necesariamente entonces
  131. 5:36tengo una variable sema de tipo puntero
  132. 5:38a sem_t
  133. 5:40eso es lo que me va a devolver semopen
  134. 5:43el primer argumento de semopen es el
  135. 5:45nombre del semáforo si le antepongo la
  136. 5:47barra, lo vamos a usar entre procesos
  137. 5:50independientes, va a ser un semáforo
  138. 5:52compartido. Después vienen los flag, lo
  139. 5:55creo y si existe este flag exclusivo, me
  140. 6:01va a dar, me va a hacer que sem A tome
  141. 6:03el valor -1.
  142. 6:05Estos son los permisos de lectura y
  143. 6:08escritura y esto es, este es la
  144. 6:11inicialización del semáforo.
  145. 6:13El 1 que está ahí,
  146. 6:16esto es un 1,
  147. 6:18este 1 es la inicialización del semáforo
  148. 6:20A, quiere decir que creamos el semáforo,
  149. 6:23si existe, me va a dar error,
  150. 6:27le doy los permisos de lectura y
  151. 6:28escritura y la inicialización. Bueno,
  152. 6:31con el semáforo B pasa exactamente lo
  153. 6:33mismo,
  154. 6:35después acá tenemos una función que es
  155. 6:38sem get value, mhm, que me muestra,
  156. 6:42que toma el valor del semáforo y lo
  157. 6:45guarda en la variable
  158. 6:47eh val sem A, que es de tipo entero,
  159. 6:51pero el get value me obliga a pasarle la
  160. 6:53dirección eh de esa variable entera. En
  161. 6:57esa variable me va a poner el valor del
  162. 6:59semáforo A, lo mismo con el semáforo B.
  163. 7:02Y después acá, en esta creación e
  164. 7:05inicialización
  165. 7:06de semáforos este
  166. 7:09nombrados, lo que ha, lo que hacemos es
  167. 7:13ver el contenido, lo que hacemos es
  168. 7:16mostrar en pantalla el contenido de la
  169. 7:19inicialización para sem A y sem B, ¿sí?
  170. 7:22Esta sería eh la versión 1, ¿sí?
  171. 7:27Bien.
  172. 7:28Vamos a cerrar esta.
  173. 7:31Bien, lo que vamos a hacer ahora es ver
  174. 7:33si
  175. 7:34qué tenemos en el directorio /dev
  176. 7:37/shm.
  177. 7:40Bueno, como ustedes ven, no tenemos
  178. 7:43ningún semáforo. Entonces, ¿qué vamos a
  179. 7:45hacer? Vamos a compilar la versión 1.
  180. 7:50Es la versión 1 de AB.
  181. 7:54Ahí está, punto C. Le vamos a dar un
  182. 7:57nombre al ejecutable.
  183. 8:00Crear y vamos a vincularlo con la
  184. 8:03librería P3.
  185. 8:06¿Sí? Si no, no va a compilar.
  186. 8:09Bueno, ahí está. Vamos a ejecutar crear.
  187. 8:15Vamos a ejecutar crear.
  188. 8:18Ahí vemos la inicialización del semáforo
  189. 8:20A, la inicialización la inicialización
  190. 8:23del semáforo B y vamos a ver el
  191. 8:25contenido
  192. 8:27de barra dev barra shm.
  193. 8:32Y ahí aparecen los semáforos nombrados.
  194. 8:35Acuérdense que los creamos con una
  195. 8:36barra, así que ahora podemos escribir el
  196. 8:40código del proceso A y el código del
  197. 8:43proceso B para ver cómo funciona la
  198. 8:45sincronización, ¿sí? Pero ahí están los
  199. 8:47semáforos nombrados, colgados del file
  200. 8:49system.
  201. 8:51Bien, aquí estamos viendo el código del
  202. 8:53proceso independiente PA.
  203. 8:55Eh lo que podemos destacar acá es la
  204. 8:59sintaxis del sem open que eh
  205. 9:04que lo vemos con dos argumentos. El
  206. 9:05primer argumento es el nombre del
  207. 9:07semáforo, con la barra incluida, y el
  208. 9:09segundo argumento es un cero. Esto no
  209. 9:11quiere decir, esto no es inicialización,
  210. 9:13es un cero en el segundo argumento.
  211. 9:16Cuando se ejecuta este sem open, lo que
  212. 9:18lo que obtengo es en sem A es el
  213. 9:21identificador del semáforo A que cuelga
  214. 9:25del file system en barra dev barra shm.
  215. 9:29¿Sí? Para que lo pueda utilizar en
  216. 9:31dónde, en el wait, ¿sí? Y para que lo
  217. 9:35pueda utilizar en el signal que acá se
  218. 9:37llama sempos. Entonces, lo demás es todo
  219. 9:41conocido por ustedes, ¿no? Es el ciclo
  220. 9:44infinito donde se ejecuta el la sección
  221. 9:48crítica del proceso A que estaría
  222. 9:51formada por estas dos líneas. Acá
  223. 9:53tenemos la sección de entrada, acá
  224. 9:55tenemos la sección de salida, ¿sí?
  225. 9:57Sección de entrada, no quiero escribir
  226. 10:00mucho con el mouse porque me frust,
  227. 10:01¿ven? Frustro. Este,
  228. 10:06cuando escribo tan mal. Sección de
  229. 10:07salida, ¿sí?
  230. 10:09Bien.
  231. 10:11Y, por supuesto, que el código del
  232. 10:14proceso
  233. 10:16B
  234. 10:17es el mismo, ¿sí? Vamos a abrir el
  235. 10:21el proceso B.
  236. 10:32El proceso B es igual, excepto que acá
  237. 10:36se un wait del semáforo B y acá se un
  238. 10:38wait del semáforo A, ¿sí? Esa es la
  239. 10:41diferencia.
  240. 10:43Bien.
  241. 10:45Vamos a ejecutar, vamos a compilar.
  242. 10:48Vamos a compilar el proceso A.
  243. 10:52CC
  244. 10:56guion O, le ponemos PA.
  245. 11:00Vamos a vincularlo con
  246. 11:05P3.
  247. 11:08Y vamos a compilar el proceso B, le
  248. 11:10vamos a poner B. ¿Ven que son procesos
  249. 11:12independientes, no? No son procesos
  250. 11:15emparentados, son dos ejecutables.
  251. 11:18¿Sí? Bueno, clear.
  252. 11:20¿Qué pasa si ejecutamos el proceso
  253. 11:24B?
  254. 11:25Bueno, se bloquea. Vamos a abrir otra
  255. 11:29terminal, como es
  256. 11:31eh nuestra costumbre,
  257. 11:34entonces abrimos otra terminal, nos
  258. 11:37movemos a
  259. 11:43sem posix
  260. 11:45y aquí ejecutamos el proceso A.
  261. 11:49Bueno, ahí está la sincronización AB AB
  262. 11:51AB AB indefinidamente,
  263. 11:54¿sí?
  264. 11:55Podríamos abrir otra terminal
  265. 11:59y vemos que ahí están los semáforos.
  266. 12:08Ahí están los semáforos, ¿sí?
  267. 12:10Bien. Bueno, vamos a cancelar este
  268. 12:13proceso, vamos a cancelar este proceso,
  269. 12:17vamos a cerrar esta terminal, esta
  270. 12:19terminal maximizada, bien.
  271. 12:22Nos podemos mover a sem
  272. 12:25aunque no haría falta.
  273. 12:30Bien. Otra forma de, digamos, dentro de
  274. 12:34una aplicación podemos borrar eh un
  275. 12:38semáforo
  276. 12:39nombrado con sem unlink, ¿sí?
  277. 12:44Acá iba el valor del semáforo,
  278. 12:46simplemente estoy escribiendo esto para
  279. 12:48que lo vean, no para ejecutarlo porque
  280. 12:49esto lo puedo ejecutar desde acá,
  281. 12:52¿sí?
  282. 12:53O sea, así borraríamos dentro de una
  283. 12:55aplicación ejecutando sem unlink este el
  284. 13:00el semáforo.
  285. 13:02Vamos a ver si están ahí.
  286. 13:05Están están ahí, ¿sí? Bueno, también lo
  287. 13:09puedo ejecutar, también lo puedo borrar
  288. 13:11de esta manera, simplemente haciendo una
  289. 13:14RM remove, ¿sí? {barra} sem {punto}
  290. 13:19sem A
  291. 13:22y
  292. 13:23lo mismo para sem B.
  293. 13:26Ahora si vemos los semáforos se
  294. 13:28borraron. Bueno, esto es un pequeño
  295. 13:30ejemplo, una introducción porque habían
  296. 13:31hecho una pregunta este acerca de los
  297. 13:35semáforos nombrados, así que bueno, les
  298. 13:38dejo este este videito para para que
  299. 13:40empiecen.
  300. 13:42Bueno, eh este es el primer ejemplo,
  301. 13:45espero que les sirva y que tengan una
  302. 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.