Project

General

Profile

Actions

Описание ядра

[Написать более подробно про ядро – как работает, что такое коробка (устройство), что такое среда передачи данных, что такое часы, как проходит общение между симуляторами (описание протокола). Ещё скопировать сюда структуры, описывающие эти сущности.]

Ядро хранит следующие сущности:
  1. Часы
  2. Список устройств
  3. Список СПД

Часы

Как уже говорилось ранее, часы нужны для того чтобы ввести время симулятора. Все события обрабатываются по тикам часов.
Часы представляют собой (с точки зрения реализации) структуру, в которой хранится список обработчиков событий и номер такта, в который событие должно произойти. Также есть бесконечный цикл (while (true)), который выполняет следующее. В цикле инкрементируем глобальную переменную, содержащую номер текущего такта и вызываем обработчики событий, зарегистрированные на данный такт. После отработки обработчиков цикл повторяется снова – т.е. генерируется новый такт. Единственное, что нужно учесть при этом – то, что в описании реальных протоколов время указано в секундах (или её производных величинах), а у нас время течёт в тактах. Поэтому при запуске симулятора в настройках нужно указать размер такта. После этого можно сделать и привязку к реальному времени – то есть, если такт завершился быстрее, чем его размер, то мы просто приостанавливаем выполнение на разницу размера и времени исполнения. Если же мы «опоздали», то приостановку не делаем. При этом необходимость привязки также задаётся в настройках.

Устройства

Устройство представляет собой коробку, в которую включены интерфейсы, прошивка и модули.

Среда передачи данных

СПД – это просто канал передачи, предназначенный для связи устройств. СПД имеет следующие характеристики: пропускная способность, загрузка, длина, доля потери пакетов. Также у СПД указано количество «коннекторов», каждый «коннектор» можно подключить ровно в один интерфейс. Например, у кабеля имеется 2 «коннектора», у СПД «беспроводное» их количество не ограничено. С точки зрения реализации, для передачи пакетов через СПД, к каждому типу СПД привязан обработчик, осуществляющий передачу. Он учитывает факторы потери пакетов, количество «коннекторов», в том числе количество подключённых. Ясно, что если кабель подключён ровно одним из коннекторов, то передача через него не происходит. Обработчик рассчитывает время доставки пакета на каждый из «коннекторов» (по сути, доставка на интерфейсы оборудования) и регистрирует соответствующее событие, которое обработается при очередном тике часов.

Вопрос

Возникает следующий вопрос. Пусть некоторый пакет идёт по СПД 3 такта. Через такт после отправки пакета мы пытаемся отправить в СПД ещё один пакет. Что при этом должно произойти? Так как мы собираемся симулировать реальную сеть, то обработка должна производиться согласно спецификации СПД. То есть, если в спецификации сказано, что при обнаружении коллизии надо выдать в среду сигнал JAM и передающие устройства должны сгенерировать случайный таймаут, через который повторить передачу пакета, то так и должно быть. При этом обработчик передачи только генерирует JAM и сбрасывает передаваемые пакеты. Обработчики канального уровня на устройствах должны, приняв сигнал JAM, сгенерировать случайный таймаут и зарегистрироваться у ядра на повторную отправку через указанное время.

Взаимодействие между симуляторами

Для взаимодействия между симуляторами нужно решить проблему синхронизации часов и обмена данными. Примерное решение:
  • При очередном тике мы сообщаем всем симуляторам, что произошёл очередной тик.
  • Симуляторы начинают обрабатывать события для данного тика.
  • После того, как симулятор окончил обработку, он сообщает всем, что обработка закончилась.
  • Все симуляторы ждут окончания обработки от всех.
  • Как только счётчик достиг нуля, генерируется тик и всё повторяется.
  • При этом выбирается главный симулятор, который генерирует тики и «разруливает» подключения новых симуляторов. [Этот абзац надо хорошенько обдумать, что мы хотим и как лучше решать.]

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

Updated by Irina Burdova almost 11 years ago · 2 revisions