DragonFly BSD

редактировать
Операционная система

DragonFly BSD
DragonFly BSD Logo.svg
DragonFly BSD 4.2.3 bootloader screenshot.png Загрузчик DragonFly BSD 4.2.3
Разработчик Мэтью Диллон
Семейство ОСUnix-like
Рабочее состояниеТекущая
Исходная модельОткрытый исходный код
Первоначальный выпуск1.0 / 12 июля 2004 г.; 16 лет назад (2004-07-12)
Последний выпуск 5.8.3 / 24 сентября 2020 г.; 22 дня назад (2020-09-24)
Репозиторий Отредактируйте это в Wikidata
Доступен на английском
Диспетчер пакетов pkg
Платформыx86-64
Kernel typeHybrid
Userland BSD
Default пользовательский интерфейс Unix shell
Лицензия BSD
Официальный сайтwww.dragonflybsd.org

DragonFly BSD является бесплатным и открытым исходным кодом Unix-подобная операционная система разветвлена ​​ из FreeBSD 4.8. Мэтью Диллон, разработчик Amiga в конце 1980-х - начале 1990-х и разработчик FreeBSD в период с 1994 по 2003 год, начал работать над DragonFly BSD в июне 2003 года и объявил об этом в списках рассылки FreeBSD на 16 июля 2003 г.

Диллон основал DragonFly, полагая, что методы, принятые для многопоточности и симметричной многопроцессорной обработки во FreeBSD 5, приведут к снижению производительности и проблемам с обслуживанием. Он стремился исправить эти ожидаемые проблемы в рамках проекта FreeBSD. Из-за конфликтов с другими разработчиками FreeBSD по поводу реализации его идей, его способность напрямую изменять кодовую базу была в конечном итоге лишена. Несмотря на это, проекты DragonFly BSD и FreeBSD по-прежнему работают вместе, делясь исправлениями ошибок, обновлениями драйверов и другими улучшениями.

Задуманный как логическое продолжение серии FreeBSD 4.x, DragonFly значительно отличается от FreeBSD, реализовав облегченные потоки ядра (LWKT), передачу сообщений внутри ядра и файловая система HAMMER . AmigaOS.

Содержание
  • 1 Дизайн системы
    • 1.1 Ядро
      • 1.1.1 Потоки
      • 1.1.2 Защита общих ресурсов
      • 1.1.3 Виртуальное ядро ​​
    • 1.2 Управление пакетами
    • 1.3 Поддержка CARP
    • 1.4 Файловые системы HAMMER
    • 1.5 devfs
    • 1.6 Моментальные снимки приложений
  • 2 Разработка и распространение
    • 2.1 Носители распространения
    • 2.2 История выпусков
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки
Дизайн системы

Ядро

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

По словам разработчика Мэтью Диллона, ведется работа по обеспечению возможностей обмена сообщениями как устройства ввода / вывода (I / O), так и виртуальной файловой системы (VFS), которые позволят достичь оставшихся целей проекта. Новая инфраструктура позволит перенести многие части ядра в пользовательское пространство; здесь их будет легче отлаживать, поскольку они будут меньшими по размеру изолированными программами, а не маленькими частями, вплетенными в большой кусок кода. Кроме того, перенос выбранного кода ядра в пользовательское пространство дает преимущество в повышении надежности системы; если произойдет сбой драйвера пользовательского пространства, это не приведет к сбою ядра.

Системные вызовы разделяются на версии пользовательского пространства и ядра и инкапсулируются в сообщения. Это поможет уменьшить размер и сложность ядра за счет перемещения вариантов стандартных системных вызовов на уровень совместимости пользователя и поможет поддерживать прямую и обратную совместимость между версиями DragonFly. Linux и другие Unix-подобные коды совместимости с ОС переносятся аналогичным образом.

Threading

Как поддержка нескольких архитектур наборов инструкций усложняет поддержку симметричной многопроцессорной обработки (SMP), теперь DragonFly BSD поддерживает только платформу x86-64. Изначально DragonFly работал на архитектуре x86, однако с версии 4.0 она больше не поддерживается. Начиная с версии 1.10, DragonFly поддерживает потоки пользовательской среды 1: 1 (один поток ядра на поток пользовательской среды), что считается относительно простым решением, которое также легко поддерживать. Унаследованный от FreeBSD, DragonFly также поддерживает многопоточность.

В DragonFly каждый CPU имеет свой собственный планировщик потоков. После создания потоки назначаются процессорам и никогда не переключаются с одного процессора на другой заранее; они переносятся только путем передачи сообщения межпроцессорного прерывания (IPI) между задействованными ЦП. Планирование межпроцессорных потоков также выполняется путем отправки асинхронных сообщений IPI. Одним из преимуществ такого чистого разделения подсистемы потоковой обработки является то, что встроенные кэши процессоров в симметричных многопроцессорных системах не содержат дублированных данных, что обеспечивает более высокую производительность, предоставляя каждому процессору в система может использовать свой собственный кеш для хранения различных вещей, над которыми можно работать.

Подсистема LWKT используется для разделения работы между несколькими потоками ядра (например, в сетевом коде там - один поток на протокол на процессор), что снижает конкуренцию за счет устранения необходимости разделять определенные ресурсы между различными задачами ядра.

Защита общих ресурсов

Для безопасной работы на многопроцессорных машинах доступ к общие ресурсы (например, файлы, структуры данных) должны быть сериализованы, чтобы потоки или процессы не пытались одновременно изменять один и тот же ресурс. Чтобы предотвратить одновременный доступ или изменение общего ресурса несколькими потоками, DragonFly использует критические секции и сериализует токены для предотвращения одновременного доступа. Хотя и Linux, и FreeBSD 5 используют детализированные модели мьютекса для достижения более высокой производительности в многопроцессорных системах, DragonFly этого не делает. До недавнего времени DragonFly также использовал spls, но они были заменены критическими секциями.

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

Сериализационные токены используются для предотвращения одновременного доступа с других ЦП и могут удерживаться одновременно несколько потоков, гарантируя, что только один из этих потоков работает в любой момент времени. Таким образом, заблокированные или спящие потоки не препятствуют доступу других потоков к общему ресурсу, в отличие от потока, который удерживает мьютекс. Среди прочего, использование токенов сериализации предотвращает многие ситуации, которые могут привести к взаимоблокировкам и инверсии приоритета при использовании мьютексов, а также значительно упрощает разработку и реализацию многих -шаговая процедура, которая требует, чтобы ресурс разделялся между несколькими потоками. Код сериализуемого токена развивается во что-то очень похожее на функцию «Чтение-копирование-обновление », теперь доступную в Linux. В отличие от текущей реализации RCU в Linux, DragonFly реализуется таким образом, что затрагиваются только процессоры, конкурирующие за один и тот же токен, а не все процессоры в компьютере.

DragonFly перешел на многопроцессорный безопасный распределитель блоков, который не требует ни мьютексов, ни блокирующих операций для задач выделения памяти. В конечном итоге он был перенесен в стандартную библиотеку C в пользовательском пространстве, где заменил реализацию malloc FreeBSD.

Виртуальное ядро ​​

Начиная с версии 1.8 DragonFly имеет механизм виртуализации, аналогичный Linux в пользовательском режиме., позволяя пользователю запускать другое ядро ​​в пользовательской среде. Виртуальное ядро ​​(vkernel) работает в полностью изолированной среде с эмулированными сетевыми интерфейсами и интерфейсами хранения, что упрощает тестирование подсистем ядра и функций кластеризации.

vkernel имеет два важных отличия от реального ядра: в нем отсутствует множество процедур для имеет дело с низкоуровневым управлением оборудованием и использует функции стандартной библиотеки C (libc) вместо встроенных в ядро ​​реализаций везде, где это возможно. Поскольку как реальное, так и виртуальное ядро ​​скомпилированы из одной и той же базы кода, это фактически означает, что платформенно-зависимые процедуры и повторные реализации функций libc четко разделены в дереве исходных текстов.

vkernel работает поверх оборудования. абстракции, предоставляемые настоящим ядром. К ним относятся таймер на основе kqueue, консоль (сопоставленная с виртуальным терминалом , на котором выполняется vkernel), образ диска и виртуальное ядро ​​Ethernet-устройство (VKE), туннелирующие все пакеты на tap интерфейса хоста.

Управление пакетами

Стороннее программное обеспечение доступно на DragonFly в виде двоичных пакетов через pkgngили из собственного Коллекция портов - DPorts.

DragonFly изначально использовал коллекцию FreeBSD Ports в качестве официальной системы управления пакетами, но, начиная с версии 1.4, переключился на NetBSD pkgsrc, которая воспринималась как способ уменьшения объема работы, необходимой для доступности стороннего программного обеспечения. В конце концов, поддержание совместимости с pkgsrcпотребовало больше усилий, чем предполагалось изначально, поэтому в проекте был создан DPorts, наложение поверх коллекции FreeBSD Ports.

Поддержка CARP

Первоначальная реализация Common Address Redundancy Protocol (обычно называемого CARP) была завершена в марте 2007 года. С 2011 года поддержка CARP интегрирована в DragonFly BSD.

Файловые системы HAMMER

Наряду с файловой системой Unix, которая обычно является файловой системой по умолчанию для BSD, DragonFly BSD поддерживает HAMMER и HAMMER2 файловые системы. HAMMER2 - файловая система по умолчанию, начиная с версии 5.2.0.

HAMMER был разработан специально для DragonFly BSD, чтобы предоставить многофункциональный, но лучше спроектированный аналог все более популярного ZFS. HAMMER поддерживает настраиваемую историю файловой системы, снимки, контрольную сумму, дедупликацию данных и другие функции, типичные для файловых систем такого типа.

HAMMER2, преемник файловой системы HAMMER, теперь считается стабильным, используется по умолчанию и находится в центре внимания дальнейшего развития. Планы по его развитию были первоначально обнародованы в 2012 году. В 2017 году Диллон объявил, что следующая версия DragonFly BSD (5.0.0) будет включать полезную, но все еще экспериментальную версию HAMMER2, и описал особенности конструкции. В выпуске после 5.0.0, версия 5.2.0, HAMMER2 стала новой файловой системой по умолчанию.

devfs

В 2007 году DragonFly BSD получила новую файловую систему устройства (devfs), которая динамически добавляет и удаляет узлы устройств, позволяет получать доступ к устройствам по путям подключения, распознает диски по серийным номерам и устраняет необходимость в предварительно заполненной иерархии файловой системы / dev. Он был реализован как проект Google Summer of Code 2009.

Снимки состояния приложений

DragonFly BSD поддерживает функцию резидентных приложений в стиле Amiga : требуется моментальный снимок пространства виртуальной памяти большой динамически связанной программы после загрузки, позволяющий запускать будущие экземпляры программы намного быстрее, чем это было бы в противном случае. Это заменяет возможность предварительного связывания, над которой работали ранее в истории проекта, поскольку резидентная поддержка намного эффективнее. Большие программы, подобные тем, которые содержатся в KDE Software Compilation со многими разделяемыми библиотеками, получат наибольшую выгоду от этой поддержки.

Разработка и распространение

Как и в случае с FreeBSD и OpenBSD, разработчики DragonFly BSD медленно заменяют предыдущий код функции в стиле C на более современный, ANSI эквиваленты. Подобно другим операционным системам, версия DragonFly из GNU Compiler Collection имеет расширение, называемое Stack-Smashing Protector (ProPolice), включенное по умолчанию, обеспечивая некоторую дополнительную защиту от буфера . Атаки на основе переполнения. По состоянию на 23 июля 2005 г. ядро ​​по умолчанию больше не имеет этой защиты.

Будучи производным от FreeBSD, DragonFly унаследовал простую в использовании интегрированную систему сборки, которая может перестраивать всю базовую систему из источник всего несколькими командами. Разработчики DragonFly используют систему контроля версий Git для управления изменениями исходного кода DragonFly . В отличие от своей родительской FreeBSD, DragonFly имеет как стабильные, так и нестабильные выпуски в одном дереве исходных текстов из-за меньшей базы разработчиков.

Как и другие ядра BSD (и ядра большинства современных операционных систем), DragonFly использует встроенную -в отладчик ядра, чтобы помочь разработчикам найти ошибки ядра. Кроме того, с октября 2004 г. ядро ​​отладки, которое делает отчеты об ошибках более полезными для отслеживания проблем, связанных с ядром, устанавливается по умолчанию за счет относительно небольшого количества дискового пространства. При установке нового ядра из резервной копии предыдущего ядра и его модулей удаляются символы отладки, чтобы дополнительно минимизировать использование дискового пространства.

Дистрибутивный носитель

Операционная система распространяется как Live CD и Live USB (доступен полный вариант X11 ) который загружается в полную систему DragonFly. Он включает базовую систему и полный набор справочных страниц, а также может включать исходный код и полезные пакеты в будущих версиях. Преимущество этого заключается в том, что с одного компакт-диска пользователи могут установить программное обеспечение на компьютер, использовать полный набор инструментов для восстановления поврежденной установки или продемонстрировать возможности системы без ее установки. Ежедневные снимки доступны с главного сайта для тех, кто хочет установить самые последние версии DragonFly без сборки из исходников.

Как и другие бесплатные BSD с открытым исходным кодом, DragonFly распространяется в соответствии с условиями современной версии лицензии BSD.

История выпусков

ВерсияДатаИзменения
5.83 марта 2020 г.
5,617 июня 2019 г.
  • Улучшенная система виртуальной памяти
  • Обновления для radeon и ttm
  • Улучшения производительности для HAMMER2
5.43 декабря 2018 г.
  • Обновлены драйверы для сети, виртуальных машин и дисплея
  • GCC 8.0 с предыдущими выпусками GCC
  • Hammer с дополнительными исправлениями ошибок
5.210 апреля 2018 г.
5.016 октября 2017 г.
  • Новая HAMMER2 файловая система
  • Может теперь поддерживает более 900 000 процессов на одной машине
  • Улучшенная поддержка i915
  • IPFW более высокая производительность
4.827 марта 2017 г.
  • Начальная AMD Поддержка Ryzen
  • Улучшенная поддержка i915
  • Повышенная производительность ядра
  • eMMC поддержка загрузки
  • LibreSSL заменена OpenSSL в базе
  • GCC 5.4.1
  • LTO поддержка
  • Начальная Clang framework
  • UEFI установка поддержки
4.62 августа 2016 г.
  • Улучшенная поддержка i915 и Radeon
  • Поддержка NVM Express
  • Улучшенная производительность SMP
  • Повышенная производительность сети
  • Предварительная поддержка UEFI загрузки
  • autofs, импортированных из FreeBSD, amdудален
4.47 декабря 2015 г.
  • GCC 5.2
  • gold теперь компоновщик по умолчанию
  • Улучшенная поддержка i915 и Radeon
  • Полная переработка системы языковых стандартов
  • Поддержка сопоставления для именованных локалей
  • Библиотека Regex заменена на TRE
  • Поддержка версий символов в libc
  • Многочисленные исправления и исправления HAMMER
4.229 июня 2015 г.
4.025 ноября 2014 г.
  • Неблокирующая, многопоточность PF
  • Связанные сети с улучшенной многопоточностью для повышения пропускной способности
  • Функция безопасности Procctl в ядро
  • Поддержка до 256 процессоров
  • Улучшенная поддержка беспроводной сети
  • Rust и Free Pascal теперь поддерживаются
  • Поддержка i915 значительно улучшено
  • GCC 4.7.4
3.84 июня 2014
  • Поддержка динамического корня и PAM
  • USB4BSD теперь по умолчанию
  • Родной C- Государственная поддержка процессоров Intel
  • Разделение токенов порта TCP для повышения производительности TCP-соединения (2)
  • GCC 4.7.3
  • HAMMER2 в системе (не готов к производственному использованию)
  • Окончательный 32-разрядный выпуск
3.625 ноября 2013 г.
3.429 апреля 2013 г.
  • Представлен новый диспетчер пакетов DPorts
  • GCC 4.7
  • Улучшено использование ЦП и tmpfs производительность при экстремальной нагрузке
3.22 ноября 2012 г.
  • Многопроцессорное ядро ​​стало обязательным.
  • Улучшение производительности в планировщике.
  • USB4BSD, импортированный из FreeBSD.
  • PUFFS импортированный из NetBSD.
3.022 февраля 2012 г.
2.1026 апреля 2011
  • Гигантская блокировка удалена из всех областей, кроме виртуальной памяти подсистемы
  • HAMMER dedupl ication
  • GCC 4.4
  • Bridging система переписана
  • Основные улучшения производительности
2.830 октября 2010 г.
2,66 апреля 2010 г.
  • Swapcache
  • tmpfs, импортированный из NetBSD
  • HAMMER, и общие улучшения ввода-вывода
2.416 сентября 2009 г.
  • devfs
  • Новый AHCI, включая полную поддержку NCQ
  • NFS, улучшения
  • Полная поддержка x86-64
2.217 февраля 2009 г.
  • HAMMER официально готово к производству
  • Основные улучшения стабильности
  • Носители с новым выпуском: LiveCD и LiveUSB
2.020 июля 2008
1.1226 февраля 2008 г.
  • Sensor framework импортирован из стека FreeBSD
  • Bluetooth
  • GCC 4.1
  • DragonFly Mail Agent (DMA), заглушка MTA
  • Поддержка 386 ЦП упал
  • Предварительная x86-64 поддержка (не работает)
  • Экспериментальная HAMMER поддержка
1.106 августа 2007 г.
1.830 января 2007 г.
1.624 июля 2006 г.
  • Новый генератор случайных чисел
  • IEEE 802.11 рефакторинг инфраструктуры
  • Основная гигантская блокировка, кластеризация и пользовательская среда VFS улучшения
  • Основные улучшения стабильности
1.47 января 2006 г.
  • GCC 3.4
  • pkgsrc используется по умолчанию
  • Citrus импортировано из NetBSD
1.28 апреля 2005 г.
1.012 июля 2004 г.
См. также
  • Портал бесплатного программного обеспечения и программного обеспечения с открытым исходным кодом
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-18 03:38:31
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте