Базовый уровень linux kernel

Русские Блоги

Давайте подробнее рассмотрим архитектуру операционной системы GNU / Linux. Вы можете думать об операционных системах на двух уровнях, как показано на рисунке 2.

Рисунок 2. Базовая архитектура операционной системы GNU / Linux

Вверху находится пространство пользователя (или приложения), в котором выполняется пользовательское приложение. Под пользовательским пространством находится пространство ядра, где находится ядро ​​Linux.

Библиотека GNU C (glibc) также находится здесь. Он обеспечивает интерфейс системного вызова для ядра, а также механизм для преобразования между приложениями пользовательского пространства и ядром. Это важно, потому что приложения ядра и пользовательского пространства используют разные адресные пространства защиты. Каждый процесс пользовательского пространства использует свое собственное виртуальное адресное пространство, в то время как ядро ​​занимает отдельное адресное пространство.

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

Свойства ядра Linux

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

Ядро Linux реализует ряд важных архитектурных атрибутов. На более высоких или более низких уровнях ядро ​​делится на несколько подсистем. Linux также можно рассматривать как единое целое, поскольку он интегрирует все эти базовые сервисы в ядро. Это отличается от архитектуры микроядра, которая предоставляет некоторые базовые сервисы, такие как связь, ввод-вывод, память и управление процессами. Более специфические сервисы вставляются в уровень микроядра. Каждое ядро ​​имеет свои преимущества, но здесь это не обсуждается.

Со временем ядро ​​Linux становится более эффективным с точки зрения использования памяти и процессора и очень стабильным. Но для Linux самое интересное то, что он все еще обладает хорошей переносимостью при условии такого размера и сложности. Linux скомпилирован для работы на большом количестве процессоров и платформ с различными архитектурными ограничениями и требованиями. Например, Linux может работать на процессоре с модулем управления памятью (MMU) или на процессорах, которые не предоставляют MMU. Порт uClinux ядра Linux обеспечивает поддержку не MMU.

Читайте также:  Linux bridge ip address

Основная подсистема ядра Linux

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

Рисунок 3. Архитектурная перспектива ядра Linux

Интерфейс системного вызова

Уровень SCI предоставляет некоторые механизмы для выполнения вызовов функций из пользовательского пространства в ядро. Как обсуждалось ранее, этот интерфейс зависит от архитектуры даже внутри одного семейства процессоров. SCI на самом деле является очень полезной услугой мультиплексирования и демультиплексирования вызовов функций. Вы можете найти реализацию SCI в ./linux/kernel и часть, зависящую от архитектуры, в ./linux/arch.

Управление процессом

Центр управления процессами — выполнение процессов. В ядре эти процессы называются потоками и представляют собой отдельную виртуализацию процессора (код потока, данные, стек и регистры ЦП). В пользовательском пространстве часто используется термин процесс, но в реализации Linux не проводится различие между двумя понятиями (процесс и поток). Ядро предоставляет интерфейс прикладного программирования (API) через SCI для создания нового процесса (функция fork, exec или функции переносимого интерфейса операционной системы [POSIX]), остановки процессов (kill, exit), а также для связи и синхронизации между ними. (Сигнальный или POSIX механизм).

Управление процессами также включает необходимость делить процессоры между активными процессами. Ядро реализует новый тип алгоритма планирования, который может работать в течение фиксированного времени независимо от того, сколько потоков конкурирует за ЦП. Этот алгоритм называется планировщиком O (1), и его имя означает, что время, которое требуется для планирования нескольких потоков, совпадает со временем, которое требуется для планирования одного потока. Планировщик O (1) также может поддерживать мультипроцессоры (так называемые симметричные мультипроцессоры или SMP). Вы можете найти исходный код для управления процессами в ./linux/kernel и зависящий от архитектуры исходный код в ./linux/arch.

Управление памятью

Другим важным ресурсом, управляемым ядром, является память. Для повышения эффективности, если виртуальная память управляется аппаратно, память управляется в так называемом режиме страниц памяти (4 КБ для большинства архитектур). Linux включает способы управления доступной памятью, а также аппаратные механизмы, используемые для физического и виртуального отображения.

Читайте также:  Ос семейства linux это

Но управление памятью может управлять более 4 КБ буферов. Linux предоставляет абстракции для буферов 4 КБ, таких как распределитель slab. Этот режим управления памятью использует буфер 4 КБ в качестве базы, затем выделяет из него структуры и отслеживает использование страниц памяти, например, какие страницы заполнены, какие страницы используются не полностью и какие страницы пусты. Это позволяет режиму динамически регулировать использование памяти в зависимости от потребностей системы.

