Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторные / ОС_лабораторная 4

.docx
Скачиваний:
5
Добавлен:
12.02.2024
Размер:
23.43 Mб
Скачать

МИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ

Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования

«Московский технический университет связи и информатики»

Кафедра «Системного программирования»

Дисциплина «Операционные системы»

Лабораторная работа 4

Выполнил:

студент группы БСТ2104

Станишевский И.А.

Проверила: Алексанян Д. А.

Москва, 2023 г.

Цели лабораторной работы:

  • Изучить основные команды и инструменты для управления процессами

  • Ознакомиться со средствами мониторинга производительности в Linux

  • Приобрести практические навыки автоматизации запуска процессов

  • Изучить набор средств коммуникации процессов в ОС GNU/LINUX.

  • Приобрести практические навыки по использованию механизмов межпроцессного взаимодействия

Задание на лабораторную работу

Задание 1.1. Мониторинг производительности системы

  1. Выполните проверку системы при помощи команды top. Отсортируйте процессы по: объему используемой памяти; времени работы; идентификатору; проценту использования времени процессора.

  2. Запустите новый процесс в системе, найдите его в выводе команды top. Измените приоритет запущенного процесса командой renice и убедитесь, что изменения отражены в выводе top.

  3. С помощью команды atop выполните сортировку процессов минимум по трем параметрам общей нагрузки.

  4. При помощи команды mpstat и опции P выведите информацию по: определенному процессору, всем процессорам.

  5. Выполните проверку системы при помощи команды 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