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

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

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

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

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

36
задан 12 revs, 5 users 48% 23 May 2017 в 12:23
поделиться

5 ответов

В какой-то статье существуют названный «Дизайн дизайна ядра Linux». Вы найдите различные шаблон для дизайна ядра для Linux. Одна статья, которая непрерывна « Узор дизайна ядра Linux - часть 1 », начните с этого и Google для дополнительной статьи для рисунка дизайна ядра.

8
ответ дан 8 August 2019 в 07:25
поделиться

Это невозможно выполнить с помощью XPath. При использовании XPathDocument можно использовать метод AddSort .

Однако, если вы уже используете (и/или должны быть в состоянии обновить XML DOM), его, вероятно, просто легко выгрузить результат, полученный при работе с GroupNodes, в SortedDictionary , используя значение атрибута Key в качестве значения Key.

-121--3894562-

Любой статический код анализа (например, PC-Lint ) должен быть в состоянии сообщить вам об этом. Для PC-Lint, я знаю, что это так.

-121--1051701-

Худшая вещь:

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

Лучшее:

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

1
ответ дан 8 August 2019 в 07:25
поделиться

Насколько мне известно, я никогда не видел какого-либо автоматического сбора статистики использования для приложений Swing.

На мой взгляд, наиболее простым способом реализации такой функции было бы использование функции look 'n' feel: таким образом, каждый компонент будет прозрачно связан с наиболее подходящими регистраторами (JCheckBox будет прослушиваться для проверок, в то время как на панели ОАО будет вестись прокрутка).

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

-121--1542174-

Используйте

static <T extends Comparable<? super T>> sort(T[] array);

, который является наиболее общей спецификацией для выполнения задачи. В основном, он утверждает, что T является типом, который можно сравнить с самим собой.

-121--266688-

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

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

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

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

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

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

5
ответ дан 8 August 2019 в 07:25
поделиться

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

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

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

0
ответ дан 8 August 2019 в 07:25
поделиться

Плохие вещи:

  1. Новая скорость функций высокая, а цикл исправления ошибок для этих функций мало.
  2. Система конфигурации должна быть интеллектуальной. и классифицирован для некоторых общего потребностей. Если он имеет самую мастер, как система конфигурации и дополнительные взаимодействия и информация при выполнении конфигурации.
  3. Большой замок ядра и другие замки везде без хорошего механизма проверки.

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

  1. Драйверы пользовательского режима: пользовательский режим файловая система, пользовательский режим блокировки драйвера, драйвер блока пользователя, RAW HID, ...
  2. Хороший включение драйверов. В на этот день большой ассортимент устройств поддерживает в ядре Linux.
  3. Световая виртуализация в ядре.
  4. Хорошие механизмы связи между пространством пользовательского пространства и пространством ядра (DEV, Proc, Sys, Debugfs, ...)
  5. Очень хорошо используются языки C с указателями функций со структурами для симуляции некоторых объектных ориентированных объектов.
  6. Режим пользователя Linux для отладки.
  7. Хорошая поддержка встроенных систем
  8. Очень хорошие механизмы безопасности: Selinux, Apparmor, проверка целостности, ...
4
ответ дан 8 August 2019 в 07:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: