Letysite.ru

IT Новости с интернет пространства
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Архитектура ос linux

Архитектура ОС Linux

Основные компоненты Linux представлены на рис.1.

Являясь операционной системой семейства Unix, Linux следует установленным стандартам и объединяет в себе три основных части:

Ядро (kernel) — основной компонент ОС, отвечающий за управление процессами, виртуальной памятью и драйверами устройств.

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

Общее адресное пространство, однако, не препятствует модульности системы. По мере необходимости Linux подгружает в память либо выгружает из нее указанные модули.

В Linux все ядро работает в привилегированном режиме — режиме ядра. Никакая часть кода не работает в режиме пользователя. Фрагменты поддержки ОС, не требующие запуска в режиме ядра, помещаются в раздел системных библиотек.

Разделяемые системные библиотеки (system libraries) содержат стандартный набор функций, используемых приложениями для запросов к системным сервисам ядра. В библиотеках хранятся также код функций отдельных сервисов ядра, исполняемых в обычном режиме без привилегий ядра.


Рис.1 Компоненты Linux
При обращении приложения к системным ресурсам управление от части системы, работающей в пользовательском режиме, передается ядру. Библиотеки осуществляют контроль за корректностью представленного запроса и преобразование параметров/аргументов запроса к требуемому формату.

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

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

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-системе.

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

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

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

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

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

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

Особенности архитектуры: UNIX, Linux и Windows

Базовая архитектура UNIX

UNIX является примером довольно простой архитектуры ОС. Большая часть функциональности этой системы находится в ядре, ядро общается с прикладными программами с помощью системных вызовов (см рис 2.5).

Рисунок 2.5 – Базовая архитектура UNIX

Система состоит из трех основных компонентов: подсистемы управления процессами, файловой подсистемы и подсистемы ввода-вывода.

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

Файловая подсистема обеспечивает единый интерфейс доступа к данным, размещенных на дисковых накопителях и к периферийным устройствам. Такой интерфейс является одной из важнейших особенностей UNIX. Одни и те же системные вызовы используют как для обмена данными с диском, так и для вывода на терминал или принтер (программа работает с принтером так же, как и с файлом). При этом файловая система переадресовывает вызовы соответствующим модулям подсистемы ввода-вывода, и те – непосредственно периферийным устройствам. Кроме того, файловая подсистема контролирует права доступа к файлам, которые в значительной степени определяет привилегии пользователя в системе.

Подсистема ввода-вывода выполняет запросы файловой подсистемы, взаимодействуя с драйверами устройств. В UNIX различают два типа устройств: символьные (например, принтер) и блоковые (например, жесткий диск). Основное их отличие в том, что блоковое устройство допускает прямой доступ. Для повышения продуктивности работы с блоковыми устройствами используют буферный кэш – область памяти, в которой сохраняются данные, считанные с диска последними. Во время следующих обращений к этим данным, они могут быть получены из кэша.

Современные UNIX-системы несколько отличаются по своей архитектуре.

Ø В них выделен отдельный менеджер памяти, отвечающий за поддержку виртуальной памяти.

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

Ø В этих системах поддерживается многопроцессорная обработка, а так же многопотоковость.

Базовые архитектурные решения, такие как доступ ко всем устройств ввода-вывода через интерфейс файловой системы или организация системных вызовов, остаются неизменными во всех реализациях UNIX.

Архитектура Linux

В ОС Linux можно выделить три основные части:

Ø ядро, которое реализует основные функции ОС (управление процессами, памятью, вводом-выводом и т.д.);

Ø системные библиотеки, которые определяют стандартный набор функций для использования в применениях ( выполнение таких функций не требует перехода в привилегированный режим);

Ø системные утилиты (прикладные программы, которые выполняют специализированные задачи).

Назначение ядра Linux и его особенности

Linux реализует технологию монолитного ядра. Весь код и структуры данных ядра находятся в одном адресном пространстве. В ядре можно выделить несколько функциональных компонентов:

Ø Планировщик процессов – отвечает за реализацию многозадачности в системе (обработка прерываний, работа с таймером, создание и завершение процессов, переключение контекста).

Ø Менеджер памяти – выделяет отделбное адресное пространство для каждого процесса и реализует поддержку виртуальной памяти.

Ø Виртуальная файловая система – предоставляет универсальный интерфейс взаимодействия с разными файловыми системами и устройствами ввода-вывода.

Ø Драйверы устройств – обеспечивают непосредственную работу с периферийными устройствами. Доступ к ним реализуется через интерфейс виртуальной файловой системы.

