What is linux kernel architecture

Kernel

According to Wikipedia:

The Linux kernel is an open-source monolithic Unix-like computer operating system kernel.

Arch Linux is based on the Linux kernel. There are various alternative Linux kernels available for Arch Linux in addition to the latest stable kernel. This article lists some of the options available in the repositories with a brief description of each. There is also a description of patches that can be applied to the system’s kernel. The article ends with an overview of custom kernel compilation with links to various methods.

Kernel packages are installed onto the file system under /boot/ . To be able to boot into kernels, the boot loader has to be configured appropriately.

Contents

Officially supported kernels

Community support on forum and bug reporting is available for officially supported kernels.

  • Stable — Vanilla Linux kernel and modules, with a few patches applied.

https://www.kernel.org/ || linux

  • Hardened — A security-focused Linux kernel applying a set of hardening patches to mitigate kernel and userspace exploits. It also enables more upstream kernel hardening features than linux .

https://github.com/anthraxx/linux-hardened || linux-hardened

  • Longterm — Long-term support (LTS) Linux kernel and modules.

https://www.kernel.org/ || linux-lts

  • Zen Kernel — Result of a collaborative effort of kernel hackers to provide the best Linux kernel possible for everyday systems. Some more details can be found on https://liquorix.net (which provides kernel binaries based on Zen for Debian).

https://github.com/zen-kernel/zen-kernel || linux-zen

Compilation

Following methods can be used to compile your own kernel:

/Arch Build System Takes advantage of the high quality of existing linux PKGBUILD and the benefits of package management. /Traditional compilation Involves manually downloading a source tarball, and compiling in your home directory as a normal user.

Some of the listed packages may also be available as binary packages via Unofficial user repositories.

kernel.org kernels

  • Git — Linux kernel and modules built using sources from Linus Torvalds’ Git repository

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git || linux-gitAUR

  • Mainline — Kernels where all new features are introduced, released every 2-3 months.

https://www.kernel.org/ || linux-mainlineAUR

  • Next — Bleeding edge kernels with features pending to be merged into next mainline release.

https://www.kernel.org/doc/man-pages/linux-next.html || linux-next-gitAUR

  • Longterm 4.4 — Long-term support (LTS) Linux 4.4 kernel and modules.

https://www.kernel.org/ || linux-lts44AUR

  • Longterm 4.9 — Long-term support (LTS) Linux 4.9 kernel and modules.

https://www.kernel.org/ || linux-lts49AUR

  • Longterm 4.14 — Long-term support (LTS) Linux 4.14 kernel and modules.

https://www.kernel.org/ || linux-lts414AUR

  • Longterm 4.19 — Long-term support (LTS) Linux 4.19 kernel and modules.

https://www.kernel.org/ || linux-lts419AUR

  • Longterm 5.4 — Long-term support (LTS) Linux 5.4 kernel and modules.

https://www.kernel.org/ || linux-lts54AUR

Unofficial kernels

  • Aufs — The aufs-compatible linux kernel and modules, useful when using docker.

http://aufs.sourceforge.net/ || linux-aufsAUR

  • Ck — Contains patches by Con Kolivas (including the MuQSS scheduler) designed to improve system responsiveness with specific emphasis on the desktop, but they are suitable to any workload.
Читайте также:  Windows server 2019 полная версия

http://ck.kolivas.org/ || linux-ckAUR

  • Clear — Patches from Intel’s Clear Linux project. Provides performance and security optimizations.

https://github.com/clearlinux-pkgs/linux || linux-clearAUR

  • GalliumOS — The Linux kernel and modules with GalliumOS patches for Chromebooks.

https://github.com/GalliumOS/linux || linux-galliumosAUR

  • Libre — Without propietary or obfuscated device drivers.

https://www.fsfla.org/ikiwiki/selibre/linux-libre/ || linux-libreAUR

  • Liquorix — Kernel replacement built using Debian-targeted configuration and the Zen kernel sources. Designed for desktop, multimedia, and gaming workloads, it is often used as a Debian Linux performance replacement kernel. Damentz, the maintainer of the Liquorix patchset, is a developer for the Zen patchset as well.

