👋👋Нажмите на меня! Сделает ваш опыт чтения лучше 😊
Ядро является очень важной частью операционной системы, а также ядром операционной системы. Ядро управляет системными ресурсами Ядро соединяет приложения вверх и оборудование вниз Это мост между приложениями и оборудованием.
Ядро можно разделить наядро макросаимикроядро.
Самая большая разница между макроядром и микроядром заключается в том,Пользовательские службы и службы ядра макроядра хранятся в одном и том же адресном пространстве, и все они управляются ядром, в то время как пользовательские службы и службы ядра микроядра хранятся в разных адресных пространствах., рисунок ниже может объяснить это очень хорошо.
На самом деле перевод макроядра тут немного притянут за уши, на самом деле его следует называть одноядерным или одноядерным. В этом одноядерном дизайне ядро представляет собой большое целое, о котором можно сказать, что это большой процесс.В этом большом процессе все службы ядра работают в одном адресном пространстве, и между функциями мало ссылок вызовов, а прямая связьПросто и эффективно.
Функции микрокрытия разделены на независимые процессы, а процессы пропускаются черезIPCКоммуникация носит модульный характер, и сбой одной службы не влияет на другую. Однако из-за влияния модульности ссылки вызовов между функциями длинные, и процессы не взаимодействуют напрямую, а общаются друг с другом через службы ядра.
отразмер ядраКак упоминалось выше, размер микроядра меньше и включает в себя только службы, связанные с пользовательскими процессами, в то время как размер отдельного ядра намного больше, чем у микроядра, что легко понять, потому что макроядро включает в себя слишком много служб и драйверов. .
отэффективностьВ приведенном выше, эффективность исполнения Microkernel относительно медленной, поскольку она включает в себя перекрестные модульные вызовы, в то время как эффективность выполнения макрокена высока, потому что функции вызываются напрямую.
в микроядремодульныйПосле этого его легко расширить, потому что пространство ядра и пространство пользователя изолированы друг от друга, а данные в ядре, как правило, не затрагиваются после сбоя приложения в пользовательском режиме (приложения, работающие в пользовательском пространстве). Ядра макросов менее масштабируемы.
После приведенных выше описаний легко представить характеристики макроядра и микроядра как монолитной архитектуры и микросервисной архитектуры в разработке программного обеспечения..
Самая большая особенность монолитной архитектуры в том, что удобно вызывать функции, а связи вызова почти нет.Один проект решает все проблемы.В проект включены драйвера БД,различные перехватчики,контроллеры и контроль разрешений,и масштабируемость очень бедных.
Канал вызова между архитектурами микросервисов будет относительно длинным, а обязанности между модулями разделены и взаимозависимы, например модуль управления разрешениями, модуль маршрутизации и модуль связи по шине. Расширяемость относительно сильная.
Эти две разные основные структуры имеют разные избирательные округа, и некоторые люди думают, что это хорошая единая архитектура, некоторые люди думают, что хорошая модель архитектуры микро-сервисов.
Это как спорить о языках программирования, какой из них лучше, Python, Go, Java или любой другой язык? Кем бы он ни был, в конце концов он в шутку скажет:PHP — лучший язык в мире. Итак, эти аргументы спорны, но интересно, что они часто напоминают битву между RISC и CISC в области процессоров в предыдущие годы.
Современные успешные конструкции ЦП включают любую из этих двух технологий, подобно тому как ядро Linux является гибридным продуктом микроядра и макроядра. Некоторые люди могут подумать, что Linux — это не просто макроструктура ядра, но на самом деле Linux — это не просто интегрированное ядро в чистом виде.
Почему Linux использует структуру с одним ядром (здесь это называется одноядерным)? Я предполагаю, что есть несколько факторов ниже.
С точки зрения Линуса, разработка и выбор одного ядра проще, потому что избегается работа, связанная с архитектурой передачи сообщений, методами загрузки вычислительных модулей и т.д. И причина рождения Linux в том, что Линус был очень недоволен MINIX (разновидность UNIX-подобной операционной системы), которую разрешалось использовать только в образовании, а Линус изначально очень интересовался операционными системами, поэтому он начал писать операционные системы Linux, поэтому я думаю, что в то время Линус разработал Linux из хобби, без тщательного проектирования и без учета его расширяемости. Конечно, это всего лишь мое скромное предположение.
Это то же самое, что и наш выпускной проект в колледже.Учитываете ли вы масштабируемость системы, которую вы создали в своем выпускном проекте? Если вы не хотите делать это как продукт, но почему?
Другая причина — достаточное время разработки. Linux не имеет ограничений по времени разработки и графика выпуска. Любые ограничения могут изменять и расширять только ядро. Единая конструкция сердечника полностью модульная внутри, и ее не очень сложно модифицировать или дополнить в данном случае. Проблема в том, что нет необходимости переписывать ядро Linux в погоне за небольшим улучшением недоказанной ремонтопригодности. Линус неоднократно подчеркивал тот момент, что потеря скорости ради этого блага того не стоит.
Linux представляет собой структуру макроядра, основанную на микроядрах.Linux поддерживает модульную структуру, вытесняющие ядра, поддержку потоков ядра и возможность динамической загрузки модулей ядра. Мало того, Linux избегает потери производительности из-за дизайна микроядра, позволяя всему работать в режиме ядра, вызывая функции напрямую без передачи сообщений.
Подводя итог, можно сказать, что Linux — это модульная, многопоточная и планируемая ядром операционная система.
Модульная конструкция: Linux поддерживает динамическую загрузку модулей ядра, хотя ядро Linux также является одноядерным, оно позволяет при необходимости удалять и динамически загружать некоторый код ядра.
Преимущественное прерывание: ядро Linux поддерживает вытеснение.В отличие от традиционной UNIX, ядро Linux имеет возможность разрешать приоритетное выполнение задач, запущенных в ядре. Из различных продуктов UNIX только Solaris и IRIX поддерживают вытеснение, а большинство устаревших ядер UNIX — нет.
В Linux идеален прагматизм. Если функция не имеет ценности или является плохой идеей, она не начнет ее реализовывать. Наоборот, при разработке Linux развился похвальный прагматизм: любые изменения должны быть нацелены на актуальные проблемы в реальности, и должны быть полностью спроектированы и реализованы правильно и лаконично.
Если бы Linux был чисто микроядерным, перенос на другие архитектуры был бы проще. Реальность такова, что портирование ядра Linux, хотя и не тривиально, ни в коем случае не невозможно.
Наконец, я рекомендую свой собственныйGithub, в ней много хардкорных статей, которые обязательно вам помогут. Ган! ! !