Files
OS-LABS/3
2026-05-12 18:37:09 +07:00
..
2026-05-12 18:37:09 +07:00
2026-05-12 18:37:09 +07:00
2026-05-12 18:37:09 +07:00
2026-05-12 18:37:09 +07:00
2026-05-12 18:37:09 +07:00
2026-05-12 18:37:09 +07:00

Лабораторная работа 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. Родитель выполняет слияние двух отсортированных частей.

Для одного потомка используются два канала: родитель → потомок и потомок → родитель. Так как потомков два, на рекурсивном узле создается четыре канала.

Сборка и запуск

make
./lab3 --size 100000 --depth 2 --min-size 4096