link560 link561 link562 link563 link564 link565 link566 link567 link568 link569 link570 link571 link572 link573 link574 link575 link576 link577 link578 link579 link580 link581 link582 link583 link584 link585 link586 link587 link588 link589 link590 link591 link592 link593 link594 link595 link596 link597 link598 link599 link600 link601 link602 link603 link604 link605 link606 link607 link608 link609 link610 link611 link612 link613 link614 link615 link616 link617 link618 link619 link620 link621 link622 link623 link624 link625 link626 link627 link628 link629 link630 link631 link632 link633 link634 link635 link636 link637 link638 link639 link640 link641 link642 link643 link644 link645 link646 link647 link648 link649 link650 link651 link652 link653 link654 link655 link656 link657 link658 link659 link660 link661 link662 link663 link664 link665 link666 link667 link668 link669 link670 link671 link672 link673 link674 link675 link676 link677 link678 link679 link680 link681 link682 link683 link684 link685 link686 link687 link688 link689 link690 link691 link692 link693 link694 link695 link696 link697 link698 link699

PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

Шина IEEE 1394 — FireWire

BOSS-арбитраж в чистой B-шине

Метод BOSS использует возможность полнодуплексного обмена каждой пары соединенных узлов, которая имеется только в бета-режиме. В этом режиме запросы на управление шиной посылаются по передающей линии; запросы представляют собой специальные 10-битные символы, отличимые от символов кодов данных. Узел может посылать запросы в любые свои порты, не занятые передачей данных. По логике работы повторителей многопортовых узлов оказывается, что к узлу, ведущему передачу данных, сигнальные пути от всех других узлов шины свободны. Исходя из этого узлу, ведущему передачу последнего пакета субакции, логично стать «боссом» (BOSS) — принимать решение о том, какому из узлов предоставить право следующей передачи. Роль «босса» передается между PHY узлов шины по следующим правилам:

  • данный PHY станет «боссом», если он является источником пакета. По этому признаку боссом станет узел, посылающий пакет квитирования или пакет ответа физического уровня;
  • данный PHY станет «боссом», когда он явно или неявно получает право передачи. Явное получение права — прием символа GRANT или GRANT_ISOCH в качестве признака завершения пакета или в ответ на запрос арбитража. Неявное получение права происходит, когда принимающий PHY может самостоятельно определить, что субакция завершена (шина находится в изохронном интервале или последний пакет был пакетом квитирования в асинхронном интервале);
  • корневой узел берет на себя роль «босса» после длительного отсутствия активности на шине (из-за потери пакета квитирования или иной ошибки);
  • PHY перестает быть «боссом» по приему пакета, а также когда он явно или неявно предоставляет право передачи другому узлу.

Вместо интервалов покоя, используемых в традиционном механизме арбитража для обозначения завершения фазы самоидентификации при конфигурировании, завершения изохронного интервала, завершения субакции и границы интервала справедливости, в бета-режиме используются маркеры. Маркер (token) — это специальный управляющий символ, передаваемый «боссом» в течение времени, достаточного для его обнаружения по всей шине. Маркер может передаваться, когда шина находится в покое или когда она удерживается в занятом состоянии потоком символов DATA_NULL (маркеры встраиваются в этот поток).

Как и в традиционном режиме, передача пакетов ведется в двух интервалах — изохронном и асинхронном. Изохронный интервал начинается, когда мастер циклов передает маркер CYCLE_START_EVEN/ODD и пакет начала цикла. Заканчивается изохронный интервал, когда текущий «босс» не имеет относящегося к текущей фазе изохронного запроса от своего LINK-уровня или от какого-либо активного порта, работающего в бета-режиме. В этом случае «босс» передает маркер ASYNC_EVEN или ASYNC_ODD, означающий начало асинхронного интервала. Переход шины в состояние нормальной работы после самоидентификации происходит по маркеру ASYNC_EVEN, который передается корневым узлом после передачи его пакетов самоидентификации.

Асинхронный период (время, не занятое под изохронные интервалы), делится на интервалы справедливости. Граница интервала справедливости отмечается маркером ASYNC_EVEN (начало четного интервала справедливости) или ASYNC_ODD (начало нечетного интервала справедливости), отличающимся от предыдущего асинхронного маркера. Четные и нечетные интервалы чередуются. Возможно, что маркер ASYNC_EVEN/ODD одновременно будет означать и завершение изохронного интервала, и начало нового интервала справедливости. Для повышения устойчивости шины к потере маркера корневой узел, обнаружив покой шины, непрерывно посылает маркеры ASYNC_EVEN/ODD.

Передача запросов в виде символов позволяет осуществлять их приоритезацию и конвейеризацию, введя множество типов запросов и фаз шины. Изохронные и асинхронные интервалы делятся на свои четные (even) и нечетные (odd) фазы, чередующиеся независимо друг от друга. Изохронные фазы меняются по концу каждого изохронного интервала цикла (по маркеру ASYNC_EVEN/ODD). Асинхронные фазы меняются на границе каждого интервала справедливости, в соответствии с маркером ASYNC_EVEN/ODD. После сброса изохронные и асинхронные фазы считаются четными.

Запросы арбитража могут предназначаться как для текущей фазы, так и для последующей (противоположной), что является конвейеризацией запросов. PHY бета-узла посылает «боссу» изохронные и асинхронные запросы с наивысшим приоритетом, полученные от своего LINK-уровня или от других бета-портов. Приоритетность зависит от текущего интервала шины и фазы.

Вслед за передачей последнего пакета субакции текущий «босс» передает право на передачу для запроса, наиболее приоритетного для данного интервала и фазы. Если к этому времени «босс» не принял запросов, относящихся к данной фазе, он передачей одного или более маркеров меняет интервал (с изохронного на асинхронный) и/или фазу асинхронного интервала:

  • если шина находится в изохронном интервале и нет изохронного запроса к текущей фазе, то «босс» завершает изохронный интервал маркером ASYNC_EVEN/ODD, не меняя текущей асинхронной фазы;
  • если шина находится в асинхронном интервале и нет запроса к текущей фазе, то «босс» маркером ASYNC_EVEN/ODD меняет текущую асинхронную фазу (начинается новый интервал справедливости);
  • если и для новой асинхронной фазы нет запросов, то «босс» передает управление шиной узлу, стоящему выше него по иерархии. В конце концов, управление (роль «босса») получит корневой узел. Асинхронная фаза не будет сменяться другой до тех пор, пока в текущей фазе не будет передан хотя бы один пакет.

В асинхронном интервале узел может послать запрос для текущей фазы, только если он имеет бюджет приоритета для текущего интервала справедливости. Если бюджет исчерпан, то узел может послать запрос для следующей фазы, на который право передачи будет дано в следующем интервале справедливости. Таким образом, сменой фаз осуществляется справедливый арбитраж без потерь времени на зазоры. Асинхронные фазы меняются только тогда, когда все узлы, имеющие пакеты для передачи в данной фазе, выполнят эти передачи.