2.8 KiB
2.8 KiB
Лабораторная работа 3. Процессы. Неименованные каналы
Вариант 13: 72-01. Сортировка массива рекурсивным разделением.
Программа реализует сортировку массива рекурсивным разделением с построением дерева процессов. Каждый процесс получает часть массива, при разрешенной глубине рекурсии делит ее на две части, создает двух потомков через fork() и обменивается с ними данными через неименованные каналы pipe().
Входные данные во всех экспериментах считаются полностью случайными. Отдельного режима mode нет. Для повторяемости используется только параметр --seed.
Алгоритм
- Родитель генерирует массив случайных целых чисел.
- На каждом рекурсивном шаге массив делится на левую и правую половины.
- Для каждой половины создается дочерний процесс.
- Родитель передает дочернему процессу данные в формате:
uint64_t count;countзначений типаint32_t.
- Потомок сортирует полученную часть тем же алгоритмом.
- При достижении
max_depthилиmin_sizeсортировка выполняется локально без новых процессов. - Потомок возвращает результат родителю в формате:
uint64_t count;countотсортированных значений;uint64_t processes— число процессов в поддереве.
- Родитель выполняет слияние двух отсортированных частей.
Для одного потомка используются два канала:
- родитель → потомок;
- потомок → родитель.
Так как потомков два, на рекурсивном узле создается четыре канала.
Файлы
main.cpp— программа лабораторной работы.Makefile— сборка, запуск, тесты, экспорт графиков.exporter.py— единый экспортёр графиков и CSV.test_lab3.py— тесты корректности.README.md— описание.
Сборка
make