сколько строк кода в ядре linux
Что такое ядро Linux
Ядро Linux содержит более 13 миллионов строк кода и является одним из самых крупных проектов с открытым исходным кодом в мире. Так что такое ядро Linux и для чего оно используется?
Что такое ядро Linux?
Виды и версии ядра
Что такое ядро Linux вы уже знаете, но какие вообще бывают виды ядер? Есть различные способы и архитектурные соображения при создании ядер с нуля. Большинство ядер могут быть одного из трех типов: монолитное ядро, микроядро, и гибрид. Ядро Linux представляет собой монолитное ядро, в то время как ядра Windows и OS X гибридные. Давайте сделаем обзор этих трех видов ядер.
Микроядро
Микроядра реализуют подход, в котором они управляют только тем, чем должны: процессором, памятью и IPC. Практически все остальное в компьютере рассматривается как аксессуары и обрабатывается в режиме пользователя. Микроядра имеют преимущество в переносимости, они могут использоваться на другом оборудовании, и даже другой операционной системе, до тех пор, пока ОС пытается получить доступ к аппаратному обеспечению совместимым образом.
Микроядра также имеют очень маленький размер и более безопасны, поскольку большинство процессов выполняются в режиме пользователя с минимальными привилегиями.
Плюсы
Минусы
Монолитное ядро
Монолитные ядра противоположны микроядрам, потому что они охватывают не только процессор, память и IPC, но и включают в себя такие вещи, как драйверы устройств, управление файловой системой, систему ввода-вывода. Монолитные ядра дают лучший доступ к оборудованию и реализуют лучшую многозадачность, потому что если программе нужно получить информацию из памяти или другого процесса, ей не придется ждать в очереди. Но это и может вызвать некоторые проблемы, потому что много вещей выполняются в режиме суперпользователя. И это может принести вред системе при неправильном поведении.
Плюсы:
Минусы:
Гибридное ядро
Гибридные ядра могут выбирать с чем нужно работать в пользовательском режиме, а что в пространстве ядра. Часто драйвера устройств и файловых систем находятся в пользовательском пространстве, а IPC и системные вызовы в пространстве ядра. Это решение берет все лучшее из обоих предыдущих, но требует больше работы от производителей оборудования. Поскольку вся ответственность за драйвера теперь лежит на них.
Плюсы
Минусы
Где хранятся файлы ядра?
Когда для облегчения многозадачности была разработана виртуальная память, перед именем файла появились буквы vm, чтобы показать что ядро поддерживает эту технологию. Некоторое время ядро называлось vmlinux, но потом образ перестал помещаться в память начальной загрузки, и был сжат. После этого последняя буква x была изменена на z, чтобы показать что использовалось сжатие zlib. Не всегда используется именно это сжатие, иногда можно встретить LZMA или BZIP2, поэтому некоторые ядра называют просто zImage.
Нумерация версии состоит из трех цифр, номер версии ядра Linux, номер вашей версии и патчи или исправления.
В паке /boot можно найти не только ядро Linux, такие файлы, как initrd.img и system.map. Initrd используется в качестве небольшого виртуального диска, который извлекает и выполняет фактический файл ядра. Файл System.map используется для управления памятью, пока еще ядро не загрузилось, а конфигурационные файлы могут указывать какие модули ядра включены в образ ядра при сборке.
Архитектура ядра Linux
Так как ядро Linux имеет монолитную структуру, оно занимает больше и намного сложнее других типов ядер. Эта конструктивная особенность привлекла много споров в первые дни Linux и до сих пор несет некоторые конструктивные недостатки присущие монолитным ядрам.
Представьте себе возможность установить пакет обновлений Windows без необходимости постоянных перезагрузок.
Модули ядра
Что, если бы Windows уже имела все нужные драйвера по умолчанию, а вы лишь могли включить те, которые вам нужны? Именно такой принцип реализуют модули ядра Linux. Модули ядра также известные как загружаемые модули (LKM), имеют важное значение для поддержки функционирования ядра со всеми аппаратными средствами, не расходуя всю оперативную память.
Теперь вы ближе к ответу на вопрос что такое ядро Linux. Ядро не магия. Оно очень необходимо для работы любого компьютера. Ядро Linux отличается от OS X и Windows, поскольку оно включает в себя все драйверы и делает много вещей поддерживаемых из коробки. Теперь вы знаете немного больше о том, как работает ваше программное обеспечение и какие файлы для этого используются.
Почему ядро Linux содержит более 15 миллионов строк кода?
Каково содержание этой монолитной кодовой базы?
Я понимаю поддержку архитектуры процессора, безопасность и виртуализацию, но я не могу себе представить, что это более 600 000 строк.
Каковы исторические и текущие причины драйверов включены в базу кода ядра?
Включают ли эти 15+ миллионов строк каждый драйвер для каждого оборудования? Если это так, то возникает вопрос, почему драйверы встроены в ядро, а не отдельные пакеты, которые автоматически обнаружены и установлены с идентификаторов оборудования?
Является ли размер базы кода проблемой для устройств с ограничением памяти или с ограничением памяти?
Кажется, он раздувал бы размер ядра для устройств ARM с ограниченным пространством, если бы все это было встроено. Есть много строк, выделенных препроцессором? Назовите меня сумасшедшим, но я не могу представить себе, что машина нуждается в такой логике для запуска того, что я понимаю, это роли ядра.
Есть ли доказательства того, что размер будет проблемой в 50+ лет из-за его, казалось бы, постоянно растущего характера?
Включение драйверов означает, что он будет расти по мере создания оборудования.
EDIT : для тех, кто думает, что это природа ядер, после некоторых исследований я понял, что это не всегда. Ядро не обязано быть таким большим, поскольку микроядро Карнеги Меллона «Мах» было приведено в качестве примера «обычно менее 10 000 строк кода»,
Драйверы поддерживаются в ядре, поэтому, когда изменение ядра требует глобального поиска и замены (или поиска и изменения вручную) для всех пользователей функции, это делается лицом, внесшим изменения. Наличие вашего драйвера, обновленного людьми, делающими изменения API, является очень приятным преимуществом, вместо того, чтобы делать это самостоятельно, когда он не компилируется на более новом ядре.
Альтернатива (что происходит для драйверов, поддерживаемых вне дерева), заключается в том, что патч должен синхронизироваться со стороны своих поддерживающих устройств, чтобы не отставать от любых изменений.
То, как Linux поддерживается, в основном, сохраняя все в репозитории mainline. Построение небольших усеченных ядер поддерживается опциями конфигурации для управления #ifdef s. Таким образом, вы можете полностью построить крошечные усеченные ядра, которые составляют только крошечную часть кода во всем репо.
Широкое использование Linux во встроенных системах привело к лучшей поддержке для выхода из системы, чем Linux, чем раньше, когда исходное дерево ядра было меньше. Супер-минимальное ядро 4.0, вероятно, меньше, чем супер-минимальное ядро 2.4.0.
Согласно cloc, против 3.13, Linux составляет около 12 миллионов строк кода.
lsmod | wc lsmod | wc на моем ноутбуке Debian показывает 158 модулей, загружаемых во время выполнения, поэтому динамически загружающие модули – это хорошо используемый способ поддержки аппаратного обеспечения.
Любому любопытно, вот вот разбивка линейного графика для зеркала GitHub:
drivers вносят большой вклад в линейную линейку.
Ответы пока кажутся «да, есть много кода», и никто не решает вопрос самым логичным ответом: 15M +? И ЧТО? Что означает 15M строк исходного кода для цены на рыбу? Что делает это настолько невообразимым?
Linux явно делает много. Больше всего на свете … Но некоторые из ваших моментов показывают, что вы не уважаете, что происходит, когда оно построено и используется.
И это дистрибутив настольных компьютеров с переменным целевым назначением. Конфигурация встроенной системы будет только тянуть то, что ей нужно.
Не все встроено. В моей конфигурации большинство функций Kernel построены как модули:
Чтобы быть ясными, все они могли быть встроены … Так же, как их можно было распечатать и превратить в гигантский бумажный бутерброд. Это просто не имело бы смысла, если бы вы не делали пользовательскую сборку для дискретного аппаратного задания (в этом случае вы бы уже ограничили количество этих элементов).
Модули динамически загружаются. Даже когда система имеет тысячи доступных ей модулей, система позволит вам загружать только то, что вам нужно. Сравните результаты:
Почти ничего не загружено.
Микроядра – это не одно и то же. Всего за 10 секунд, глядя на ведущее изображение на страницу Википедии, которую вы связали, будет подчеркнуто, что они разработаны совершенно по-другому.
Драйверы Linux интернализируются (в основном как модули с динамической загрузкой), а не в пользовательском пространстве, а файловые системы аналогичны внутренним. Почему это хуже, чем использование внешних драйверов? Почему микро-лучше для вычислений общего назначения?
Для таких дистрибутивов, как Ubuntu, допустим один пакет ядра размером 40 МБ. Нет, скраб, что на самом деле предпочтительнее массивный сценарий архивирования и загрузки, который поддерживает 4000 + плавающих модулей в качестве пакетов. Он использует меньше дискового пространства для них, легче упаковывается во время компиляции, проще хранить и лучше для своих пользователей (у которых есть система, которая просто работает).
Будущее также не является проблемой. Скорость процессора, плотность диска / цены и улучшения полосы пропускания намного быстрее, чем рост ядра. Пакет ядра размером 200 МБ через 10 лет не был бы концом, если бы мир.
Это тоже не односторонняя улица. Код вызывается, если он не поддерживается.
tinyconfig bubble graph svg (скрипка)
сценарий оболочки для создания json из сборки ядра, используйте с http://bl.ocks.org/mbostock/4063269
сценарий и процедура обновлены.
Помимо драйверов, арки и т. Д. Существует много условного кода, скомпилированного или не зависящего от выбранной конфигурации, код необязательно в динамически загруженных модулях, но встроенный в ядро.
.c код
.h заголовки (дезинфицированные)
Компромиссы монолитных ядер обсуждались между Тананбаумом и Торвальдсом публично с самого начала. Если вам не нужно переходить в пространство пользователей для всего, тогда интерфейс к ядру может быть проще. Если ядро монолитно, то оно может быть более оптимизировано (и более грязно!) Внутри.
У нас были модули как компромисс довольно долгое время. И это продолжается с такими вещами, как DPDK (перемещение большего количества сетевых функций из ядра). Чем больше ядер добавляется, тем важнее избегать блокировки; поэтому больше вещей переместится в пространство пользователей, и ядро будет сокращаться.
Обратите внимание, что монолитные ядра не являются единственным решением. На некоторых архитектурах граница ядра / пользовательского пространства не дороже любого другого вызова функции, что делает микроядро привлекательным.
Почему в ядре Linux более 15 миллионов строк кода? [закрыто]
Каково содержание этой монолитной кодовой базы?
Я понимаю поддержку архитектуры процессора, безопасность и виртуализацию, но не могу представить, что это более 600 000 строк или около того.
Какие исторические и текущие причины драйверы включены в базу кода ядра?
Включают ли эти 15 с лишним миллионов строк каждый драйвер для каждого компонента оборудования? Если это так, то возникает вопрос, почему драйверы встроены в ядро, а не в отдельные пакеты, которые автоматически определяются и устанавливаются из идентификаторов оборудования?
Является ли размер базы кода проблемой для устройств с ограниченным хранилищем или памятью?
Кажется, это увеличило бы размер ядра для устройств ARM с ограниченным пространством, если бы все это было встроено. Много ли строк отбраковано препроцессором? Назовите меня сумасшедшим, но я не могу представить себе машину, требующую столько логики для запуска, как я понимаю, роли ядра.
Есть ли доказательства того, что размер будет проблемой через 50 с лишним лет из-за его, казалось бы, постоянно растущей природы?
Включение драйверов означает, что оно будет расти по мере изготовления оборудования.
РЕДАКТИРОВАТЬ : Для тех, кто думает, что это природа ядер, после некоторых исследований я понял, что это не всегда. Ядро не обязательно должно быть таким большим, так как микроядро Карнеги-Меллона было приведено в качестве примера «обычно под 10000 строк кода».
Драйверы поддерживаются в ядре, поэтому, когда изменение ядра требует глобального поиска и замены (или поиска и изменения вручную) для всех пользователей функции, это делает человек, который вносит изменения. Обновление вашего драйвера людьми, вносящими изменения в API, является очень хорошим преимуществом, вместо того, чтобы делать это самостоятельно, когда он не компилируется в более новом ядре.
Альтернатива (то, что происходит с драйверами, поддерживаемыми вне дерева), заключается в том, что патч должен быть повторно синхронизирован его сопровождающими, чтобы не отставать от любых изменений.
Поддержание Linux в основном заключается в сохранении всего в основном репо. Сборка небольших урезанных ядер поддерживается параметрами конфигурации для управления #ifdef s. Таким образом, вы можете создавать крошечные урезанные ядра, которые компилируют только крошечную часть кода во всем репо.
Широкое использование Linux во встраиваемых системах привело к лучшей поддержке отказа от вещей, чем Linux имел годы назад, когда дерево исходных текстов ядра было меньше. Супер-минимальное ядро 4.0, вероятно, меньше супер-минимального ядра 2.4.0.
Согласно Cloc, работающему против 3.13, Linux содержит около 12 миллионов строк кода.
Для любого любопытного, вот разбивка строки счета для зеркала GitHub:
drivers вносит большой вклад в количество строк.
Пока что ответы кажутся «да, кода много», и никто не решает вопрос с наиболее логичным ответом: 15M +? И ЧТО? Какое отношение имеет 15 миллионов строк исходного кода к цене рыбы? Что делает это таким невообразимым?
И это настольный дистрибутив с переменной целью. Конфигурация для встроенной системы будет включать только то, что ей нужно.
Не все встроено. В моей конфигурации большинство функций ядра построены в виде модулей:
Модули загружаются динамически. Даже когда в системе есть тысячи доступных ей модулей, система позволит вам загружать именно то, что вам нужно. Сравните результаты:
Почти ничего не загружается.
Драйверы Linux являются внутренними (в основном динамически загружаемыми модулями), а не пользовательским пространством, и файловые системы также являются внутренними. Почему это хуже, чем использование внешних драйверов? Почему микро лучше для вычислений общего назначения?
Для таких дистрибутивов, как Ubuntu, допустим один пакет ядра размером 40 МБ. Нет, откажитесь от этого, на самом деле, это предпочтительнее сценария массового архивирования и загрузки, в котором хранится более 4000 плавающих модулей в виде пакетов. Он использует меньше дискового пространства для них, легче упаковывать во время компиляции, легче хранить и лучше для своих пользователей (у которых есть система, которая просто работает).
Будущее тоже не проблема. Скорость процессора, плотность диска / цены и пропускная способность кажутся намного быстрее, чем рост ядра. Пакет Kernel 200 МБ за 10 лет не станет концом для мира.
Это также не улица с односторонним движением. Код выгоняется, если он не поддерживается.
Количество строк кода в ядре Linux превысило 10 миллионов
Простой анализ последней версии ядра Linux показывает, что число строк кода достигло 10 миллионов (считая и комментарии, и пустые строки). При детальном анализе становится видно, что реальное количество строк кода (без комментариев и пустых строк) составляет 6399191. Это число растет с каждой новой версией ядра.
Re: Re^2: Количество строк в ядре Linux превысило 10 миллионов
Открой для себя интсталлер РедХата, где твое виндузятничество с подсовываением дискеток реализовано в полную силу силами девелоперов железа, которые сертифицируются на RH.
Re: Количество строк кода в ядре Linux превысило 10 миллионов
Re: Количество строк в ядре Linux превысило 10 миллионов
Это вы зря батенька. По многочисленным признакам, при написании ядра помер не один конь в расцвете, так сказать, качеств доступных для извращенцев.
Re: Количество строк в ядре Linux превысило 10 миллионов
Разница большая, по статистике в среднем в коде профессионального кодера идет 1 ошибка на 50000 строк, считаем и получаем 200 ошибок, что говорит о том что линуха только из-за своего ядра не будет так стабильна как те же bsd системы.
Re: Количество строк в ядре Linux превысило 10 миллионов
Такой метод гномерам был бы в самый раз, ибо на C пишут. А кдешникам надо так: заведём 10 классов, забудем про них.
Re: Количество строк кода в ядре Linux превысило 10 миллионов
Простой анализ LOR показывает, что число строк сообщений на ресурсе достигло 10 млн. При детальном анализе становится видно, что реальное количество полезной информации (без комментариев и пустых слов) составляет 6399 строк. Соотношение общего числа строк к полезной информации растет с каждой новой новостью.
//Метки: рост энтропии во вселенной.
Re: Количество строк кода в ядре Linux превысило 10 миллионов
И это надо отпраздновать.
Re: Количество строк в ядре Linux превысило 10 миллионов
>Согласен брат. НО. тащить в ядре всевозможные драйвера, и еще хз что, тоже не лучший выход. этак к 2010 глду ты качнешь 1GB linux-src.tar.gz
Да уж. Страшен будет Linux, если его-таки начнут поддерживать производители жеклеза. 😉
Re: Количество строк в ядре Linux превысило 10 миллионов
1 на 50000? Не маловато ли? o_O
Re: Количество строк в ядре Linux превысило 10 миллионов
>1 на 50000? Не маловато ли? o_O
Re: Количество строк кода в ядре Linux превысило 10 миллионов
>все христиане должны немедленно удалить ЭТО!
А ты значит Ъ христианин?
Это каббала, и это никаким местом не имеет оношения к христианству http://ru.wikipedia.org/wiki/Каббала
Нпоминаю тебе Ъ христианин, завтра у тебя шаббат.
Re: Re^2: Количество строк в ядре Linux превысило 10 миллионов
> А ядро Linux ты тоже каждый раз тянешь? Нет? А что так? Представим такую ситуацию сгорела у тебя сетевая купил ты новую, опа а на старом ядре нет дров! И что? Качаем новое ядро? Так не проще будет скачать десяток килобайт драйвера чем 50м ядра?
Смешной мальчик, ты давно разучился читать прайсы и HCL’ы, а также думать головой? 🙂
Re: Количество строк в ядре Linux превысило 10 миллионов
> Такой метод гномерам был бы в самый раз, ибо на C пишут. А кдешникам надо так: заведём 10 классов, забудем про них.
Это не энтерпрайзно, не хватает Жабы и векторных иконок.
Re: Количество строк в ядре Linux превысило 10 миллионов
Re: Количество строк в ядре Linux превысило 10 миллионов
0) Мы о программистах или о быдлокодерах? 🙂 1) Он работает не один => есть шанс, что ошибку заметит второй. 2) Есть отладка и тест, где опять же многие ошибки будут найдены, еще до релиза.
Re: Количество строк кода в ядре Linux превысило 10 миллионов
> 63*9+91+9-1=666 > все христиане должны немедленно удалить ЭТО!
Re: Количество строк в ядре Linux превысило 10 миллионов
Это они на будущее резервируют 🙂
Re: Re^2: Количество строк в ядре Linux превысило 10 миллионов
А заплатки уже отменили?
Re: Количество строк кода в ядре Linux превысило 10 миллионов
Re: Количество строк кода в ядре Linux превысило 10 миллионов
А сколько там буков? А запятых?
Re: Количество строк кода в ядре Linux превысило 10 миллионов
интересно, а сколько строк кода в ядре FreeBSD? кто-то подскажет?
Re: Количество строк в ядре Linux превысило 10 миллионов
Re: Количество строк в ядре Linux превысило 10 миллионов
> у меня в голове не укладывалось, как человек (группа людей) может написать 1 млн букв и ошибиться всего 1 раз 🙂
Может. Писать нужно на асме, тогда получится быстро, без ошибок и высокомодульно, без всяких галимых тормозных извратов типа с++.
Re^2: Количество строк кода в ядре Linux превысило 10 миллионов
> Это каббала, и это никаким местом не имеет оношения к христианству
> http://ru.wikipedia.org/wiki/%D0%9A%D0%B0%D0%B1%D0%B1%D0%B0%D0%BB%D0%B0
> Нпоминаю тебе Ъ христианин, завтра у тебя шаббат.
почитай уже в вики, чем евреи от иудеев отличаются
Re^2: Количество строк кода в ядре Linux превысило 10 миллионов
> а ещё можно 639+9+19-1
мощно. явно неспроста. и на телефон 7значный похоже
Re: Re^2: Количество строк в ядре Linux превысило 10 миллионов
>Гораздо удобнее, чем каждый раз при установке тянуть каждый драйвер из тырнета.
А исходники ядра вы через астрал вытягиваете, да? =)
>Да и драйвер на сетевуху тоже нужен, как его буду тянуть без тырнета? 🙂
Исходники ядра откуда брали? Вот оттуда и драйвер берите.. А если ваш дистростроитель не положил на диск нужные дрова, то это проблемы исключительно вашего дистростроителя.
Re: Re^2: Количество строк кода в ядре Linux превысило 10 миллионов
Re^4: Количество строк кода в ядре Linux превысило 10 миллионов
на твоём лоре нет логинов? и ты всех так опрашиваешь?
Re^2: Количество строк кода в ядре Linux превысило 10 миллионов
можно ли считать стабильно зафиксированным дедушку Ленина, если там постоянно происходят движения наноорганизмов и прочие движения в поддержку Броуна?
Re: А если перписать
а то у тебя какой то кот чеширский получился
Re: Количество строк в ядре Linux превысило 10 миллионов
о сколько нам открытий чудных готовит красноглазья дух
это во многих софтинах. в mplayer к примеру
Re: Количество строк в ядре Linux превысило 10 миллионов
>что говорит о том что линуха только из-за своего ядра не будет так стабильна как те же bsd системы
идиот. что мне до ошибок в коде тв-тюнеров, звуковух и вебкамер на роутере?
неудачно тролишь. тренируйся. у убогого изеня (izen) и то лучше получается
Re: Количество строк кода в ядре Linux превысило 10 миллионов
Скомпилить чтоли ВСЁ что можно в монолит 🙂 посмотреть сколько мегабайт будет.
Re: Количество строк кода в ядре Linux превысило 10 миллионов
>А ещё давайте посчитаем кол-во строк в кедах и в гноме и в других де, надо ж как-то время убивать, ну не разрабатывать же в самом деле это долбанное ядро
И получится, что количесво строк кода в Linux больше чем в Windows.
Re: Количество строк кода в ядре Linux превысило 10 миллионов
Re: Количество строк кода в ядре Linux превысило 10 миллионов
Что будет вполне разумно, логично и правильно.
Re: Re^2: Количество строк в ядре Linux превысило 10 миллионов
>А ядро Linux ты тоже каждый раз тянешь? Нет? А что так? Представим такую ситуацию сгорела у тебя сетевая купил ты новую, опа а на старом ядре нет дров! И что? Качаем новое ядро? Так не проще будет скачать десяток килобайт драйвера чем 50м ядра?
А кто сказал, что ты этого не можешь сделать? Просто в ядре почти все и так есть. Если чего нет, то можешь скачать драйвер из инета и скомпилить его под свое ядро. И никакх проблем.
Re: Re^2: Количество строк в ядре Linux превысило 10 миллионов
10 миллионов строк говнокода. Это надоже.
Лучшеб оптимизацией занимались.