jfcmacro

Untitled

Mar 13th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.26 KB | None | 0 0
  1. \subsection{Semáforos en Linux}
  2.  
  3. \begin{frame}
  4.   \frametitle{Comunicación, concurrencia y bloqueos}
  5.   \framesubtitle{Semáforos en Linux}
  6.  
  7.   \begin{enumerate}
  8.   \item<1-> Linux suporta dos tipos de semáforos:
  9.     \begin{itemize}
  10.     \item<2-> System V.
  11.     \item<3-> POSIX.
  12.     \end{itemize}
  13.   \item<3-> Los semáforos tipos System V están diseñados para crear,
  14.     manipular y mantener una gran cantidad de semáforos relacionados a
  15.     través de un conjunto de los mismos.
  16.   \item<4-> Los semáforos POSIX son una versión más simplificada, que
  17.     permiten reconocer tanto hilos a nivel de usuario como hilos a
  18.     nivel de kernel.
  19.   \end{enumerate}
  20. \end{frame}
  21.  
  22. \subsubsection{Semáforos System V}
  23.  
  24. \begin{frame}
  25.   \frametitle{Comunicación, concurrencia y bloqueos}
  26.   \framesubtitle{Semáforos en Linux - System V}
  27.  
  28.   \begin{itemize}
  29.   \item Un proceso crea un semáforo System V al realizar
  30.     la llamada a sistema \texttt{semget}.
  31.   \item La anterior llamada permite crear un conjunto de
  32.     semáforos.
  33.   \item Los procesos pueden ejecutar una sola operación
  34.     sobre el conjunto del semáforo.
  35.   \end{itemize}
  36. \end{frame}
  37.  
  38. \begin{frame}[fragile]
  39.   \frametitle{Comunicación, concurrencia y bloqueos}
  40.   \framesubtitle{Semáforos en Linux - System V}
  41.  
  42.   \begin{exampleblock}{Ejemplo de creación de un semáforo System V}
  43. {\footnotesize
  44.     \begin{alltt}
  45.   if ((sem = semget(keysem, 1, IPC_CREAT | IPC_EXCL)) == -1) \{
  46.     cerr << "Error: " << errno << endl;
  47.     exit(1);
  48.   \}
  49.  
  50.   union semun \{
  51.     int              val;    /* Value for SETVAL */
  52.     struct semid_ds *buf;    /* Buffer for IPC_STAT, IPC_SET */
  53.     unsigned short  *array;  /* Array for GETALL, SETALL */
  54.     struct seminfo  *__buf;  /* Buffer for IPC_INFO
  55.                                 (Linux-specific) */
  56.   \} semval;
  57.  
  58.   semval.val = 1;
  59.  
  60.   semctl(sem, 0, SETVAL, semval);
  61.     \end{alltt}
  62. }
  63.   \end{exampleblock}
  64. \end{frame}
  65.  
  66. \begin{frame}[fragile]
  67.   \frametitle{Comunicación, concurrencia y bloqueos}
  68.   \framesubtitle{Semáforos en Linux - System V}
  69.  
  70.   \begin{block}{Semáforos System V}
  71.     \begin{itemize}
  72.     \item<1-> Los semáforos puede ser identificados a través de tres maneras:
  73.       \begin{itemize}
  74.       \item<2-> Semáforos nuevos y privados al procesos \texttt{IPC\_PRIVATE}.
  75.       \item<3-> Das un valor específico de una clave entre dos o más procesos
  76.         establece un identificador compartido.
  77.       \item<4-> Es derivar una llave a partir de un nombre de ruta mediante
  78.         la función ftok.
  79. \begin{alltt}
  80. #include <sys/types.h>
  81. #include <sys/ipc.h>
  82.  
  83. key_t ftok(const char *path, int id);
  84. \end{alltt}
  85.       \end{itemize}
  86.     \end{itemize}
  87.   \end{block}
  88.  
  89. \end{frame}
  90.  
  91. % \subsubsection{Semáforos POSIX}
  92.  
  93. % \begin{frame}
  94. %   \frametitle{Comunicación, concurrencia y bloqueos}
  95. %   \framesubtitle{Semáforos en Linux - POSIX}
  96.  
  97. %   \begin{itemize}
  98. %   \item Los semáforos en POSIX son de dos tipos:
  99. %     \begin{itemize}
  100. %     \item No nombrados.
  101. %     \item Nombrados.
  102. %     \end{itemize}
  103. %   \item Los semáforos POSIX no nombrados son utilizados principalmente
  104. %     en dentro de hilos que los pueden compartir como variables
  105. %     globales.
  106. %   \item También puede ser utilizados entre procesos que tiene
  107. %     un mismo padre y se encarga de compartir el recurso entre
  108. %     los procesos hijos.
  109. %   \end{itemize}
  110. % \end{frame}
  111.  
  112. % \begin{frame}
  113. %   \frametitle{Comunicación, concurrencia y bloqueos}
  114. %   \framesubtitle{Semáforos en Linux - POSIX}
  115.  
  116. %   \begin{itemize}
  117. %   \item Los semáforos POSIX nombrados son utilizados principalmente
  118. %     entre procesos independientes.
  119. %   \item Estos semáforos utilizan un fichero como un representación
  120. %     del semáforo entre los procesos.
  121. %   \end{itemize}
  122. % \end{frame}
  123.  
  124. % \begin{frame}[fragile]
  125. %   \frametitle{Comunicación, concurrencia y bloqueos}
  126. %   \framesubtitle{Semáforos en Linux - System V}
  127.  
  128. %   \begin{exampleblock}{Ejemplo de creación de un semáforo POSIX nombrado}
  129.  
  130. %     El siguiente ejemplo muestra como se inicializa un
  131. %     árbol nombrado \texttt{argv[1]} y un valor inicial de 1.
  132.  
  133. % {\footnotesize
  134. %     \begin{alltt}
  135. %   sem_t *sem;
  136.  
  137. %   if ((sem = sem_open(argv[1], 0, 0660, 0)) == SEM_FAILED) \{
  138. %     cerr << ``Error: `` << errno << endl;
  139. %     exit(1);
  140. %   \}
  141. % \end{alltt}
  142. % }
  143. %   \end{exampleblock}
  144. % \end{frame}
  145.  
  146. % \begin{frame}[fragile]
  147. %   \frametitle{Comunicación, concurrencia y bloqueos}
  148.  
  149. %   \begin{exampleblock}{Semáforo no nombrados}
  150. %     \begin{itemize}
  151. %     \item<1-> La  función \texttt{sem\_init} inicia un semáforo no nombrado.
  152. % \begin{alltt}
  153. % int sem_init(sem_t *sem, int pshared, unsigned int value);
  154. % \end{alltt}
  155. %     \end{itemize}
  156. %   \end{exampleblock}
  157. % \end{frame}
  158.  
  159. % \subsection{Problemas clásicos de concurrencia}
  160.  
  161. % \begin{frame}[fragile]
  162. %   \frametitle{Problemas clásicos de concurrencia}
  163. %   \framesubtitle{El problema del buffer limitado}
  164.  
  165. % {\scriptsize
  166. % \begin{alltt}
  167. % {\sffamily\bfseries var} \textit{vacíos} = n, \textit{llenos} = 0, \textit{mutex} = 1: \textit{semáforo};
  168. % \end{alltt}
  169. %   \begin{multicols}{2}
  170. %     \begin{center}\textbf{Productor}\end{center}
  171. %   \begin{alltt}
  172. % {\sffamily\bfseries repeat}
  173. %   \vdots
  174. %   producir un elemento en \textit{sigp}
  175. %   \ldots
  176. %   \textit{wait}(\textit{vacíos});
  177. %   \textit{wait}(\textit{mutex});
  178. %   \vdots
  179. %   \textit{signal}(\textit{mutex});
  180. %   \textit{signal}(\textit{llenos});
  181. % {\sffamily\bfseries until} \textit{false};
  182. % \end{alltt}
  183. %     \begin{center}\textbf{Consumidor}\end{center}
  184. % \begin{alltt}
  185. % {\sffamily\bfseries repeat}
  186. %   \textit{wait}(\textit{llenos});
  187. %   \textit{wait}(\textit{mutex});
  188. %   \vdots
  189. %   quitar elemento del buffer y
  190. %     ponerlo en \textit{sigc}
  191. %   \vdots
  192. %   \textit{signal}(\textit{mutex});
  193. %   \textit{signal}(\textit{vacíos});
  194. % {\sffamily\bfseries until} \textit{false};
  195. % \end{alltt}
  196. %     \end{multicols}
  197. %   }
  198. % \end{frame}
  199.  
  200. % \begin{frame}[fragile]
  201. %   \frametitle{Problemas clásicos de concurrencia}
  202. %   \framesubtitle{El problema de los lectores y escritores (prioridad en los lectores)}
  203.  
  204. % {\scriptsize
  205. %   \begin{alltt}
  206. %     {\sffamily\bfseries var} \textit{mutex} = 1, \textit{escr} = 1: \textit{semáforo};
  207. %         \textit{cuentalect} = 0: \textit{integer};
  208. %   \end{alltt}
  209. %   \begin{multicols}{2}
  210. %   \begin{center}\textbf{Estructura de un proceso escritor}\end{center}
  211. % \begin{alltt}
  212. %     \textit{espera}(\textit{escr});
  213. %        \vdots
  214. %        se realiza la escritura
  215. %        \vdots
  216. %     \textit{señal}(\textit{escr});
  217. % \end{alltt}
  218. %   \columnbreak
  219. %   \begin{center}\textbf{Estructura de un proceso lector}\end{center}
  220. % \begin{alltt}
  221. %     \textit{espera}(\textit{mutex});
  222. %        \textit{cuentalect} := \textit{cuentalect} + 1;
  223. %        {\sffamily\bfseries if} \textit{cuentalect} = 1
  224. %        {\sffamily\bfseries then} \textit{espera}(\textit{escr});
  225. %     \textit{señal}(\textit{mutex});
  226. %        \vdots
  227. %        se realiza la lectura
  228. %        \vdots
  229. %     \textit{espera}(\textit{mutex});
  230. %        \textit{cuentalect} := \textit{cuentalect} - 1;
  231. %        {\sffamily\bfseries if} \textit{cuentalect} = 0
  232. %        {\sffamily\bfseries then} \textit{señal}(\textit{escr});
  233. %     \textit{señal}(\textit{mutex});
  234. % \end{alltt}
  235. %   \end{multicols}
  236. % }
  237. % \end{frame}
  238.  
  239. % \begin{frame}[fragile]
  240. %   \frametitle{Problemas clásicos de concurrencia}
  241. %   \framesubtitle{El problema de los lectores y escritores (prioridad en los escritores)}
  242.  
  243. % {\scriptsize
  244.  
  245. %   \begin{alltt}
  246. %     {\sffamily\bfseries var} \textit{mutexclect} = 1, \textit{mutexcescr} = 1, \textit{mutex} = 1,
  247. %         \textit{sescr} = 1, \textit{slect} = 1 : \textit{semáforo};
  248. %         \textit{cuentalect} = 0, \textit{cuentaescr} = 0: \textit{integer};
  249. %   \end{alltt}
  250. %   \begin{multicols}{2}
  251. %   \begin{center}\textbf{Estructura de un proceso escritor}\end{center}
  252. % \begin{alltt}
  253. %     \textit{espera}(\textit{mutexcescr});
  254. %        cuentaescr := \textit{cuentaescr} + 1;
  255. %        {\sffamily\bfseries if} \textit{cuentaescr} = 1
  256. %        {\sffamily\bfseries then} \textit{espera}(\textit{slect});
  257. %     \textit{señal}(\textit{mutexcescr});
  258. %     \textit{espera}(\textit{sescr});
  259. %        ESCRIBIRDATOS();
  260. %     \textit{señal}(\textit{sescr});
  261. %     \textit{espera}(\textit{mutexcescr});
  262. %        cuentaescr := \textit{cuentaescr} - 1;
  263. %        {\sffamily\bfseries if} \textit{cuentaescr} = 0
  264. %        {\sffamily\bfseries then} \textit{señal}(\textit{slect});
  265. %     \textit{señal}(\textit{mutexcescr});
  266. % \end{alltt}
  267. %   \columnbreak
  268. %   \begin{center}\textbf{Estructura de un proceso lector}\end{center}
  269. % \begin{alltt}
  270. %     \textit{espera}(\textit{mutex});
  271. %       \textit{espera}(\textit{slect});
  272. %          \textit{espera}(\textit{mutexlect});
  273. %             \textit{cuentalect} := \textit{cuentalect} + 1;
  274. %             {\sffamily\bfseries if} \textit{cuentalect} = 1
  275. %             {\sffamily\bfseries then} \textit{espera}(\textit{sescr});
  276. %          \textit{señal}(\textit{mutexlect});
  277. %       \textit{señal}(\textit{slect});
  278. %     \textit{señal}(\textit{mutex});
  279. %       LEERDATOS();
  280. %     \textit{espera}(\textit{mutextlect});
  281. %       \textit{cuentalect} := \textit{cuentalect} - 1;
  282. %       {\sffamily\bfseries if} \textit{cuentalect} = 0
  283. %       {\sffamily\bfseries then} \textit{señal}(\textit{sescr});
  284. %     \textit{señal}(\textit{mutexlect});
  285. % \end{alltt}
  286. %   \end{multicols}
  287. % }
  288. % \end{frame}
  289.  
  290. % \subsection{Problemas de concurrencia}
  291.  
  292. % \begin{frame}
  293. %   \frametitle{Problemas de concurrencia}
  294. %   \framesubtitle{El jardin ornamental}
  295. %   \begin{block}{El problema del jardin ornamental}
  296. %     Un jardín ornamental está abierto a los miembros del público que
  297. %     pueden entrar a través de dos torniquetes. El administrador
  298. %     quiere determinar cuanta gente está en el jardín en cualquier
  299. %     momento.
  300. %   \end{block}
  301. % \end{frame}
  302.  
  303. % \begin{frame}
  304. %   \frametitle{Problemas de concurrencia}
  305. %   \framesubtitle{El jardin ornamental limidado}
  306. %   \begin{block}{El problema del jardin ornamental limitado}
  307. %     Un jardín ornamental está abierto a los miembros del público que
  308. %     pueden entrar a través de dos torniquetes. El administrador
  309. %     quiere determinar cuanta gente está en el jardín en cualquier
  310. %     momento. Pero existe un límite máximo $m$ de visitanes al sistema.
  311. %   \end{block}
  312. % \end{frame}
  313.  
  314. % \begin{frame}
  315. %   \frametitle{Problemas de concurrencia}
  316. %   \framesubtitle{El problema de los fumadores}
  317.  
  318. %   \begin{block}{El problema de los fumadores}
  319. %     Considere un sistema con tres procesos \emph{fumador} y un
  320. %     proceso \emph{agente}. Cada fumador pasa todo su tiempo enrollando
  321. %     cigarillos y fumándolos. Sin embargo, para poder hacerlo, el fumador
  322. %     necesita tres ingrediente: tabaco, papel y cerillas. Uno de los
  323. %     procesos fumadores tiene papel, otro tabaco y el tercero tiene
  324. %     cerillas. El agente tiene un abasto infinito de los tres materiales.
  325. %     El agente coloca dos de los ingredientes en la mesa. Entonces,
  326. %     el fumador que tiene el ingrediente faltante enrolla y fuma un
  327. %     cigarillo, enviando una señal al agente cuando termina. A continuación,
  328. %     el agente coloca otros dos de los tres ingredientes en la mesa, y el
  329. %     ciclo se repite. Escriba
Advertisement
Add Comment
Please, Sign In to add comment