Sistemas operativos modernos

está comiendo. Los vecinos del filósofo i se definen con las macros IZQ y DER. Dicho de otro modo, si i es 2, IZQ es 1 y DER es 3. El programa utiliza un arreglo de semáforos, uno por filósofo, lo que permite a los filóso­ fos hambrientos bloquearse si los tenedores que necesitan están ocupados. Cabe señalar que cada proceso ejecuta el p r o c e d i m i e n t o c o m o código principal, pero los demás procedi­ mientos — tomarjenedor, dejar_tenedor y probar — son ordinarios y no procesos indepen­ dientes. 2.4.2 El problema de los lectores y escritores El problema de la cena de los filósofos es útil para modelar procesos que están compitiendo por obtener acceso exclusivo a un número limitado de recursos, como dispositivos de E/S. Otro problema famoso es el de los lectores y escritores (Courtois et a i, 1971), que modela el acce­ so a una base de datos. Por ejemplo, imaginemos un sistema de reservaciones para vuelos con muchos procesos competidores que desean leer y escribir. Es aceptable tener varios procesos leyendo la base de datos al mismo tiempo, pero si un proceso está actualizando (escribiendo) la base de datos, ningún otro proceso podrá tener acceso a ella, ni siquiera los lectores. La pre­ gunta es, ¿cómo programamos a los lectores y a los escritores? En la figura 2-34 se muestra una solución. En esta solución, el primer lector que obtiene acceso a la base de datos ejecuta down en el semáforo db. Los lectores subsiguientes se limitan a incrementar un contador, re. Cuando un lector sale, decrementa el contador, y el último lector en salir ejecuta up en el semáforo para permitir el ingreso de un escritor bloqueado, si lo hay. La solución que presentamos aquí tiene implícita una decisión sutil que vale la pena co­ mentar. Supongamos que mientras un lector está usando la base de datos, llega otro. Dado que el hecho de que haya dos lectores al mismo tiempo no representa un problema, se admite al se­ gundo lector. También pueden admitirse un tercero y más, si llegan. Ahora supongamos que llega un escritor. No se le puede admitir en la base de datos por­ que los escritores necesitan acceso exclusivo, así que se le suspende. Después, llegan más lec­ tores. En tanto haya por lo menos un lector activo, se admitirán lectores subsiguientes. Como consecuencia de tal estrategia, mientras haya un abasto continuo de lectores, todos entrarán tan pronto lleguen. El escritor permanecerá suspendido hasta que no haya ningún lector presente. Si llega un lector, digamos, cada dos segundos, y cada uno tarda cinco segundos en hacer su trabajo, el escritor nunca podrá entrar. Para evitar esta situación, el programa podría modificarse un poco: cuando llegue un lec­ tor y haya un escritor esperando, el lector quedará suspendido detrás del escritor en lugar de ser admitido de inmediato. De esta manera, un escritor tendrá que esperar a que terminen los lectores que estaban activos cuando llegó, pero no a que terminen los que llegaron después de él. La desventaja de esta solución es que permite menos concurrencia y, por lo tanto, merma el desempeño. Courtois et al. presentan una solución que da prioridad a los escritores. Si desea más detalles, puede consultar su artículo.

RkJQdWJsaXNoZXIy MjI4NDcx