https://liquorix.net || linux-lqxAUR

  • MultiPath TCP — The Linux Kernel and modules with Multipath TCP support.

https://multipath-tcp.org/ || linux-mptcpAUR

  • pf-kernel — Provides a handful of awesome features which are not merged into a kernel mainline. Maintained by a kernel engineer. If the port for the included patch for new kernels was not released officially, the patchset provides and supports patch ports to new kernels. The current most prominent patches of linux-pf are PDS CPU scheduler and UKSM.

https://gitlab.com/post-factum/pf-kernel/wikis/README || Packages:

  • Repository by pf-kernel developer post-factum
  • Repository, linux-pfAUR , linux-pf-preset-defaultAUR by pf-kernel fork developer Thaodan
  • linux-pf-gitAUR by yurikoles
  • Realtime kernel — Maintained by a small group of core developers led by Ingo Molnar. This patch allows nearly all of the kernel to be preempted, with the exception of a few very small regions of code («raw_spinlock critical regions»). This is done by replacing most kernel spinlocks with mutexes that support priority inheritance, as well as moving all interrupt and software interrupts to kernel threads.

https://wiki.linuxfoundation.org/realtime/start || linux-rtAUR , linux-rt-ltsAUR

  • tkg — A highly customizable kernel build system that provides a selection of patches and tweaks aiming for better desktop and gaming performance. It is maintained by Etienne Juvigny. Amongst other patches, it offers various CPU schedulers: CFS, Project C PDS, Project C BMQ, MuQSS and CacULE.

https://github.com/Frogging-Family/linux-tkg || not packaged? search in AUR

  • VFIO — The Linux kernel and a few patches written by Alex Williamson (acs override and i915) to enable the ability to do PCI Passthrough with KVM on some machines.

https://lwn.net/Articles/499240/ || linux-vfioAUR , linux-vfio-ltsAUR

  • XanMod — Aiming to take full advantage in high-performance workstations, gaming desktops, media centers and others and built to provide a more rock-solid, responsive and smooth desktop experience. This kernel uses the MuQSS or CacULE scheduler, BFQ I/O scheduler, UKSM realtime memory data deduplication, TCP BBR congestion control, x86_64 advanced instruction set support, and other default changes.

https://xanmod.org/ || linux-xanmodAUR , linux-xanmod-caculeAUR

Debugging regressions

Try linux-mainline AUR to check if the issue is already fixed upstream. The stickied comment also mentions a repository which contains already built kernels, so it may not be necessary to build it manually, which can take some time.

It may also be worth considering trying the LTS kernel ( linux-lts ) to debug issues which did not appear recently. Older versions of the LTS kernel can be found in the Arch Linux Archive.

Читайте также:  Astra linux startx не работает

If the issue still persists, bisect linux-git AUR and report the bug on the kernel bugzilla. It is important to try the «vanilla» version without any patches to make sure it is not related to them. If a patch causes the issue, report it to the author of the patch.

Источник

Linux: архитектура ядра Linux — общая архитектура системы

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

Оригинал — на странице Conceptual Architecture of the Linux Kernel.

Более полное описание архитектуры — есть на странице Concrete Architecture of the Linux Kernel.

Обзор системы

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

Операционная система Linux (или — GNU/Linux) состоит из четырёх основных частей:

    1. User applications (пользовательские приложения) — набор пользовательских приложений может быть разным в различных дистрибутивах Linux, но типичные примеры — это приложения обработки текста и веб-браузер;
    2. O/S services (службы операционной системы) — службы, которые обычно считаются частью операционной системы, такие как оконный менеджер, командная строка и т.д. Так же, сюда входит программный интерфейс ядра (компилятор/ы и библиотеки);
    3. Ядро Linux — основная интересующая нас часть; ядро создаёт абстрактный слой и является «посредником» между первыми двумя частями и hardware-частью компьютера;
    4. Hardware controllers (контроллеры оборудования) — подсистема, охватывающая все возможные физические устройства, такие как CPU, устройства памяти, жёсткие диски, сетевые карты — все они являются частью этой подсистемы.