Для поддержки использования памяти несколькими пользователями иногда доступная память исчерпывается. По этой причине страницы могут быть перемещены из памяти и помещены на диск. Этот процесс называется подкачкой, поскольку страницы выгружаются из памяти на жесткий диск. Исходный код для управления памятью можно найти в ./linux/mm.

Виртуальная файловая система

Виртуальная файловая система (VFS) является очень полезным аспектом ядра Linux, поскольку она обеспечивает общую абстракцию интерфейса для файловой системы. VFS обеспечивает уровень переключения между SCI и файловыми системами, поддерживаемыми ядром (см. Рисунок 4).

Рисунок 4. VFS обеспечивает уровень обмена между пользователями и файловыми системами

В VFS существует общая абстракция API для таких функций, как открытие, закрытие, чтение и запись. Ниже VFS находится абстракция файловой системы, которая определяет, как реализованы функции верхнего уровня. Это плагины для данной файловой системы (более 50). Исходный код для файловой системы можно найти в ./linux/fs.

Ниже уровня файловой системы находится буферный кэш, который предоставляет общий набор функций для уровня файловой системы (независимо от конкретной файловой системы). Этот уровень кэша оптимизирует доступ к физическим устройствам, сохраняя данные в течение определенного периода времени (или предварительно считывая данные, чтобы сделать их доступными при необходимости). Под буферным кешем находится драйвер устройства, который реализует интерфейс конкретного физического устройства.

Сетевой стек

Сетевой стек разработан с учетом многоуровневой архитектуры, которая имитирует сам протокол. Напомним, что интернет-протокол (IP) является протоколом базового сетевого уровня в транспортном протоколе (часто его называют протоколом управления передачей или TCP). Над TCP находится уровень сокетов, который вызывается через SCI.

Уровень сокетов является стандартным API сетевой подсистемы и предоставляет пользовательский интерфейс для различных сетевых протоколов. От необработанного доступа к кадрам к блокам данных протокола IP (PDU) до TCP и протокола пользовательских дейтаграмм (UDP), уровень сокетов обеспечивает стандартизированный способ управления соединениями и перемещения данных между конечными точками. Сетевой исходный код в ядре можно найти в ./linux/net.

Читайте также:  Linux rhel or centos

Драйвер устройства

Большая часть кода в ядре Linux находится в драйверах устройств, которые способны работать с определенными аппаратными устройствами. Дерево исходных текстов Linux предоставляет подкаталог драйвера, который далее делится на различные поддерживающие устройства, такие как Bluetooth, I2C, последовательный порт и т. Д. Код драйвера устройства можно найти в ./linux/drivers.

Архитектурно-зависимый код

Хотя Linux в значительной степени не зависит от архитектуры, на которой он работает, есть элементы, которые должны учитывать архитектуру для правильной работы и достижения большей эффективности. Подкаталог ./linux/arch определяет зависящую от архитектуры часть исходного кода ядра и содержит различные специфичные для архитектуры подкаталоги, которые вместе составляют BSP. Для типичной настольной системы используется каталог i386. Каждый подкаталог архитектуры содержит много других подкаталогов, каждый из которых фокусируется на определенном аспекте ядра, таком как загрузка, ядро, управление памятью и так далее. Этот архитектурно-зависимый код можно найти в ./linux/arch.

Некоторые полезные функции ядра Linux

Если мобильность и эффективность ядра Linux недостаточно высоки, Linux также предоставляет некоторые другие функции, которые нельзя классифицировать в приведенной выше классификации.

Как производственная операционная система и программное обеспечение с открытым исходным кодом, Linux является отличной платформой для тестирования новых протоколов и их усовершенствований. Linux поддерживает ряд сетевых протоколов, в том числе типичный TCP / IP и расширение высокоскоростных сетей (более 1 Gigabit Ethernet [GbE] и 10 GbE). Linux также может поддерживать такие протоколы, как протокол управления потоком (SCTP), который предоставляет гораздо более продвинутые функции, чем TCP (преемник протокола транспортного уровня).

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

Одним из последних усовершенствований Linux является операционная система (называемая гипервизором), которую можно использовать в качестве другой операционной системы. Недавно ядро ​​было модифицировано и названо виртуальной машиной на основе ядра (KVM). Эта модификация обеспечивает новый интерфейс для пользовательского пространства, который позволяет другим операционным системам работать поверх ядер с поддержкой KVM. Помимо запуска других экземпляров Linux, Microsoft® Windows® также можно виртуализировать. Единственное ограничение заключается в том, что базовый процессор должен поддерживать новые инструкции по виртуализации.

Источник

Оцените статью
Adblock
detector