Foss news №90

Разработка

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

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

Разработка прикладных программ осуществляется при помощи специализированных программных интерфейсов приложений. В данном случае нет никакой необходимости в том, чтобы осуществлять корреляцию между интерфейсами, использующими приложения и теми, которые предоставляет само ядро. Может существовать абсолютно идентичный API для нескольких операционных систем, в то время как его реализация может быть отличной. К примеру, Linux и известная на сегодняшний день система FreeBSD полностью соответствуют стандарту POSIX, вследствие чего большинство приложений, написанных специально для одной операционной системы, впоследствии при необходимости можно перенести на другую.

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

Дополнительно отдельная библиотека функций языка С предоставляет также достаточно большую часть POSIX стандарта API. В частности, при помощи команды strace при необходимости можно детально отследить обращение определенной программы к ядру, если оно осуществляется при использовании системных вызовов. Именно по этой причине данная команда достаточно часто используется при возникновении ошибок, чтобы отладить их, а также найти причину их возникновения.

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

Стиот отметить, что в современных системах процессами предусматривается использование одновременно двух виртуальных ресурсов.

Разработка ядра Linux

Примерно раз в год The Linux Foundation выпускает отчет по процессу разработки ядра с данными о частоте выпусков, скорости изменений и компаниях, которые в этот раз внесли свой вклад. Например, последний отчет был выпущен в августе 2016 года и охватывает версии ядер 3.9 — 4.7.

Одно из наиболее интересных изменений — это уменьшение вклада в развитие ядра со стороны неоплачиваемых разработчиков. За этот период их доля сократилась от 14,6 до 7,7%. Это объясняется тем, что многие из этих разработчиков были наняты компаниями.

Что касается корпоративных взносов, то за этот период доля Intel составила 12,9%, Red Hat — 8%, Linaro — 4%, Samsung — 3,9%, SuSE — 3,2%, IBM — 2,7%. Но несколько лет назад история была совсем иной. В 2010 году Red Hat была на первом месте — 10.2%, за ней Intel — 8,8%, Texsa Instruments — 4,1%, Linaro — 4,1%, SuSE — 3,5%, IBM — 3,1%. Заметно выросла доля Intel

Директор отдела Intel Open Source Technology Center не раз заявлял, что ядро Linux имеет для компании очень важное, стратегическое значение. Как видим, поддержка ядра Linux выполняется многими компаниями

Также интересным есть увеличение вклада компании Samsung от 2,9 до 3,9%. На фоне других компаний вклад Red Hat снижается, но совместное участие Red Hat и Intel держится достаточно стабильным на протяжении многих лет. Начиная от низкого уровня 18,1% в 2012 и до максимума — 20,9% в 2016.

На конференции LinuxCon в 2016 году генеральный директор Red Hat, Джим Уайтхерст, говорил о том, что на ряду с техническим вкладом в ядро, они строят новую бизнес модель. Возможно, увеличение доли Intel свидетельствует о том, что они пытаются повторить то, что уже было сделано в Red Hat. В плане патчей вклад различных компаний за 2016 год таков: Red Hat — 18,4%, The Linux Foundation — 13,5%, Intel — 12,1%, Linaro — 8,7%, Google — 5,3%, Samsung — 3,5%, SuSE — 2,9%, AMD — 2,1%.

https://www.youtube.com/watch?v=lBCaJ5CP5bM?list=PLi_rypOeey5iccgFXie9OxsbI5H6rQ_cG

То, что организация The Linux Foundation находится на втором месте не удивительно, поскольку здесь работает Грег Кроа-Хартман, который занимается поддержкой стабильной ветви ядра, подсистему тестирования, а также несколько других подсистем. Этот человек был ответственен за 13,992 из 14,180 правок от The Linux Foundation.

Мотивация Кука

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

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

Кис Кук уверен, что подход к разработке Linux нужно менять полностью