Ø Сетевой интерфейс – обеспечивает доступ к раелизации сетевых протоколов и драйверов сетевых устройств.

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

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

Модули ядра

Ядро Linux дает возможность по требованию загружать в память и выгружать из нее отдельные секции кода. Такие секции называются модулями ядра и выполняются в привилегированном режиме.

Модули ядра дают ряд преимуществ:

1. Код модулей может загружаться в память в процессе работы системы, что упрощает настройку компонентов ядра, прежде всего драйверов.

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

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

Поддержка драйверов в Linux состоит из трех компонентов:

1. Средства управления модулями дают возможность загружать модули в память и реализовывать обмен данными между модулями и остальной частью ядра.

2. Средства реализации драйверов позволяют модулям сообщать остальной части ядра о том, что новый драйвер стал доступным.

3. Средства разрешения конфликтов дают возможность драйверам устройств резервировать аппаратные ресурсы и защищать их от случайного использования другими драйверами.

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

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

Все о ядре ОС Linux

Что такое ядро ОС Linux

Он туда грузится, лишь по надобности в ресурсах устройства. Причем конкретный драйвер не постоянно может быть загружен память. Драйвер — это программный код, функция какого заключается в предоставлении возможности использовать определенную железку (видео-карточку, например). Однако, в отличии от других программ, ядро постоянно загружается первым и потом постоянно сидит в некоторой области памяти. Конечно, ведь ей за всеми необходимо следить. (Это описание больше подходит для монолитного ядра). Как ни замечательно, ядро – это всего лишь программа, написанная на том или некотором языке программирования людьми и потом скомпилированная в выполняемый файл. Среди кода ядра особо отделяют драйверы устройств. P.s: не забываем, все что не в оперативной памяти как бы почивает и не работает.

Читать еще:  Техническая ошибка connectionfailure

Монолитное ядро проще и быстрее трудится, т. к. в памяти находятся всегда почти весь код. Ядро, находясь в памяти, организует взаимодействие между иными частями кода операционной системы, которые представляются самостоятельными программами (см. пример выше про загрузку драйверов). Так экономится память, но в вред скорости. Микроядро меньше, сложнее, работает медлительнее, однако почему-то считается (или считалось) более авангардным из-за легкости «подключения» новых частей кода. Отделяют операционные системы на монолитном ядре и микроядре, а вдобавок некие промежуточные варианты.

Архитектура ядра Linux

На нынешний день Linux — монолитное ядро с поддержкой занимаемых модулей. То, что архитектура Linux не является микроядерной, потребовало обширнейшие прения между Линусом Торвальдсом и Эндрю Таненбаумом в конференции comp.os.minix (англ.) в 1992 г. Ядро Linux удерживает многозадачность, виртуальную память, динамические библиотеки, зарезервированную загрузку, производительную систему управления памятью и почти многие сетевые протоколы. В отличие от обычных монолитных ядер, драйверы механизмов легко собираются в виде модулей и загружаются или разгружаются во время работы системы. Драйверы устройств и продолжения ядра обычно запускаются в 0-кольце защиты, с целым доступом к оборудованию.

В Unix были впервые выполнены так называемые многозадачность и многопоточность, виртуальная память и вероятно что-то еще. Unix имеет простое монолитное ядро, в ней практически все представляется в виде файлов. Unix круче Windows, впрочем бы потому, что ее ядро являлось первой практической осуществлением идей и открытий в области создания операционных систем. Отдельные умы вовремя спохватились и создали специальные стандарты, обеспечивающие сопоставимость систем (т.е. программа, написанная для одной Unix-подобной системы, обязана работать и в другой). Стандарты назвали POSIX. В 80-х годах в мощь ряда причин Unix-системы начали множится и модифицироваться. она написана на языке C и это делает ее переносимой с одной аппаратной перроны на другую.

Разработка модулей ядра ОС Linux

Пример, при работе с файлами программы могут не заботиться о типе безжалостного диска и файловой системе на нем. Системные вызовы заручат безопасность и стабильность системы. Так как ядро работает арбитром между ресурсами системы и программами, оно может получать решения о предоставлении доступа в соответствии с правами юзера и другими критериями. Ядро Linux предоставляет комплект интерфейсов, именуемых системными вызовами, которые дают обеспечение взаимодействие прикладных программ, работающих в пространстве юзера, и аппаратной части компьютера. POSIX, WinAPI – образцы таких API. Прикладные программы разрабатываются с применением программных интерфейсов прибавлений (Application Programming Interface, API). В этом случае нет нужды между в корре ляции между интерфейсами, какие используют приложения и интерфейсами, которые предоставляет ядро.

