Ядро Linux — один из самых крупных проектов с открытым исходным кодом, содержащий более 13-ти миллионов строк кода, но что это такое и для чего нужно?
Итак, что такое Ядро?
Ядро — самый нижний уровень легкозаменяемого ПО, взаимодействующий с оборудованием компьютера. Оно отвечает за взаимодействие приложений, работающих в пользовательском режиме, с реальным оборудованием и позволяет процессам, известным как "серверы", получать информацию друг у друга, используя межпроцессное взаимодействие (IPC).
Разные виды ядер
Естественно, есть разные подходы к построению ядра и разнообразные архитектурные особенности, которые надо учесть при разработке ядра с нуля. В целом, большинство ядер можно разделить на три вида: монолитное, микроядерное и гибридное. У Linux ядро монолитное, в то время, как OS X (XNU) и Windows 7 (на самом деле - все Windows NT-семейства - прим. пер.) используют гибридные ядра. Давайте кратко рассмотрим эти категории, и позже углубимся в детали каждой из них.
Микроядро
Подход микроядра заключается в управлении только тем, чем должно управлять ядро - процессор, память и IPC. Практически все остальное рассматривается как дополнительное оборудование и управляется в пользовательском режиме. У микроядер есть преимущество в переносимости, так как вам не нужно беспокоится о смене видеокарты или даже операционной системы, до тех пор, пока операционная система обращается к оборудованию тем же образом. Микроядра очень малы, как в смысле занимаемой памяти, так и в смысле занимаемого места на диске при установке, и, как правило, они более безопасны, потому что большинство процессов, в том числе системных, выполняются в режиме пользователя, что не требует (и не предоставляет) многих прав доступа, в отличие от работы в режиме ядра.
Требуют мало места для установки
Занимают мало места в памяти
Безопасность
Оборудование может иметь большие задержки, потому что драйверы работают в пользовательском режиме
Процессы вынуждены ждать своей очереди для получения информации
Процессы не могут получить доступ к другим процессам без ожидания
Монолитное ядро
Монолитные ядра противоположны микроядрам - они включают в себя не только системы управления процессорами, памятью и 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.6 эта система отменена - прим. пер.), C будет вашей версией, а D будет отображать ваши патчи и исправления.
Также в каталоге /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 тем, что оно включает драйверы устройств на уровне ядра и поддерживает многое "из коробки". Надеемся, теперь вы знаете немного больше о совместной работе вашего программного обеспечения и оборудования, а так же о том, какие файлы необходимы для загрузки вашего компьютера.
Оригинальный источник: http://www.howtogeek.com/
Итак, что такое Ядро?
Ядро — самый нижний уровень легкозаменяемого ПО, взаимодействующий с оборудованием компьютера. Оно отвечает за взаимодействие приложений, работающих в пользовательском режиме, с реальным оборудованием и позволяет процессам, известным как "серверы", получать информацию друг у друга, используя межпроцессное взаимодействие (IPC).
Разные виды ядер
Естественно, есть разные подходы к построению ядра и разнообразные архитектурные особенности, которые надо учесть при разработке ядра с нуля. В целом, большинство ядер можно разделить на три вида: монолитное, микроядерное и гибридное. У Linux ядро монолитное, в то время, как OS X (XNU) и Windows 7 (на самом деле - все Windows NT-семейства - прим. пер.) используют гибридные ядра. Давайте кратко рассмотрим эти категории, и позже углубимся в детали каждой из них.
Микроядро
Подход микроядра заключается в управлении только тем, чем должно управлять ядро - процессор, память и IPC. Практически все остальное рассматривается как дополнительное оборудование и управляется в пользовательском режиме. У микроядер есть преимущество в переносимости, так как вам не нужно беспокоится о смене видеокарты или даже операционной системы, до тех пор, пока операционная система обращается к оборудованию тем же образом. Микроядра очень малы, как в смысле занимаемой памяти, так и в смысле занимаемого места на диске при установке, и, как правило, они более безопасны, потому что большинство процессов, в том числе системных, выполняются в режиме пользователя, что не требует (и не предоставляет) многих прав доступа, в отличие от работы в режиме ядра.
Плюсы
ПереносимостьТребуют мало места для установки
Занимают мало места в памяти
Безопасность
Минусы
Драйверы как слой абстракции для оборудованияОборудование может иметь большие задержки, потому что драйверы работают в пользовательском режиме
Процессы вынуждены ждать своей очереди для получения информации
Процессы не могут получить доступ к другим процессам без ожидания
Монолитное ядро
Монолитные ядра противоположны микроядрам - они включают в себя не только системы управления процессорами, памятью и 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.6 эта система отменена - прим. пер.), C будет вашей версией, а D будет отображать ваши патчи и исправления.
Также в каталоге /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 тем, что оно включает драйверы устройств на уровне ядра и поддерживает многое "из коробки". Надеемся, теперь вы знаете немного больше о совместной работе вашего программного обеспечения и оборудования, а так же о том, какие файлы необходимы для загрузки вашего компьютера.
Оригинальный источник: http://www.howtogeek.com/
Админу - зачет!!!
ОтветитьУдалитьПознавательно.Спасибо!))
ОтветитьУдалитьчегой-то анекдоты зависли...
ОтветитьУдалитьраньше каждый день менялись, а
теперь уже неделю один и тот же =/
"чегой-то анекдоты зависли...". Виджет HTML "заклинило", Потому и анекдоты зависли. Будем надеяться Гугл скоро поправит движок, т.к. он гугловский. Потом будут новые анекдоты.
УдалитьНе осилил, но буду читать.
ОтветитьУдалитьУ новичков часто возникают вопросы о драйверах для Linux (Ubuntu).
Отвечаю так, что в 99% всё устанавливается без дополнительных драйверов, но если не установилось, что драйвер будет трудно установить.
Я долго мучался с принтером Canon LBP-2900 отличный принтер, но сам не определяется.
Вот нашёл тут решение проблемы: http://compizomania.blogspot.com/2013/09/ubuntu.html?showComment=1379825283268#c9142613054100877685
Случилось чудо и сейчас этот принтер работает! Canon LBP 2900 LBP2900
У меня и после этого не заработал (((
УдалитьВ Linux ядро ОС полностью отделено от графической оболочки.Linux дает право выбора. Этот выбор везде – можете выбирать дистрибутив, а можете сами дистрибутив собрать,в любой момент сменить среду рабочего стола, и при этом оставить систему в рабочем состоянии.
ОтветитьУдалитьСпасибо! Сделайте слова "Монолитное ядро,Гибридное ядро" жирнее для удобства чтения.
ОтветитьУдалитьБольшое спасибо! Теперь можно ссылку на вашу статью дать знакомому для просвещения.
ОтветитьУдалитьКак могу приобщаю знакомых к линуксу и в первую очередь рекомендую ваш блог. Написано предельно ясно даже новичкам. Надеюсь не забросите, так как лучше ресурсов не встречал.
Cпасибо, Николай, за тёплые слова о блоге. Думаю не заброшу.
УдалитьОт если бы уважаемый админ и про кде начал писать................
ОтветитьУдалитьбыло супер и супер
Вирги, нельзя объять необъятное, а точнее увеличить сутки с 24 на большее время. Займись, напиши статью и опубликуй здесь, я уже писал не раз, что блог Compizomania открыт для любого, кто хочет поделиться с другими пользователями своими познаниями, мыслями, настройками того или иного приложения, рабочего стола и т.д.
УдалитьТак я первокласник а вы,,,
ОтветитьУдалитьТы знаешь, Вирги, что когда первокласник помогает, объясняет другому первокласнику, порой получается более доходчиво, чем это же делает учитель. Так что не выкручивайся, а пиши.
УдалитьТак я ничего непонимаю просто изучаю ваши советы и от них большая польза.А так я один в Linux не с кем поделится своими проблемами все на играх сидит вот так. Конечно они их ворует но есть как есть
ОтветитьУдалитьЭтот комментарий был удален автором.
ОтветитьУдалить