Почему Linux так хорошо масштабируется на разных аппаратных платформах?

22

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

Джастин этир
источник
7
Я думаю, что у вас уже есть часть ответа - открытость позволяет различным группам людей или предприятий адаптировать его к своим потребностям. Поскольку ядро ​​было заметно раскритиковано за монолитность, я не уверен, что его первоначальный дизайн был каким-то образом преднамеренно оптимизирован для масштабируемости. Я предполагаю, что над ядром Linux работало больше людей, чем над другими операционными системами - и, возможно, это заставило разработчиков ядра позаботиться о том, чтобы разделить код на части с понятными интерфейсами? С другой стороны, некоторые варианты BSD имеют переносимость в качестве явной цели.
RedGrittyBrick
@Red: Его критиковали за то, что он был монолитным ядром, а не микроядром - это никак не связано с его дизайном. Это связано с тем, сколько ядра работает в пространстве пользователя и сколько работает в пространстве ядра. Ядро Windows NT (например) очень модульно, но технически оно все еще монолитно, потому что большинство сервисов (т.е. файловая система) работают в режиме ядра, а не в режиме пользователя.
Билли Онил
@ Билли: Windows NT технически является гибридным ядром. Я считаю, что Microsoft по-прежнему поддерживает подсистемы, используя передачу сообщений, и сохраняет возможность перемещать фрагменты в пользовательское пространство по желанию. Они сделали это с графической системой в Vista: теперь она находится в пользовательском пространстве после того, как была в ядре с NT 4.0
Zan Lynx
2
@Zan: у меня сложилось впечатление, что статус «гибридного ядра» оспаривается . Поэтому я сказал "монолитный". NT, безусловно, обладает множеством монолитных функций, даже если она разбита на фрагменты библиотеки.
Билли ONEAL
@Billy: мне кажется, что если ваше ядро ​​можно превратить в микроядро, просто изменив несколько опций и перестроив, то это будет нечто отличное от монолитного, даже если наиболее часто используемые двоичные сборки помещают все в адресное пространство ядра.
Зан Рысь

Ответы:

31

Хотя открытость, безусловно, является частью этого, я думаю, что ключевым фактором является то, что Линус Торвальд настаивает на том, чтобы вся работа, от большой до маленькой, имела место в основном ядре Linux, если она хорошо сделана. Если бы он решил в какой-то момент подвести черту и сказать: «Хорошо, для этого модного суперкомпьютерного оборудования нам нужна вилка», тогда могли бы появиться совершенно отдельные варианты high-end и small-system. Как таковые, вместо этого люди проделали более сложную работу, заставляя все это играть вместе относительно хорошо.

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

Из интервью, которое было несколько лет назад :

В: Linux - это универсальная система. Он поставляет ПК, огромные серверы, мобильные телефоны и около десятка других устройств. С вашей привилегированной позиции, в каком секторе Linux проявит самый высокий потенциал?

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

mattdm
источник
18
И определения малых систем и огромных систем постоянно меняются, так что хороших ошибок не было. Многоядерные смартфоны теперь могут извлечь выгоду из всей суперкомпьютерной работы, проделанной много лет назад.
Zan Lynx
4

Linux масштабируется на множество различных типов оборудования, потому что:

  • это очень настраиваемый
  • исходный код находится в свободном доступе и может быть собран для любого процессора, в котором доступен компилятор C
  • Процессоры во встроенных устройствах и мобильных телефонах имеют по крайней мере тот же уровень или большую мощность по сравнению с исходными 386 машинами, на которых велась ранняя разработка Linux, и продолжают набирать мощность
  • он просто отлично работает только с сетью, диском или дискообразным устройством и последовательным портом
LawrenceC
источник
Ну, кто-то должен написать минимальный объем кода начальной загрузки и C-среды для целевой платформы. Да, и он должен поддерживать виртуальную память. Но в остальном это правда :)
Билли ONeal
1
@Billy Есть порты для систем nommu: uClinux, uClinux / ARM и MontaVista Linux.
Тобу
@ Тобу: Хм .. Я не понимаю, как это может быть. Вся «философия Unix» для нескольких процессов предполагает, что что-то подобное forkвозможно и forkне может быть сделано достаточно эффективно в системе без виртуальной памяти. Хотя указанные порты, вероятно, используют части ядра Linux и могут запускать некоторое программное обеспечение Linux, по большей части кажется, что API, предоставляемые этими портами, отличаются от типичных ядер Linux. (Пример: отображение памяти - для которого явно требуется виртуальная память)
Billy ONeal
linuxjournal.com/article/7814 : говорит, что uCLinux не поддерживает fork (), но есть вариант блокировки, называемый vfork (), приложения под uCLinux должны быть переписаны для использования vfork или потоков.
LawrenceC
4

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

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

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

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

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

BillThor
источник
1

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

Если переформулировать этот вопрос для вас все еще полезно, я хотел бы предложить, чтобы рыночные силы мотивировали Microsoft добавлять функции и возможности, предназначенные для новейшего и наиболее функционального оборудования, поскольку они продают больше копий операционной системы, прежде всего, когда конечные пользователи покупают новые системы. , Итак, в любой момент времени я обнаружил, что последний выпуск Windows плохо работает на старом, менее мощном оборудовании.

Простите, если это упрощает ваш вопрос.

Мох
источник
Кажется, вы говорите об ОС, а парень говорит о ядре. Ну, если вы точно не знаете, раздуто ли ядро ​​Windows.
Чепанг
@Tshepang: Если честно, вопросы задают о «ядре и / или системе Linux». Windows 7 и Windows Phone 7 имеют общее ядро? Из того, что я прочитал, можно предположить, что их ядра имеют меньше общего кода, чем ядра Ubuntu Server и Android.
RedGrittyBrick
Спасибо, но вопрос был действительно о Linux, а не о любой другой ОС. Есть много других: en.wikipedia.org/wiki/List_of_operating_systems
Джастин Этьер
Ядро NT на самом деле очень эффективно, но это огромное количество слоев, окружающих его,
LawrenceC