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

ОСпр2_Мячина_БФИ2203

.docx
Скачиваний:
0
Добавлен:
02.08.2026
Размер:
1 Мб
Скачать

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

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

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

(МТУСИ)

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

Практическая работа №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:

  1. Убедилась, что strace установлена, рисунок 1.

Рисунок 1 - Strace установлена

  1. Ознакомилась со справкой об использовании утилиты strace, рисунок 2.

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

  1. Запустила 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”.

  1. Перенаправила вывод strace в файл log в домашней директории с помощью команды “sudo strace -o log.txt nproc”, рисунок 5.

Рисунок 5 - Вывод в log

  1. Получила статистику выполненных системных вызовов с помощью команды: “strace -c nproc”, рисунок 6.

Рисунок 6 - Статистика системных вызовов

  1. Запустила браузер FireFox и определила PID, которые он использует, рисунок 7.

Рисунок 7 - Поиск PID в FireFox

  1. Выполнила трассировку системных вызовов для произвольного работающего процесса, подключившись к нему по PID с помощью команды: “sudo strace -p 6118”, рисунок 8.

Рисунок 8 – Трассировка процесса 6124

Задание 2:

  1. Установила необходимые пакеты: apt-get install gcc make linux-headers-$(uname -r).

2) Создала файл модуля.

3) Создала Makefile.

4) Собрала модуль, рисунок 9.

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

5) Выгрузить модуль с помощью команды rmmod.

6) Установила модуль и проверила это, с помощью команды sudo dmesg.

Рисунок 10 - Отображение модуля в системных журналах сообщений

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