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

Principios de concurrencia: Soluciones por hardware

Etiquetas

, , , ,

Este artículo es el primer manuscrito del capítulo Soluciones por hardware del libro que estoy escribiendo Principios de concurrencia para programadores. Todo el código de los ejemplos están en Github.

Soluciones por hardware

Hasta ahora hemos visto soluciones al problema de la exclusión mutua sin soporte de hardware y con solo registros de lectura-escritura atómicos, todos ellos son spinlocks pero muy ineficientes. Por un lado por el consumo de memoria, tanto para la solución de dos procesos (Dekker y Peterson) como para N procesos (Panadería) el número de registros necesarios es proporcional al número de procesos máximos que sincronizarán[31]. Esta necesidad de memoria impone una sobrecarga importante para mantener la consistencia de la memoria caché, además del consumo de CPU por la espera activa todos los procesos involucrados tienen que acceder al mismo rango de memoria que los demás. Es una penalización muy importante para sistemas con varios procesadores o núcleos. Por otro lado, si se tiene un único procesador el avance es tan lento que lo que tarda décimas en uno puede tomar horas en otros[32] en el caso de que exista mucha competencia (contention) porque varios procesos desean entrar a la sección crítica de forma casi simultánea.

Desde el inicio se buscaron soluciones por hardware que permitiesen implementar algoritmos de sincronización de forma mucho más eficiente.

Sigue leyendo

Nota rápida sobre el “no hackeo” del cifrado de Telegram

Etiquetas

, ,

Antes que nada, no tengo ni la mínima intención de defender a Telegram, tampoco sé si sus métodos de cifrado son los mejores o no. Se trata simplemente te aclarar unos temas básicos de cifrado para el “drama” que están montando (por ejemplo) a partir del artículo original How I Hacked Telegram’s “Encryption”. (también erróneo por sensacionalista y poor ignorar de dónde está el problema, pero vaya, es cuestión de negocios, supongo).

Sigue leyendo

PIB, gasto y aumento de la deuda

Etiquetas

, , ,

El Producto Interno Bruto son mediciones estadísticas de la actividad económica de los habitantes e instituciones de un país. No hay que olvidar que es un “invento” con diferentes modos de medirlo (producción, ingresos y gastos), que la medición no puede ser perfecta (no se pude medir todo, se usan aproximaciones estadísticas), que con los cambios sociales de las últimas décadas se dejan muchos aspectos sin medir (por ejemplo no se mide el valor que aporta todo el trabajo detrás de la Wikipedia y los beneficios que genera) y tiene sus limitaciones. Aún así es una de las mejoras formas conocidas de medir la “riqueza” o actividad económica de un país que sirve analizar su evolución comparando el resultado de un período a otro. Si los datos se obtienen siempre de la misma forma dan información muy valiosa, casi imprescindible (hasta los presupuestos generales se hacen basados en estimaciones del PIB para el año correspondiente).

Sigue leyendo

Principios de concurrencia: exclusión mutua y algoritmos

Etiquetas

, , , ,

Este artículo incluye dos capítulos, Exclusión mutua y Algoritmos de exclusión mutuadel libro que estoy escribiendo: Principios de concurrencia.

Recordad que:

  • Es un manuscrito, por lo que no ha pasado todavía por el proceso de corrección (que espero contratar o pedir ayuda a un corrector profesional, además de a otros amigos informáticos).
  • Aunque intentaré eliminar todos pueden quedar algunos enlaces relativos que apuntan a otros capítulos del libro y que obviamente no funcionarán.
  • El código fuente de los ejemplos están en Github.
  • Publico estos capítulos parciales porque es una forma de ponerme objetivos más cercanos, de publicar el texto y además de detectar errores o qué temas hay que explicar mejor. Tampoco viene mal un poco de publicidad del futuro libro (que publicaré en Amazon y Google Books).
  • Por si tenéis curiosidad, al libro lo estoy escribiendo para asciidoc/asciidoctor. Para ponerlo aquí genero el HTML con asciidoctor y hago el copipaste sobre el editor de WordPress, como es de esperar, se pierden formato e imágenes, pero eliminé la generación de iconos más guapos para minimizar este problema y que sea legible (en el ebook va con ellos).

EXCLUSIÓN MUTUA

La exclusión mutua es un problema básico y fundamental de sincronización entre procesos[1] con memoria compartida, se trata de asegurar que el acceso a recursos compartidos entre ellos se haga de forma ordenada para asegurar que los valores o estados de esos recursos sean consistentes. Un problema de exclusión mutua muy genérico y naïve pero que ilustra perfectamente el problema: si varios procesos en un ordenador[2] envían diferentes trabajos de impresión se debe asegurar que las páginas no se intercalen, es decir, asegurar la exclusión mutua en el acceso a la impresora.

Sigue leyendo

Software libre y GNU/Linux en la UIB

Etiquetas

, ,

1993

Me encargan que de la asignatura de sistemas operativas en la UIB. No teníamos ningún Unix accesible a los usuarios, tampoco teníamos PCs para instalar el novedoso GNU/Linux, todo era Macintosh. Encuentro MacMinix, un port de Minix a Mac mínimo, se ejecutaba como programa normal de Mac que abría tres consolas de shell.

Lo pruebo en los Macs del aula informática (unos 70 ordenadores) de nuestro edificio. No funcionaba el teclado español y se colgaba cada pocos segundos. Desesperación, la asignatura comenzaba en febrero de 1994, me quedaban pocos meses y no tenía una plataforma “seria” para darla.

Decido que no hay otra solución que intentar arreglar esos problemas. Pido un portátil Mac prestado al Dept. (un MacBook, me tomaba 45 minutos compilar el kernel) y me pasé unos tres meses modificando el núcleo del Minix. Descubro que el problema del teclado estaba ocasionado porque las tablas de E/S de caracteres del  Minix eran de 7 bits y se necesitaban 8 para el teclado español. Modifico todas esas funciones para trabajar con 8 bits, logro que funcione correctamente. Luego detecto que el culpable de los cuelgues era por la pila de red de Apple Talk, los ordenadores estaban conectados a una que cubría toda la universidad y claramente tenía muchas race conditions no solucionadas. Deshabilito todas esas funciones, el problema se soluciona, no tendríamos red pero tampoco era necesaria.

Así doy dos cursos, 93-94 y 94-95.

Sigue leyendo

Las cosas que no soporto que diga un programador

Etiquetas

,

…y quizás tampoco las soportan los demás programadores.

En mi ordenador funciona

Si el código no funciona en un ordenador con toda las dependencias adecuadas instaladas es un error de tu programa, sin dudas, no hay excusas. Nunca digas esta frase, sólo demuestra que todavía no estás preparado ni para asumir la responsabilidad de tu propio código. Si eres alumno demuestra que no te interesa aprender sólo aprobar con el menor esfuerzo posible… además de tomar como tonto al profesor, como si nunca hubiese oído esta excusa (la oímos decenas de veces cada vez que se presentan prácticas).

Sigue leyendo

¿Qué tecnologías utilizarías?

Etiquetas

, , , , , ,

Hoy un viejo conocido me hizo esta pregunta:

Estuve a punto de contestar pero me di cuenta que soy incapaz, y que tampoco debería. Lo haré al final, como una cuestión muy personal y después de un rant de matizaciones.

Sigue leyendo

Seguir

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

Únete a otros 569 seguidores