Сможет существовать один и тот же API для различных операционных систем, а осуществление его может отличаться. Например, операционные системы Linux и FreeBSD отвечают стандарту POSIX (Linux на 100% соответствует эталону POSIX 1003.1), и многие приложения, написанные для FreeBSD, смогут сравнительно легко быть перенесены в Linux и и наоборот. Этим объясняется схожесть наборов приложений для данных операционных систем. Частично интерфейс к системным функциям дает обеспечение библиотека C. Например, функция printf() формирует строчку в соответствии с заданным форматом и передает ее системному призыву write(), который отправляет ее на стандартное механизм вывода (чаще всего терминал).

Как собрать ядро Linux?

Первопричины для этого могут быть следующими: Иногда сможет потребоваться собрать своё собственное ядро Linux.

  • вам необходимо чистое ядро, без дистрибутивных патчей;
  • вы хотите отполосовать собственные патчи (коих очень много);
  • вы желаете собрать ядро под свою конфигурацию железа, скинуть из него лишнее и/или заточить под определённые задачи;
  • вы желаете включить в состав ядра эксперементальный драйвер или файловую систему, какой нет в «ванильном» ядре (например ZFS или Raiser 4);

В этой статье я опишу два примера сборки ядра в Debian-based дистрибутивах. В первоначальном примере я покажу как просто собрать чистое, что именуется «ванильное» ядро (такое, каким его выпускает Линус Торвальдс), а во другом — как применить собственные патчи и провести оптимизацию ядра. В производству ядра нет ничего сложного. Важно лишь соображать, для чего это делается, а также не трогать те параметры, какие вам непонятны.

Если же вам нужна самая свежая версия ядра, то её постоянно можно скачать с сайта kernel.org. Стоит приметить, что на сайте выкладываются как стабильные версии ядер так и версии нужные для тестирования и доработки(обычно в их названии есть держится аббревиатура «RC» — Release candidate). Я предлагаю осмотреть только два: системные репозитории, официальный сайт ядра. В первоначальную очередь мы должны получить исходный код, это можно делать разными способами и из разных источников. Такой подъезд предпочтительнее если вы не нуждаетесь в какой-то новой технологические процессы или возможности, которая поддерживается только более новоиспеченными ядрами. В репозиториях, скорее всего, будут версии ядра больше старые чем он официальном сайте, но в эти исходники должны быть интегрированы патчи и исправления от производителя вашего дистрибутива Linux.

Конфигурация и компиляция ядра Linux

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

Установка ядра Linux в систему

После окончания компиляции, в директории /usr/src должны появится два файла с продолжением «deb» они являются установочными пакетами нашего нового ядра и водворить их можно с помощью утилиты dpkg:

sudo dpkg -i linux-image-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb
sudo dpkg -i linux-headers-3.8.5-mykernel_3.8.5-mykernel-10.00.Custom_i386.deb

Приветствую! Ядро установлено, теперь система будет загружаться с данным ядром по умолчанию, но если у вас возникнут проблемы с новоиспеченным ядром вы всегда можете загрузится со старым избрав его на экране загрузки — Grub.

Читать еще:  Auepuc exe системная ошибка

Видео по теме: Все о ядре ОС Linux

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

Ядро Linux содержит более 13 миллионов строк кода и является одним из самых крупных проектов с открытым исходным кодом в мире. Так что такое ядро Linux и для чего оно используется?

Что такое ядро Linux?

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

Виды и версии ядра

Что такое ядро Linux вы уже знаете, но какие вообще бывают виды ядер? Есть различные способы и архитектурные соображения при создании ядер с нуля. Большинство ядер могут быть одного из трех типов: монолитное ядро, микроядро, и гибрид. Ядро Linux представляет собой монолитное ядро, в то время как ядра Windows и OS X гибридные. Давайте сделаем обзор этих трех видов ядер.

Микроядро

Микроядра реализуют подход, в котором они управляют только тем, чем должны: процессором, памятью и IPC. Практически все остальное в компьютере рассматривается как аксессуары и обрабатывается в режиме пользователя. Микроядра имеют преимущество в переносимости, они могут использоваться на другом оборудовании, и даже другой операционной системе, до тех пор, пока ОС пытается получить доступ к аппаратному обеспечению совместимым образом.

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

Плюсы

  • Портативность
  • Небольшой размер
  • Низкое потребление памяти
  • Безопасность

Минусы

  • Аппаратные средства доступны через драйверы
  • Аппаратные средства работают медленнее потому что драйверы работают в пользовательском режиме
  • Процессы должны ждать свою очередь чтобы получить информацию
  • Процессы не могут получить доступ к другим процессам не ожидая