Например, в ноябре 2017 г. CNews рассказывал о том, как россиянин Антон Коновалов всего за несколько месяцев выловил в коде ядра Linux, по меньшей мере, 15 багов в драйверах USB. Он подчеркнул, что такие уязвимости можно использовать для запуска произвольного кода и захвата контроля над пользовательскими системами.

В июле 2021 г. эксперты по информационной безопасности компании Qualys нашли в ядре уязвимости с зашкаливающим уровнем опасности. Они позволяют вызвать крах системы и выполнить произвольный код. И если в случае «дыр», выявленных Антоном Коноваловым их возраст не был установлен, то находкам Qualys совсем недавно исполнилось шесть и семь лет.

Более того, одну из этих уязвимостей они нашли, успешно проэксплуатировав вторую. Из-за них под угрозой оказались пользователи Debian, Ubuntu, Red Hat и целого ряда других популярных дистрибутивов Linux.

2016

Лидерство Microsoft по популярности Open Source-проектов среди разработчиков на GitHub

В сентябре 2016 года сервис для разработчиков ПО GitHub опубликовал статистику, связанную с работой портала за год. В отчете отмечается лидерство Microsoft по количеству участников в открытых проектах.

В 2016 году Microsoft заняла первое место по количеству пользователей GitHub, участвующих в Open Source-проектах компаний. У софтверного гиганта насчитывается 16 419 разработчиков-пользователей сервиса. На втором месте по этому показателю расположилась с 15 682 пользователями. Подробнее здесь.

Microsoft выпустила свой дистрибутив FreeBSD

В июне 2016 года Microsoft выпустила собственный дистрибутив открытой операционной системы FreeBSD. Таким образом, американская корпорация продолжает развивать проекты в области Open Source. Подробнее здесь.

Руководитель Oracle Linux перешел в Microsoft

В начале апреля 2016 года стало известно о переходе Вима Кокаэртса (Wim Coekaerts) из Oracle в Microsoft. Привлечением главного по Linux в Oralce производитель Windows в очередной раз показал свой растущий интерес к конкурирующей операционной системе. Подробнее здесь.

DocBook и ребята

Эти 34 шаблона XML со всей инфраструктурой обработки и есть DocBook. В отличие от простого текста, DocBook форматирование позволяет структурировать описание API, функций и получить на выходе html, pdf или man страницы, связанные между собой перекрестными ссылками.

Исходный код содержит специальные вставки — . Таких вставок в коде свыше 55 тыс.

DocBook шаблон содержит инструкции о том, как из исходников выгружать документацию.

Иллюстрация из файла .

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

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

Затем распихивает в шаблоны созданные файлы с DocBook форматированием. Для HTML вызывается скрипт , который создает перекрестные ссылки, но только для отдельного шаблона. Наконец, производит на свет документацию в заданном формате, но можно указать и альтернативную программу в .

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

Mail

Самый спорный и поэтому регулярно вызывающий споры момент — это канал коммуникации с LKC. Он безальтернативно один. Почта. Причём сообщения отправляются по классике через smtp.

Вокруг необходимости делать всё через плейнтекст в почте есть масса споров. Недавно в сети была очередная громкая статья на эту тему. Суть материала: письма — это, конечно, здорово, но пихать туда всё, включая куски кода — это вам (т.е. LKC) популярности не добавляет и даже наоборот, отпугивает новичков. С одной стороны вроде и да, если ты не можешь спокойно и структурировано изложить свои мысли в голом тексте, то в низкоуровневой разработке ловить будет особо нечего. С другой стороны, слать в письмах сорсы патчей — это даже архаизмом назвать уже сложно.

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

Но почты недостаточно. Без Git никуда.

Шаг 2. Получение необходимых для сборки пакетов

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

Выполните следующие команды для установки основных пакетов:

sudo apt-get update
sudo apt-get build-dep linux
sudo apt-get install kernel-package

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

  • config — традиционный способ конфигурирования. Программа выводит параметры конфигурации по одному, предлагая вам установить для каждого из них свое значение. Не рекоммендуется для неопытных пользователей.
  • oldconfig — файл конфигурации создаётся автоматически, основываясь на текущей конфигурации ядра. Рекомендуется для начинающих.
  • defconfig — файл конфигурации создаётся автоматически, основываясь на значениях по-умолчанию.
  • menuconfig — псевдографический интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в терминале.
  • xconfig — графический (X) интерфейс ручной конфигурации, не требует последовательного ввода значений параметров.
  • gconfig — графический (GTK+) интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в среде GNOME.
  • localmodconfig — файл конфигурации, создающийся автоматически, в который включается только то, что нужно данному конкретному устройству. При вызове данной команды большая часть ядра будет замодулирована
  • localyesconfig — файл конфигурации, похожий на предыдущий, но здесь большая часть будет включена непосредственно в ядро. Идеальный вариант для начинающих.

В случае, если вы хотите использовать config, oldconfig, defconfig, localmodconfig или localyesconfig, вам больше не нужны никакие дополнительные пакеты. В случае же с оставшимися тремя вариантами необходимо установить также дополнительные пакеты.

Для установки пакетов, необходимых для использования menuconfig выполните следующую команду:

sudo apt-get install libncurses5-dev

Для установки пакетов, необходимых для использования gconfig выполните следующую команду:

sudo apt-get install libgtk2.0-dev libglib2.0-dev libglade2-dev

Для установки пакетов, необходимых для использования xconfig выполните следующую команду:

До Ubuntu 12.04:

sudo apt-get install qt3-dev-tools libqt3-mt-dev

C Ubuntu 12.10:

sudo apt-get install libqt4-dev

Шаг 4. Конфигурация будущей сборки ядра

Перейдите в папку, куда вы распаковали ядро, выполнив команду

cd ~/linux-2.6.x.y

где 2.6.x.y — версия загруженного вами ядра.

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

  • config — традиционный способ конфигурирования. Программа выводит параметры конфигурации по одному, предлагая вам установить для каждого из них свое значение. Вызывается командой
    make config
  • oldconfig — файл конфигурации создаётся автоматически, основываясь на текущей конфигурации ядра. Рекомендуется для начинающих. Вызывается командой

    make oldconfig
  • defconfig — файл конфигурации создаётся автоматически, основываясь на значениях по-умолчанию для данной конкретной архитектуры. Вызывается командой

    make defconfig
  • menuconfig — псевдографический интерфейс ручной конфигурации, не требует последовательного ввода значений параметров. Рекомендуется для использования в терминале. Вызов:

    make menuconfig
  • gconfig и xconfig — графические конфигураторы для ручной настройки. Вызов:

    make gconfig

    и

    make xconfig

    соответственно

  • localmodconfig и localyesconfig — автоматические конфигураторы. Конфиг создается на основе вызванных в данных момент модулей и запущенного ядра. Разница между этими двумя конфигураторами в количестве модулей. В первом случае их будет не менее 50% ядра, а во-втором не больше 2 модулей. Вызов:

    make localmodconfig

    и

    make localyesconfig

    соответственно

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

2.1.1. Знакомство с printk()

Несмотря на столь красноречивое название, функция
printk() вовсе не предназначена для
вывода информации на экран, даже не смотря на то, что мы
использовали ее в своем примере именно для этой цели!
Основное назначение этой функции — дать ядру механизм
регистрации событий и предупреждений. Поэтому, каждый вызов
printk() сопровождается указанием
приоритета, в нашем примере это <1> и KERN_ALERT. Всего в ядре определено 8
различных уровней приоритета для функции printk() и каждый из них имеет свое
макроопределение, таким образом нет необходимости писать
числа, лишенные смысла (имена уровней приоритета и их
числовые значения вы найдете в файле linux/kernel.h). Если уровень приоритета не
указывается, то по-умолчанию он принимается равным DEFAULT_MESSAGE_LOGLEVEL.

Найдите время и просмотрите содержимое этого файла. Здесь
вы найдете краткое описание значения каждого из уровней. На
практике считается дурным тоном указание уровней приоритета
числовым значением, например так: <4>. Для этих целей лучше пользоваться
именами макроопределений, например: KERN_WARNING.

