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

lab_2 / Отчёт_по_лабораторной_работе_№2_Мажукин_БСТ2104

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

Министерство цифрового развития связи и массовых коммуникаций

Ордена Трудового Красного Знамени

Федеральное государственное бюджетное образовательное учреждение

высшего образования

«МОСКОВСКИЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ

СВЯЗИ И ИНФОРМАТИКИ»

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

Отчёт по лабораторной работе №2

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

Выполнил: студент группы БСТ2104

Мажукин И.Н.

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

Москва, 2023 г.

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

1) изучить архитектуру и основные компоненты ядра Linux, включая механизм системных вызовов.

2) изучить возможности утилиты strace для отладки и анализа работы программ на уровне системных вызовов.

3) приобрести практический навык создания и загрузки модуля в ядро Linux.

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

  1. Проанализировать системные вызовы при выполнении команд с помощью утилиты strace

  2. Собрать и загрузить модуль в ядро Linux

  3. Написать программу, создающую два дочерних процесса с использованием двух вызовов fork (). Родительский и два дочерних процесса должны выводить на экран свой pid и pid родительского процесса и текущее время в формате: часы:минуты:секунды. Используя вызов system (), выполнить команду ps -x в родительском процессе. Найти свои процессы в списке запущенных процессов. Первый дочерний процесс, помимо указанного вывода, также выводит информацию о портах и соединениях.

Второй дочерний процесс после вывода основной информации должен быть замещен задачей, создающей два дочерних потока.

4) Написать программу, создающую два дочерних потока. Родительский процесс и два дочерних потока должны выводить на экран свой id и pid родительского процесса и текущее время в формате: часы:минуты:секунды

Задание 1.1. Анализ системных вызовов при выполнении команд с помощью утилиты strace

На рисунке 1 представлена установка утилиты strace

Рисунок 1 – Установка утилиты strace

На рисунке 2 представлена команда, предоставляющая ознакомление со справкой об использовании утилиты strace, на рисунке 3 представлен результат её выполнения.

Рисунок 2 – Команда, предоставляющая ознакомление со справкой об использовании утилиты strace

Рисунок 3 – Справка об использовании утилиты strace

На рисунке 4 представлен запуск strace для команды clear

Рисунок 4 – Запуск strace для команды clear

Системный вызов

Описание вызова

Входные

параметры

Время выполнения, мкс

Возвраща-емое значение

1

execve

Выполняет программу, задаваемую аргументом.

execve("/usr/bin/clear", ["clear"], 0x7ffefdc422b0 /* 81 vars */)

560

0

2

munmap

Функция munmap () должна удалять любые сопоставления для всех страниц , содержащих любую часть адресного пространства процесса, начиная с addr и продолжая len байт.

(0x7f01de1f9000, 162263)

21

0

3

arch_prctl

устанавливает специфичное для данной архитектуры состояние процесса или треда.

(ARCH_SET_FS, 0x7f01ddfdb740)

5

0

4

access

проверяет, имеет ли вызвавший процесс права доступа к файлу pathname.

("/etc/ld.so.preload", R_OK)

18

-1

5

brk

Вызов brk() изменяет расположение маркера окончания программы (program break), который определяет конец сегмента данных процесса. устанавливает конец сегмента данных в значение, указанное в аргументе addr, если это значение является приемлемым, система имеет достаточно памяти и процесс не достиг максимально возможного размера своего сегмента данных.

(NULL)

5

0x56122d106000

Таблица 1 – Результаты системных вызовов

На рисунке 5 представлена команда для перенаправления вывода strace в файл log в вашей домашней директории

Рисунок 5 – Команда для перенаправления вывода strace в файл log

На рисунке 6 представлена команда для получения статистики выполненных системных вызовов, на рисунке 7 представлен результат её выполнения

Рисунок 6 – Команда для получения статистики выполненных системных вызовов

Рисунок 7 – Выполненные системные вызовы

На рисунке 8 представлена команда для вывода списка процессов со всей доступной информацией, включая PID

Рисунок 8 – Команда для вывода списка процессов

На рисунке 9 представлен один из работающих процессов, который будет использоваться для трассировки системных вызовов

Рисунок 9 – Процесс, использующийся для трассировки системных вызовов

На рисунке 10 представлена команда для трассировки системных вызовов, на рисунке 11 представлен результат её выполнения

Рисунок 10 – Команда для трассировки системных вызовов

Р исунок 11 – Результат выполнения трассировки системных вызовов

Задание 1.2. Сборка и загрузка модуля в ядро Linux

На рисунках 12 и 13 представлены команды для установки необходимых пакетов при сборке и загрузке модуля в ядро Linux

Рисунок 12 – Команда для установки утилиты make, компилятора gcc и заголовков ядра

На рисунке 13 представлены команды для создания и перехода в каталог модуля

Рисунок 13 – Команды для создания и перехода в каталог модуля

На рисунке 14 представлены команды для создания файла mhello.c и его открытия в текстовом редакторе

Рисунок 14 – Команды для создания файла mhello.c и его открытия

На рисунке 15 представлено содержимое файла mhello.c

Рисунок 15 – Содержимое файла mhello.c

На рисунке 16 представлены команды для создания файла Makefile и его открытия в текстовом редакторе

Рисунок 16 – Команды для создания файла Makefile и его открытия

На рисунке 17 представлено содержимое файла Makefile

Рисунок 17 - Содержимое файла Makefile

На рисунке 18 представлена сборка модуля ядра с помощью команды make

Рисунок 18 – Сборка модуля ядра

На рисунке 19 представлена команда для просмотра сборки модуля ядра, на рисунке 20 представлен результат её выполнения

Рисунок 19 – Команда для просмотра загрузи модуля ядра

Рисунок 20 – Просмотр загрузи модуля ядра

На рисунке 21 представлена команда для установки модуля ядра

Рисунок 21 – Команда для установки модуля ядра

На рисунке 22 представлена команда для просмотра установки модуля ядра, на рисунке 23 представлен результат её выполнения

Рисунок 22 – Команда для просмотра установки модуля ядра

Рисунок 23 – Просмотр установки модуля ядра

На рисунке 24 представлена команда для выгрузки модуля ядра

Рисунок 24 – Команда для выгрузки модуля ядра

На рисунке 25 представлена команда для просмотра выгрузки модуля ядра и результат её выполнения

Рисунок 25 – Команда для просмотра выгрузки модуля ядра и результат её выполнения

Задание 2. Процессы и потоки

На рисунке 26 представлен код приложения для задания 1, обеспечивающий работу с процессами и потоками

Рисунок 26 – Код приложения

На рисунке 27 представлен результат работы программы

Рисунок 27 – Результат работы программы

Вывод

Изучил архитектуру и основные компоненты ядра Linux, включая механизм системных вызовов. Изучил возможности утилиты strace для отладки и анализа работы программ на уровне системных вызовов. Приобрел практический навык создания и загрузки модуля в ядро Linux.

Соседние файлы в папке lab_2