723.06K
Category: informaticsinformatics

Основы Linux. Ядро ОС Linux

1.

Основы Linux
Ядро ОС Linux

2.

Зачем это учить
• Изучение ядра Linux важно, потому что это основа операционной
системы Linux. Ядро отвечает за обработку системных вызовов,
управление аппаратными ресурсами, драйверы устройств и
другие ключевые функции. Изучение ядра Linux помогает лучше
понять принципы работы операционной системы, её архитектуру
и возможности.

3.

Как это учить
• Прослушать лекцию, задать имеющиеся вопросы
преподавателю.

4.

Что такое ядро LINUX
1. На чём написано ядро
Несмотря на то, что ассемблерный код позволяет достичь наилучшей
производительности, его возможности весьма ограничены, поэтому большая часть
кода написана на языке C, его доля достигает 98%. На ассемблере написаны только
небольшие вставки, повышающие производительность, архитектурно-зависимые
функции и загрузчик.
2. Архитектура ядра
Уровень доступа к ресурсам компьютера зависит от того, какое ядро использует
операционная система. Привилегии ядра выше остальных приложений, а работает
оно в едином адресном пространстве. В зависимости от того, сколько задач
выполняется на уровне ядра, различают несколько типов ядер. Самые популярные –
это монолитное (Linux), микроядро (macOS) и гибридное (Windows).

5.

Что такое ядро LINUX

6.

Что такое ядро LINUX
Ядро Linux монолитное, большая его часть хранится в одном файле. Однако, это не признак
монолитного ядра, модули вполне могут храниться отдельно. Основная его особенность
заключается в том, что оно обрабатывает все процессы, кроме пользовательских
приложений. То есть управление процессами и памятью, драйверы, виртуальная файловая
система, сетевой стек и многое другое – это всё заботы ядра, которые к тому же имеют
самый высокий уровень доступа к аппаратной части компьютера.
Однако, это не означает то, что пользовательские приложения не могут выполнять схожие
функции. Например, система инициализации Systemd помимо прочего выстраивает иерархию
процессов поверх групп ядра cgroups, а демоны, вроде PulseAudio, контролируют работу
устройств, расширяя функциональность драйверов.

7.

Что такое ядро LINUX
Также стоит понимать, что ядро хоть и монолитное, но состоит из внутренних модулей,
которые загружаются только по необходимости, а не все сразу. Некоторые модули хранятся
отдельно от ядра, в основном это дополнительные драйверы устройств.
Интерфейсы, имена переменных и структура каталогов системы определяются стандартами
POSIX, что делает Linux UNIX-подобной системой. Линус Торвальдс, создатель ядра, выбрал
UNIX по той причине, что имелась база приложений, необходимых для функционирования
операционной системы, утилиты GNU. Однако, он не разделяет идеи философии UNIX, одна
программа – одно действие, текстовый вывод информации как универсальный интерфейс. По
его мнению они не отражают запросы современных пользователей.

8.

Что делает ядро
Как было сказано ранее, у монолитного ядра самый широкий спектр задач. На верхнем
уровне ядро обрабатывает поступающие системные вызовы, которые являются интерфейсом
между ядром и пользовательскими приложениями. На нижнем уровне ядро обрабатывает
аппаратные прерывания, сигналы, поступающие от периферии, процессора, памяти и так
далее.
На обработке прерываний задачи ядра не заканчиваются, оно содержит в себе драйверы
устройств.
Драйверы нужны для того, чтобы обработать поступающие с устройств сигналы, а команды
приложений перевести в машинный код.Драйверы занимают большую часть ядра. Некоторые
из них представлены сразу в виде бинарных файлов, что противоречит идеям фонда СПО.
Версия ядра без закрытых драйверов называется Linux-libre, на практике его использование
крайне затруднительно, так как собрать компьютер на основе комплектующих только с
открытыми драйверами у вас едва ли получится.

9.

Что делает ядро
Остальные задачи ядра – это работа с абстракциями. Например, планировщик создаёт
виртуальные потоки, менеджер памяти выделяет и изолирует часть оперативной памяти под
процесс, виртуальная файловая система создаёт единое пространство для хранения
файлов, а сетевой модуль создаёт сокеты. Это одно из условий обеспечения высокого
уровня безопасности, иначе одна программа могла бы беспрепятственно взять
конфиденциальные данные из другой, например, ключи шифрования.
Система межпроцессного взаимодействия следит за тем, чтобы не возникало конфликтов при
обращении к одним и тем же ресурсам компьютера, а также обеспечивает обмен данными
между процессами.
Со стороны пользовательских приложений всё это выглядит как настоящее оборудование, с
той лишь разницей, что общение с процессором и памятью происходит не напрямую, а с
помощью системных вызовов. Для периферийных устройств имеются символьные и блочные
ссылки в каталоге /dev, последние отличает то, что ни работают с блоками фиксированного
размера.

10.

Что делает ядро
Несмотря на то, что ядро контролирует все процессы, само по себе оно ничего не делает,
ему нужны пользовательские программы и их процессы. Среди базовых приложений стоит
отметить утилиты проекта GNU, без них не обходится ни один дистрибутив Linux. Например,
командная оболочка Bash позволит вам вводить команды в консоли.

11.

Версия ядра
Запись версии ядра можно представить в виде: A.B.C-D.
A – это версия ядра, изначально планировалось повышать номер только после значительной
переработки ядра, но сейчас это делают после достаточного количества правок и
нововведений примерно два раза за десятилетие.
B – это ревизия ядра, обновление происходит каждые 2-3 месяца. Некоторые из них
получают долгосрочную поддержку (LTS – long term support). Последним таким ядром стало
5.10. Каждая ревизия имеет большой список изменений, которые сначала проверяют
тестировщики.
C и D отвечают за небольшие правки в коде ядра. С увеличивается в том случае, если были
обновлены драйверы устройств, а D – когда вышел очередной патч безопасности. Эти
номера могут меняться практически каждый день.
Узнать версию ядра можно с помощью команды:
Uname -r

12.

Где хранятся файлы ядра
Файлы ядра хранятся в каталоге /boot. Непосредственно само ядро находится в запакованном виде в файле vmlinuz,
где z как раз и указывает на то, что ядро сжато для экономии места. Файл initrd.img – это первичная файловая
система, которая монтируется перед тем, как подключить реальные накопители к виртуальной файловой системе
VFS. Там же содержатся дополнительные модули ядра, поэтому этот файл может быть больше самого ядра. В
файле system.map можно найти адреса функций и процедур ядра, что будет полезно при отладке.
English     Русский Rules