Что такое kernel linux
Национальная библиотека им. Н. Э. Баумана
Bauman National Library
Персональные инструменты
Linux (ядро)
Содержание
Историческая справка
Краткая история Unix
В 1980 году компанией AT&T был разработан пакет коммерческих лицензий на все дистрибутивы UNIX, и сведение всех версий в одну: UNIX System V. Университет Калифорнии, Беркли продолжал разрабатывать свою собственную версию Unix под названием BSD. Многие из важнейших разработок в UNIX изначально пришли из BSD, к примеру, включение TCP/IP в основную версию UNIX. Поскольку основная часть системы поставлялась в исходных текстах, написанных на языке С, опытным программистам не требовалось документации, чтобы разобраться в архитектуре UNIX. C ростом популярности микропроцессоров другие компании переносили эту операционную систему на другие платформы, но простота и ясность операционной системы искушали многих на ее расширение и последующую модификацию, в результате чего появилось много разновидностей базовой системы.
Краткая история Linux
В 1991 году в Хельсинки, Финляндии, Линус Торвальдс начал работу над проектом, который был, по его словам, «просто для удовольствия». Этот проект в конечном счете стал ядром Linux. Он никогда не был предназначен для чего-то особенного, просто инструмент, который позволил бы студенту получить доступ к UNIX-серверам в соседнем университете. Он написал его специально для железа, на котором он работал на тот момент, и оно не зависело от операционной системы. Linux разработана «с нуля» для процессора Intel i386, сегодня она перенесена на огромный ряд других аппаратных платформ, включая серверы Alpha фирмы DEC.
Переход от Unix к Linux
Linux был разработан в попытке создать бесплатную альтернативу коммерческим UNIX-средам. Его история начинается в 1991 или даже в 1983 гг., когда был создан проект GNU, чьей исходной целью было предоставить бесплатную альтернативу UNIX. Linux работает на гораздо большем количестве платформ, например на Intel®/AMD x86. Большинство ОС UNIX способны работать только на одной платформе.У Linux и UNIX общие исторические корни, но есть и серьезные отличия. Много инструментов, утилит, и бесплатных приложений, являющихся стандартными для Linux, первоначально задумывались как бесплатная альтернатива программам для UNIX. Linux часто предоставляет поддержку множества опций и приложений, заимствуя лучшую или наиболее популярную функциональность из UNIX. Администратору или разработчику, который привык работать с Linux, система UNIX может показаться не очень удобной для использования. С другой стороны, фундамент UNIX-подобной операционной системы (инструменты, файловая система, интерфейсы API) достаточно стандартизирован.
Понятие ядра операционной системы Linux.
Ядро является сердцем любой операционной системы, обеспечивая базовую функциональность операционной системы:
Исходный код ядра коммерческих дистрибутивов UNIX является собственностью их разработчиков и не распространяется за пределы компании. Полностью противоположная ситуация с Linux. Процедуры для компиляции и исправления ядер и драйверов весьма различны. Для Linux и других операционных систем с открытым исходным кодом патч может быть выпущен в виде исходного кода, и конечный пользователь может установить, проверить и даже модифицировать его. Эти патчи обычно проверены не так тщательно как патчи от поставщиков коммерческих ОС UNIX. Поскольку нет полного списка приложений и сред, которые должны быть оттестированы для корректной работы на Linux, Linux-разработчики зависят от конечных пользователей и других разработчиков, которые будут отлавливать ошибки.
Поставщики коммерческих UNIX-дистрибутивов выпускают ядра только в виде исполняемого кода. Некоторые релизы являются монолитными, тогда как другие позволяют обновить только какой-нибудь конкретный модуль ядра. Но в любом случае этот релиз предоставляется только в форме исполняемого кода. Если необходимо обновление, администратор должен ждать, пока производитель выпустит патч в бинарном коде, однако его может утешить то, что производитель выполнит тщательную проверку своего патча на обратную совместимость.
Все коммерческие версии UNIX в некоторой степени эволюционировали до модульного ядра. Драйверы и отдельные особенности ОС доступны как отдельные компоненты и могут быть по необходимости загружены или выгружены из ядра. Но открытая модульная архитектура Linux гораздо гибче. Однако гибкость и адаптируемость Linux означают и постоянное изменение. Исходный код Linux постоянно меняется, и, по прихоти разработчика, может поменяться API. Когда модуль или драйвер написан для коммерческой версии UNIX, он проработает гораздо дольше, чем тот же драйвер для Linux.
Устройство компонентов ядра ОС Linux
Файловая подсистема
Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, а также к периферийным устройствам. Одни и те же функции open(), read(), write() могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или в терминал. Файловая подсистема контролирует права доступа к файлу, выполняет операции размещения и удаления файла. Поскольку большинство прикладных функций выполняется через интерфейс файловой системы, права доступа к файлам определяют привилегии пользователя в системе. Файловая подсистема обеспечивает маршрутизацию запросов периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.
Подсистема управления запросами
Запущенная на выполнение программа порождает в системе один или более процессов ( задач ). Подсистема управления процессами контролирует:
Известно, что в общем случае число активных процессоров превышает число процессоров компьютера, но в каждый конкретный момент времени на каждом процессоре может выполняться только один процесс. Операционная система управляет доступом процессоров к вычислительным ресурсам, создавая ощущение одновременного выполнения нескольких задач. Специальная задача ядра, называемая распорядителем или планировщиком процессов, разрешает конфликты между процессами в конкуренции за системные ресурсы ( процессор, память, периферийные устройства ). Планировщик запускает процесс на выполнение, следя за тем, чтобы процесс монопольно не захватил разделяемые системные ресурсы. Процесс освобождает процессор, ожидая длительной операции ввода/вывода, или по прошествии периода времени. В этом случае планировщик выбирает следующий процесс с наивысшим приоритетом и запускает его на выполнение. Модуль управления памятью обеспечивает размещение оперативной памяти для прикладных задач. Оперативная память является дорогостоящим ресурсом, и, как правило, она редко «простаивает». В случае, если для всех процессов недостаточно памяти, ядро перемещает части процесса или несколько процессов во вторичную память ( как правило, для этого выделена некоторая область жесткого диска ), освобождая ресурсы для действующих процессов. Все современные системы реализуют виртуальную память: процесс выполняется в собственном логическом адресном пространстве, которое может значительно превышать доступную физическую память. Управление виртуальной памятью процесса также входит в перечень задач модуля управления памятью. Модуль межпроцессного взаимодействия.отвечает за уведомление процессов о событиях с помощью сигналов и обеспечивает возможность передачи данных между различными процессами.
Подсистема ввода/вывода
Особенности архитектуры
Ядро Linux поддерживает многие унаследованные от UNIX особенности, такие как:
Выполнение в режиме ядра
Существуют всего три события, при которых выполнение процесса переходит в режим ядра:
Примечания
Литература
Робачевский, Андрей (2002). Autotools : Операционная система Unix / by Андрей Робачевский. No Starch Press. p. 528. ISBN 5-8206-0030-4.
Ядро Linux
Обновл. 29 Окт 2021 |
Как вы наверняка знаете, всё началось с того, что в 1991 году программист Линус Торвальдс решил создать свою собственную операционную систему, начав с самого главного компонента — её ядра — связующего «мостика» между программами и непосредственно аппаратной частью компьютера. В этой статье мы поговорим о том, что представляет собой ядро Linux с точки зрения обычного пользователя и какие существуют версии ядра дистрибутивов Linux.
Что такое ядро ОС? Типы ядер
Ядро — это своего рода главная программа, являющаяся основной частью операционной системы. Оно выступает в роли посредника между устройствами компьютера (процессором, видеокартой, оперативной памятью и т.д.) и его программным обеспечением, абстрагируя от обычных программ и пользователей сложную, низкоуровневую работу с «железом» компьютера, предоставляя взамен простой, понятный и удобный в использовании интерфейс. Для этого в код ядра включены драйверы устройств, которые могут как загружаться в память вместе с ядром ОС, так и подключаться по мере возникновения потребности в ресурсах необходимого устройства.
Как правило, большинство ядер ОС делятся на три типа:
Микроядро
Микроядро — это ядро, состоящее из нескольких подгружаемых в память по мере надобности независимых модулей, выполняющихся в отдельных адресных пространствах. По сути, в таком варианте исполнения оно не сильно отличается от обычных прикладных программ. К достоинствам данного ядра можно отнести теоретически большую надежность в сравнении с другими архитектурами (в действительности же не всё так радужно и гладко) и его модульность (легкость в подключении дополнительных частей ядра). К минусам микроядерной архитектуры относится то, что ядро, построенное по такой схеме, получается очень медленным (ведь ему нужно постоянно переключаться между отдельными частями).
небольшие требования к используемой памяти;
аппаратное обеспечение сильнее абстрагировано от системы;
аппаратное обеспечение может медленнее реагировать, поскольку драйверы находятся в пользовательском пространстве;
процессы не могут получить доступ к другим процессам без ожидания.
Монолитное ядро
Монолитное ядро — это полная противоположность микроядра, т.к. в памяти компьютера всегда находится весь (или почти весь) код ядра, вследствие чего скорость его работы выше в сравнении с микроядром. Монолитные ядра, как правило, лучше справляются с операциями доступа к оборудованию и многозадачностью, потому что, если программе нужно получить информацию из памяти или другого запущенного процесса, у нее есть прямая линия для доступа к ней, и программе не нужно ждать в очереди, чтобы сделать что-то. Однако такой подход может вызвать серьезные проблемы, потому что, чем больше процессов выполняется на уровне ядра, тем больше вероятность, что в случае непредвиденного поведения они создадут общий сбой вашей системы.
практически прямой доступ программ к оборудованию;
процессам проще взаимодействовать друг с другом;
если ваше устройство поддерживается ядром, никаких дополнительных установок ПО не потребуется;
процессы реагируют быстрее, потому что не требуется ожидания в очереди за процессорным временем.
большой размер ядра;
больший размер занимаемой памяти;
проблемы с безопасностью, т.к. все части работают в пространстве ядра.
Гибридное ядро
Гибридное ядро — это ядро, сочетающее в себе элементы как монолитной, так и микроядерной архитектур. У таких ядер есть возможность выбирать, какие части будут работать в пользовательском пространстве (например, драйверы устройств и система ввода-вывода файловой системы), а какие — в пространстве ядра (вызовы межпроцессного (IPC) и серверного взаимодействий). Но этот подход имеет и некоторые проблемы, унаследованные от микроядерной архитектуры (особенно, по части быстродействия).
разработчик может выбрать, какие программы будут работать в пользовательском пространстве, а какие — в пространстве ядра;
меньший размер в сравнении с монолитным ядром;
гибче в отличие от других ядер.
может страдать от пониженной производительности (как и микроядро);
работа драйверов устройств, как правило, сильнее зависит от производителей оборудования.
Ядро Linux хоть и относится к монолитным ядрам, но оно также заимствует и некоторые идеи из микроядерной архитектуры, что означает, что вся операционная система работает в пространстве ядра, а драйверы устройств (в виде модулей) могут быть легко загружены (или выгружены) прямо во время работы операционной системы.
Где находится ядро Linux?
Каждый раз во время запуска (или перезапуска) системы первым компонентом, который загружается в память компьютера, является ядро Linux.
В папке /boot вы также найдете и другие очень важные файлы:
img-[версия_ядра] — используется в качестве RAM-диска, в который распаковывается и с которого загружается ядро;
map-[версия_ядра] — используется для управления памятью до полной загрузки ядра;
config-[версия_ядра] — сообщает ядру, какие параметры и модули следует загрузить в образ ядра при его компиляции.
Когда Линус Торвальдс только начинал разрабатывать свое ядро, оно носило простое название — linux. С появлением технологии виртуальной памяти к ядру добавилась приставка vm (сокр. от «virtual memory»). Со временем ядро настолько разрослось, что к нему стали применять сжатие, об этом нам говорит буква z (от «zlib compression») в слове vmlinuz.
Примечание: Также для сжатия ядра часто применяются алгоритмы LZMA или bzip2, а сами ядра именуются zImage.
Модули ядра Linux
Что, если б в Windows уже содержались все доступные драйверы устройств, и вам просто нужно было задействовать некоторые из них? В этом, по сути, и заключен принцип загружаемых модулей ядра Linux (сокр. «LKM» от англ. «Loadable Kernel Module»). Они должны обеспечивать взаимодействие ядра со всем вашим оборудованием, и при этом не занимать всю доступную память.
Модули обычно расширяют базовые возможности ядра, связанные с различной работой устройств, файловых систем и системных вызовов. Они, как правило, имеют расширение .ko и обычно хранятся в каталоге /lib/modules:
В некоторых дистрибутивах, таких как Ubuntu, доступны модули сторонних производителей или с закрытым исходным кодом. Разработчики программного обеспечения (например, NVIDIA, AMD и др.) не предоставляют исходный код, а скорее создают свои собственные модули в виде предварительно скомпилированных .ko-файлов. Некоторые разработчики Linux считают, что такие закрытые модули «портят» своим присутствием ядро, предоставляя несвободное программное обеспечение, и не включают их в свои дистрибутивы.
Версии ядра дистрибутивов Linux
Stable
Stable — это последняя доступная стабильная версия ядра Linux, предназначенная для широкого круга использования. По умолчанию, в большинстве дистрибутивов Linux применяется именно stable-версия ядра. Она регулярно обновляется, и к ней довольно часто выпускаются новые патчи.
LTS (сокр. от «Long-Term Support») — это версия ядра с длительным сроком поддержки, которая считается более стабильной в сравнении с обычной версией ядра, т.к. при её разработке программисты стараются не экспериментировать с различными нововведениями. Однако из-за этого, LTS-версии ядра могут не иметь некоторых функций ядер более свежих релизов, а также содержать старые версии драйверов, несовместимых с более новым оборудованием. Жизненный цикл LTS-ядра, обычно, составляет 5 лет для настольных компьютеров и серверов (раньше для настольных компьютеров поддержка осуществлялась на протяжении 3 лет). Для сравнения, обычные релизы ядра имеют поддержку всего 9 месяцев с момента выпуска.
Несмотря на то, что исправления безопасности внедряются в LTS-версию так же часто, как и в обычную, она, тем не менее, не дает 100% гарантии отсутствия каких-либо ошибок. Правда, шанс того, что с LTS-версией ядра Linux возникнут какие-то проблемы, немного меньше по сравнению с обычной версией ядра Linux, и поэтому многие предприятия отдают предпочтение именно LTS-релизам.
Примечание: По данным компании Canonical, примерно 95% всех установок Ubuntu являются LTS-релизами.
Hardened
Hardened — это усиленная различными обновлениями безопасности stable-версия ядра Linux. Она умеет блокировать потенциально опасные операции, обеспечивая тем самым эффективную защиту от эксплойтов, нацеленных на использование уязвимостей ядра. Данная версия ядра не так популярна, как другие, из-за того, что несколько медленнее их. Hardened-ядро убивает любой процесс, который покажется ему потенциально опасным. Кроме этого, он не отображает PID процессов, и, следовательно, вы не сможете напрямую обратиться к запущенному исполняемому файлу. Также некоторые программы и функции могут не работать с hardened-ядром.
Zen — версия ядра Linux, ориентированная на повышение производительности и отзывчивости системы. Также говорят, что это лучшее ядро Linux для игр. Zen имеет низкую задержку и высокочастотный планировщик.
Установка/Обновление ядра Linux
В Linux есть исходное ядро, которое разработал Линус Торвальдс, а затем уже дополняли и дополняют другие разработчики и организации вместе с Линусом Торвальдсом. Расположено исходное ядро на сайте kernel.org.
Все дистрибутивы Linux (Debian, Ubuntu, Manjaro, CentOS и др.), которые начали появляться после публикации исходного ядра, стали вносить свои изменения и дополнения, формируя, таким образом, свой вариант исходного ядра Linux. Все Linux-дистрибутивы имеют в своей основе исходное ядро из kernel.org, но уже с внесенными в него соответствующими правками.
Примечание: Ядра разных дистрибутивов не являются взаимозаменяемыми. Теоретически, можно «подкинуть», например, ядро из Debian в Ubuntu. И система даже заработает (ведь Ubuntu произошла от Debian), но в 99% случаев начнут появляться разные глюки и баги.
Соответственно, из этого можно сделать следующие выводы:
Если вы хотите установить «чистое», оригинальное ядро Linux, то вам нужно скачать его с kernel.org, затем сконфигурировать на свое усмотрение и наслаждаться.
Если вам нужно ядро Linux с правками под какой-то конкретный дистрибутив (например, Debian или Manjaro), то вам нужно скачать ядро из репозитория конкретного дистрибутива с помощью менеджера пакетов.
Зачем тогда нужен kernel.org? Дело в том, что сначала свежая версия исходного ядра появляется на kernel.org, а затем уже «расходится» по репозиториям остальных дистрибутивов.
Есть 2 способа установки/обновления ядра Linux:
Обновление ядра Linux через менеджер пакетов.
На этом уроке мы рассмотрим обновление ядра Linux через менеджер пакетов, а на следующем — самостоятельную установку и конфигурирование ядра Linux.
Обновление ядра Linux через менеджер пакетов
Обычно, вместе с обновлением системы происходит и обновление ядра. Но если вы по каким-либо причинам хотите произвести установку/обновление непосредственно только ядра Linux, то ниже мы рассмотрим данный процесс для нескольких дистрибутивов Linux.
Linux Mint (Debian/Ubuntu)
Для начала сверим текущую установленную версию ядра:
Далее выполним поиск доступных для установки ядер (сгенерированный список может быть очень длинным, поэтому, чтобы хоть как-то ограничить вывод и сделать его постраничным, применим фильтр | more ):
$ sudo apt-cache search linux-image | more
Мой выбор пал на ядро linux-image-4.15.0-1004-oem. Чтобы его установить, нужно выполнить команду:
$ sudo apt-get install linux-image-4.15.0-1004-oem
Останется только перезагрузить систему и убедиться, что новое ядро успешно установилось:
Manjaro (Arch Linux)
В Manjaro используется свой менеджер пакетов — pacman, поэтому его команды будут немного отличаться от команд в других дистрибутивах. Чтобы вывести список доступных для установки ядер, необходимо выполнить:
$ sudo pacman –S linux
В рамке обведен список ядер, которые мы можем установить. Я выбрал пункт №5 (linux510), нажав соответствующую кнопку на цифровой клавиатуре. После этого запустился процесс скачивания необходимых пакетов. Когда всё будет готово, перезагружаем систему и радуемся новому ядру:
Установка ядра Zen (Liquorix)
Liquorix — это отдельный проект ядра, собранный из исходников zen-ядра, но с использованием лучшей конфигурации для повышения производительности системы.
Debian
Скачиваем скрипт, который добавит в систему нужные репозитории:
$ curl ‘https://liquorix.net/add-liquorix-repo.sh’ | sudo bash
После чего выполняем всего одну команду, устанавливающую пакеты с новым ядром:
$ sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64
Ubuntu
Установка в Ubuntu происходит практически аналогичным образом. Сначала добавляем репозитории zen-ядра (liquorix):
sudo add-apt-repository ppa:damentz/liquorix && sudo apt-get update
После чего выполняем уже знакомую по прошлому разу команду:
sudo apt-get install linux-image-liquorix-amd64 linux-headers-liquorix-amd64
И теперь перезагружаем систему. Готово!
Manjaro
Сначала установим помощник установки пакетов — yay:
$ git clone https://aur.archlinux.org/yay.git
Далее установим необходимые утилиты:
$ sudo pacman –S base-devel
Заходим в каталог yay и производим сборку пакета:
После этого переходим непосредственно к установке zen-ядра:
Стоит отметить, что этот процесс может занять довольно большой отрезок времени. По его окончанию, перезагружаем систему и радуемся новому ядру.
Поделиться в социальных сетях:
Управление памятью в Linux. Физическая и Виртуальная память
Добавить комментарий Отменить ответ
Kernel (Русский)
Ядро Linux — ядро операционной системы, соответствующее стандартам POSIX, составляющее основу операционных систем семейства Linux.
Дистрибутив Arch Linux основан на ядре Linux. Помимо основной стабильной (stable) версии в Arch Linux можно использовать некоторые альтернативные ядра. В статье описываются доступные в официальных репозиториях версии ядер, возможные патчи, а также способы, которыми пользователи могут скомпилировать собственное ядро.
Contents
Официальные ядра
Помощь при работе с официальными ядрами можно найти на форуме и в баг-трекере.
Компиляция
Скомпилировать собственное ядро можно двумя способами:
/Arch Build System Преимущества — наличие готового PKGBUILD для пакета linux и удобство системы управления пакетами. /Традиционная компиляция Ручная загрузка архива файлов с исходными кодами ядра и их компиляция.
Некоторые из перечисленных пакетов могут быть также доступны в двоичном виде в неофициальных репозиториях.
Ядра kernel.org
Неофициальные ядра
Отладка регрессий
Прежде всего проверьте ядро linux-mainline AUR на предмет того, не была ли проблема уже решена. В прикреплённом комментарии указан репозиторий с уже собранными ядрами, так что собирать ядро вручную не придётся.
Если проблема проявляется не слишком часто, то имеет смысл попробовать LTS-ядро ( linux-lts ). Старые версии LTS-ядер можно найти в архиве Arch Linux.