Los árbitros son dispositivos electrónicos que asignan acceso a recursos compartidos.
Árbitro de autobús
Un árbitro de bus es un dispositivo que se utiliza en un sistema de bus multimaestro para decidir qué bus maestro podrá controlar el bus para cada ciclo de bus. El tipo más común de árbitro de bus es el árbitro de memoria en un sistema de bus de sistema.
Un árbitro de memoria es un dispositivo utilizado en un sistema de memoria compartida para decidir, para cada ciclo de memoria, a qué CPU se le permitirá acceder a esa memoria compartida. [1] [2] [3]
Algunas instrucciones atómicas dependen del árbitro para evitar que otras CPU lean la memoria "a la mitad" de las instrucciones atómicas de lectura-modificación-escritura .
Un árbitro de memoria se integra típicamente en el controlador de memoria / controlador DMA .
Algunos sistemas, como el PCI convencional , tienen un único dispositivo de arbitraje de bus centralizado al que se puede señalar como "el" árbitro de bus. Otros sistemas utilizan arbitraje de bus descentralizado, donde todos los dispositivos cooperan para decidir quién sigue. [4] [5]
Cuando cada CPU conectada al árbitro de memoria tiene ciclos de acceso a la memoria sincronizados, el árbitro de memoria puede diseñarse como un árbitro síncrono. De lo contrario, el árbitro de la memoria debe diseñarse como un árbitro asincrónico.
Árbitros asincrónicos
Una forma importante de árbitro se utiliza en circuitos asincrónicos para seleccionar el orden de acceso a un recurso compartido entre las solicitudes asincrónicas. Su función es evitar que se produzcan dos operaciones a la vez cuando no deberían. Por ejemplo, en una computadora que tiene varias CPU u otros dispositivos que acceden a la memoria de la computadora y tiene más de un reloj , existe la posibilidad de que las solicitudes de dos fuentes no sincronizadas entren casi al mismo tiempo. "Casi" puede ser muy cercano en el tiempo, en el rango de subfemtosegundos . El árbitro de memoria debe decidir entonces qué solicitud atender primero. Desafortunadamente, no es posible hacer esto en un tiempo fijo [Anderson 1991]. [ aclaración necesaria ]
Ivan Sutherland y Jo Ebergen , en su artículo "Computadoras sin relojes", describen a los Árbitros de la siguiente manera:
- "Un árbitro es como un oficial de tránsito en una intersección que decide qué automóvil puede pasar a continuación. Ante una sola solicitud, un árbitro permite de inmediato la acción correspondiente, retrasando cualquier segunda solicitud hasta que se complete la primera acción. Cuando un árbitro recibe dos solicitudes de una vez, debe decidir qué solicitud conceder primero. Por ejemplo, cuando dos procesadores solicitan acceso a una memoria compartida aproximadamente al mismo tiempo, el árbitro coloca las solicitudes en una secuencia, otorgando acceso a un solo procesador a la vez. Arbiter garantiza que nunca hay dos acciones en curso a la vez, al igual que el oficial de tránsito previene accidentes asegurándose de que nunca haya dos autos pasando por la intersección en un curso de colisión ".
- "Aunque los circuitos de Árbitros nunca otorgan más de una solicitud a la vez, no hay forma de construir un Árbitro que siempre llegue a una decisión dentro de un límite de tiempo fijo. Los Árbitros actuales toman decisiones muy rápidamente en promedio, generalmente en unos pocos cien picosegundos. Sin embargo, cuando se enfrentan a llamadas cercanas, los circuitos pueden tardar en ocasiones el doble de tiempo y, en casos muy raros, el tiempo necesario para tomar una decisión puede ser 10 veces más largo de lo normal ". [6]
Árbitros asincrónicos y metaestabilidad
Los árbitros rompen los lazos. Como un circuito flip-flop , un árbitro tiene dos estados estables correspondientes a las dos opciones. Si dos solicitudes llegan a un árbitro con unos pocos picosegundos (hoy, femtosegundos ) entre sí, el circuito puede volverse metaestable antes de alcanzar uno de sus estados estables para romper el empate. Los árbitros clásicos están especialmente diseñados para no oscilar violentamente cuando son metaestables y para decaer de una metaestabilidad lo más rápido posible, generalmente mediante el uso de potencia adicional. La probabilidad de no haber alcanzado un estado estable disminuye exponencialmente con el tiempo después de que se han proporcionado las entradas.
A mediados de la década de 1970 se encontró una solución confiable a este problema. Aunque no es posible un árbitro que toma una decisión en un tiempo fijo, se puede hacer que funcione uno que a veces toma un poco más de tiempo en el caso difícil (llamadas cerradas). Es necesario utilizar un circuito de sincronización de múltiples etapas que detecte que el árbitro aún no se ha establecido en un estado estable. A continuación, el árbitro retrasa el procesamiento hasta que se alcanza un estado estable. En teoría, el árbitro puede tomar un tiempo arbitrariamente largo para resolver, pero en la práctica, rara vez toma más de unos pocos tiempos de retardo de la puerta . El artículo clásico es [Kinniment y Woods 1976], que describe cómo construir un "flip flop de 3 estados" para resolver este problema, y [Ginosar 2003], una advertencia para los ingenieros sobre errores comunes en el diseño de árbitros.
Este resultado es de considerable importancia práctica, ya que las computadoras multiprocesador no funcionarían de manera confiable sin él. Las primeras computadoras multiprocesador datan de finales de la década de 1960, antes del desarrollo de árbitros confiables. Algunos de los primeros multiprocesadores con relojes independientes para cada procesador sufrieron condiciones de carrera de árbitro y, por lo tanto, falta de fiabilidad. Hoy, esto ya no es un problema.
Árbitros sincrónicos
Los árbitros también se utilizan en contextos síncronos para asignar acceso a un recurso compartido. Un árbitro de frente de onda es un ejemplo de un árbitro síncrono que está presente en un tipo de conmutador de red grande .
Referencias
- ^ Michael Fingeroff. "Libro azul de síntesis de alto nivel" . 2010. p. 270. quote: "El árbitro de bus o memoria procesa la solicitud de los diferentes procesos y decide quién obtiene acceso al bus / memoria".
- ^ Arten Esa, Bryan Myers. "Diseño de un árbitro para memoria DDR3" . 2013.
- ^ Kearney, DA; Veldman, G. "Un árbitro de memoria multibanco concurrente para núcleos de IP dinámicos que utilizan turnos de salto inactivo" . 2003. DOI: 10.1109 / FPT.2003.1275789.
- ^ Tim Downey. "Arbitraje de autobús"
- ^ Shun Yan Cheung. "Arbitraje de autobús"
- ^ Sutherland, Ivan E .; Ebergen, Jo (agosto de 2002). "Computadoras sin relojes". Scientific American . 287 (2): 62–69. Código Bibliográfico : 2002SciAm.287b..62S . doi : 10.1038 / scientificamerican0802-62 . PMID 12140955 .
- DJ Kinniment y JV Woods. Circuitos de sincronización y arbitraje en sistemas digitales . Actas IEEE. Octubre de 1976.
- Carver Mead y Lynn Conway. Introducción a los sistemas VLSI Addison-Wesley. 1979.
- Sutherland, Ivan ; Ebergen, Jo (agosto de 2002), "Computadoras sin relojes" (PDF) , Scientific American , 287 (2): 62–69, Bibcode : 2002SciAm.287b..62S , doi : 10.1038 / scientificamerican0802-62 , PMID 12140955 , archivado desde el original (PDF) el 2004-12-14[ enlace muerto ]
- Ran Ginosar. " Catorce formas de engañar a su sincronizador " ASYNC 2003.
- J. Anderson y M. Gouda, " Una nueva explicación del fenómeno de falla ", Acta Informatica, vol. 28, núm. 4, págs. 297-309, abril de 1991.
enlaces externos
- Metaestabilidad de la lógica digital
- Rendimiento de metaestabilidad de FIFO sincronizados
- La bibliografía 'asincrónica'
- Interfaces eficientes con temporizador automático para cruzar dominios de reloj