Кто управляет процессом?

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

Ядро имеет различные подсистемы, например, графическую, устройств USB, сетевую, планировщик и так далее. Поддержанием каждой из подсистем занимается отдельный человек — сопровождающий. Компании и разработчики отправляют свои патчи сопровождающим тех или иных подсистем.

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

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

Особенности архитектуры

Ядро Linux поддерживает многие унаследованные от UNIX особенности, такие как:

  1. многозадачность
  2. виртуальную память
  3. динамические библиотеки
  4. отложенную загрузку
  5. производительную систему управления памятью
  6. современные сетевые протоколы

На сегодняшний день Linux — монолитное ядро с поддержкой загружаемых модулей. Драйверы устройств и расширения ядра обычно запускаются в 0-м кольце защиты, с полным доступом к оборудованию. В отличие от обычных монолитных ядер, драйверы устройств легко собираются в виде модулей и загружаются или выгружаются во время работы системы, эта особенность также является унаследованной от первого предшественника — ОС Multics.
То, что архитектура Linux не является микроядерной, вызвало обширнейшие споры между Линусом Торвальдсом и Эндрю Таненбаумом в конференции.

С чего начиналось свободное ПО

С 1952 по 1955 год компания IBM начала выпускать IBM 701, первый коммерчески доступный компьютер. ЭВМ не продавали конечным потребителям, а сдавали в аренду научным институтам, военным компаниям и госпредприятиям. Машины поставлялись без операционной системы и программ. Ученые и инженеры начали писать софт сами и делились им с коллегами из других компаний, у которых были аналогичные ЭВМ.

Со временем коммерческих моделей компьютеров становилось больше, и они стали доступны обычным пользователям. Однако под каждую из этих моделей придумывали отдельное ПО. Компании-производители создавали каждый свою операционную систему: BESYS, Compatible Time-Sharing System или CP/CMS. Эти ОС начинали продавать вместе с ПК, и иногда они стоили дороже самого компьютера.

Разработчик Ричард Столлман присоединился к лаборатории искусственного интеллекта при Массачусетском технологическом институте (MIT). Он принимал участие в работе над свободным ПО, например, над EMACS — текстовым редактором для мини-компьютеров семейства PDP. Позднее редактор продали коммерческому дистрибьютору. В 1984 году Столлман решил основать проект свободного ПО под названием GNU (рекурсивный акроним от англ. GNU’s Not UNIX).

Ричард Столлман в МГУ

(Фото: Wikipedia)

В рамках этого проекта энтузиасты при­ду­мали тер­мин «сво­бод­ное ПО» и сформулировали его критерии: использование, изучение, шеринг и улучшение. Они опубликовали ма­ни­фест GNU. В 1985 году Столлман основал фонд Free Software Foundation (FSF) для развития свободного ПО за счет пожертвований. В 1989 году появилась пер­вая вер­сия ли­цен­зии GPL — General Public License («Универсальная общественная лицензия GNU»). Она должна защитить свободу всех пользователей программ, давать права на копирование, модификацию и распространение софта. Столлман добавил в лицензию понятие «авторское лево» в противовес «авторскому праву», по которому пользователи всех производных программ получают все оригинальные права создателя. Позднее появились другие лицензии, которые позволяют использовать свободное ПО, например, лицензия MIT от Массачусетского технологического института или лицензия BSD от Калифорнийского университета в Беркли.

К 1991 году разработчикам удалось создать независимую работоспособную ОС, но ей не хватало ядра. Тогда Линус Торвальдс выпустил ядро Linux с открытым кодом, а в 1992 году лицензировал его по GPL.

Линус Торвальдс

(Фото: YouTube)

В середине 1990-х годов в open source пришла первая крупная компания Netscape. Ее браузер Navigator был одним из самых популярных в мире, но с появлением Internet Explorer он стал вытесняться с рынка. В 1998 году в Netscape решили открыть исходный код своего браузера. Год спустя компании не стало, но исходный код Navigator стал основой для одного из самых популярных браузеров — Mozilla Firefox.

