1. Ф и л ь т р а ц и я при конфликтах

Наименьший действительный кадр должен иметь длину, равную, по меньшей мере, одному интервалу ответа. Этим опреде­ляется параметр мин_длина_кадра. Предполагается, что любой кадр, содержащий меньше битов, чем мин-длина-кадра, являет­ся фрагментом, образованным в результате конфликта. Посколь­ку случайные конфликты являются нормальным явлением в про­цедуре управления доступом к среде, то об аннулировании таких кадров подуровень УЛЗ не информируется как об ошибке.

  1. Генерация преамбулы

В реализациях ЛВС большей части компонентов физического уровня разрешается выдавать правильные данные в течение неко­торого числа битовых интервалов только после представления дей­ствительных входных сигналов. Таким образом, до начала пере­дачи данных необходимо посылать преамбулу, чтобы позво­лить схемам ПФС достигнуть устойчивого состояния. При выдаче компонентом «управление_звеном-приема» запроса на передачу первого бита нового кадра компонент «компоновка- физических-сигналов» должен сначала передать преамбулу — битовую последовательность, используемую для стабилизации и синхронизации физической среды, и вслед за ней — начальный ограничитель кадра. Если в процессе передачи преамбулы поду­ровень ПФС выдает сигнал обнаружения конфликта, то все остав­шиеся биты преамбулы должны быть переданы. Кодовая комби­нация преамбулы имеет вид

10101010 10101010 10101010 10101010 10101010 10101010 10101010

Биты передаются в последовательности слева направо. Харак­тер битовой комбинации таков, что при манчестерском кодирова­нии она представляет собой в физической среде периодическую волну, которая обеспечивает битовую синхронизацию. Следует за­метить, что преамбула заканчивается битом «0».

  1. Начальная последовательность кадра

Подуровень ПФС узнает о наличии активности в физической среде по сигналу опознавания несущей. Этот сигнал служит пер­вым указанием на то, что должен начаться процесс приема кадра.. При получении последовательности 10101011 сразу после послед­ней части преамбулы компонент «раскомпоновка-физических- сигналов» должен начать выдачу последовательных бит компонен­ту «управление_звеном_приема» для их передачи подуровню УЛЗ..

  1. Глобальные объявления

В данном разделе приведена подробная формализованная спе­цификация подуровня УДС КДОН/ОК. Это спецификация общих, свойств и параметров, подлежащих использованию в системах,, реализующих данный метод доступа к среде. В п. 4.4 приведены, значения этих наборов параметров для рекомендуемых реализа­ций этого механизма доступа к среде.

  1. Общие константы и типы

Приведенные ниже объявления констант и типов используются секциями передачи и приема кадров каждого подуровня УДС- КДОН/ОК.

const

длина_адреса = ...; {16 или 48 бит в соответствии с п. 3.2.3};;

длина_длины = 16 {в битах};

длииа-данных-УЛЗ = ...; {данные УЛЗ, см. п. 4.2.2.2, (1) в); длина-зап = ....; {в битах, = макс (0, мин_длина_кадра~

(2*длина-адреса + длина-длины + длина- данных-УЛЗ + длина-цик))}.

длина_данных = . .. ; {= длина_данных_УЛЗ + длина-ЗАП};

длина_цик — 32; {32-битный ЦИК = 4 октета};

длина_кадра =...;{= 2*длина_адреса + длина-длины + длина-данных + длина-цик, см. и. 4.2.2.2 (1)};

мин-длина_кадра = .. .; {в битах, зависит от реализации, см. п. 4.4};

интервал-усечения_кадра = ...; {единица времени для обра­ботки конфликта зависит от реализации, см. п. 4.4};

длина_преамбулы = ...; {в битах, зависит от физической среды};

длина_НОК = 8; {8-битный начальный ограничитель кадра};

длина-заголовка = ... ; {сумма длины-преамбулы и длины- нок};

бит = 0... 1;

значение_адреса = array [ 1 . . длина-адреса] of бит;

значение-длины = array [1..длина_длины] of бит;

значение_данных = array [1 .. длина-данных] of бит;

значение-ЦИК = array [1 . .длина-цик] of бит;

значение_преамбулы = array [ 1 .. длина-преамбулы] of бит;

значение-нок =?= array [1 .. длина-нок] of бит;

вид-рассмотрения = (поля, биты); {два способа рассмотрения содержимого кадра};

вид-рассмотрения-заголовка = (поля-заголовка, биты-заго­ловка);

кадр = record {формат кадра УДС};

case вид: вид-рассмотрения of

полей: (

поле_получателя: значение-адреса;

поле-отправителя: значение-адреса;

поле-длины: значение-длины;

поле-данных: значение-данных;

поле_кпк: значение-ЦИК; )

биты: (содержимое: array [ 1 .. длина_кадра] of бит).

end; {кадр данных}

заголовок = record {формат преамбулы и НОК}.

ease вид-заголовка: вид_рассмотрения-заголовка of лоля-заголовка: (

преамбула: значение-преамбулы;

нок: значение-НОК);

биты-заголовка: (

содержимое-заголовка: array [1 . . длина-заголовка] of бит) end; {определяет заголовок кадра УДС).

  1. П е р е м е н н ы е передачи

Перечисленные ниже элементы определены для передачи кадра (см. также и. 4.4).

const

межкадровый_интервал = . . . ; {минимальный промежуток вре­мени между кадрами};

межкадровый_интервал-часть-1 = . . . ; {длительность первой части межкадровой синхрониза­ции. В диапазоне от 0 до 2/з меж­кадрового интервала);

межкадровый_интервал_часть_2 = . . .; {длительность остатка межкадровой синхронизации. Равна: межкадровый-интервал — межкадро- вый-интервал-часть-l);

макс-число_попыток = ...; {максимальное число попыток пе­редачи);

предельное_число_выдержек = . . . ; {предельное число выдер­жек при передаче);

длина_комбинации_НК = ... ; в битах; {зависит от типа физи­ческой среды и метода обнару­жения конфликта);

var

исходящий-кадр: кадр-данных; {кадр данных, подлежащий пе­редаче);

исходящий-заголовок: заголовок;

текущий_бит_передачи, последний_бит_передачи: 1.. длина- кадр а

{позиции текущего и последнего исходящего бита в исходящем- кадре);

последний-бит_заголовка: 1 . . длина-заголовка;

отсрочка: boolean; {предполагается, что любая задержанная передача должна ждать освобождения сре­ды);

ожидание_кадра: boolean; {означает, что исходящий кадр за­держан);

попытки: 0 . . макс-число-попыток; {число попыток передачи ис­ходящего кадра);

новый-конфликт: boolean; {означает, что конфликт обнаружен, но еще не продлен комбинацией НК);

  1. продолжение-передачи: boolean; {текущий указатель продол­жения передачи).Переменные приема

Приведенные ниже элементы определены для приема кадров (см. также п. 4.4).

var входящий-кадр: кадр_данных; {принимаемый кадр данных};

текущий-бит_приема: 1 .. длина-кадра; {позиция текущего бита, во входящем-кадре};.

прием: boolean-, {означает, что происходит прием кадра};

избыточные_биты: 0...7; {счет дополнительных концевых би-

I тов, выходящих за границы октета};

продолжение-приема: boolean; {текущий указатель продолже­ния приема};

правильная_длина: boolean; {указатель наличия или отсутствия ошибки длины принятого кадра}.

  1. Сводные характеристики межуровневых интерфейсов

Сводные характеристики интерфейса с подуровнем УЛЗ, опре­деленного в и. 4.3.2, приведены ниже.

/1/ре

состояние-псредачи = (передача-ХОР, чрезмерные-ошибки- конфликта);{результат операции пере- дача-кадра};

состояние-приема = (прием-ХОР, ошибка-длины, ошибка- КПК, некратность-октету);

{результат операции прием-кадра}.

