Los árbitros son dispositivos electrónicos que asignan acceso a recursos compartidos.
Existen múltiples formas de realizar un arbitraje de bus de computadora , siendo las variedades más populares: [1] [2]
Un árbitro de bus es un dispositivo que se utiliza en un sistema de bus multimaster para decidir qué master de bus podrá controlar el bus en 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, qué CPU tendrá permitido acceder a esa memoria compartida. [3] [4] [5]
Algunas instrucciones atómicas dependen del árbitro para evitar que otras CPU lean la memoria "a mitad de camino" de instrucciones atómicas de lectura-modificación-escritura .
Normalmente, un árbitro de memoria está integrado 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, que normalmente estaba integrado en el chipset. [6] Otros sistemas utilizan un arbitraje de bus descentralizado, donde todos los dispositivos cooperan para decidir quién es el siguiente. [7] [8]
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 sincrónico. De lo contrario, el árbitro de memoria debe diseñarse como un árbitro asincrónico.
Una forma importante de árbitro se utiliza en circuitos asincrónicos para seleccionar el orden de acceso a un recurso compartido entre solicitudes asincrónicas. Su función es evitar que se produzcan dos operaciones a la vez cuando no deberían. Por ejemplo, en un ordenador que tiene varias CPU u otros dispositivos que acceden a la memoria del ordenador y tiene más de un reloj , existe la posibilidad de que las solicitudes de dos fuentes no sincronizadas puedan llegar casi al mismo tiempo. "Casi" puede ser muy cercano en el tiempo, en el rango de sub- femtosegundos . 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 ]
Los árbitros rompen los empates. Como un circuito flip-flop , un árbitro tiene dos estados estables correspondientes a las dos opciones. Si dos solicitudes llegan a un árbitro con una diferencia de unos pocos picosegundos (hoy, femtosegundos ), 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 de forma descontrolada cuando son metaestables y para decaer desde una metaestabilidad lo más rápido posible, normalmente mediante el uso de energía adicional. La probabilidad de no haber alcanzado un estado estable disminuye exponencialmente con el tiempo después de que se hayan proporcionado las entradas.
A mediados de los años 70 se encontró una solución fiable a este problema. Aunque no es posible un árbitro que tome una decisión en un tiempo fijo, se puede hacer funcionar uno que a veces tarde un poco más en el caso difícil (llamadas de atención). Es necesario utilizar un circuito de sincronización de varias etapas que detecte que el árbitro aún no se ha establecido en un estado estable. El árbitro entonces retrasa el procesamiento hasta que se haya alcanzado un estado estable. En teoría, el árbitro puede tardar un tiempo arbitrario en establecerse (véase el principio de Buridan ), pero en la práctica, rara vez tarda más de unos pocos tiempos de retardo de compuerta . 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 a los ingenieros sobre errores comunes en el diseño de árbitros.
Este resultado tiene una importancia práctica considerable, ya que los ordenadores multiprocesador no funcionarían de forma fiable sin él. Los primeros ordenadores multiprocesador datan de finales de los años 1960, antes del desarrollo de árbitros fiables. Algunos de los primeros multiprocesadores con relojes independientes para cada procesador sufrían de condiciones de carrera de árbitros y, por tanto, de falta de fiabilidad. Hoy en día, esto ya no es un problema.
Los árbitros también se utilizan en contextos sincrónicos para asignar acceso a un recurso compartido. Un árbitro de frente de onda es un ejemplo de árbitro sincrónico que está presente en un tipo de conmutador de red grande .
{{cite web}}
: Falta o está vacío |title=
( ayuda )