Операционные системы - материалы курса

Операционные системы

Lab

Лабораторные работы

ОС - Лабораторная работа №1

Лабораторная работа №1

Основная цель лабораторной работы - знакомство с системными инструментами анализа производительности и поведения программ. Для этого предлагается для выданной по варианту программы выяснить следующую информацию:

  1.  Количество потоков создаваемое программой;
  2. Список файлов и сетевых соединений с которыми работает программа
  3.  Карту памяти процесса;
  4. Содержимое передаваемых по сети данных;
  5. Построить графики:
  • Потребления программой cpu;
  • Нагрузки генерируемой программой на подсистему ввода-вывода;
  • Нагрузки генерируемой программой на сетевую подсистему.
  • Смены состояния исполнения потоков;

Содержание отчета:

  1. Описание шагов выполненных для сбора информации (включая исходные тексты всех использованных скриптов и вспомогательных программ);
  2. Полученные графики;
  3. Выводы по работе.

Темы для подготовки к защите лабораторной работы:

  1. Структура процесса;
  2. Виртуальная память;
  3. Системные утилиты сбора статистики ядра;
  4. Основы ввода-вывода (блочный и последовательный ввод-вывод);
  5. Файловая система procfs;
  6. Использование утилиты strace, ltrace, bpftrace;
  7. Профилирование и построение flamegraph'а и stap;

Лабораторная работа №2

Разработать комплекс программ на пользовательском уровне и уровне ярда, который собирает информацию на стороне ядра и передает информацию на уровень пользователя, и выводит ее в удобном для чтения человеком виде. Программа на уровне пользователя получает на вход аргумент(ы) командной строки (не адрес!), позволяющие идентифицировать из системных таблиц необходимый путь до целевой структуры, осуществляет передачу на уровень ядра, получает информацию из данной структуры и распечатывает структуру в стандартный вывод. Загружаемый модуль ядра принимает запрос через указанный в задании интерфейс, определяет путь до целевой структуры по переданному запросу и возвращает результат на уровень пользователя.

Интерфейс передачи между программой пользователя и ядром и целевая структура задается преподавателем. Интерфейс передачи может быть один из следующих:

  1. syscall - интерфейс системных вызовов.
  2. ioctl - передача параметров через управляющий вызов к файлу/устройству.
  3. procfs - файловая система /proc, передача параметров через запись в файл.
  4. debugfs - отладочная файловая система /sys/kernel/debug, передача параметров через запись в файл.

Целевая структура может быть задана двумя способами:

  1. Именем структуры в заголовочных файлах Linux
  2. Файлом в каталоге /proc. В этом случае необходимо определить целевую структуру по пути файла в /proc и выводимым данным.