- •Пояснительная записка
- •1 Описание метода решения задачи
- •1.1 Исходные данные (технические требования) на проектирование
- •5.1 Диаграмма вариантов использования
- •5.2 Диаграмма состояний
- •2 Описание глобальных переменных
- •3 Спецификации на программные модули
- •3.1 Модуль Main.Cpp
- •3.2 Модуль Server.Cpp
- •3.3 Модуль Client.Cpp
- •4 Схема взаимодействия модулей
- •5.3 Диаграмма действий клиента
- •5.4 Диаграмма действий сервера
- •5.5 Диаграмма последовательностей
- •6 Структурная схема сети
- •7 План отладки программы
- •8 Руководство пользователя
- •Приложение а. Листинг программного текста.
- •Модуль Server.Cpp
- •Приложение б. Uml Диаграммы.
- •Приложение в. Результаты работы программ.
2 Описание глобальных переменных
int ProcRank – переменная типа int, которая хранит в себе значение ранга процесса, выполняющегося в рамках коммуникатора MPI_COMM_WORLD. Необходима для идентификации процесса.
int ProcNum – данная переменная, типа int, содержит в себе значение числа процессов, выполняющихся в рамках коммуникатора MPI_COMM_WORLD. Она необходима для определения границы цикла for при передаче информации.
MPI_Status Status – переменная MPI типа, хранящая информацию об успешном или неудачном выполнении последней MPI операции.
3 Спецификации на программные модули
3.1 Модуль Main.Cpp
Главный модуль программы, который содержит функцию main. По своей структуре схож с классической MPI – программой, в которой в зависимости от ранга процесса (ProcRank) выполняются те или иные действия. Вначале происходит инициализация MPI, определение ранга текущего процесса и количества выполняемых процессов.
Если ранг процесса равен нулю, то вызывается функция DoClientProcess из модуля Client.cpp, иначе (ранг процесса отличен от нуля) вызывается функция DoServerProcess из модуля Server.cpp.
Затем происходит закрытие библиотеки MPI и программа завершает свою работу.
3.2 Модуль Server.Cpp
Если ранг процессора отличен от нуля, то из данного модуля вызывается функция DoServerProcess . Данная функция осуществляет подключение сервера к базе данных, соответствующей его номеру. Сервер ожидает приема SQL – запроса от клиента. После получения SQL – запроса сервер применяет его к своей базе данных и пересылает результат клиенту.
3.3 Модуль Client.Cpp
Если ранг процессора равен нулю, то вызывается функция DoClientProcess, которая находиться в данном модуле. В начале работы данная функция осуществляет подключение клиента к базе данных (на данный момент пустой). Затем происходит ввод SQL – оператора пользователем и функция переходит в режим ожидания приема результатов от серверов. После приема происходит обработка полученной информации и запись результатов в базу данных клиента.
4 Схема взаимодействия модулей
Схема взаимодействия модулей программы представлена на рисунке 1. Основной код программы содержится в модуле Main.cpp. Модуль Server.cpp содержит функции работы сервера. Модуль Client.cpp содержит функции работы клиента.
Рисунок 1. Схема взаимодействия модулей
5 UML - диаграммы
5.1 Диаграмма вариантов использования
Диаграмма вариантов использования представлена в приложении Б.
Пользователь работает с программой. Он подать SQL – запрос к базам данных серверов или ввести команду exit для выхода из программы. Варианты использования связаны между собой отношением расширения (extend).
5.2 Диаграмма состояний
Диаграмма состояний представлена в приложении Б.
После запуска программа переходит в состояние инициализации, а затем в состояние ожидание команды. В зависимости от введенной команды состояние меняется на состояние завершение работы или на состояние SQL – запроса, которое сменяется состоянием вывода результатов на экран и записи результатов в базу данных, после чего программа вновь переходит в состояние ожидания команды.
