What is: ядро Linux

Автор: | 03/02/2016
 

What-is-itСостоящее почти из 20 миллионов строк кода ядро Linux является одним из самых крупных Opensource проектов в мире.

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

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

Типы ядер

Имеется три основных типа ядер — монолитные (monolithic), микроядра (microkernel) и гибридные (hybrid).

К примеру Linux является монолитным ядром, тогда как OS X и Windows используют гибридные ядра.

Microkernel

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

Плюсы

  • переносимость
  • меньший размер занимаемой RAM и на жестком диске
  • безопасность

Минусы

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

Monolithic ядра

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

Плюсы

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

Минусы

  • больший объем занимаемой памяти и жесткого диска
  • больше проблем с безопасностью

Гибридные ядра

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

Плюсы

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

Минусы

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

Файлы ядра Linux

linux_kernel_naming

В большинстве GNU/Linux-систем файлы ядра располагаются в каталоге /boot, например CentOS 6:

# ls -l /boot/ | grep linu
-rwxr-xr-x  1 root root  4221232 Dec 15 23:48 vmlinuz-2.6.32-573.12.1.el6.x86_64
-rwxr-xr-x  1 root root  4221968 Feb 10 01:15 vmlinuz-2.6.32-573.18.1.el6.x86_64
-rwxr-xr-x  1 root root  4221776 Aug 14  2015 vmlinuz-2.6.32-573.3.1.el6.x86_64
-rwxr-xr-x  1 root root  4220144 Sep 23 01:29 vmlinuz-2.6.32-573.7.1.el6.x86_64
-rwxr-xr-x  1 root root  4220368 Nov 10 20:31 vmlinuz-2.6.32-573.8.1.el6.x86_64

Файл с vmlinuz в имени и есть файл ядра. Имя vmlinuz пришло из мира UNIX, в котором c 60-годов файл ядра назывался просто unix. Когда Linus Torvalds начал разработку Linux в 90-х — он назвал его просто linux.

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

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

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

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

Модули ядра Linux

Что если бы Windows изначально содержило в себе все необходимые драйвера, и все что требовалось бы от пользователя — это просто включить некоторые из них?

Именно так и работают модули Linux, которые так же называют Loadable Kernel Module (LKM) и которые жизненно необходимы для того, что бы ядро имело возможность взаимодейтсвовать со всем оборудованием компьютера и при этом не занимать всю его память.

Как правило — модули расширяют возможности ядра для работы с устройствами, файловыми системами и системными вызовами. LKM имеют рсширение файлов .ko:

# find /lib/modules/2.6.32-573.18.1.el6.x86_64/kernel/ -name "*.ko" -type f | wc -l
2033

Благодаря модульной структуре — вы можете настраивать ядро под себя, выбирая только необходимые модули в menuconfig, отредактировав файл /boot/config* или загружая и выгружая модули прямо во время работы с помощью утилит типа modprobe, insmod и rmmod.

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

Оригинал тут>>>.

Ссылки по теме

Linux: LKM – Linux Kernel Module, модули ядра Linux

http://git.kernel.org

http://www.tldp.org