Что такое ядро Linux и что оно делает?
Обладая более чем 13 миллионами строк кода, ядро Linux является одним из крупнейших проектов с открытым исходным кодом в мире, но что такое ядро и для чего оно используется??
Так что же такое ядро?
Ядро - это самый низкий уровень легко заменяемого программного обеспечения, которое взаимодействует с аппаратным обеспечением вашего компьютера. Он отвечает за взаимодействие всех ваших приложений, работающих в «пользовательском режиме», с физическим оборудованием и позволяет процессам, известным как серверы, получать информацию друг от друга с помощью межпроцессного взаимодействия (IPC)..
Различные типы ядер
Конечно, существуют разные способы построения ядра и архитектурные соображения при его создании с нуля. В целом, большинство ядер делятся на три типа: монолитное, микроядерное и гибридное. Linux является монолитным ядром, в то время как OS X (XNU) и Windows 7 используют гибридные ядра. Давайте быстро пройдемся по трем категориям, чтобы мы могли подробнее остановиться на них позже..
Изображение от попкорн в верхней части города
Microkernel
Микроядро использует подход, управляющий только тем, что ему нужно: процессором, памятью и IPC. Практически все остальное в компьютере может рассматриваться как аксессуар и может обрабатываться в пользовательском режиме. Микроядра имеют преимущество портативности, потому что им не нужно беспокоиться, если вы меняете видеокарту или даже операционную систему, если операционная система все еще пытается получить доступ к оборудованию таким же образом. Микроядра также занимают очень мало места как для памяти, так и для места установки, и они, как правило, более безопасны, потому что только пользовательские процессы выполняются в пользовательском режиме, который не имеет высоких разрешений в режиме супервизора..
Pros
- портативность
- Малая площадь установки
- Маленький объем памяти
- Безопасность
Cons
- Аппаратное обеспечение более абстрагировано от драйверов
- Аппаратное обеспечение может реагировать медленнее, поскольку драйверы находятся в режиме пользователя.
- Процессы должны ждать в очереди, чтобы получить информацию
- Процессы не могут получить доступ к другим процессам без ожидания
Монолитное ядро
Монолитные ядра являются противоположностью микроядрам, поскольку они охватывают не только процессор, память и IPC, но также включают в себя такие вещи, как драйверы устройств, управление файловой системой и вызовы системного сервера. Монолитные ядра, как правило, лучше получают доступ к аппаратному обеспечению и многозадачности, потому что, если программе необходимо получить информацию из памяти или другого запущенного процесса, она имеет более прямую линию доступа к ней и не должна ждать в очереди, чтобы добиться цели. Это, однако, может вызвать проблемы, потому что чем больше вещей работает в режиме супервизора, тем больше вещей может привести к выходу системы из строя, если кто-то не будет вести себя должным образом..
Pros
- Более прямой доступ к оборудованию для программ
- Проще для процессов общаться друг с другом
- Если ваше устройство поддерживается, оно должно работать без дополнительных установок
- Процессы реагируют быстрее, потому что нет очереди на процессорное время
Cons
- Большая площадь установки
- Большой объем памяти
- Менее безопасный, потому что все работает в режиме супервизора
Изображение с помощью schoschie на Flickr
Гибридное ядро
Гибридные ядра имеют возможность выбирать, что они хотят запустить в режиме пользователя, и что они хотят запустить в режиме супервизора. Часто такие вещи, как драйверы устройств и операции ввода-вывода файловой системы, будут выполняться в пользовательском режиме, а вызовы IPC и сервера будут сохраняться в режиме супервизора. Это дает лучшее из обоих миров, но часто требует больше работы от производителя оборудования, потому что вся ответственность за драйвер лежит на них. Это также может иметь некоторые проблемы с задержкой, которые присущи микроядрам.
Pros
- Разработчик может выбирать, что работает в режиме пользователя, а что в режиме супервизора.
- Меньшая площадь установки, чем у монолитного ядра
- Более гибкий, чем другие модели
Cons
- Может страдать от того же технологического отставания, что и микроядро
- Драйверы устройств должны управляться пользователем (обычно)
Где находятся файлы ядра 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