В 1998 году возникла организация Open Source Initiative (OSI), которая занимается популяризацией открытого кода. В том же году разработчики придумали альтернативу термину «свободное ПО». Они решили внедрить понятие open source, чтобы сменить парадигму бесплатности на доступность. Впоследствии разработчики Эрик Реймонд и Брюс Перенс написали «Определение Open Source».

В 2014 году представители фонда поддержки открытых проектов Linux Foundation заявили, что в будущем 80% стоимости технологий будет приходиться на открытый код и только 20% — на платные программы.

Долгий путь к Git

Вспомним, как все начиналось. 25-го августа 1991 г. никому неизвестный финский студент написал письмо в новостную группу comp.os.minix, в котором над свободной операционной системой и скорое ее завершение. В октябре того же года он выложил версию 0.0.2 на ftp в директории Linux, известил об этом комрадов хакеров и понеслось…

С самого начала разработка осуществлялась распределенной командой энтузиастов. Первое время Линус Торвальдс проверял каждый патч, переписывал и сам же его устанавливал. Команда росла, патчей становилось все больше, ядро росло и усложнялось. Пришлось патчи ставить на скорую руку, зачастую без всяких изменений. В этой ситуации Линус принял единственно верное решение — делегировать и доверять работу, тем у кого получается. Этот процесс хорошо иллюстрирует письмо известное как Линус не масштабируется, в котором Линус жалуется на перезагрузку перегрузку и предлагает назначить мейнтейнеров различных подсистем ядра.

внутренних трений и шероховатостейприспособились передавать патчи по электронной почте

Тем не менее к 2000 г. стало понятно, что нужна система контроля версий. Народ стал роптать, что разработка тормозится из-за механического способа работы Линуса. Это было сущей правдой, и тогда команда взяла на вооружение BitKeeper, который в то время являлся закрытым программным продуктом, предоставляемым бесплатно разработчикам открытых программ. Прагматичному Линусу это было до лампочки, но в команде были и принципиальные ребята, не глухие к голосу Ричарда Столлмана, готовому без устали гвоздить все то, что содержит хоть байт закрытого кода. Alan Cox — программист написавший первый приличный сетевой стэк для ядра, был одним из них.

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

Затем автор Самбы Tridge (Andrew Tridgell) захотел сделать то, что умел делать лучше других — осуществить обратную разработку , чего по условиям лицензии деть было нельзя ни в коем случае. Разгорелся конфликт, Линус пытался его погасить, но не преуспел в том. И тогда он взял и за один день написал . Что было дальше — всем известно: в таком деликатном и консервативном сегменте ПО как VCS, сумел всего за несколько лет опрокинуть конкурентов.

Kernel build

Несмотря на то, что процесс описан в других статьях тут и тут, я все же повторюсь.

По шагам процесс сборки ядра довольно прост, если не вдаваться в детали. Для начала ставим необходимые пакеты (использовался Debian 10):

Это без компилятора и обычного для С/С++ разработчика набора программ.
Запускаем конфигурацию:

Тут есть интересный аспект: в качестве шаблона будет браться config ядра от вашего боевого ядра, которое, скорее всего, подготовлено дистрибьютером. Для Debian 10 сборка проходит успешно, если в конфиге потереть информацию о встраиваемых в ядро сертификатах.

Перед попыткой собрать проверьте, что нужные программы уже установлены. . Чтобы собрать само ядро:

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

Если какой-то модуль не собирается, просто вырубите его в ближайшем Makefile-е (если 100% уверены, что не пытались в нём что-то улучшить). Наверняка он вам не пригодится, и тратить время на исправления смысла нет.

Теперь можно деплоить то, что получилось, на эту же систему.

Хотя, конечно, экспериментировать с ядром на той же машине, где ведётся разработка — дело рискованное.

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

На моей системе загрузчик после установки ядра автоматически обновился. Если у вас этого не произошло, то это делается это на Debian-подобных системах командой:

Update: Как верно заметил gavk, ядро давно уже умеет собирать пакеты, причём как для deb, так и для rpm.
Команда

выводит весь ассортимент. Так что команда

должна собрать пакет с ядром.

Устройство компонентов ядра ОС Linux

Ядро состоит из:

  1. Файловая система
  2. Подсистема управления процессами и памятью
  3. Подсистема ввода / вывода

Файловая подсистема

Файловая подсистема обеспечивает унифицированный интерфейс доступа к данным, расположенным на дисковых накопителях, а также к периферийным устройствам. Одни и те же функции open(), read(), write() могут использоваться как при чтении или записи данных на диск, так и при выводе текста на принтер или в терминал.
Файловая подсистема контролирует права доступа к файлу, выполняет операции размещения и удаления файла. Поскольку большинство прикладных функций выполняется через интерфейс файловой системы, права доступа к файлам определяют привилегии пользователя в системе.
Файловая подсистема обеспечивает маршрутизацию запросов периферийным устройствам, соответствующим модулям подсистемы ввода/вывода.

Подсистема управления запросами

Запущенная на выполнение программа порождает в системе один или более процессов ( задач ). Подсистема управления процессами контролирует:

  1. Создание и удаление процессов
  2. Распределение системных ресурсов ( памяти, вычислительных ресурсов ) между процессами
  3. Синхронизацию процессов
  4. Межпроцессорное взаимодействие

Известно, что в общем случае число активных процессоров превышает число процессоров компьютера, но в каждый конкретный момент времени на каждом процессоре может выполняться только один процесс. Операционная система управляет доступом процессоров к вычислительным ресурсам, создавая ощущение одновременного выполнения нескольких задач.
Специальная задача ядра, называемая распорядителем или планировщиком процессов, разрешает конфликты между процессами в конкуренции за системные ресурсы ( процессор, память, периферийные устройства ). Планировщик запускает процесс на выполнение, следя за тем, чтобы процесс монопольно не захватил разделяемые системные ресурсы. Процесс освобождает процессор, ожидая длительной операции ввода/вывода, или по прошествии периода времени. В этом случае планировщик выбирает следующий процесс с наивысшим приоритетом и запускает его на выполнение.
Модуль управления памятью обеспечивает размещение оперативной памяти для прикладных задач. Оперативная память является дорогостоящим ресурсом, и, как правило, она редко «простаивает». В случае, если для всех процессов недостаточно памяти, ядро перемещает части процесса или несколько процессов во вторичную память ( как правило, для этого выделена некоторая область жесткого диска ), освобождая ресурсы для действующих процессов. Все современные системы реализуют виртуальную память: процесс выполняется в собственном логическом адресном пространстве, которое может значительно превышать доступную физическую память. Управление виртуальной памятью процесса также входит в перечень задач модуля управления памятью.
Модуль межпроцессного взаимодействия.отвечает за уведомление процессов о событиях с помощью сигналов и обеспечивает возможность передачи данных между различными процессами.

Подсистема ввода/вывода

Подсистема ввода/вывода выполняет запросы файловой подсистемы и подсистемы управления процессами для доступа к периферийным устройствам ( дискам, терминалам, а ранее и к магнитным лентам и др. ). Она обеспечивает необходимую буферизацию данных и взаимодействует с драйверами устройств — специальными модулями ядра, непосредственно обслуживающими внешние устройства.

Предостережение

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

Помимо безопасности вы с его помощью сможете добиться единой конфигурации всех компьютеров, которые были задействованы в данной процедуре. Рекомендуется использовать в качестве такого дистрибутива Slackware Linux, так как в нем применяются немодифицированные программные компоненты. Виртуальной машиной может выступать VMware или же QEMU, но это не обязательно.

Установка ядра Linux занимает приблизительно 20 минут, при этом стоит отметить, что сборка ядра, которое собирается по стандартной конфигурации, может осуществляться без создания RAM-диска, так как в данном случае отсутствует создание каких-либо важных загрузочных драйверов.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Ваша ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: