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

2.8 KiB

Лабораторная работа 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 — описание.

Сборка

make