Монолитное ядро

Монолитные ядра противоположны микроядрам, потому что они охватывают не только процессор, память и IPC, но и включают в себя такие вещи, как драйверы устройств, управление файловой системой, систему ввода-вывода. Монолитные ядра дают лучший доступ к оборудованию и реализуют лучшую многозадачность, потому что если программе нужно получить информацию из памяти или другого процесса, ей не придется ждать в очереди. Но это и может вызвать некоторые проблемы, потому что много вещей выполняются в режиме суперпользователя. И это может принести вред системе при неправильном поведении.

Плюсы:

  • Более прямой доступ к аппаратным средствам
  • Проще обмен данными между процессами
  • Процессы реагируют быстрее

Минусы:

  • Большой размер
  • Занимает много оперативной памяти
  • Менее безопасно

Гибридное ядро

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

Плюсы

  • Возможность выбора того что будет работать в пространстве ядра и пользователя
  • Меньше по размеру чем монолитное ядро
  • Более гибкое

Минусы

  • Может работать медленнее
  • Драйверы устройств выпускаются производителями

Где хранятся файлы ядра?

Где находится ядро Linux? Файлы ядра Ubuntu или любого другого Linux-дистрибутива находятся в папке /boot и называются vmlinuz-версия. Название vmlinuz походит с эпохи Unix. В шестидесятых годах ядра привыкли называть просто Unix, в 90-х годах Linux ядра тоже назывались — Linux.

Когда для облегчения многозадачности была разработана виртуальная память, перед именем файла появились буквы vm, чтобы показать что ядро поддерживает эту технологию. Некоторое время ядро называлось vmlinux, но потом образ перестал помещаться в память начальной загрузки, и был сжат. После этого последняя буква x была изменена на z, чтобы показать что использовалось сжатие zlib. Не всегда используется именно это сжатие, иногда можно встретить LZMA или BZIP2, поэтому некоторые ядра называют просто zImage.

Нумерация версии состоит из трех цифр, номер версии ядра Linux, номер вашей версии и патчи или исправления.

В паке /boot можно найти не только ядро Linux, такие файлы, как initrd.img и system.map. Initrd используется в качестве небольшого виртуального диска, который извлекает и выполняет фактический файл ядра. Файл System.map используется для управления памятью, пока еще ядро не загрузилось, а конфигурационные файлы могут указывать какие модули ядра включены в образ ядра при сборке.

Архитектура ядра Linux

Так как ядро Linux имеет монолитную структуру, оно занимает больше и намного сложнее других типов ядер. Эта конструктивная особенность привлекла много споров в первые дни Linux и до сих пор несет некоторые конструктивные недостатки присущие монолитным ядрам.

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

Представьте себе возможность установить пакет обновлений Windows без необходимости постоянных перезагрузок.

Модули ядра

Что, если бы Windows уже имела все нужные драйвера по умолчанию, а вы лишь могли включить те, которые вам нужны? Именно такой принцип реализуют модули ядра Linux. Модули ядра также известные как загружаемые модули (LKM), имеют важное значение для поддержки функционирования ядра со всеми аппаратными средствами, не расходуя всю оперативную память.

Модуль расширяет функциональные возможности базового ядра для устройств, файловых систем, системных вызовов. Загружаемые модули имеют расширение .ko и обычно хранятся в каталоге /lib/modules/. Благодаря модульной природе вы можете очень просто настроить ядро путем установки и загрузки модулей. Автоматическую загрузку или выгрузку модулей можно настроить в конфигурационных файлах или выгружать и загружать на лету, с помощью специальных команд.

Сторонние, проприетарные модули с закрытым исходным кодом доступны в некоторых дистрибутивах, таких как Ubuntu, но они не поставляются по умолчанию, и их нужно устанавливать вручную. Например, разработчики видеодрайвера NVIDIA не предоставляют исходный код, но вместо этого они собрали собственные модули в формате .ko. Хотя эти модули и кажутся свободными, они несвободны. Поэтому они и не включены во многие дистрибутивы по умолчанию. Разработчики считают что не нужно загрязнять ядро несвободным программным обеспечением.

Теперь вы ближе к ответу на вопрос что такое ядро Linux. Ядро не магия. Оно очень необходимо для работы любого компьютера. Ядро Linux отличается от OS X и Windows, поскольку оно включает в себя все драйверы и делает много вещей поддерживаемых из коробки. Теперь вы знаете немного больше о том, как работает ваше программное обеспечение и какие файлы для этого используются.

Ссылка на основную публикацию
Adblock
detector