Лабораторные / ОС_лабораторная 4
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Системного программирования»
Дисциплина «Операционные системы»
Лабораторная работа 4
Выполнил:
студент группы БСТ2104
Станишевский И.А.
Проверила: Алексанян Д. А.
Москва, 2023 г.
Цели лабораторной работы:
Изучить основные команды и инструменты для управления процессами
Ознакомиться со средствами мониторинга производительности в Linux
Приобрести практические навыки автоматизации запуска процессов
Изучить набор средств коммуникации процессов в ОС GNU/LINUX.
Приобрести практические навыки по использованию механизмов межпроцессного взаимодействия
Задание на лабораторную работу
Задание 1.1. Мониторинг производительности системы
Выполните проверку системы при помощи команды top. Отсортируйте процессы по: объему используемой памяти; времени работы; идентификатору; проценту использования времени процессора.
Запустите новый процесс в системе, найдите его в выводе команды top. Измените приоритет запущенного процесса командой renice и убедитесь, что изменения отражены в выводе top.
С помощью команды atop выполните сортировку процессов минимум по трем параметрам общей нагрузки.
При помощи команды mpstat и опции P выведите информацию по: определенному процессору, всем процессорам.
Выполните проверку системы при помощи команды pidstat. Выведите по четыре отчета статистики использования процессора для каждой активной задачи в системе с интервалом в три секунды.
Задание 1.2. Создание скрипта для получения статистики
Напишите скрипт, осуществляющий сбор статистики использования процессоров и статистики работы процессов средствами mpstat и pidstat, выводящий данные в текстовый файл с именем yyyy-mm-dd_h:m:s_syslog.
Задание 1.3. Создание автозапускаемой службы
С помощью утилиты systemd зарегистрируйте свою службу по сбору статистики, запускающую скрипт из задания 2 при старте системы. Запустите службу и проверьте ее работу.
Задание 2. Реализация обмена данными между процессами
Написать программы, выполняющие с помощью ВСЕХ перечисленных механизмов межпроцессного взаимодействия (разделяемая память, сокеты, каналы) задачу. Условие задачи: реализовать обмен текстовыми сообщениями между несколькими процессами, обеспечить возможность отправки сообщения сразу нескольким адресатам, реализовать подтверждение приема сообщения адресатом или, в случае потери сообщения, повторную его передачу.
Для решения задачи создавать минимально 2 ведомых процесса, выполняющих переданные ведущим процессом подзадачи и возвращающие результаты ведущему процессу. Финальную обработку результатов, по необходимости, осуществлять ведущим процессом.
Задание 1.1. Мониторинг производительности системы
На рисунке 1 представлена команда, предоставляющая выполнение проверки системы, на рисунке 2 представлен результат её выполнения
Рисунок 1 – Команда, предоставляющая выполнение проверки системы
Рисунок 2 – Результат выполнения команды top
PID — номер процесса;
USER — имя пользователя под которым работает процесс;
PR — приоритет процесса;
NI — любезность процесса, чем она выше, тем ниже приоритет;
VIR — общее количество памяти, которое способен адресовать процесс в данный момент времени. Включает в себя RES, SHR, прикреплённые файлы (например — файлы библиотек). Также включает в себя память, которая была выделена, но не использована;
RES — количество физической памяти, которую использует процесс;
SHR — количество разделяемой памяти, которую использует процесс. Разделяемая память потенциально может быть разделена с другими процессами;
S — состояние процесса (я их уже описывал здесь):
S (sleeping) — спящий;
R (running) — в работе;
Z (zombie) — зомби;
D (uninterruptible sleep) — ожидает дискового ввода/вывода, и не принимает никакие сигналы;
T (stopped by job control signal) — остановлен специальным сигналом;
t (stopped by debugger during trace) — остановлен в процессе дебага;
I (Idle) — бездействующий поток ядра.
%CPU — использование cpu в процентах;
%MEM — RES в процентах от общего количества памяти;
TIME+ — сколько времени с этим процессом работал ЦПУ, с точностью до сотых долей секунды;
COMMAND — с помощью какой команды запустили процесс.
Чтобы выполнит сортировку по объёму используемой памяти используем комбинацию Shift + M. На рисунке 3 представлена сортировка процессов по объёму используемой памяти (колонка %MEM).
Рисунок 3 – Сортировка процессов по объёму используемой памяти
Чтобы выполнит сортировку процессов по времени работы используем комбинацию Shift + T. На рисунке 4 представлена сортировка процессов по времени работы (колонка TIME+)
Рисунок 4 – Сортировка процессов по времени работы
Чтобы выполнит сортировку процессов по идентификатору в порядке возрастания используем комбинацию Shift + P. На рисунке 5 представлена сортировка процессов по идентификатору в порядке возрастания (колонка PID USER) **Исправить на возрастание а не убывание **
Рисунок 5 – Сортировка процессов по идентификатору в порядке возрастания
Чтобы выполнит сортировку процессов по проценту использования времени процессора используем комбинацию Shift + С. На рисунке 6 представлена сортировка процессов по проценту использования времени процессора (колонка %CPU)
Рисунок 6 – Сортировка процессов по проценту использования времени процессора
На рисунке 7 представлен запуск нового процесса в системе (VS Code). Данный процесс присутствует в выводе команды top. Его PID = 1199
Рисунок 7 – Список процессов с присутствием процесса VS Code
- `renice` - утилита командной строки, используемая для изменения приоритета процесса.
- `-n -20` устанавливает новый приоритет процесса. Отрицательные значения приоритета указывают на уровень приоритета в диапазоне от -20 до 19, где -20 - наивысший приоритет, а 19 - наименьший.
Рисунок 8 — выдача приоритета процессу
Рисунок 9 - вывод команды top после изменения приоритета
На рисунке 10 представлена команда для получения загрузки по процессору, памяти, дискам и сети, на рисунке 11 представлен результат ввода команды
Рисунок 11 – Команда для получения загрузки по процессору, памяти, дискам и сети
Рисунок 12 – Результат выполнения команды atop
На рисунке 13 представлена сортировка процессов по проценту использования времени процессора (колонка %CPU) внутри команды atop
Рисунок 13 – Сортировка процессов по проценту использования времени процессора внутри команды atop
На рисунке 14 представлена сортировка процессов по объёму используемой памяти (колонка MEM) внутри команды atop
Рисунок 14 – Сортировка процессов по объёму используемой памяти внутри команды atop
На рисунке 15 представлена команда для вывода информации по всем процессорам и результат её выполнения
Рисунок 15 – Команда для вывода информации по всем процессорам и результат её выполнения и по определённому процессору и результат её выполнения
На рисунке 16 представлена команда, предоставляющая выполнение проверки системы при помощи команды pidstat. Команда также выводит четыре отчёта статистики использования процессора с интервалом в три секунды
Рисунок 16 – Результат работы команды pidstat -u 3 4
Задание 1.2. Создание скрипта для получения статистики
На рисунке 17 представлен текст скрипта, который осуществляет сбор статистики использования процессоров и статистики работы процессов
Рисунок 17 – Текст скрипта
На рисунке 18 представлено содержимое файла лога
Рисунок 18 – Содержимое файла лога
На рисунке 19 представлен вывод команды ls -l для директории сохранения логов скрипта
Рисунок 19 – Вывод команды ls -l для директории сохранения логов скрипта
Задание 1.3. Создание автозапускаемой службы
На рисунке 20 представлен текст файла sysloggining.service
Рисунок 20 – Текст файла stats_collector.service
Описание=Системный процесс, регистрирующий журналы и использование ЦП
Служба описывает параметры для запуска процесса.
- "Type=oneshot" указывает, что процесс запустится только один раз и завершится, а не будет продолжать работу в фоновом режиме.
- "RemainAfterExit=yes" указывает, что система должна сохранить информацию о состоянии службы после ее завершения.
- "WorkingDirectory=/home/stanishevskiy/lab4os" указывает рабочую директорию, где будет выполняться команда.
- "ExecStart=/home/stanishevskiy/lab4os/lab4os.sh" указывает на исполняемый файл shell-скрипта, который будет запущен при старте службы.
- "KillMode=process" указывает, что процесс будет остановлен по идентификатору процесса (PID), при выключении службы.
- "RestartSec=1min" указывает интервал времени, после которого служба будет перезапущена, если она аварийно завершится.
[Install]
WantedBy=multi-user.target
Раздел `[Install]` указывает, в каких условиях данная служба должна быть автоматически запущена.
- "WantedBy=multi-user.target" говорит о том, что служба должна быть запущена при входе в многопользовательский режим.
При старте службы будет выполнен shell-скрипт lab4os.sh в указанной рабочей директории. Процесс будет остановлен при выключении службы и будет перезапущен, если аварийно завершится. И наконец, служба будет автоматически запущена при входе в многопользовательский режим системы.
На рисунке 21 представлена команда для установки службы
Рисунок 21 – Команда, регистрирующая службу по сбору статистики
На рисунке 23 представлены команды регистрирующая службу по сбору статистики и для запуска службы и включения её в автозагрузку
Рисунок 23 – Команды для запуска службы и включения её в автозагрузку
На рисунке 24 представлен вывод команды ls -l для директории сохранения логов скрипта
Рисунок 24 – Вывод команды ls -l для директории сохранения логов скрипта
На рисунке 25 представлена статистика выполнения службы
Рисунок 25 – Статистика выполнения службы
Задание 2. Реализация обмена данными между процессами
На рисунках 28 и 29 представлены коды файлов Channel_server.py и Canal_client.py
Рисунок 28 – Код файла Channel_server.py
Рисунок 29 – Код файла Channel_client.py
На рисунках 30 представлены результаты работы файлов
Рисунок 30 – Результат работы файла Canal_server.py
На рисунках 31 и 32 представлены коды файлов Shared_memory_server.py и Shared_memory_client.py
Рисунок 34 – Код файла Shared_memory_server.py
Рисунок 35 – Код файла Shared_memory_client.py
На рисунках 36 представлены результаты работы файлов
Рисунок 36 – Результат работы файла Shared_memory_client.py
На рисунках 31 и 32 представлены коды файлов Socket_server.py и Socket_client.py
Рисунок 31 – Код файла Socket_server.py
Рисунок 32 – Код файла Socket_client.py
На рисунках 33 представлены результаты работы файлов
Рисунок 33 – Результат работы файла Socket_server.py