[unction передача-кадра ( парам-получателя: значение-адреса; парам-отправителя: значение-адреса; парам_длины: значение-длины; па.рам-данных: значение-данных): состояіние-передач,и; {передает один кадр}.

function прием_кадра ( var парам_получателя: значение-адреса; var парам-отправителя: значение-адреса; var парам-длины: значение-длины;

var 'паірам-даніных: значение-данных): состояние-прием а; {принимает один кадр}.

Сводные характеристики интерфейса с физическим уровнем,, определенного в п. 4.3.3, приведены ниже:

var

опознавание-несущей: boolean; {указывает входящие биты}; передается: boolean; {указывает исходящие биты};

передавалось: boolean; {указывает либо продолжение переда­чи, либо ее завершение};

обнаружение-конфликта: boolean; {указывает наличие сопер­ничества в среде}.

procedure передача_бита (парам_бит: бит); {передает один бит}. function прием-бита: бит; {принимает один бит).

procedure ожидание (битовые-интервалы: integer);

{ожидает указанного числа битовых интервалов).

  1. И н и ц и а ц и я переменных.

Процедура инициации должна выполняться в начале работы УДС до выполнения каких-либо процессов. Эта процедура уста­навливает наиболее важные переменные общего пользования в их исходные значения. (Все другие глобальные переменные при не­обходимости инициируются непосредственно перед их использова­нием.) После этого процедура ожидает освобождения физической Среды и запускает различные процессы.

procedure инициация;

begin

кадр_ожидает := false.

отсрочка := false.

новый-конфликт := false.

передается := false; {в интерфейс с физическим уровнем; см. ниже).

принимается : = false.

while опознавание_несущей do холостое;

{начать выполнение всех процессов).

end; {инициация}.

  1. Передача кадра данных

Описываемый в данном разделе алгоритм определяет опера­ции подуровня УДС по передаче кадра данных. Функция переда- ча-ікадра реализует операцию передачіи кадра данных подуровню УЛЗ:

function передача-кадра (

парам-получателя: значение-адреса;

парам-отправителя: значение-адреса;

парам-длины: значение длины;

парам_данных: значение_данных): состояние-передачи;

procedure комп_передаваемых_данных; . . . {гнездовая процеду­ра; см. ниже тело- процедуры).

begin

комп-передаваемых-данных;

передача-кадра: = упр-звеном-передачи.

end-, {передача-ікадра}.

Сначала функция- передача-кадра вызывает внутреннюю про­цедуру комп-передаваемых-данных для конструирования кадра данных. Затем вызывается упр-звеном-передачи для выполнения ’передачи. Возвращенное состояние-передачи сообщает об успеш­ном или безуспешном выполнении попытки передачи.

Процедура комп_передаваемых-данных формирует кадр и по­мещает 32-битовый ЦИК в поле КПК:

procedure комп_передаваемых-данных;

begin

with исходящий_кадр do.

begin {сборка кадра}

вид := поля;

поле_получателя := парам-получателя;

поле-отправителя := парам-отправителя;

поле-дл.ины := парам-длины;

поле-данных := вычисленпе-ЗАП (парам_длины, парам- данных);

поле-кпк := ЦИК32 (исходящий кадр);

, вид := биты.

end {сборка кадра}.

with исходящий-^заголовок do.

begin

вид_заголовка := поля-заголовка;

преамбула ... ; {*’1010... 10’, от БМЗ до БСЗ*};

нок :=...; {*’1010101 Г, от БМЗ до БСЗ*};

вид-заголовка := биты-заголовка.

end

end; {комп-передаваемых-данных}.

Функция вычисление_ЗАП присоединяет массив произвольных битов к полю_данных_УЛЗ для дополнения кадра до минимально приемлемой длины.

function вычисление-ЗАП (

var парам-длины: значение_длины;

var парам-данных: значение_данных): значение-данных;

begin

вычисление_ЗАП := {добавление массива произвольных бит, равного длине-ЗАП к полю-данных_ УЛЗ}.

end; {вычисление-ЗАП}.

Функция упр-звеном_передачи пытается передать кадр данных, предварительно задерживая его до окончания проходящих данных. При появлении конфликта передача нормально заканчивается, й осуществляются повторные передачи по расписанию экспоненциа­льного алгоритма выдержки:

function упр-звеном-передачи; состояние-передачи;

begin

попытки := 0; продолжение передачи := false;

while (число-попыток < предел-попыток) and (not продолже- ние_передачи) do.

begin {цикл}

.if число попыток >0 then алгоритм-выдержки;

кадр_ожидает := true;

while отсрочка do холостое; {уступает путь проходящим кадрам, если таковые имеются}.

кадр_ожидает := false;

начало-передачи;

while передается do контроль-конфликта;

число попыток : = число попыток + 1.

спс/; {цикл}.

if продолжение-передачи then упр_звеном_передачи := пере­дача—ХОР.

else упр_звеном_передачп := чрсзмерные-ошибки-конфликта.

end; {упр-звеном-передачи}.

При каждой инициации попытки передачи кадра вызывается процедура начало-передачи для приведения в готовность процесса передатчик_битов, который должен начать передачу битов:

procedure начало-передачи;

begin

текущий_передаваемый-бит := 1;

последний-передаваемый-бит := длина-кадра;

продолжение_передачи := true;

передается := true;

последний_бит-заголовка := длина-заголовка;

end; {начало-передачи}.

Как только начинается передача кадра, функция упр-звеном- передачи начинает следить за появлением соперничества в физиче­ской среде, периодически вызывая процедуру контроль-конфликта.

procedure контроль-конфликта;

begin

if продолжение передачи and обнаружен-конфликт then. begin

: новый_конфликт := true;

продолжение передачи := false;

end

end; {контроль-конфликта}.

При обнаружении конфликта процедура контроль-конфликта вводит новый конфликт, чтобы процесс передатчик-битов мог обес­печить надлежащую комбинацию НК-

Если после завершения передачи комбинации НК функция упр- звеном-передачи определяет необходимость следующей попытки передачи, она вызывает процедуру выдержки с целью организации следующей попытки повторной передачи кадра.

var макс_отсрочка: 2 . . . 1024; переменная процедуры выдерж- ки

procedure выдержка;

begin

if попытки =1 then макс_выдержек : = 2;

else if попытки предел-выдержек; ■

then макс-выдержек : = макс-выдержек Х2;