Code Monkey home page Code Monkey logo

ds's Introduction

Директория содержит файлы для лабораторных работ по распределённым системам.

Цель: дать студентам (пользователям) небольшую инфраструктуру, позволяющую создавать модели распределённых процессов.

Требования:
Максимальная простота вхождения (требуется написать минимум кода и исправлять/дописывать минимальное количество файлов)
Моделирование распределённых процессов, обменивающихся сообщениями.
Моделирование синхронного режима работы (процессы, получившие сообщения в течении такта 
  синхронизации отправляют сообщения другим процессам, которые получают их в начале следующего такта.
Моделирование асинхронного режима работы (каждое сообщение доставляется процессу в течение времени, определённого весом связи 
  между процессами).
Моделирование потерь сообщений. Параметр errorRate (0 <= errorRate <= 1) определяет вероятность потери сообщения. 
Робастные алгоритмы должны быть относительно устойчивы к потерям сообщений.

Типы алгоритмов для моделирования:
Топологические алгоритмы. 
  Построение остовных деревьев.
  Определение достижимости узла.
  Определение кратчайшего пути.
  
Алгоритмы выборов
Алгоритмы синхронизации
Алгоритмы определения завершения
Алгоритмы упорядоченной рассылки
.....


---------------

Как это реализуется:
Вся модель реализована на языке C++.

Имеются несколько простых классов (наследование не применяется) для реализации общих функций.
Они находятся в одном файле DSSimul.h. Файлы компилируются в операционных системах 
Windows, OS X и linux, но не содержат функции main(). Цель лабораторной работы - написать
подходящий main() и функцию-обработчих сообщений (об этом далее). Пример приведён в проекте.

Главный класс проекта - мир, World. Он создаёт модели распределённых процессов (далее - просто процессы),
регистрирует (register) функции-обработчики (общие для всех процессов системы) и назначает обработчик для
конкретного процесса (assign). 

Класс NetworkLayer отвечает за связи между процессами и доставку сообщений между процессами.
В одном мире может быть несколько сетей и каждый процесс может принадлежать нескольким сетям.
Он моделирует асинхронный и синхронный режимы посылки сообщений между процессами а также 
может привносить ошибки в передачу (например, сообщение может быть потеряно с некоторой вероятностью).

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

Названия остальных классов говорят сами за себя: Error, Exception, Thread, Mutex, Event, Message, MessageQueue.

Немного подробнее о рабочей функции.
Она вызывается с двумя аргументами. Первый - контекст класса DistributedProcess, который
даёт возможность определить топологию сети (непосредственных соседей) и свой номер.
Пользователь может добавить в класс DistributedProcess свой контекст, который будет использовать рабочая функция. 
Для этого требуется:
1) описать свою структуру или класс, поместить это описание в отдельный заголовочный файл или добавить описание в файл contextes.h (см. пример в файле).
2) описать объект этого типа с уникальным именем (см. там же)
3) добавить соответствующий #include в файл contextes.h (если нужно)

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

Рабоча функция должна проверять сообщение, возвращать истину, если она готова и может обработать это сообщение и ложь, 
если она не может его обработать (например, если сообщение предназначено другой рабочей функции)


Топология сети описается в файле config.data
Его команды:
processes 1 11
	создать процессы от 1 до 11

link from 1 to 2 [latency 10]

link from 1 to all [latency 5]

link from all to all [latency 1]

setprocesses 2 5 TEST

send from 4 to 10 TEST_BEGIN 1

send from -1 to 1 TEST_BEGIN

wait all

Для примера имеется готовая рабочая функкция TEST

Для компиляции под Windows Visual Studio имеется проект DSSimul.vcxproj

В других ОС компилировать только файл main.cpp. Имеется соответствующий Makefile.

Используется стандарт языка C++11, он поддерживается начиная с g++ 4.9, Visual C++ 2013, clang++ 3.3




ds's People

Contributors

lightvillet avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.