Ф и л ь т р а ц и я при конфликтах
Наименьший действительный кадр должен иметь длину, равную, по меньшей мере, одному интервалу ответа. Этим определяется параметр мин_длина_кадра. Предполагается, что любой кадр, содержащий меньше битов, чем мин-длина-кадра, является фрагментом, образованным в результате конфликта. Поскольку случайные конфликты являются нормальным явлением в процедуре управления доступом к среде, то об аннулировании таких кадров подуровень УЛЗ не информируется как об ошибке.
Генерация преамбулы
В реализациях ЛВС большей части компонентов физического уровня разрешается выдавать правильные данные в течение некоторого числа битовых интервалов только после представления действительных входных сигналов. Таким образом, до начала передачи данных необходимо посылать преамбулу, чтобы позволить схемам ПФС достигнуть устойчивого состояния. При выдаче компонентом «управление_звеном-приема» запроса на передачу первого бита нового кадра компонент «компоновка- физических-сигналов» должен сначала передать преамбулу — битовую последовательность, используемую для стабилизации и синхронизации физической среды, и вслед за ней — начальный ограничитель кадра. Если в процессе передачи преамбулы подуровень ПФС выдает сигнал обнаружения конфликта, то все оставшиеся биты преамбулы должны быть переданы. Кодовая комбинация преамбулы имеет вид
10101010 10101010 10101010 10101010 10101010 10101010 10101010
Биты передаются в последовательности слева направо. Характер битовой комбинации таков, что при манчестерском кодировании она представляет собой в физической среде периодическую волну, которая обеспечивает битовую синхронизацию. Следует заметить, что преамбула заканчивается битом «0».
Начальная последовательность кадра
Подуровень ПФС узнает о наличии активности в физической среде по сигналу опознавания несущей. Этот сигнал служит первым указанием на то, что должен начаться процесс приема кадра.. При получении последовательности 10101011 сразу после последней части преамбулы компонент «раскомпоновка-физических- сигналов» должен начать выдачу последовательных бит компоненту «управление_звеном_приема» для их передачи подуровню УЛЗ..
Глобальные объявления
В данном разделе приведена подробная формализованная спецификация подуровня УДС КДОН/ОК. Это спецификация общих, свойств и параметров, подлежащих использованию в системах,, реализующих данный метод доступа к среде. В п. 4.4 приведены, значения этих наборов параметров для рекомендуемых реализаций этого механизма доступа к среде.
Общие константы и типы
Приведенные ниже объявления констант и типов используются секциями передачи и приема кадров каждого подуровня УДС- КДОН/ОК.
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; {определяет заголовок кадра УДС).
П е р е м е н н ы е передачи
Перечисленные ниже элементы определены для передачи кадра (см. также и. 4.4).
const
межкадровый_интервал = . . . ; {минимальный промежуток времени между кадрами};
межкадровый_интервал-часть-1 = . . . ; {длительность первой части межкадровой синхронизации. В диапазоне от 0 до 2/з межкадрового интервала);
межкадровый_интервал_часть_2 = . . .; {длительность остатка межкадровой синхронизации. Равна: межкадровый-интервал — межкадро- вый-интервал-часть-l);
макс-число_попыток = ...; {максимальное число попыток передачи);
предельное_число_выдержек = . . . ; {предельное число выдержек при передаче);
длина_комбинации_НК = ... ; в битах; {зависит от типа физической среды и метода обнаружения конфликта);
var
исходящий-кадр: кадр-данных; {кадр данных, подлежащий передаче);
исходящий-заголовок: заголовок;
текущий_бит_передачи, последний_бит_передачи: 1.. длина- кадр а
{позиции текущего и последнего исходящего бита в исходящем- кадре);
последний-бит_заголовка: 1 . . длина-заголовка;
отсрочка: boolean; {предполагается, что любая задержанная передача должна ждать освобождения среды);
ожидание_кадра: boolean; {означает, что исходящий кадр задержан);
попытки: 0 . . макс-число-попыток; {число попыток передачи исходящего кадра);
новый-конфликт: boolean; {означает, что конфликт обнаружен, но еще не продлен комбинацией НК);
продолжение-передачи: boolean; {текущий указатель продолжения передачи).Переменные приема
Приведенные ниже элементы определены для приема кадров (см. также п. 4.4).
var входящий-кадр: кадр_данных; {принимаемый кадр данных};
текущий-бит_приема: 1 .. длина-кадра; {позиция текущего бита, во входящем-кадре};.
прием: boolean-, {означает, что происходит прием кадра};
избыточные_биты: 0...7; {счет дополнительных концевых би-
I тов, выходящих за границы октета};
продолжение-приема: boolean; {текущий указатель продолжения приема};
правильная_длина: boolean; {указатель наличия или отсутствия ошибки длины принятого кадра}.
Сводные характеристики межуровневых интерфейсов
Сводные характеристики интерфейса с подуровнем УЛЗ, определенного в и. 4.3.2, приведены ниже.
/1/ре
состояние-псредачи = (передача-ХОР, чрезмерные-ошибки- конфликта);{результат операции пере- дача-кадра};
состояние-приема = (прием-ХОР, ошибка-длины, ошибка- КПК, некратность-октету);
{результат операции прием-кадра}.
[unction передача-кадра ( парам-получателя: значение-адреса; парам-отправителя: значение-адреса; парам_длины: значение-длины; па.рам-данных: значение-данных): состояіние-передач,и; {передает один кадр}.
function прием_кадра ( var парам_получателя: значение-адреса; var парам-отправителя: значение-адреса; var парам-длины: значение-длины;
var 'паірам-даніных: значение-данных): состояние-прием а; {принимает один кадр}.
Сводные характеристики интерфейса с физическим уровнем,, определенного в п. 4.3.3, приведены ниже:
var
опознавание-несущей: boolean; {указывает входящие биты}; передается: boolean; {указывает исходящие биты};
передавалось: boolean; {указывает либо продолжение передачи, либо ее завершение};
обнаружение-конфликта: boolean; {указывает наличие соперничества в среде}.
procedure передача_бита (парам_бит: бит); {передает один бит}. function прием-бита: бит; {принимает один бит).
procedure ожидание (битовые-интервалы: integer);
{ожидает указанного числа битовых интервалов).
И н и ц и а ц и я переменных.
Процедура инициации должна выполняться в начале работы УДС до выполнения каких-либо процессов. Эта процедура устанавливает наиболее важные переменные общего пользования в их исходные значения. (Все другие глобальные переменные при необходимости инициируются непосредственно перед их использованием.) После этого процедура ожидает освобождения физической Среды и запускает различные процессы.
procedure инициация;
begin
кадр_ожидает := false.
отсрочка := false.
новый-конфликт := false.
передается := false; {в интерфейс с физическим уровнем; см. ниже).
принимается : = false.
while опознавание_несущей do холостое;
{начать выполнение всех процессов).
end; {инициация}.
Передача кадра данных
Описываемый в данном разделе алгоритм определяет операции подуровня УДС по передаче кадра данных. Функция переда- ча-ікадра реализует операцию передачіи кадра данных подуровню УЛЗ:
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;