Чтобы приоритеты устройств не зависели от расстояния до арбитра, в некоторых шинах поддерживается несколько уровней приоритета. На каждом уровне приоритета есть линия запроса шины и линия предоставления шины. На рис. 3.37, б изображено 2 уровня (хотя в действительности шины обычно поддерживают 4, 8 или 16 уровней). Каждое устройство связано с одним из уровней запроса шины, причем, чем выше уровень приоритета, тем больше устройств привязано к этому уровню. На рис. 3.37, б можно видеть, что устройства 1, 2 и 4 обладают приоритетом уровня 1, а устройства 3 и 5 — приоритетом уровня 2.
Если одновременно запрашивается несколько уровней приоритета, арбитр предоставляет шину самому высокому уровню. Среди устройств одинакового приоритета реализуется система последовательного опроса. На рис. 3.37, б видно, что в случае конфликта устройство 2 «побеждает» устройство 4, а устройство 4 «побеждает» устройство 3. Устройство 5 имеет низший приоритет, поскольку оно находится в самом конце самого нижнего уровня.
Линия предоставления шины уровня 2 не обязательно должна последовательно связывать устройства 1 и 2, поскольку они не могут посылать на нее запросы. Однако гораздо проще провести все линии предоставления шины через все устройства, чем соединять устройства особым образом в зависимости от их приоритетов.
Некоторые арбитры содержат третью линию, которая устанавливается, как только устройство принимает сигнал предоставления шины, и получает шину в свое распоряжение. Как только эта линия подтверждения приема устанавливается, линии запроса и предоставления шины могут быть сброшены. В результате другие устройства могут запрашивать шину, пока первое устройство ее использует. К тому моменту, когда закончится текущая передача, следующее задающее устройство уже будет выбрано. Это устройство может начать работу, как только будет сброшена линия подтверждения приема. С этого момента начинается следующий цикл арбитража. Такая структура требует дополнительной линии и большего количества логических схем в каждом устройстве, но зато при этом циклы шины используются рациональнее.
В системах, где память связана с главной шиной, центральный процессор должен завершать работу со всеми устройствами ввода-вывода практически на каждом цикле шины. Чтобы решить эту проблему, можно предоставить центральному процессору самый низкий приоритет. При этом шина будет предос тавляться процессору только в том случае, если она не нужна другому устройству. Центральный процессор всегда может подождать, а устройства ввода-вывода должны получить доступ к шине как можно быстрее, чтобы не потерять данные. Например, диски, вращающиеся с высокой скоростью, не могут ждать. Во многих современных компьютерах память помещается на одну шину, а устройства ввода-вывода — на другую, поэтому им не приходится завершать работу, чтобы предоставить доступ к шине.
Возможен также децентрализованный арбитраж шины. Например, компьютер может содержать 16 приоритетных линий запроса шины. Когда устройству нужна шина, оно устанавливает свою линию запроса. Все устройства контролируют все линии запроса, поэтому в конце каждого цикла шины каждое устройство может определить, обладает ли оно в данный момент наивысшим приоритетом и, следовательно, разрешено ли ему пользоваться шиной в следующем цикле. Такой метод требует большего количества линий, но зато исключается арбитр. В этом случае число устройств ограничивается числом линий запроса.