Skip to content

Использование общей памяти для передачи данных между различными процессами системы.

Notifications You must be signed in to change notification settings

Kratosterra/Shared-Memory-Task

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Отчёт. Домашнее задание 2. Вариант 35

Шарапов Егор Сергеевич, БПИ219

Рекомендую открыть всю папку как проект в VScode или Atom и удобно и быстро прыгать по ссылкам на файлы из отчета.

Комментарии к решению

Ответ, который вы видете в папках ./X points/resaults на следующей конфигурации:

> OS: Ubuntu 22.04
> Processor: Intel I7 10750H
> RAM: 16 GB DDR4 3200

Для работы с файлами использовались только функции fprintf, fscanf, fopen.

Завершение программ происходит по выполнению поставленной задачи или по сигналу SIGINT CTRL+C с полноценным завершением и чисткой.

Результаты работы программы вы можете посмотреть в паках resaults для каждого балла.

Условие

Задача для агронома. Председатель дачного кооператива Сидоров В.И. получил указание, что в связи с составлением единого земельного кадастра, необходимо представить справку о площади занимаемых земель. Известно, что территория с запада и востока параллельна меридианам, на севере ограничены параллелью, а с юга выходят к реке, описываемой функцией f(x). Требуется создать приложение, вычисляющее площадь угодий методом адаптивной квадратуры. Замечание: кривизну Земли из-за малой занимаемой площади не учитывать. Количество процессов, участвующих в вычислениях определяется опционально. Агроном нанимает счетоводов, каждый из которых обсчитывает небольшой участок после чего добавляет свой результат к общей площади полученной в ходе проводимых расчетов. Аграном и каждый счетовод должны быть представлены отдельными процессами.

Подход к решению

Мы используем метод адаптивной квардитуры, разделяя задачи между счетоводами, которые оказываются связаны с Агрономом. Функция f(x) (представление реки) для тестирования будет задаваться как x * x / 1000 и может быть изменена в любой момент. A и B - координата медиан по широте, будет задаваться в тестирующих файлах. Каждый из процессов счетоводов получает ответственный район и, чтобы оптимизировать колличество обменов, сам контролирует считаемый участок площади. Счетовод завершает свою работу, когда сам понимает, что закончил с выделеными участатками в районе, что позволяет честно разделить работу между процессами, давая возможность не тратить драгоценное время исполения на закидывание нового участка счетоводу.

Сервер-клиент подход в 7-8 баллах

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

Тесты

Путь к тестам: ./tests

В работе выполнены требования на 8.

Содержание

4 балла

Путь: ./4 points

Выбранный стиль Множество процессов взаимодействуют с использованием именованных POSIX семафоров. Обмен данными ведется через разделяемую память в стандарте POSIX.

Описание Главный родительский процесс main проверяет аргументы командной строки и создаёт заданное колличество дочерних процессов, которые знают входные данные и свой порядковый номер. Доступ к семафору (отвечает за синхронизацию) и разделяемой памяти (хранит площадь) осуществляется по имени по стандарту POSIX.

  • Процесс родителя (Агроном) - получает данные из файла ввода и помогает использовать их дочерним процессам, после завершения всех дочерних процессов считывает данные из общей памяти и записывает в файл вывода конечный ответ.
  • Процесс решения (Счетовод) - получает данные от родительского процесса и добавляет посчитаную площадь в разделёную память + записывает информацию в файл вывода.

Тесты

Как запускать тестирование?

./main ../tests/inX.txt resaults/outX.txt <кол-во дочерних процессов>

А где результаты?

Результаты 5 тестов: resaults

5 баллов

Путь: ./5 points

Выбранный стиль Множество процессов взаимодействуют с использованием неименованных POSIX семафоров расположенных в разделяемой памяти. Обмен данными также ведется через разделяемую память в стандарте POSIX.

Описание Главный родительский процесс main проверяет аргументы командной строки и создаёт заданное колличество дочерних процессов, которые знают входные данные и свой порядковый номер. Доступ к семафору (отвечает за синхронизацию) и разделяемой памяти (хранит площадь) осуществляется по стандарту POSIX. Неименованный семафор хранится в разделяемой памяти.

  • Процесс родителя (Агроном) - получает данные из файла ввода и помогает использовать их дочерним процессам, после завершения всех дочерних процессов считывает данные из общей памяти и записывает в файл вывода конечный ответ.
  • Процесс решения (Счетовод) - получает данные от родительского процесса и добавляет посчитаную площадь в разделёную память + записывает информацию в файл вывода.

Тесты

