Files
2026-05-12 19:13:20 +07:00

44 lines
2.8 KiB
Markdown

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