Каждая подсистема может взаимодействовать только с двумя соседними, расположенными непосредственно «выше» и «ниже» её уровня. Кроме того, зависимости между этими подсистемами направлены сверху — вниз: слои расположенные выше — зависят от частей ниже, но части, расположенные ниже — не зависят от частей выше их.

Так как нас интересует само ядро Linux — мы не будем тут рассматривать слой уровня пользовательских приложений, а коснёмся только уровней Оборудования и Служб операционной системы, в тех границах, в которых они связаны с ядром.

Роль ядра

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

Обзор структуры и зависимостей подсистем ядра

Ядро Linux состоит из пяти основных подсистем:

  1. Process Scheduler ( SCHED ) — планировщик процессов, отвечает за контроль над доступом процессов к CPU. Планировщик обеспечивает такое поведения ядра, при котором все процессы имеют справедливый доступ к центральному процессору.
  2. Memory Manager ( MM ) — менеджер памяти, обеспечивает различным процессам безопасный доступ к основной памяти системы. Кроме того, MM обеспечивает работу виртуальной памяти, которая позволяет процессам использовать больше памяти, чем реально доступно в системе. Выделенная, но неиспользуемая память вытесняется на файловую систему, и при необходимости — возвращается из неё обратно в память ( swapping ).
  3. Virtual File System( VFS ) — виртуальная файловая система, создаёт абстрактный слой, скрывая детали оборудования, предоставляя общий файловый интерфейс для всех устройств. Кроме того, VFS поддерживает несколько форматов файловых систем, которые совместимы с другими операционными системами.
  4. Network Interface ( NET ) — сетевые интерфейсы, обеспечивает работу с различными сетевыми стандартами и сетевым оборудованием.
  5. Inter-Process Communication ( IPC ) — межпроцессная подсистема, поддерживающая несколько механизмов для process-to-process связей в единой Linux-системе.
Читайте также:  Coloring folders in windows

На рисунке ниже изображены связи всех этих подсистем, где линии исходят от зависимых подсистем к подсистемам, от которых они зависят:

Общая структура и связи подсистем ядра Linux

Тут явно видно, что основной подсистемой является планировщик процессов: все остальные системы зависят от него, так как всем им необходимо приостанавливать и возобновлять выполнение процессов. Как правило, процесс приостанавливается в ожидании каких-либо операций с оборудованием, и возобновляет выполнение, когда операция завершена. Например — когда процесс пытается отправить некое сообщение по сети, сетевой интерфейс может приостановить выполнение процесса, пока сетевое оборудование выполняет отправку сообщения. После того как сообщение отправлено (или — получено сообщение об ошибке) — сетевой интерфейс возобновляет работу процесса, передавая ему код возврата, который указывает на успешное завершение операции, или ошибку её при выполнении. Все остальные подсистемы (memory manager, virtual file system и inter-process communication) так же зависят от планировщика процессов по схожим причинам.

Другие зависимости не так явны, но не менее важны:

  • Планировщик процессов использует менеджер памяти, что бы согласовывать карту памяти для каждого процесса, когда он возобновляет своё выполнение;
  • Подсистема IPC зависит от менеджера памяти для поддержания механизма использования общей памяти; этот механизм позволяет двум процессам получить доступ к области общей памяти, в дополнение к их приватной памяти;
  • Виртуальная файловая система использует сетевые интерфейсы для обеспечения работы NFS (Nework File System), и использует менеджер памяти для обеспечения работы устройства RAM drive;
  • Менеджер памяти использует подсистему виртуальной файловой системы для поддержки swapping -а, и это единственная причина, по которой менеджер памяти зависит от файловой системы; когда процесс запрашивает доступ к участку памяти, который уже был вытеснен на диск (swapped out) — менеджер памяти выполняет запрос к файловой системе, что бы получить обратно данные из хранилища ( swap -раздела или swap -файла), а выполнение процесса на это время приостанавливается.

Кроме зависимостей, которые видны явно, все подсистемы ядра зависят от некоторых общих ресурсов, которые не показаны тут. Сюда входят процедуры, которые используют все подсистемы ядра для выделения (allocate) им и/или высвобождения ими памяти для использования ядром, процедуры для сообщений об ошибках и проблемах, и прочее.

Источник

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