Files
OS-LABS/4/README.md
T
2026-05-12 19:13:20 +07:00

54 lines
2.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Лабораторная работа 4. Сетевые соединения. Сокеты
Вариант из лабораторной работы 1: рекурсивная сортировка разделением.
Программа строит дерево процессов. Каждый внутренний процесс открывает TCP `ServerSocket` на `127.0.0.1` с портом `port_base + pid % span`, порождает двух потомков через `fork()`, принимает от них локальные соединения и передает им левую и правую части массива.
По умолчанию `port_base = 20000`. Это сделано из-за того, что чистый порт `pid` может оказаться меньше 1024 и потребовать root-права. Формула соответствует замечанию из задания про `ServerSocketBase + <pid родителя>`.
## Формат обмена
Родитель отправляет потомку:
1. `uint32_t depth` — глубина рекурсии потомка;
2. `uint64_t size` — размер массива;
3. `int32_t array[size]` — часть массива.
Потомок возвращает:
1. `uint64_t counter` — счетчик операций сравнения при слиянии;
2. `uint64_t size` — размер отсортированной части;
3. `int32_t array[size]` — отсортированная часть;
4. `uint64_t processes` — расширение для статистики количества процессов.
Первые три поля ответа соответствуют заданию: счетчик / размерность / массив.
## Сборка и запуск
```bash
make
./lab4 --size 10000 --depth 3 --min-size 1
```
Полезные параметры:
```bash
./lab4 --size 1000 --depth 2 --min-size 16 --seed 42 --print
./lab4 --size 2048 --depth 2 --min-size 64 --log
./lab4 --size 10000 --depth 3 --port-base 30000
```
## Проверка
```bash
make test
```
В конце программа печатает статистику в `stderr`:
```text
STAT: size=... depth=... min_size=... processes=... counter=... valid=1 time=... sec
```
`valid=1` означает, что итоговый массив действительно отсортирован.