Las viñetas de “Principios y algoritmos de concurrencia”

Etiquetas

, ,

No sé cómo, pero conseguí que JRMora se enrolle para hacer las viñetas introductorias de cada capítulo del libro Principios y algoritmos de concurrencia. Quería darle un toque de humor sutil relacionado con el tema de cada capítulo . El pobre JRMora tuvo que escuchar explicaciones de temas muy técnicos.

Creo que los dibujos, aunque muy simples (de concepto, no de trabajo),  son representativos.

Por las dudas:
Copyright: JRMora
Licencia, como el resto del libro: CC BY-NC-ND 4.0

Prefacio

00-prefacio

Sigue leyendo

Principios y algoritmos de concurrencia: Prefacio

Etiquetas

,

Este artículo es el primer manuscrito del Prefacio y concurrencia del libro que estoy escribiendo Principios y algoritmos de concurrencia. Todo el código de los ejemplos están en Github.

Nota: me gustaría leer opiniones.

Prefacio

Hace más de veinte años que enseño concurrencia en las asignaturas de Sistemas Operativos I y II y en Programación Concurrente y Distribuida de la carrera de informática en la Universitat de les Illes Balears. A pesar de la cantidad de notas y presentaciones que elaboré en todos estos años nunca se me pasó por la cabeza escribir un libro, ni siquiera el típico libro de asignatura. Pensé que sería una tarea imposible, es muy complicado transmitir las sutilezas y conflictos generados por las ejecuciones que no cumplen con la secuencialidad de los programas.

Pero eso cambió en diciembre de 2014.

Sigue leyendo

Principios y algoritmos de concurrencia: Procesos y concurrencia

Etiquetas

, ,

Este artículo es el primer manuscrito del capítulo Procesos y concurrencia del libro que estoy escribiendo Principios y algoritmos de concurrencia. Todo el código de los ejemplos están en Github.

Procesos y concurrencia

Los programas en ejecución se denominan procesos, son elementos de gestión centrales del sistema operativo. Desde el punto de vista del núcleo del sistema operativo[1] los procesos tienen dos partes bien diferenciadas, la imagen de memoria y las tablas de control de procesos.

Se denomina imagen de memoria al código y datos del programa en la memoria RAM. Se diferencian cuatro partes según su contenido:

Sigue leyendo

Principios y algoritmos de concurrencia: Monitores

Etiquetas

, ,

Este artículo es el primer manuscrito del capítulo Monitores del libro que estoy escribiendo Principios y algoritmos de concurrencia. Todo el código de los ejemplos están en Github.

MONITORES

Los monitores evolucionaron a partir de ideas y discusiones entre Dijkstra, Per Brinch-Hansen, Ole-Johan Dahl y C.A.R. Hoare ([Brinch]) como una forma de estructurar a los sistemas operativos usando lenguajes de alto nivel[97]. En 1973 fueron formalizados por Hoare ([Hoare1]) en su notación más conocida. La idea consistía en que el sistema operativo es un conjunto de módulos, schedulers, que asignan recursos compartidos para diversos procesos. Llamaron monitor al conjunto de procedimientos y datos que debía gestionar cada scheduler.

Para evitar los problemas derivados de los accesos concurrentes cada monitor debe asegurar la exclusión mutua de la ejecución de sus procedimientos y sus variables solo debían poder ser accedidos o modificados por estos procedimientos. Brinch Hansen diseñó y desarrolló Concurrent Pascal basado en Pascal y con ideas de Modula67, fue el primer lenguaje concurrente y sirvió para el desarrollo de varios sistemas operativos experimentales y sus ideas se implementaron en otros lenguajes, Modula, Concurrent C, Mesa, ADA…​ y hasta en Java. Este último incluye monitores como construcción nativa del lenguaje como una combinación de métodos y bloques synchronized con las funciones de sincronización wait, notify y notifyAll.

Sigue leyendo

Principios y algoritmos de concurrencia: FUTEX

Etiquetas

,

Este artículo es el primer manuscrito del capítulo FUTEX del libro que estoy escribiendo Principios y algoritmos de concurrencia. Todo el código de los ejemplos están en Github.

FUTEX

Los mecanismos de sincronización sin espera activa son habitualmente implementados en los sistemas operativos, estos tienen mayor facilidad y capacidad para cambiar el estado de los procesos. Pero las llamadas de sistemas toman un tiempo considerable debido a la interrupción de software y posterior cambio de contexto a ejecución del núcleo. Se puede mejorar el rendimiento si se reducen las llamadas solo a los casos donde hay competencia. Si un proceso es el único que desea entrar a la sección crítica puede en el espacio de usuario, con las instrucciones atómicas que vimos en el capítulo de Soluciones por hardware, sin necesidad de invocar al núcleo.

Sigue leyendo

Principios y algoritmos de concurrencia: Semáforos

Etiquetas

, , , ,

Este artículo es el primer manuscrito del capítulo Semáforos del libro que estoy escribiendo Principios y algoritmos de concurrencia. Todo el código de los ejemplos están en Github.

(El capítulo FUTEX antes era una sección de éste, como quedaba muy extensa y tenía estructura propia y casi independiente la separé a otro capítulo, ya está casi acabado y lo publicaré en cuanto pueda).

SEMÁFOROS

El concepto de semáforos lo inventó Edsger W. Dijkstra a finales de los años 60 ([Dijkstra74]) -aunque las primeras ideas aparecieron a principios de la misma década ([Dijkstra35])-, fue el primero en solucionar los problemas de sincronización sin espera activa. Está inspirado de las señales visuales ferroviarias[76] que indican si un tren está habilitado para entrar en una vía. Es una construcción sencilla, eficiente y muy utilizada que permite solucionar problemas genéricos de sincronización entre procesos sin esperas activas.

Sigue leyendo

Miles de apps en los móviles: mitos, realidades y las preguntas claves

Etiquetas

, ,

Ayer hice una búsqueda y el primer resultado que me salió fue una página de Linkedin, al ir a ella un aviso en pantalla completa para que instale su app. ¡Cielos! yo sólo quería saber una información muy concreta y que no necesitaba más de unos pocos segundos de lectura. Además esa misma información está disponible en miles de sitios, que haya entrado a Linkedin fue puro accidente. Tengo cuenta en Linkedin desde hace años pero no la uso habitualmente ni tengo la intención de hacerlo: no soy un buscatalentos, no busco ni ofrezco trabajo habitualmente. No tengo intenciones ni ganas de instalar su app en mi teléfono, pero ¿por qué insisten?

Los mitos de las apps

No es nada nuevo ni soy original en lo que voy a comentar. Sin embargo me sigue sorprendiendo la molesta insistencia de muchos sitios web a que sus lectores esporádicos o accidentales instalen una nueva app en su móvil. Los que diseñan o deciden estas estrategias parecen asumir los varios de los siguientes supuestos falsos:

Sigue leyendo

Principios de concurrencia: Spinlocks

Etiquetas

, , , , ,

Este artículo es el primer manuscrito del capítulo Spinlocks del libro que estoy escribiendo Principios y algoritmos de concurrencia. Todo el código de los ejemplos están en Github.

SPINLOCKS

Las soluciones de exclusión mutua anteriores tienen en común una espera activa que continuamente verifica el estado de una variable o registro RMW hasta que el proceso puede entrar a la sección crítica. Estos algoritmos se denominan spinlocks, el de Dekker, Peterson, la panadería o cualquiera de las soluciones de exclusión mutua del capítulo anterior son también spinlocks. Su uso tiene sentido si se cumple una de las siguientes condiciones:

Sigue leyendo

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

Únete a otros 599 seguidores