Поскольку цель данной статьи — познакомить вас с ядром Linux и дать
обзор его архитектуры и основных компонентов, давайте начнем с краткого
обзора истории ядра Linux, затем рассмотрим архитектуру ядра Linux «с
высоты птичьего полета», и, наконец, обсудим его основные подсистемы.
Ядро Linux насчитывает свыше шести миллионов строк, поэтому данное
введение не может быть исчерпывающим. Для получения более подробной
информации пользуйтесь ссылками на дополнительные ресурсы.

Ресурсы«.

Ядро
Linux можно, в свою очередь, разделить на три больших уровня. Наверху
располагается интерфейс системных вызовов, который реализует базовые
функции, например, чтение и запись. Ниже
интерфейса системных вызовов располагается код ядра, точнее говоря,
архитектурно-независимый код ядра. Этот код является общим для всех
процессорных архитектур, поддерживаемых Linux. Еще ниже располагается
архитектурно-зависимый код, образующий т.н. BSP (Board Support Package
— пакет поддержки аппаратной платформы). Этот код зависит от процессора
и платформы для конкретной архитектуры.

Ресурсы«.

Ресурсы.

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

Управление процессами сконцентрировано на исполнении процессов. В ядре эти процессы называются потоками
(threads); они соответствуют отдельным виртуализованным объектам
процессора (код потока, данные, стек, процессорные регистры). В
пространстве пользователя обычно используется термин процесс,
хотя в реализации Linux эти две концепции (процессы и потоки) не
различают. Ядро предоставляет интерфейс программирования приложений
(API) через SCI для создания нового процесса (порождения копии, запуска
на исполнение, вызова функций Portable Operating System Interface
[POSIX]), остановки процесса (kill, exit), взаимодействия и
синхронизации между процессами (сигналы или механизмы POSIX).

Еще
одна задача управления процессами — совместное использование процессора
активными потоками. В ядре реализован новаторский алгоритм
планировщика, время работы которого не зависит от числа потоков,
претендующих на ресурсы процессора. Название этого планировщика — O(1)
— подчеркивает, что на диспетчеризацию одного потока затрачивается
столько же времени, как и на множество потоков. Планировщик O(1) также
поддерживает симметричные многопроцессорные конфигурации (SMP).
Исходные коды системы управления процессами находятся в ./linux/kernel,
а коды архитектурно-зависимой части — в ./linux/arch). Более подробную
информацию об этом алгоритме см. в разделе Ресурсы.

Ресурсы.

Ресурсы в конце данной статьи, где имеются ссылки на более подробную информацию по многим обсуждаемым здесь темам.

Об авторе

M. Tim Jones

M. Тим Джонс (M. Tim Jones) является архитектором встраиваимого программного
обеспечения и автором работ: Программирование Приложений под GNU/Linux,
Программирование AI-приложений и Использование BSD-сокетов в различных
языках программирования
. Он имеет опыт разработки процессоров для геостационарных
космических летательных аппаратов, а также разработки архитектуры встраиваемых
систем и сетевых протоколов. Сейчас Тим работает инженером-консультантом в корпорации
Эмулекс (Emulex Corp.) в г.Лонгмонт, Колорадо.

Карта сайта: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34