¿Qué es la banda de bits?

Estoy leyendo el manual de referencia de ARM Cortex M3 y aparecen los conceptos "banda de bits", "región de banda de bits" y "alias de banda de bits".

¿Qué es la banda de bits?

He dedicado una página de github para explicar qué es el bit-banding, cómo funciona y cómo usarlo. Creo que responde a la mayoría de las preguntas sobre bandas de bits, siéntase libre de (re)verlo.
Esta es una introducción útil sobre la función de banda de bits en ARM Cortex M3 atadiat.com/en/articles/…

Respuestas (1)

El centro de información de ARM hace referencia a las bandas de bits en su documentación de Cortex-M3 y -M4, documentos del compilador y algunos otros lugares, como Inicio > Modelo de programadores > Bandas de bits . Desde Inicio > Software de desarrollo para Cortex-M3 > Bandas de bits :

La banda de bits mapea una palabra completa de la memoria en un solo bit en la región de la banda de bits. Por ejemplo, escribir en una de las palabras de alias establecerá o borrará el bit correspondiente en la región de la banda de bits.

Parece ser una forma de obtener una operación atómica de un solo bit.

Cuando se escribe en las regiones de alias, el bit 0 de la palabra de 32 bits se usa para establecer el valor en la región de banda de bits. La lectura de la dirección de alias devolverá el valor de la región de banda de bits en el bit 0 y los demás bits se borrarán.

¿Tiene alguna idea de cómo se realizan internamente las operaciones de banda de bits y cuáles son las garantías reales con respecto a la atomicidad? Si estuviera diseñando un chip para facilitar las operaciones atómicas de configuración de bits o eliminación de bits, usaría dos de los bits de dirección superiores para seleccionar entre 'acceso normal' (00), 'escribir unos' (01) y 'escribir ceros' (1x). Además, haría que la CPU invirtiera su salida de datos cuando esos bits de dirección fueran 0x11. De esa manera, los bits podrían configurarse o borrarse en un ciclo, sin necesidad de una lectura-modificación-escritura. Incluso si el hardware estableciera los bits simultáneamente con la escritura, ...
...no representaría un problema. Tal como están las cosas, realmente no sé qué sucedería si alguien hiciera un borrado de bandas de bits en algo como la ubicación del estado de un dispositivo de E/S al mismo tiempo que el hardware estaba provocando que se estableciera otro bit.
AFAIK 1. Leer datos usando ese alias no es más atómico que simplemente leer la memoria real. 2. La escritura de un bit no puede ser verdaderamente atómica. En cualquier caso. Entonces, ¿cuál es el beneficio real de esta tecnología?
Solo sigan los enlaces, vagabundos.
@AlKepp, Escribir un poco en muchos de los sistemas que he usado es realmente atómico con una sola instrucción para realizar el acto que no se puede interrumpir.
De DDI0337I, página 3-16: "La interfaz del bus del sistema contiene lógica que controla los accesos de banda de bits de la siguiente manera: [...] Para escrituras, convierte la escritura en una operación atómica de lectura, modificación y escritura".
@Kortuk: Trabajo con sistemas multinúcleo genéricos con controladores de memoria externos. Es difícil mantenerlo realmente atómico, cuando necesita una operación de lectura, modificación y escritura debido a que la granularidad de la memoria es mayor que la cantidad de bits que realmente necesita escribir.
@AlKepp, no estaba tratando de dar a entender que había sistemas que no podían hacer esto con una instrucción atómica. Dijiste: "La escritura de un bit no puede ser verdaderamente atómica". No estaba de acuerdo con esta afirmación. He usado muchos sistemas donde es atómico y existen.
@Kortuk: entiendo su punto: puede ser atómico en sistemas informáticos simples. Pero enseño cursos de principios de sistemas operativos en estudios de informática. Siempre lo veo más general: por ejemplo, si conecta un dispositivo externo con acceso directo a la memoria, rompe su llamada "atomicidad", porque no es una atomicidad real. Es atómico solo cuando toma el controlador de memoria y el núcleo de CPU/ALU juntos como una "caja negra" y no hay paralelismo involucrado.
@AlKepp, The Cortex M3 es un ejemplo de más de un microcontrolador. La importancia para mí es que no se puede decir que las instrucciones atómicas no existen si a menudo existen. Mucha gente aquí hace sistemas integrados que son lo suficientemente bajos en recursos como para que la memoria sea interna, en realidad es el único sistema en el que disfruto programando. Aparte de eso, decirle a alguien que no existe cuando existe y se usa comúnmente puede inducir a error.
Entonces, ¿la banda de bits le permite establecer el estado o leer el estado de hasta 32 pines uC a la vez?
@kurtnelle, No, solo devuelve 0x00000001 o 0x00000000, lo que puede ser útil. Por ejemplo, para usar directamente en comprobaciones lógicas sin preprocesamiento. (Por ejemplo, 0x00000010 sería FALSO si se lee desde la región de alias de banda de bits, pero VERDADERO si se extrae de otro lugar). Tenga en cuenta que en realidad no lo he usado e, increíblemente, me he equivocado antes.
@AlKepp: Hay una variedad de formas en las que se puede construir un sistema de memoria con primitivas de bit-set y bit-clear verdaderamente atómicas que no requieren ciclos de lectura-modificación-escritura. Quizás el enfoque más simple sería que la matriz de memoria tuviera "escribir-Y" y "escribir-O" separados. Normalmente, una escritura de memoria habilita los controladores de columna del lado alto y del lado bajo (para poder escribir tanto unos como ceros), pero si se habilita solo un tipo de controlador, se puede establecer o borrar selectivamente cualquier combinación de bits. utilizando un solo ciclo.