add 4, edit 3
This commit is contained in:
+53
@@ -0,0 +1,53 @@
|
||||
# Лабораторная работа 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` означает, что итоговый массив действительно отсортирован.
|
||||
Reference in New Issue
Block a user