Как запускать тестирование?

./main ../tests/inX.txt resaults/outX.txt <кол-во дочерних процессов>

А где результаты?

Результаты 5 тестов: resaults

6 баллов

Путь: ./6 points

Выбранный стиль Множество процессов взаимодействуют с использованием семафоров в стандарте UNIX SYSTEM V. Обмен данными ведется через разделяемую память в стандарте UNIX SYSTEM V

Описание Главный родительский процесс main проверяет аргументы командной строки и создаёт заданное колличество дочерних процессов, которые знают входные данные и свой порядковый номер. Доступ к семафору (отвечает за синхронизацию) и разделяемой памяти (хранит площадь) осуществляется по стандарту UNIX SYSTEM V.

  • Процесс родителя (Агроном) - получает данные из файла ввода и помогает использовать их дочерним процессам, после завершения всех дочерних процессов считывает данные из общей памяти и записывает в файл вывода конечный ответ.
  • Процесс решения (Счетовод) - получает данные от родительского процесса и добавляет посчитаную площадь в разделёную память + записывает информацию в файл вывода.

Тесты

Как запускать тестирование?

./main ../tests/inX.txt resaults/outX.txt <кол-во дочерних процессов>

А где результаты?

Результаты 5 тестов: resaults

7 баллов

Путь: ./7_points

Выбранный стиль Множество независимых процессов взаимодействуют с использованием именованных POSIX семафоров. Обмен данными ведется через разделяемую память в стандарте POSIX.

Описание Главный процесс agronomist (сервер) проверяет аргументы командной строки и создает общую память, структуру типа:

{
    "sum" = 0.0 // Отвечает за хранение общей площади
    "account_finished" = 0 // Показывает кол-во завершенных процессов
    "account_all" = 0 // Показывает, сколько всего процессов должно быть 
}

С которой уже будут взаимодействовать остальные независимые процессы счетоводов (клиенты). Доступ к семафору (отвечает за синхронизацию) и разделяемой памяти (хранит площадь) осуществляется по имени по стандарту POSIX.

  • Процесс сервер (Агроном) - получает данные из файла ввода, создаёт общую память со структурой данных, после завершения всех процессов считывает данные из общей памяти и записывает в файл вывода конечный ответ.
  • Процесс клиент (Счетовод) - получает из разделяемой (общей) памяти структуру, по которой понимает, какой он счетовод и какой район считать, получает общие размеры территории из файла ввода, после подсчетов записывает данные в разделяемую память и завершается.

Тесты

Как запускать тестирование?

// В первом терминале (стартуем сервер):
./agronomis ../tests/inX.txt resaults/outX.txt <кол-во клиентов>
// Во остальных терминалах (можно и в одном, но так не интересно):
 ./account ../tests/inX.txt resaults/outX.txt

А где результаты?

Результаты 5 тестов: resaults

8 баллов

Путь: ./8_points

Выбранный стиль Множество независимых процессов взаимодействуют с использованием семафоров в стандарте UNIX SYSTEM V. Обмен данными ведется через разделяемую память в стандарте UNIX SYSTEM V.

Описание Главный процесс agronomist (сервер) проверяет аргументы командной строки и создает общую память, структуру типа:

{
    "sum" = 0.0 // Отвечает за хранение общей площади
    "account_finished" = 0 // Показывает кол-во завершенных процессов
    "account_all" = 0 // Показывает, сколько всего процессов должно быть 
}

С которой уже будут взаимодействовать остальные независимые процессы счетоводов (клиенты). Доступ к семафору (отвечает за синхронизацию) и разделяемой памяти (хранит площадь) осуществляется по имени по стандарту UNIX SYSTEM V.

  • Процесс сервер (Агроном) - получает данные из файла ввода, создаёт общую память со структурой данных, после завершения всех процессов считывает данные из общей памяти и записывает в файл вывода конечный ответ.
  • Процесс клиент (Счетовод) - получает из разделяемой (общей) памяти структуру, по которой понимает, какой он счетовод и какой район считать, получает общие размеры территории из файла ввода, после подсчетов записывает данные в разделяемую память и завершается.

Тесты

Как запускать тестирование?

// В первом терминале (стартуем сервер):
./agronomis ../tests/inX.txt resaults/outX.txt <кол-во клиентов>
// Во остальных терминалах (можно и в одном, но так не интересно):
 ./account ../tests/inX.txt resaults/outX.txt

А где результаты?

Результаты 5 тестов: resaults

Конец отчета

About

Использование общей памяти для передачи данных между различными процессами системы.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages