DragonFly BSD - это бесплатная Unix-подобная операционная система с открытым исходным кодом, созданная на основе FreeBSD 4.8. Мэтью Диллон , разработчик Amiga в конце 1980-х - начале 1990-х и разработчик FreeBSD в период с 1994 по 2003 год, начал работать над DragonFly BSD в июне 2003 года и объявил об этом в списках рассылки FreeBSD 16 июля 2003 года [3].
Разработчик | Мэтью Диллон |
---|---|
Семейство ОС | Unix-подобный |
Рабочее состояние | Текущий |
Исходная модель | Открытый источник |
Первый выпуск | 1.0 / 12 июля 2004 г . |
Последний релиз | 6.0 / 10 мая 2021 г . [1] |
Репозиторий | |
Доступно в | английский |
Менеджер пакетов | упак. |
Платформы | x86-64 |
Тип ядра | Гибридный |
Userland | BSD |
Пользовательский интерфейс по умолчанию | Оболочка Unix |
Лицензия | BSD [2] |
Официальный веб-сайт | www |
Диллон основал DragonFly, полагая, что методы, принятые для многопоточности и симметричной многопроцессорной обработки во FreeBSD 5 [4] , приведут к снижению производительности и проблемам с обслуживанием. Он стремился исправить эти ожидаемые проблемы в рамках проекта FreeBSD. [5] Из-за конфликтов с другими разработчиками FreeBSD по поводу реализации его идей [6] его способность напрямую изменять кодовую базу была в конечном итоге лишена. Несмотря на это, проекты DragonFly BSD и FreeBSD по-прежнему работают вместе, делясь исправлениями ошибок, обновлениями драйверов и другими улучшениями.
Задуманный как логическое продолжение серии FreeBSD 4.x, DragonFly значительно отличается от FreeBSD, реализовав облегченные потоки ядра (LWKT), систему передачи сообщений внутри ядра и файловую систему HAMMER . [7] На многие концепции дизайна повлияла AmigaOS . [8]
Системный дизайн
Ядро
Ядра подсистема обмен сообщения разрабатываются аналогично тем , которые содержатся в микроядрах , такие как Мах , хотя он является менее сложным по конструкции. Однако DragonFly использует монолитную систему ядра. [9] Подсистема обмена сообщениями DragonFly может работать как в синхронном, так и в асинхронном режиме и пытается использовать эту возможность для достижения максимальной производительности в любой конкретной ситуации. [10]
По словам разработчика Мэтью Диллона , в настоящее время наблюдается прогресс в обеспечении возможностей обмена сообщениями как с устройством ввода-вывода (I / O), так и с виртуальной файловой системой (VFS), что позволит достичь остальных целей проекта. Новая инфраструктура позволит перенести многие части ядра в пользовательское пространство; здесь их будет легче отлаживать, поскольку они будут меньшими по размеру изолированными программами, а не маленькими частями, вплетенными в более крупный фрагмент кода. Кроме того, перенос выбранного кода ядра в пользовательское пространство дает преимущество в том, что делает систему более надежной; если произойдет сбой драйвера пользовательского пространства, это не приведет к сбою ядра. [11]
Системные вызовы разделяются на версии пользовательского пространства и ядра и инкапсулируются в сообщения. Это поможет уменьшить размер и сложность ядра за счет перемещения вариантов стандартных системных вызовов на уровень совместимости со стороны пользователя и поможет поддерживать прямую и обратную совместимость между версиями DragonFly. Аналогичным образом переносится код совместимости с Linux и другими Unix-подобными ОС. [8]
Резьба
Поскольку поддержка архитектур с несколькими наборами команд усложняет поддержку симметричной многопроцессорной обработки (SMP), [6] DragonFly BSD теперь ограничивает свою поддержку платформой x86-64 . [12] DragonFly изначально работал на архитектуре x86 , однако с версии 4.0 он больше не поддерживается. Начиная с версии 1.10, DragonFly поддерживает потоки пользовательской среды 1: 1 (один поток ядра на поток пользовательской среды) [13], что считается относительно простым решением, которое также легко поддерживать. [8] Унаследованный от FreeBSD, DragonFly также поддерживает многопоточность. [14]
В DragonFly каждый процессор имеет собственный планировщик потоков. После создания потоки назначаются процессорам и никогда не переключаются с одного процессора на другой заранее; они переносятся только путем передачи сообщения межпроцессорного прерывания (IPI) между задействованными процессорами. Планирование межпроцессорных потоков также выполняется путем отправки асинхронных сообщений IPI. Одним из преимуществ этого чистого разделения подсистемы потоковой обработки является то, что встроенные кэши процессоров в симметричных многопроцессорных системах не содержат дублированных данных, что обеспечивает более высокую производительность, предоставляя каждому процессору в системе возможность использовать свой собственный кэш для хранения различных вещи, над которыми нужно работать. [8]
LWKT подсистема быть использована для разбиения работы между несколькими потоками ядра (например , в коде сети есть один поток в соответствии с протоколом на процессор), что снижает конкуренцию за счет устранения необходимости делить некоторые ресурсы среди различных задач ядра. [6]
Чтобы безопасно работать на многопроцессорных машинах, доступ к общим ресурсам (например, файлам, структурам данных) должен быть сериализован, чтобы потоки или процессы не пытались одновременно изменять один и тот же ресурс. Чтобы предотвратить одновременный доступ или изменение общего ресурса несколькими потоками, DragonFly использует критические секции и сериализует токены для предотвращения одновременного доступа. В то время как и Linux, и FreeBSD 5 используют детализированные модели мьютексов для достижения более высокой производительности в многопроцессорных системах, DragonFly этого не делает. [6] До недавнего времени DragonFly также использовал spls , но они были заменены критическими секциями.
Большая часть ядра системы, в том числе LWKT подсистемы, подсистем обмена сообщений IPI и новый распределитель памяти ядра, являются беззамочные, что означает , что они работают без использования семафоров, с каждым рабочим процессом на одном процессоре. Критические секции используются для защиты от локальных прерываний индивидуально для каждого процессора, гарантируя, что поток, выполняемый в данный момент, не будет вытеснен. [13]
Сериализационные токены используются для предотвращения одновременного доступа со стороны других процессоров и могут удерживаться одновременно несколькими потоками, гарантируя, что только один из этих потоков выполняется в любой момент времени. Таким образом, заблокированные или спящие потоки не препятствуют доступу других потоков к общему ресурсу, в отличие от потока, который удерживает мьютекс. Среди прочего, использование сериализованных токенов предотвращает многие ситуации, которые могут привести к взаимоблокировкам и инверсиям приоритетов при использовании мьютексов, а также значительно упрощает разработку и реализацию многоступенчатой процедуры, которая потребует совместного использования ресурса несколько потоков. Код сериализуемого токена развивается во что-то очень похожее на функцию « Чтение-копирование-обновление », теперь доступную в Linux. В отличие от текущей реализации RCU в Linux, DragonFly реализуется таким образом, что затрагиваются только процессоры, конкурирующие за один и тот же токен, а не все процессоры в компьютере. [15]
DragonFly перешел на многопроцессорный безопасный распределитель блоков, который не требует ни мьютексов, ни операций блокировки для задач распределения памяти. [16] В конечном итоге он был перенесен в стандартную библиотеку C в пользовательском пространстве, где заменил реализацию malloc во FreeBSD. [17]
Виртуальное ядро
С выпуском 1.8 DragonFly имеет механизм виртуализации , похожий на режим пользователя Linux , [18] , что позволяет пользователю запускать другое ядро в пространстве пользователя. Виртуальное ядро ( vkernel ) работает в полностью изолированной среде с эмулированными сетевыми интерфейсами и интерфейсами хранения, что упрощает тестирование подсистем ядра и функций кластеризации. [8] [11]
У vkernel есть два важных отличия от реального ядра: ему не хватает многих процедур для работы с низкоуровневым аппаратным управлением, и оно использует функции стандартной библиотеки C (libc) вместо встроенных в ядро реализаций везде, где это возможно. Поскольку и реальное, и виртуальное ядро скомпилированы из одной и той же базы кода, это фактически означает, что зависящие от платформы процедуры и повторные реализации функций libc четко разделены в дереве исходного кода. [19]
Vkernel работает поверх аппаратных абстракций, предоставляемых реальным ядром. К ним относятся таймер на основе kqueue , консоль (сопоставленная с виртуальным терминалом, на котором выполняется vkernel), образ диска и устройство Ethernet виртуального ядра ( VKE ), туннелирующие все пакеты на интерфейс tap хоста . [20]
Управление пакетами
Стороннее программное обеспечение доступно на DragonFly в виде двоичных пакетов через pkgng
или из коллекции собственных портов - DPorts . [21]
Изначально DragonFly использовал коллекцию портов FreeBSD в качестве официальной системы управления пакетами , но, начиная с версии 1.4, перешел на систему NetBSD pkgsrc , которая была воспринята как способ уменьшения объема работы, необходимой для обеспечения доступности стороннего программного обеспечения. [5] [22] В конце концов, для поддержания совместимости с pkgsrc
Windows потребовалось больше усилий, чем предполагалось изначально, поэтому в рамках проекта был создан DPorts, наложение поверх коллекции портов FreeBSD . [23] [24]
Поддержка CARP
Первоначальная реализация протокола Common Address Redundancy Protocol (обычно называемого CARP ) была завершена в марте 2007 года. [25] С 2011 года поддержка CARP интегрирована в DragonFly BSD. [26]
Файловые системы HAMMER
Наряду с файловой системой Unix , которая обычно является файловой системой по умолчанию для BSD, DragonFly BSD поддерживает файловые системы HAMMER и HAMMER2 . HAMMER2 - файловая система по умолчанию, начиная с версии 5.2.0.
HAMMER был разработан специально для DragonFly BSD, чтобы предоставить многофункциональный, но лучше спроектированный аналог все более популярной ZFS . [8] [11] [27] HAMMER поддерживает настраиваемую историю файловой системы, снимки состояния , контрольную сумму , дедупликацию данных и другие функции, типичные для файловых систем такого типа. [18] [28]
HAMMER2, преемник файловой системы HAMMER, теперь считается стабильным, используется по умолчанию и находится в центре внимания дальнейшего развития. Планы по его развитию были первоначально опубликованы в 2012 году. [29] В 2017 году Диллон объявил, что следующая версия DragonFly BSD (5.0.0) будет включать полезную, хотя и экспериментальную, версию HAMMER2, и описал особенности конструкции. [30] В выпуске после 5.0.0, версии 5.2.0, HAMMER2 стала новой файловой системой по умолчанию.
devfs
В 2007 году DragonFly BSD получила новую файловую систему устройств (devfs), которая динамически добавляет и удаляет узлы устройств, позволяет получать доступ к устройствам по путям подключения, распознает диски по серийным номерам и устраняет необходимость в предварительно заполненной /dev
иерархии файловой системы. Он был реализован как проект Google Summer of Code 2009. [31]
Снимки приложений
DragonFly BSD поддерживает функцию резидентных приложений в стиле Amiga : после загрузки создается моментальный снимок пространства виртуальной памяти большой динамически связанной программы , что позволяет запускать будущие экземпляры программы гораздо быстрее, чем в противном случае. Это заменяет возможность предварительного связывания , над которой работали ранее в истории проекта, поскольку резидентная поддержка намного эффективнее. Больше всего от этой поддержки выиграют большие программы, подобные тем, которые находятся в KDE Software Compilation со многими разделяемыми библиотеками . [32]
Разработка и распространение
Как и в случае с FreeBSD и OpenBSD , разработчики DragonFly BSD постепенно заменяют предфункциональный код в стиле прототипа C более современными эквивалентами ANSI . Подобно другим операционным системам, версия DragonFly из коллекции компиляторов GNU имеет расширение, называемое Stack-Smashing Protector (ProPolice), включенное по умолчанию, обеспечивающее некоторую дополнительную защиту от атак, основанных на переполнении буфера . По состоянию на 23 июля 2005 г.[Обновить], ядро больше не построено с этой защитой по умолчанию. [32]
Будучи производным от FreeBSD, DragonFly унаследовал простую в использовании интегрированную систему сборки, которая может перестроить всю базовую систему из исходного кода с помощью всего лишь нескольких команд. Разработчики DragonFly используют систему контроля версий Git для управления изменениями исходного кода DragonFly . В отличие от своей родительской FreeBSD, DragonFly имеет как стабильные, так и нестабильные выпуски в одном дереве исходных текстов из-за меньшей базы разработчиков. [6]
Как и другие ядра BSD (и ядра большинства современных операционных систем), DragonFly использует встроенный отладчик ядра, чтобы помочь разработчикам находить ошибки ядра. Кроме того, по состоянию на октябрь 2004 г.[Обновить], ядро отладки, которое делает отчеты об ошибках более полезными для отслеживания проблем, связанных с ядром, устанавливается по умолчанию за счет относительно небольшого количества дискового пространства. При установке нового ядра из резервной копии предыдущего ядра и его модулей удаляются символы отладки, чтобы еще больше минимизировать использование дискового пространства.
Средства распространения
Операционная система распространяется как Live CD и Live USB ( доступна полная версия X11 ), которые загружаются в полную систему DragonFly. [18] [31] Он включает базовую систему и полный набор справочных страниц, а также может включать исходный код и полезные пакеты в будущих версиях. Преимущество этого заключается в том, что с одного компакт-диска пользователи могут установить программное обеспечение на компьютер, использовать полный набор инструментов для восстановления поврежденной установки или продемонстрировать возможности системы без ее установки. Ежедневные снимки доступны с главного сайта для тех, кто хочет установить самые последние версии DragonFly без сборки из исходников.
Как и другие бесплатные BSD с открытым исходным кодом, DragonFly распространяется в соответствии с условиями современной версии лицензии BSD .
История выпуска
Версия | Дата [33] | Изменения |
---|---|---|
6.0 | 10 мая 2021 г. |
|
5,8 | 3 марта 2020 г. | |
5,6 | 17 июня 2019 г. |
|
5,4 | 3 декабря 2018 г. |
|
5.2 | 10 апреля 2018 г. |
|
5.0 | 16 октября 2017 г. |
|
4.8 | 27 марта 2017 г. |
|
4.6 | 2 августа 2016 г. |
|
4.4 | 7 декабря 2015 г. |
|
4.2 | 29 июня 2015 г. |
|
4.0 | 25 ноября 2014 г. |
|
3.8 | 4 июня 2014 г. |
|
3,6 | 25 ноября 2013 г. |
|
3,4 | 29 апреля 2013 г. |
|
3,2 | 2 ноября 2012 г. |
|
3.0 | 22 февраля 2012 г. |
|
2.10 | 26 апреля 2011 г. |
|
2,8 | 30 октября 2010 г. |
|
2,6 | 6 апреля 2010 г. |
|
2,4 | 16 сентября 2009 г. |
|
2.2 | 17 февраля 2009 г. |
|
2.0 | 20 июля 2008 г. |
|
1,12 | 26 февраля 2008 г. |
|
1,10 | 6 августа 2007 г. |
|
1,8 | 30 января 2007 г. |
|
1.6 | 24 июля 2006 г. |
|
1.4 | 7 января 2006 г. |
|
1.2 | 8 апреля 2005 г. |
|
1.0 | 12 июля 2004 г. |
|
Смотрите также
- Сравнение операционных систем BSD
- Сравнение операционных систем с открытым исходным кодом
- Сравнение ядер операционных систем
Рекомендации
- ^ "DragonFly BSD 6.0" . Стрекоза BSD . Дата обращения 10 мая 2021 .
- ^ «DragonFly BSD License» , DragonFly BSD , получено 17 января 2015 г.
- ^ Диллон, Мэтью (16 июля 2003 г.), «Объявление DragonFly BSD!» , список рассылки freebsd-current , получено 26 июля 2007 г.
- ^ Лехи, Грег (2001), Улучшение реализации SMP FreeBSD (PDF) , USENIX , получено 22 февраля 2012 г.
- ^ а б Кернер, Шон Майкл (10 января 2006 г.), «Новый выпуск DragonFly для пользователей BSD» , InternetNews , получено 20 ноября 2011 г.
- ^ а б в г д е Бьянкуцци, Федерико (8 июля 2004 г.), "Behind DragonFly BSD" , O'Reilly Media , получено 20 ноября 2011 г.
- ^ Лоли-Куэру, Юджиния (13 марта 2004 г.), «Интервью с Мэтью Диллон из DragonFly BSD» , OSNews , получено 22 февраля 2012 г.
- ^ а б в г д е Чиснолл, Дэвид (15 июня 2007 г.), "DragonFly BSD: UNIX для кластеров?" , InformIT , получен 22 ноября 2011
- ^ Диллон, Мэтью (22 августа 2006 г.), "Re: Сколько микроядра?" , список рассылки ядра , получено 14 сентября 2011 г.
- ^ Сюй, Джеффри М. (13 марта 2004 г.). Операционная система DragonFly BSD (PDF) . AsiaBSDCon 2004 . Тайбэй, Тайвань . Проверено 20 ноября 2011 года .
- ^ а б в Эндрюс, Джереми (6 августа 2007 г.), «Интервью: Мэтью Диллон» , KernelTrap , архивировано с оригинала 15 мая 2011 г.
- ^ «Производительность DragonFly BSD MP значительно улучшена» , OSNews , 16 ноября 2011 г. , получено 19 ноября 2011 г.
- ^ а б Лучани, Роберт (24 мая 2009 г.), Потоки M: N в DragonflyBSD (PDF) , BSDCon, архивировано из оригинала (PDF) 23 декабря 2010 г.
- ^ Шерилл, Джастин (11 января 2004 г.), уже расплачивается, получено 20 ноября 2011 г.
- ^ Пистритто, Джо; Диллон, Мэтью; Шерилл, Джастин К.; и другие. (24 апреля 2004 г.), «Сериализация токена» , список рассылки ядра , заархивировано из оригинала 15 апреля 2013 г. , получено 20 марта 2012 г.
- ^ Бонвик, Джефф ; Адамс, Джонатан (3 января 2002 г.), Magazines и Vmem: расширение Slab Allocator на многие процессоры и произвольные ресурсы , USENIX , получено 20 ноября 2011 г.
- ^ Диллон, Мэтью (23 апреля 2009 г.), «Новая библиотека libc malloc зафиксирована» , список рассылки ядра , получено 8 августа 2011 г.
- ^ а б в г Vervloesem, Koen (21 апреля 2010 г.), «DragonFly BSD 2.6: на пути к бесплатной кластерной операционной системе» , LWN.net , получено 19 ноября 2011 г.
- ^ Экономопулос, Аггелос (16 апреля 2007 г.), «Взгляд на виртуальное ядро DragonFly» , LWN.net (часть 1) , получено 8 декабря 2011 г.
- ^ Экономопулос, Аггелос (16 апреля 2007 г.), «Взгляд на виртуальное ядро DragonFly» , LWN.net (часть 2) , получено 8 декабря 2011 г.
- ^ "HowTo DPorts" , DragonFly BSD , получено 2 декабря 2013 г.
- ^ Вайнем, Марк (2007). «10 лет ПКГСРК» . NetBSD . Йорг Зонненбергер о pkgsrc на DragonFly BSD и своих проектах по разработке pkgsrc . Проверено 22 ноября 2011 года .
- ^ Шерилл, Джастин (30 сентября 2013 г.), «Почему dports?» , DragonFly BSD Digest , получено 2 декабря 2011 г.
- ^ Шерилл, Джастин (29 сентября 2013 г.), «Есть новые пакеты?» , список рассылки пользователей , получено 2 декабря 2013 г.
- ^ Бушманн, Джонатан (14 марта 2007 г.), «Первый патч для установки CARP на Dfly» , список рассылки ядра , получено 20 ноября 2011 г.
- ^ "Страница руководства CARP (4)" , страницы онлайн-руководства DragonFly , получено 20 ноября 2011 г.
- ^ Диллон, Мэтью (10 октября 2007 г.), «Обновление файловой системы Re: HAMMER - проектный документ» , список рассылки ядра , получено 20 ноября 2011 г.
- ^ Ларабель, Майкл (7 января 2011 г.), «Может ли HAMMER DragonFlyBSD конкурировать с Btrfs, ZFS?» , Phoronix , получено 20 ноября 2011 г. ,
HAMMER действительно кажется очень интересной файловой системой BSD. Хотя это не так быстро, как файловая система ZFS в BSD, но это также оригинальная файловая система для проекта DragonFlyBSD, а не порт из OpenSolaris. HAMMER в целом не только быстрее, чем обычная файловая система UFS, но и имеет гораздо больший набор функций.
- ^ Диллон, Мэтью (8 февраля 2012 г.), "DESIGN document for HAMMER2 (обновление от 8 февраля 2012 г. )" , пользователи , получено 22 февраля 2012 г.
- ^ Диллон, Мэтью (18 августа 2017 г.), «В следующем выпуске DFly будет начальная реализация HAMMER2» , пользователи , получено 3 июля 2018 г.
- ^ а б Mr (7 января 2010 г.), «DragonFlyBSD с Мэтью Диллон» , bsdtalk , заархивировано из оригинала ( ogg ) 25 апреля 2012 г. , получено 20 ноября 2011 г.
- ^ а б «Дневник DragonFly BSD» , DragonFly BSD , 7 января 2006 г. , получено 19 ноября 2011 г.
- ^ "DragonFly: Releases" , DragonFly BSD , получено 19 июня 2014 г.
- ^ Тигео, Франсуа (31 июля 2007 г.), «Поддержка KMS + i915 теперь в -master» , список рассылки пользователей , получено 2 декабря 2013 г.
- ^ Мэтью Диллон (4 июня 2009 г.). " " Re: DragonFly-2.3.1.165.g25822 master sys / dev / disk / ahci Makefile TODO ahci.c ahci.h ahci_attach.c ahci_cam.c ahci_dragonfly.c ahci_dragonfly.h atascsi.h " " .
- ^ а б Кернер, Шон Майкл (25 июля 2006 г.), «DragonFly BSD 1.6 перерезает шнур» , InternetNews , получено 20 ноября 2011 г.
- ^ Таунсенд, Трент (18 января 2006 г.), «Краткий обзор DragonFly BSD 1.4» , OSNews , получено 16 ноября 2011 г.
Внешние ссылки
- Официальный веб-сайт