Основные функции ядра linux

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

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

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

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

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

AWIBicT+vDwSAAAAAElFTkSuQmCC

Аппаратный уровень

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

Уровень драйверов

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

Функциональный уровень

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

Именно здесь задаются протоколы передачи данных TCP и UDP. Перезапуск или выключение ядра тоже можно отнести к функциональным возможностям.

Уровень взаимодействия

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

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

Здесь же реализуется межпроцессное взаимодействие (IPC). С его помощью потоки одного процесса могут обмениваться данными.

Уровень виртуализации

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

На этом уровне создаются также виртуальные файловые системы. Это одна из ключевых задач ядра. Вместо того чтобы отображать пользователю файловую систему ext4 или любую другую, ядро приводит её к одному виду, который понятен не только программам, но и пользователю. Что интересно, файловой системой можно сделать даже оперативную память. Для этого на уровне взаимодействия создаётся RAM-диск. Во время загрузки операционной системы это решает вопрос доступа к загрузочным файлам до момента инициализации файловой системы накопителя.

Читайте также:  Операционная система linux doc

Прикладной уровень

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

Что НЕ делает ядро Linux

Вы наверняка слышали о том, что операционные системы Linux называют GNU/Linux. Именно библиотеки и утилиты проекта GNU дополняют ядро, давая тем самым возможность более гибко и просто использовать его вызовы. Системных вызовов несколько сотен, но библиотека GNU C (glibc) значительно расширяет этот список всевозможными функциями. Аналогичную работу выполняет библиотека DRM (не относится к GNU), дающая доступ к ресурсам видеокарты. На примере ниже показана работа видеоигры.

nip7hildVqeaMEcA4BJoqtCpQoECBAgU1E7mqcE7r25Gmro9TUMRpFShQUBnHI7XAy3p6pv+ZzKdK5ntclQNSEmeXjksQBXsfoK0T4gUIBnxQSvcqUKBAgQIFNQY2wUC6JoYsVW3yVcGYRG9sgk5xShQoUAA4UTnNTo2z0KKx56RrHdlbNY7cL9t0uH1hRXv4f+mdkqgvpleYAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIwLTA4LTEwVDAwOjIxOjA2KzAwOjAwVuVX8QAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMC0wOC0xMFQwMDoyMTowNiswMDowMCe4700AAAAASUVORK5CYII=

Другие утилиты GNU не менее полезны. Например, командная оболочка Bash отвечает за выполнение консольных команд.

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

Android тоже использует ядро Linux, но вместо библиотек GNU задействует собственные. Поэтому GNU/Linux и Android имеют несовместимые друг с другом программы.

Выводы

Теперь вы знаете что делает ядро Linux. Если кратко описать задачи ядра, то оно управляет ресурсами компьютера и предоставляет к ним доступ в виде абстракций вроде виртуальной памяти и потоков. Но не стоит переоценивать заслуги ядра, вместе с утилитами GNU вы получаете не просто планировщик потоков, а практически полноценную операционную систему.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Ядро Linux и его функции

Ядро Linux — один из самых крупных проектов с открытым исходным кодом, содержащий более 13-ти миллионов строк кода, но что это такое и для чего нужно?

Итак, что такое Ядро?

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

Разные виды ядер

Естественно, есть разные подходы к построению ядра и разнообразные архитектурные особенности, которые надо учесть при разработке ядра с нуля. В целом, большинство ядер можно разделить на три вида: монолитное, микроядерное и гибридное. У Linux ядро монолитное, в то время, как OS X (XNU) и Windows 7 (на самом деле — все Windows NT-семейства — прим. пер.) используют гибридные ядра. Давайте кратко рассмотрим эти категории, и позже углубимся в детали каждой из них.

Микроядро

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

Читайте также:  Xerox phaser 3020 linux driver

Плюсы

Минусы

    Драйверы как слой абстракции для оборудования

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

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

Плюсы

    Прямой доступ к оборудованию для приложений

Минусы:

    При установке занимает много места

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

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

Плюсы

    Разработчик может выбрать, какие компоненты запускать в пользовательском режиме, а какие — в режиме ядра

Минусы

    Может страдать от тех же задержек процессов, что и микроядро

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

Файл ядра в Ubuntu лежит в папке /boot и называется vmlinuz-. Имя vmlinuz пришло из мира UNIX шестидесятых годов , в котором ядра назывались просто «unix», в результате чего в начале девяностых при появлении ядро стало называться «linux».

Когда для упрощения многозадачности была разработана виртуальная память (virtual memory), для отображения её поддержки в начало файла стали добавлять «vm». Некоторое время ядро называлось vmlinux, но потом оно разрослось слишком сильно, чтобы уместиться в доступной при загрузке памяти, и его стали сжимать, и «x» в конце названия сменился на «z», чтобы показать, что оно сжато при помощи zlib. Не всегда используется такой тип компрессии и часто заменяется на LZMA или BZIP2, и, иногда, ядра называются zImage (или bzImage — прим. пер.).

Нумерация версий имеет формат A.B.C.D, где A.B, скорее всего, будет 2.6 (семейство ядра. Четная цифра B говорит о стабильном семействе — 2.0, 2.2, 2.4, 2.6, — а нечетная — о версиях для разработчиков — 2.1, 2.3, 2.5, 2.7 — прим. пер.), C будет вашей версией, а D будет отображать ваши патчи и исправления.

Читайте также:  Plex media player linux

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

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

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

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

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

Модули ядра

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

Модуль обычно добавляет базовому ядру возможности в таких сферах, как поддержка оборудования, файловых систем и системных вызовов. Обычно файлы LKM имеют расширение .ko и хранятся в папке /lib/modules. Благодаря модульности можно легко настраивать ядро (http://www.howtogeek.com/howto/ubuntu/how-to-customize-your-ubuntu-kernel/), указывая, какие модули загружать, а какие нет, во время загрузки при помощи команды menuconfig, редактируя файл /boot/config или загружать и выгружать модули на лету при помощи команды modprobe.

Во многих дистрибутивах (таких, как Ubuntu) доступны сторонние, а так же закрытые (проприетарные) модули, которые обычно не устанавливаются, так как их исходный код недоступен. Разработчики ПО (например, nVidia, ATI и другие) не предоставляют исходные файлы, вместо этого они сами собирают собственные модули и предоставляют необходимые .ko-файлы для конкретного дистрибутива. Пока эти модули бесплатны, но не свободны (http://www.howtogeek.com/howto/31717/what-do-the-phrases-free-speech-vs.-free-beer-really-mean/), мейнтейнеры некоторых дистрибутивов не включают их, стараясь не «загрязнять» ядро несвободными компонентами.

Заключение

Ядро — не что-то волшебное, оно совершенно необходимо любому компьютеру для нормальной работы. Ядро Linux отличается от ядер Windows и OS X тем, что оно включает драйверы устройств на уровне ядра и поддерживает многое «из коробки». Надеемся, теперь вы знаете немного больше о совместной работе вашего программного обеспечения и оборудования, а так же о том, какие файлы необходимы для загрузки вашего компьютера.

Переведено инициативной группой welinux в составе Shtsh, settler, alff31, Zereal, goblinyara, blackraven
при помощи сервиса translated.by.

Возможно вас заинтересует:

Источник

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