Лабораторная работа 5
Часть 1
Сервер при запуске должен сохранить:
- идентификатор процесса;
- идентификатор пользователя процесса;
- идентификатор группы процесса;
и раз в секунду обновлять:
- количество секунд, прошедших с момента запуска процесса;
- среднюю загрузку системы за последние 1, 5 и 15 минут.
Сервер должен быть одним процессом с одним потоком.
Клиент должен один раз выводить текущую информацию от сервера.
Для получения необходимой информации будут полезны man страницы:
getpid(2), getuid(2), getgid(2), time(2), getloadavg(3C).
Подзадания:
- System V shared memory
Для хранения требуемой информации и обмена информацией между клиентом и сервером используется разделяемый сегмент памяти. man shmget(2), shmat(2), shmdt(2).
- System V message queue
Клиент обменивается с сервером используя System V message queue. man msgget(2), msgsnd(2), msgrcv(2).
- Отображение файла в память
Для хранения требуемой информации и обмена информацией между клиентом и сервером используется файл, отображённый в память с использованием mmap(2).
Часть 2
Процесс должен иметь заполненный массив последовательно заполненный буквами английского алфавита в нижнем регистре. Процесс должен запустить два потока, один из которых умеет инвертировать регистр букв, второй - разворачивает массив, т.е. делает первую букву последней, вторую - предпоследней и т.д.
Подзадания:
- Основной поток раз в секунду поочерёдно пробуждает один из потоков и дожидается конца его работы, после чего выводит полученный массив на стандартный вывод. Для реализации синхронизации необходимо использовать sem_init(3RT), sem_post(3RT), sem_wait(3RT).
- Основной поток раз в секунду поочерёдно пробуждает один из потоков и дожидается конца его работы, после чего выводит полученный массив на стандартный вывод. Для реализации синхронизации необходимо использовать semget(2), semop(2), semctl(2).
- Основной поток раз в указанное количество микросекунд выводит массив на стандартный вывод. Подпотоки раз в указанное количество микросекунд выполняют своё действие, блокируя на время своей работы доступ к общему ресурсу. Для блокировки использовать pthread_mutex_init(3C), pthread_mutex_lock(3C), pthread_mutex_unlock(3C).
- Основной поток раз в указанное количество микросекунд выводит массив на стандартный вывод. Подпотоки раз в указанное количество микросекунд выполняют своё действие. Еще один подпоток должен раз в указанное количество микросекунд выводить количество заглавных символов в массиве на стандартный вывод. Потоки, не изменяющие массив могут выполняться параллельно, но должны блокировать изменение на время работы. Для блокировки использовать pthread_rwlock_init(3C), pthread_rwlock_rdlock(3C), pthread_rwlock_wrlock(3C), pthread_rwlock_unlock(3C).
Часть 3
Подзадания:
- Unix domain socket
Клиент обменивается с сервером используя unix domain socket (AF_UNIX). man socket(3SOCKET), bind(3SOCKET), listen(3SOCKET), accept(3SOCKET), connect(3SOCKET), select(3C).
Сервер должен соответствовать требованиям первой части.
- Обработка сигналов
При получении сигналов HUP, INT, TERM, USR1, USR2 сервер в стандартный поток вывода выводит соответствующий пункт накопленной информации. man signal(3C), sigaction(2), kill(1).
Сервер должен соответствовать требованиям первой части.
- Неименованные каналы
Процесс запускает дочерний подпроцесс, которому подменяется стандартный ввод. В подпроцессе запускается системная утилита wc. Основной процесс читает указанный через аргументы файл и передаёт в подпроцесс каждый чётный символ. man fork(2), execl(2), pipe(2), dup2(3C). При использовании system(3C) или popen(3C) задание принято не будет.
Требования
Каждый вариант должен быть реализован в виде отдельных испольняемых файлов.
Все файлы (исходный код, Makefile, исполнямые и объектные файлы, ...) должны быть в одном каталоге, для компиляции файлов должен быть написан Makefile, позволяющий перекомпилировать только изменённые файлы.
Баллы
Для получения возможности защиты на 3 балла необходимо выполнить по одному выданному заданию из каждой части.
Для получения возможности защиты на 4 балла необходимо выполнить по два задания из каждой части.
Для получения возможности защиты на 5 баллов необходимо выполнить все задания.