ОСпр2_Мячина_БФИ2203
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
Московский технический университет связи и информатики
(МТУСИ)
Кафедра «Системное программирование»
Практическая работа №2
«Ядро Linux»
по дисциплине «Операционные системы»
Выполнила:
студентка группы БФИ2203
Мячина Лада Андреевна
Проверила:
Старший преподаватель
Алексанян Диана Ашотовна
Москва, 2024 г.
Цель работы:
● изучить архитектуру и основные компоненты ядра Linux, включая механизм системных вызовов;
● изучить возможности утилиты strace для отладки и анализа работы программ на уровне системных вызовов;
● приобрести практический навык создания и загрузки модуля в ядро Linux;
Задание:
№1 Анализ системных вызовов при выполнении команд с помощью утилиты strace:
1. Убедиться, что strace установлена, запустив ее с параметром -V: strace -V.
2. Ознакомиться со справкой об использовании утилиты strace: man strace.
3. Запустить strace для команды nproc, на основании полученных результатов заполнить таблицу для 5-7 различных системных вызовов.
4. Перенаправить вывод strace в файл log в домашней директории.
5. Получить статистику выполненных системных вызовов.
6. Выполнить трассировку системных вызовов для произвольного работающего процесса, подключившись к нему по PID.
№2 Сборка и загрузка модуля в ядро Linux
1. Установить необходимые пакеты: apt-get install gcc make linux-headers-$(uname -r).
2. Создать файл модуля.
3. Создать Makefile.
4. Собрать модуль и установить его с помощью insmod.
5. Выгрузить модуль с помощью команды rmmod и включить снимок экрана вывода в отчет.
Ход работы:
Задание 1:
Убедилась, что strace установлена, рисунок 1.
Рисунок 1 - Strace установлена
Ознакомилась со справкой об использовании утилиты strace, рисунок 2.
Рисунок 2 – Справка об использовании утилиты strace
Запустила strace для команды nproc, рисунок 3.
Рисунок 3 - Запуск strace для команды nproc
На основании полученных результатов заполнила таблицу 1 для 5 различных системных вызовов.
Таблица 1. Результаты анализа
№ |
Системный вызов |
Описание вызова |
Входные параметры |
Время выполнения, мкс |
Возвращаемое значение |
1 |
Execve() |
Заменяет текущий процесс новым процессом, загружая исполняемый файл. |
/user/bin/nproc - исполняемый файл, который должен быть запущен [“nproc”] |
0,000751 |
0 – успешное выполнение |
2 |
Mmap() |
Устанавливает отображение между адресным пространством процесса и файлом или объектом общей памяти. |
NULL-предпочтительное местоположение отображения в памяти 8192-размер отображения в байтах PROT_READ|PROT_WRITE-права доступа к отображению MAP_PRIVATE|MAP_ANONYMOUS-тип отображения
-1-файловый дескриптор 0-смещение в файле |
0,000954 |
0x74031e534000 - адрес, по которому было создано отображение в памяти |
3 |
Access() |
Проверяет доступность файла по указанному пути с заданными правами. |
"/etc/ld.so.preload" – Путь к файлу/директории R_OK – флаг. Вызов должен проверить, есть ли права на чтение |
0,000651 |
-1 ENOENT "No such file or directory" |
4 |
Openat() |
Открывает файл, используя относительный путь, относительно указанного файлового дескриптора. |
AT_FDCWD - базовый дескриптор файла (в данном случае, текущий рабочий каталог), /lib/x86_64-linux-gnu/libc.so.6 - путь к библиотеке стандартных функций C (glibc) для 64-битной архитектуры Linux, O_RDONLY|O_CLOEXEC - файл будет открыт только для чтения, файловый дескриптор должен быть закрыт автоматически при выполнении exec() |
0,000799 |
3-файл был успешно открыт, и дескриптор файла (3) был назначен данному файлу |
5 |
Fstat() |
Получает информацию о файле, связанном с файловым дескриптором. |
3 - файловый дескриптор, который указывает на открытый файл, S_IFREG указывает, что файл является обычным файлом, а 0755 обозначает права доступа (чтение и выполнение для всех, запись для владельца), st_size - это размер файла в байтах. |
0,000921 |
0 – успешное выполнение |
Время получила с помощью команды: “strace --absolute-timestamps --relative-timestamps=us ls”.
Перенаправила вывод strace в файл log в домашней директории с помощью команды “sudo strace -o log.txt nproc”, рисунок 5.
Рисунок 5 - Вывод в log
Получила статистику выполненных системных вызовов с помощью команды: “strace -c nproc”, рисунок 6.
Рисунок 6 - Статистика системных вызовов
Запустила браузер FireFox и определила PID, которые он использует, рисунок 7.
Рисунок
7 - Поиск PID в FireFox
Выполнила трассировку системных вызовов для произвольного работающего процесса, подключившись к нему по PID с помощью команды: “sudo strace -p 6118”, рисунок 8.
Рисунок 8 – Трассировка процесса 6124
Задание 2:
Установила необходимые пакеты: apt-get install gcc make linux-headers-$(uname -r).
2) Создала файл модуля.
3) Создала Makefile.
4) Собрала модуль, рисунок 9.
Рисунок 9 – Сборка модуля
5) Выгрузить модуль с помощью команды rmmod.
6) Установила модуль и проверила это, с помощью команды sudo dmesg.
Рисунок 10 - Отображение модуля в системных журналах сообщений
Вывод: изучила архитектуру и основные компоненты ядра Linux, включая механизм системных вызовов. Изучила возможности утилиты strace для отладки и анализа работы программ на уровне системных вызовов. Приобрела практический навык создания и загрузки модуля в ядро Linux.
