Что такое ядро ​​Linux и что оно делает?


Обладая более чем 13 миллионами строк кода, ядро ​​Linux является одним из крупнейших проектов с открытым исходным кодом в мире, но что такое ядро ​​и для чего оно используется?

Так что же такое ядро?

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

Различные типы ядер

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


Изображение Попкорн в верхней части города

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

Pros

  • портативность
  • Малая площадь установки
  • Маленький объем памяти
  • Безопасность

против

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

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

Pros

  • Более прямой доступ к оборудованию для программ
  • Легче для процессов общаться друг с другом
  • Если ваше устройство поддерживается, оно должно работать без дополнительных установок
  • Процессы реагируют быстрее, потому что нет процессорного времени

против

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


Изображение с помощью schoschie на Flickr

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

Pros

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

против

  • Может страдать от того же технологического отставания, что и микроядро
  • Драйверы устройств должны управляться пользователем (обычно)

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

Файл ядра в Ubuntu хранится в вашей папке/boot и называется vmlinuz- версия . Название vmlinuz происходит от мира Unix, где они называли свои ядра просто «unix» еще в 60-х годах, поэтому Linux начал называть свое ядро ​​«linux», когда оно было впервые разработано в 90-х годах.

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

Нумерация версий будет в формате A.B.C.D, где A.B, вероятно, будет 2,6, C будет вашей версией, а D указывает ваши исправления или исправления.

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

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

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

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

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

Модули ядра

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

Модуль обычно добавляет функциональность в базовое ядро ​​для таких вещей, как устройства, файловые системы и системные вызовы. LKM имеют расширение файла .ko и обычно хранятся в каталоге/lib/modules. Из-за их модульной природы вы можете легко настроить свое ядро, установив модули для загрузки или не загрузки, при запуске с помощью команды menuconfig или путем редактирования вашего файла/boot/config, или вы можете загружать и выгружать модули на лету с помощью modprobe команда.

Сторонние модули и модули с закрытым исходным кодом доступны в некоторых дистрибутивах, таких как Ubuntu, и могут не устанавливаться по умолчанию, поскольку исходный код для модулей недоступен. Разработчики программного обеспечения (например, nVidia, ATI и другие) не предоставляют исходный код, а создают собственные модули и компилируют необходимые файлы .ko для распространения. Хотя эти модули бесплатны, как в пиве, они не бесплатны, как в речи, и поэтому не включены в некоторые дистрибутивы, потому что сопровождающие считают, что он «портит» ядро, предоставляя несвободное программное обеспечение.

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

Kernel.org
Изображение ingridtaylar

Оцените статью
TutoryBird.Ru
Добавить комментарий