YouTube2Text

C Linux Semáforos System V ABoCDoE 07 — Transcript

by juancarlosjromer · 2,673 words · 439 segments · language en · Watch on YouTube

Full transcript

  1. 0:00Muy buenas tardes, eh, en este vídeo
  2. 0:02vamos a mostrar un ejemplo, un ejercicio
  3. 0:05de una sincronización de ejecución de
  4. 0:08procesos independientes utilizando
  5. 0:11semáforos System 5.
  6. 0:14Bien, acá mostramos cuatro secuencias
  7. 0:16válidas de ejecución, siempre comienza
  8. 0:19el proceso A, después del proceso A eh,
  9. 0:22continúa el B o el C, no ambos, o uno u
  10. 0:27otro, B o C. Y después de B o C viene D
  11. 0:31o E, no ambos, D o E. Sí, siempre la
  12. 0:35secuencia empieza con A, después de A
  13. 0:37tiene que venir B o C y después tiene
  14. 0:39que venir D o E y después se empieza con
  15. 0:42A.
  16. 0:42Ahí vemos algunas secuencias válidas,
  17. 0:45por ejemplo, A B D A, ¿sí? Eh, durante
  18. 0:48la ejecución infinita de de los procesos
  19. 0:52puede ser que eh, la planificación
  20. 0:55cambie y eh, pase a a otra a otra
  21. 1:00secuencia, por ejemplo, esa que también
  22. 1:02es válida, ¿sí? Y también puede pasar al
  23. 1:05a la a la tercera o a la cuarta
  24. 1:07ejecución, pero siempre se tiene que
  25. 1:08mantener alguna de esas cuatro eh,
  26. 1:12secuencias válidas. Bien, acá vemos
  27. 1:14algunas secuencias inválidas, por
  28. 1:16ejemplo, la primera, eh, después de A no
  29. 1:18puede venir B y C, la segunda, después
  30. 1:22de B no puede venir D y E, la tercera,
  31. 1:25eh, mucho menos puede venir después de A
  32. 1:29B y C y después de D y E, eh, la cuarta
  33. 1:32no puede empezar una secuencia con B y
  34. 1:36la quinta no puede empezar una secuencia
  35. 1:38con D. Bueno, seguramente hay otras eh,
  36. 1:40secuencias inválidas.
  37. 1:42Bien, acá vemos la estructura gené-
  38. 1:45genérica de los procesos A, B, C, D y E,
  39. 1:49todos tienen la misma estructura, una
  40. 1:50función principal haciendo referencia al
  41. 1:52lenguaje C, a la función main, después
  42. 1:55van a entrar en un ciclo mientras por
  43. 1:57siempre, donde van a tener una sección
  44. 1:59de entrada, una sección crítica y una
  45. 2:01sección de salida, ¿sí? Donde en la
  46. 2:03sección de entrada nosotros vamos a
  47. 2:05tener que evaluar el semáforo, a ver si
  48. 2:07podemos entrar, y en la sección de
  49. 2:09salida vamos a tener que liberar el
  50. 2:10semáforo para indicar que ya dejamos eh
  51. 2:13la sección crítica. Bueno, ahí vemos
  52. 2:16este todos los procesos en una grilla.
  53. 2:19Tenemos en una fila la sección de
  54. 2:20entrada, en la segunda fila la sección
  55. 2:22crítica y en la tercera fila la sección
  56. 2:25de salida. Entonces, la idea es que en
  57. 2:28la sección de entrada vamos a hacer un
  58. 2:30wait evaluando a los semáforos, cada
  59. 2:32proceso hará una evaluación del del
  60. 2:34semáforo, a ver si puede entrar a la
  61. 2:36sección crítica y después en la sección
  62. 2:37de salida cada proceso liberará el
  63. 2:40semáforo correspondiente. Acá el
  64. 2:42problema es analizar y ver cuántos
  65. 2:44semáforos eh necesito y qué inici- qué
  66. 2:47inicialización debería tener cada
  67. 2:49semáforo para que todo esto funcione
  68. 2:51bien, ¿sí?
  69. 2:53Bien, empecemos con con el análisis.
  70. 2:56Entonces, nosotros sabemos que tiene que
  71. 2:57empezar el proceso A.
  72. 2:59Entonces, seguramente eh el proceso A va
  73. 3:03a tener que hacer un wait de un
  74. 3:05semáforo. Bueno, ya podemos llamar a ese
  75. 3:08semáforo de alguna manera y ya sabemos
  76. 3:10que tenemos que utilizar un semáforo.
  77. 3:13A ese semáforo lo podemos llamar
  78. 3:15semáforo A.
  79. 3:16Bien, ahora le toca el turno a B o a C.
  80. 3:20Entonces, si B encuentra el semáforo
  81. 3:23abierto, va a tomar el semáforo y va a
  82. 3:24pasar a la sección crítica y tiene que
  83. 3:26excluir a C. De la misma manera, si C
  84. 3:29encuentra el semáforo habilitado y pasa
  85. 3:31a su sección crítica, tiene que excluir
  86. 3:33a B. Entonces, deberían utilizar un
  87. 3:36mismo semáforo, los dos deberían hacer
  88. 3:38wait de un mismo semáforo. Bien, a ese
  89. 3:41semáforo lo podemos llamar sem BC.
  90. 3:45Bueno, luego de B o C, le toca el turno
  91. 3:48a D o E. Entonces, también ahora D, si
  92. 3:52entra a la sección
  93. 3:53crítica tiene que excluir al proceso E,
  94. 3:56y si E entra a la sección
  95. 3:58crítica tiene que excluir al proceso D.
  96. 4:01Entonces, van a compartir un mismo
  97. 4:02semáforo, ¿sí? O sea, que D y E van a
  98. 4:05hacer un wait del mismo semáforo. A ese
  99. 4:07semáforo lo podemos llamar eh sem DE.
  100. 4:12Bueno, ya tenemos los tres semáforos.
  101. 4:15Entonces, ahora hay que pensar eh en la
  102. 4:17inicialización de cada uno de los de los
  103. 4:19semáforos.
  104. 4:20Entonces, si si el proceso A va a hacer
  105. 4:23un wait del semáforo A, entonces ese
  106. 4:25semáforo debería estar en uno, porque si
  107. 4:28el semáforo A lo vamos lo inicializamos
  108. 4:31en cero, entonces cuando el proceso A
  109. 4:34haga un wait del semáforo A, lo va a
  110. 4:36encontrar en cero, y entonces eh se va a
  111. 4:38quedar todo el sistema bloqueado.
  112. 4:40Entonces, no cabe duda que el semáforo A
  113. 4:44tiene que estar inicializado en uno para
  114. 4:47que cuando el proceso A haga wait del
  115. 4:49semáforo A, entonces pase este a su
  116. 4:52sección crítica.
  117. 4:54Bien, también queda claro que eh el
  118. 4:56semáforo BC y el semáforo DE deberían
  119. 5:00estar inicializados en cero, ¿por qué?
  120. 5:02Porque puede darse el caso de que eh el
  121. 5:06sistema operativo planifique la
  122. 5:08ejecución de BCDE
  123. 5:11o E antes que planificar la ejecución
  124. 5:14del proceso A. Entonces, si inicializo
  125. 5:16el semáforo BC o el semáforo DE en uno,
  126. 5:20existe la posibilidad de que comience
  127. 5:23algún otro proceso la secuencia, ¿sí?
  128. 5:26Entonces, claramente el semáforo BC y el
  129. 5:28semáforo DE deberían estar inicializados
  130. 5:31en cero para que solo exista la
  131. 5:33posibilidad de que comience el proceso
  132. 5:36A.
  133. 5:37Bueno, entonces hasta ahí ya tenemos los
  134. 5:39tres semáforos que necesitamos y la
  135. 5:41inicialización correspondiente de cada
  136. 5:43semáforo.
  137. 5:45Bueno, acá también vemos cómo quedaría
  138. 5:47entonces la sección de entrada de cada
  139. 5:49uno de los procesos.
  140. 5:50Entonces, por ejemplo, si el sistema
  141. 5:52planifica el proceso B, se va a quedar
  142. 5:55bloqueado esperando eh que el semáforo
  143. 5:58BC valga eh tome el valor uno. Lo mismo
  144. 6:01pasa con el proceso C. Si hace un wait,
  145. 6:04se queda bloqueado esperando que el
  146. 6:06semáforo BC tome el valor de uno. Lo
  147. 6:08mismo pasa con el proceso D y lo mismo
  148. 6:10pasa con el proceso E. Entonces, todos
  149. 6:13están esperando el cambio del semáforo.
  150. 6:15¿Sí? Entonces, el único que podría
  151. 6:18llegar a entrar a su sección crítica y
  152. 6:20es el proceso A, que va a encontrar a su
  153. 6:24semáforo en uno, entonces va a va a
  154. 6:26pasar a su sección crítica.
  155. 6:28Cuando el proceso A eh salga de su de su
  156. 6:31sección crítica, entonces va a señalarse
  157. 6:34va a señalizar el semáforo BC. Eso
  158. 6:36quiere decir que lo va a poner en uno.
  159. 6:38Entonces, ahora los posibles procesos
  160. 6:41que podrían llegar a entrar a su sección
  161. 6:43crítica son el proceso B o el proceso C.
  162. 6:46¿De qué depende eh que pase B o pase C a
  163. 6:51su sección crítica? Bueno, depende de
  164. 6:54de a cuál de ellos planifique el sistema
  165. 6:56operativo. ¿Qué quiere decir planifique
  166. 6:58el sistema operativo? Planifique el
  167. 6:59sistema operativo quiere decir que el
  168. 7:02sistema operativo va a seleccionar a un
  169. 7:05proceso que esté este listo para
  170. 7:07ejecución y le va a asignar la CPU.
  171. 7:10Bueno, ¿cuál es? ¿El B o el C? Bueno,
  172. 7:12hay que preguntarle al sistema
  173. 7:14operativo. Sistema operativo, ¿a cuál
  174. 7:16vas a ¿sí? No a los
  175. 7:19dos.
  176. 7:21Bien, luego de que B o C salga de la
  177. 7:23sección crítica, uno de ellos, no los
  178. 7:26dos, en una secuencia dada, entonces va
  179. 7:30a señalizará el semáforo DE. Entonces,
  180. 7:33ahora DE se encuentra en la misma
  181. 7:36situación en la cual se encontraba B y C
  182. 7:38este anteriormente. Entonces, el sistema
  183. 7:41operativo va a seleccionar alguno de los
  184. 7:44dos,
  185. 7:45este, para asignarle la CPU. Eso depende
  186. 7:47del planificador de la CPU eh del
  187. 7:50sistema operativo. Mientras tanto, todos
  188. 7:53los demás procesos están, digamos,
  189. 7:55bloqueados esperando que el valor de su
  190. 7:58semáforo cambie. Los únicos que ahora
  191. 8:00que pueden competir por el ingreso a la
  192. 8:03sección crítica son D y E. Entonces,
  193. 8:06cualquiera de ellos va a ser
  194. 8:07seleccionado. Nosotros no lo sabemos, el
  195. 8:09sistema operativo sí.
  196. 8:11Bien, ahora vemos cómo quedarían las
  197. 8:13operaciones wait y signal en el
  198. 8:15pseudocódigo de cada proceso. En ese
  199. 8:17caso, el proceso A hace un wait del
  200. 8:20semáforo A y un signal del semáforo BC.
  201. 8:23Eh ahora el proceso B y C deberían tener
  202. 8:26la misma estructura, hacen un wait del
  203. 8:28semáforo BC y un signal del semáforo DE.
  204. 8:31Y eh también eh los procesos D y E
  205. 8:34tienen la misma estructura, harían un
  206. 8:37wait del semáforo DE y un signal del
  207. 8:39semáforo A para que el ciclo se repita
  208. 8:42infinitamente.
  209. 8:44Llegamos a la implementación en lenguaje
  210. 8:46C en Linux del ejemplo,
  211. 8:49así que vamos a comenzar.
  212. 8:51Bien, el primer paso sería crear los
  213. 8:53semáforos.
  214. 8:56Bueno, primero, lo primero que vamos a
  215. 8:58hacer es ver si eh qué semáforos tenemos
  216. 9:00creados
  217. 9:02con el comando ipcs
  218. 9:07argumento S.
  219. 9:08Entonces, ustedes ven que acá no tenemos
  220. 9:11ninguna matriz de semáforos creada.
  221. 9:13Entonces, vamos a crear
  222. 9:15este, los tres semáforos que
  223. 9:17necesitamos. Para ello, hay que hacer un
  224. 9:19código, lo vamos a llamar crea sem
  225. 9:22.c.
  226. 9:23Ya está hecho porque
  227. 9:25todos estos temas se explicaron en un
  228. 9:27video en mi canal y ahí tienen el link,
  229. 9:30si no lo vieron, lo pueden ir a ver,
  230. 9:32pero todo esto ya está explicado.
  231. 9:34Entonces, el semget ya se explicó. Lo
  232. 9:37único que vamos a ver es que acá estamos
  233. 9:39diciendo que vamos a crear tres
  234. 9:41semáforos en un array de semáforos, ¿sí?
  235. 9:44Así que esto ya ya está explicado. Vamos
  236. 9:46a crear tres semáforos. Bien.
  237. 9:49Ya está compilado también.
  238. 9:51Así que vamos a ejecutar crea.
  239. 9:55Ahí eh tenemos el ID, ¿sí? De la de la
  240. 10:00array de semáforos.
  241. 10:01Y ahora vamos a ver si realmente se creó
  242. 10:06el array de semáforos.
  243. 10:08Sí, correcto. Le le pusimos una clave de
  244. 10:13usuario o de programador 0x8.
  245. 10:16Y acá tenemos el ID con los tres eh
  246. 10:20semáforos creados.
  247. 10:22O sea, que ya tenemos el primer paso
  248. 10:25resuelto.
  249. 10:27El segundo paso entonces sería
  250. 10:29inicializar los semáforos.
  251. 10:32Bueno, como ya hemos visto también,
  252. 10:34tenemos que escribir un código para
  253. 10:35inicializar los semáforos. Ya está
  254. 10:37escrito.
  255. 10:39De nuevo, este tema fue explicado en el
  256. 10:41mismo video. Acá está el link. Entonces,
  257. 10:44obtenemos el ID de la array de semáforos
  258. 10:47y el semáforo cero de la array, que
  259. 10:51sería el semáforo A, el sema, lo
  260. 10:53inicializamos en uno. El semáforo uno de
  261. 10:56la array, que sería el sem BC, lo
  262. 10:58inicializamos en cero. Y el semáforo dos
  263. 11:01de la array, que sería el sem DE, lo
  264. 11:04inicializamos en cero, ¿sí? Bien,
  265. 11:06guardamos.
  266. 11:10Ya está compilado.
  267. 11:13Así que vamos a ejecutarlo.
  268. 11:20Ahí está. Y lo que vamos a hacer ahora
  269. 11:23es ver el código primero,
  270. 11:27que también ya fue explicado. Este,
  271. 11:30hacemos un código para obtener o ver,
  272. 11:33visualizar, poder este, hacer un get de
  273. 11:37cada semáforo, así que vamos a mostrar
  274. 11:40en pantalla eh el valor del semáforo A,
  275. 11:43el valor del semáforo BC y el valor del
  276. 11:47semáforo D, que para el sistema esto
  277. 11:49sería el semáforo 0 del array, el
  278. 11:52semáforo 1 del array,
  279. 11:54el semáforo 1 del array y el semáforo 2
  280. 11:56del array, bien.
  281. 11:58Vamos a guardar, esto ya está compilado,
  282. 12:01así que hacemos punto
  283. 12:04Y ahí está, ahí vemos, bueno, eh el
  284. 12:07segundo paso también ya está concluido.
  285. 12:12También hay que hay que recordar
  286. 12:15que hay que hacer un código para
  287. 12:17configurar las operaciones eh wait
  288. 12:20signal, esto también fue explicado.
  289. 12:24Este sería la función que equivale al
  290. 12:26wait, o sea, P de proberen
  291. 12:30y
  292. 12:34y la operación B
  293. 12:36que es la operación signal
  294. 12:38de verogen, ¿sí?
  295. 12:40Entonces, bueno, esto ya fue explicado
  296. 12:42también, la configuración de las
  297. 12:44operaciones wait signal en las funciones
  298. 12:47P
  299. 12:48y B.
  300. 12:53Bien.
  301. 12:54El paso 3 es escribir los códigos de
  302. 12:57todos los procesos, así que vamos a
  303. 12:59escribir los códigos que ya están
  304. 13:00escritos.
  305. 13:03Bueno, vamos a ver el código del proceso
  306. 13:05A.
  307. 13:07Acá tenemos entonces el mientras por
  308. 13:12siempre
  309. 13:13y acá tenemos la función principal, ¿sí?
  310. 13:16Entonces, fíjense en el mientras por
  311. 13:18siempre, la sección de entrada es hacer
  312. 13:20un
  313. 13:22un wait del semáforo A y la sección de
  314. 13:24salida es hacer un signal del semáforo
  315. 13:27BC, ¿sí?
  316. 13:32El proceso B
  317. 13:37es hacer un wait del semáforo BC y hacer
  318. 13:40un signal del semáforo
  319. 13:43DE.
  320. 13:46El proceso C es idéntico al B,
  321. 13:51hacer un un wait del semáforo BC y hacer
  322. 13:54un signal del semáforo DE.
  323. 14:00El proceso D
  324. 14:03es hacer un wait del semáforo DE y un
  325. 14:06signal del semáforo A.
  326. 14:10Y el proceso E
  327. 14:12es igual que el D,
  328. 14:14hacer un eh wait del semáforo DE
  329. 14:19y hacer un signal del semáforo A. Bueno.
  330. 14:23Bien.
  331. 14:26Entonces, para compilar vamos a usar
  332. 14:29este pequeño
  333. 14:30script.
  334. 14:35¿Sí?
  335. 14:37Porque a cada proceso, a cada proceso
  336. 14:41ABC,
  337. 14:43DE, hay que enlazarlo con el objeto de
  338. 14:47PIB. Entonces, primero hay que crear
  339. 14:50este todos los objetos, ¿sí?
  340. 14:54Y después enlazamos los objetos
  341. 14:57eh de cada proceso
  342. 15:00con eh el objeto PIB, que es la
  343. 15:03configuración
  344. 15:04de las operaciones wait y signal, ¿sí?
  345. 15:08Bien. Vamos a correr este script,
  346. 15:11entonces.
  347. 15:16Bueno, ahí en teoría está todo
  348. 15:19compilado y ya tenemos todos los
  349. 15:21ejecutables.
  350. 15:23Bueno, y el último paso sería ejecutar y
  351. 15:27ver a ver si todo anda bien. Muy bien.
  352. 15:33Bueno, yo acá preparé cinco terminales
  353. 15:35porque son cinco procesos
  354. 15:37independientes, así que voy a mandar
  355. 15:39ejecutar primero el proceso
  356. 15:42E, que se debería quedar bloqueado, se
  357. 15:44quedó bloqueado porque está haciendo un
  358. 15:47wait de su semáforo que está en cero.
  359. 15:50Voy a mandar ejecutar el proceso D,
  360. 15:52también se queda bloqueado. El proceso C
  361. 15:55se queda bloqueado, el proceso B se
  362. 15:58queda bloqueado. Y supongo que ahora
  363. 16:01cuando mande ejecutar el proceso A ya se
  364. 16:04van a empezar a ejecutar y van a generar
  365. 16:07una secuencia válida, ¿sí? Así que
  366. 16:10bueno, le voy a dar a enter. Ahí está.
  367. 16:13Bueno, ahí se van ejecutando, fíjense.
  368. 16:18A, C,
  369. 16:19E, A, B, D, A, C, E, A,
  370. 16:27B,
  371. 16:29D, A, C, A.
  372. 16:32Ahí me perdí yo.
  373. 16:34Bueno, creo que ahí está funcionando.
  374. 16:37Si ustedes se encuentran algún error,
  375. 16:39por favor, avísenme.
  376. 16:41Pero a mí me parece que que está
  377. 16:43funcionando que está funcionando bien,
  378. 16:45¿sí?
  379. 16:46Así que bueno, si lo dejamos ejecutar
  380. 16:48siempre debería generar una secuencia
  381. 16:51válida. Fíjense ahí cómo planifica, ¿no?
  382. 16:55El sistema, el planificador del sistema
  383. 16:58operativo. Esa planificación puede
  384. 17:00cambiar, ¿de qué depende? Depende mucho
  385. 17:03del nivel de de multiprogramación del
  386. 17:06sistema. Como en este caso yo estoy
  387. 17:09ejecutando nada más que estos cuatro
  388. 17:11procesos, estos cinco procesos, digamos,
  389. 17:14aparentemente el sistema siempre genera
  390. 17:17la misma planificación, la misma
  391. 17:19secuencia, pero si yo eh ahora mando
  392. 17:22ejecutar algún otro proceso, como lo
  393. 17:24hice en el video anterior, que generé un
  394. 17:27proceso simplemente que escribiera
  395. 17:29puntos eh en la pantalla, seguramente la
  396. 17:32planificación va a cambiar. Bueno, ahí
  397. 17:35está ahí está el ejercicio. Espero que
  398. 17:38les sirva, espero que les guste.
  399. 17:41Bueno, haciendo el video se puso se
  400. 17:43oscureció, ya se puso tarde.
  401. 17:45Este bueno, eh espero que esto, como ya
  402. 17:48les dije antes, que les sirva, que les
  403. 17:49guste, bueno.
  404. 17:51Eh y les voy a dejar un interrogante,
  405. 17:53¿sí? Les voy a dejar un interrogante
  406. 17:55para que piensen, para que lo pongan
  407. 17:57ustedes en funcionamiento en sus
  408. 17:58máquinas y vean a ver qué pasa. La
  409. 18:00pregunta, el interrogante la siguiente
  410. 18:02es el siguiente,
  411. 18:04¿qué pasa si yo eh en esa ejecución
  412. 18:07cancelo, por ejemplo, el proceso C?
  413. 18:10¿Sí?
  414. 18:11Con una con un control C, enviándole así
  415. 18:15una señal
  416. 18:16¿sí?
  417. 18:16¿Qué pasa?
  418. 18:18¿Qué pasa se Cuando digo qué pasa, qué
  419. 18:20quiere decir? ¿Que se bloquea todo, todo
  420. 18:22se para, sigue funcionando normalmente
  421. 18:24pero sin el proceso C? ¿Qué pasa si
  422. 18:27bloqueo el proceso D?
  423. 18:29¿Se bloquea todo?
  424. 18:30¿Eh? ¿Todo el sistema se bloquea o el
  425. 18:32sistema sigue funcionando sin el proceso
  426. 18:35D? ¿Sí? Bueno, ese es el interrogante
  427. 18:37que les dejo. Para responder este
  428. 18:41deberían ponerlo en funcionamiento y
  429. 18:43bueno, cancelar el proceso C, por
  430. 18:45ejemplo, y ver qué pasa, qué pasa con
  431. 18:47los demás procesos. O cancelar el
  432. 18:49proceso D, o cancelar el proceso C y el
  433. 18:51proceso D, o cancelar el B y el E.
  434. 18:55¿Sí? Y bueno, así ustedes se van
  435. 18:57metiendo en el comportamiento, ¿sí? En
  436. 19:00cómo funciona el sistema.
  437. 19:02Bueno,
  438. 19:03buenas noches, chao.
  439. 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.