Подтвердить что ты не робот

Каковы хорошие и плохие вещи в дизайне ядра Linux?

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

Обновление: Нет, это не для домашней работы. Я бы сказал, что если бы это было так.

Смотрите это: https://stackoverflow.com/info/1548442/i-know-how-to-program-now-how-do-i-learn-to-design

Все хвалит дизайн ядра Linux. Пусть у вас есть список хороших и плохих проектных решений, которые были приняты при разработке ядра.

4b9b3361

Ответ 1

какая-то статья существует под названием "Шаблоны проектирования ядра Linux". вы купите различные шаблоны для ядра ядра для Linux. одна статья, которая непрерывна: " Шаблоны проектирования ядра Linux - часть 1", начните с этого и googleing для дополнительной статьи для шаблона проектирования ядра.

Ответ 2

Не прямо о дизайне Linux, но я считаю, что процесс разработки, стоящий за ним, является самым примечательным. Ядро постоянно развивается и делает это с невероятной скоростью. Это возможно только из-за децентрализованного контроля версий (git), что позволяет очень большому числу разработчиков работать одновременно.

Кроме того, с git bisect они достигли чего-то замечательного; теперь нет возможности разработчикам отслеживать ошибки. Вот цитата из Дэвида Миллера:

То, что люди не получают, это то, что это ситуация, когда "конец nodeпринцип". Когда у вас есть ограниченные ресурсы (здесь: разработчики) вы не подталкиваете основную часть бремени на них. Вместо этого вы выталкиваете вещи к ресурсу у вас много, (здесь: пользователи), так что ситуация действительно масштабы.

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

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

Стиль управления Linux - интересное чтение. Линус пытается жить атмосферой, где вы не скрываетесь за вежливостью, но четко излагаете, что думаете. Иногда это может быть грубо, но я уверен, что он сохраняет качество кода на высоком уровне.

Ответ 3

плохие вещи:

  • Новая функция высокой скорости и цикл исправления ошибок для этой функции мало.
  • Конфигурационная система должна быть интеллектуальной. и классифицируется для некоторых общих потребностей. если у него есть мастер, такой как система конфигурации, и больше взаимодействий и информации при выполнении конфигурации.
  • блокировка большого ядра и другие блокировки везде без хорошего механизма проверки.

хорошие вещи:

  • драйверы режима пользователя: файловая система пользовательского режима, драйвер блока пользовательского режима, драйвер блока режима пользователя, raw hid,...
  • хорошее включение драйвера. в наши дни большой диапазон устройств имеет поддержку в ядре linux.
  • световая виртуализация в ядре.
  • хорошие механизмы связи между пространством пользователя и пространством ядра (dev, proc, sys, debugfs,...)
  • очень хорошее использование языка C с указателями функций в структурах для имитации некоторых объектно-ориентированных функций.
  • пользовательский режим linux для отладки.
  • хорошая поддержка встроенных систем.
  • очень хорошие механизмы безопасности: selinux, apparmor, проверка целостности,...

Ответ 5

Хуже всего:

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

Лучшее:

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

Ответ 6

Я думаю, что разработка ядра, а не проблема дизайна с философскими предпосылками и дебатами (например, микро-ядро против монолитного ядра), является вопросом практического кода, который работает надежно. Разнообразие периферийных устройств и протоколов, которые ядро ​​должно поддерживать в дополнение к широкому спектру версий аппаратного обеспечения и производителей, а также сложные проблемы, возникающие в разработке защищенного режима (по сравнению с развитием пользовательского режима, используемым приложениями), оправдывают это утверждение. Кроме того, не забудьте проблему обратной совместимости, которая жизненно важна для ОС на практике, но в основном игнорируется в философии дизайна.

Ядром Linux является хороший пример: монолитное ядро ​​(хотя и очень модульное) со многими прагматическими взломами в нем, которое превосходит многие хорошо разработанные академические или коммерческие операционные системы по популярности и производительности как в серверных, так и в встроенных системных областях.

Преимущество Linux заключается в том, что многие аспекты его ядра могут быть либо встроены в образ ядра (в основном bzImage), либо позже добавлены в качестве модуля ядра. Вы можете настроить его перед тем, как сделать образ ядра с помощью инструмента конфигурации, а затем любой модуль ядра можно легко удалить или добавить во время выполнения (конечно же, с помощью root-привилегий), не перезагружая ОС. Это упрощает разработку и обслуживание ядра. (Подумайте о ОС Windows, которая требует перезагрузки почти для каждого обновления, много раз в программах, не связанных с ядром).