Лабораторная работа 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— число процессов в поддереве.
- Родитель выполняет слияние двух отсортированных частей.
Для одного потомка используются два канала: родитель → потомок и потомок → родитель. Так как потомков два, на рекурсивном узле создается четыре канала.
Сборка и запуск
make
./lab3 --size 100000 --depth 2 --min-size 4096