Стрекоза БСД
![]() | |
![]() DragonFly BSD 6.2.1 UEFI Загрузчик | |
Разработчик | Мэтью Диллон |
---|---|
Семейство ОС | Unix-подобный ( BSD ) |
Рабочее состояние | Текущий |
Исходная модель | Открытый исходный код |
Первоначальный выпуск | 1.0 / 12 июля 2004 г |
Последний выпуск | 6.4.0 / 30 декабря 2022 г [1] |
Репозиторий | |
Доступно в | Английский |
Менеджер пакетов | упаковка |
Платформы | х86-64 |
ядра Тип | Гибридный [2] |
Пользовательское пространство | БСД |
По умолчанию пользовательский интерфейс | оболочка Unix |
Лицензия | БСД [3] |
Официальный сайт | www |
DragonFly BSD — это с открытым исходным кодом бесплатная Unix-подобная операционная система , созданная на основе FreeBSD 4.8. Мэтью Диллон , разработчик Amiga в конце 1980-х и начале 1990-х годов и разработчик FreeBSD в период с 1994 по 2003 год, начал работу над DragonFly BSD в июне 2003 года и объявил о ней в списках рассылки FreeBSD 16 июля 2003 года. [4]
Диллон основал DragonFly, полагая, что методы многопоточности и симметричной многопроцессорной обработки во FreeBSD 5 [5] приведет к снижению производительности и проблемам с обслуживанием. Он стремился исправить эти ожидаемые проблемы в рамках проекта FreeBSD. [6] Из-за конфликтов с другими разработчиками FreeBSD по поводу реализации его идей, [7] его возможность напрямую изменять кодовую базу в конечном итоге была отменена. Несмотря на это, проекты DragonFly BSD и FreeBSD по-прежнему работают вместе, обмениваясь исправлениями ошибок, обновлениями драйверов и другими улучшениями.
Задуманный как логическое продолжение серии FreeBSD 4.x, DragonFly значительно отличается от FreeBSD, реализуя облегченные потоки ядра внутри ядра (LWKT), систему передачи сообщений и HAMMER файловую систему . [8] На многие концепции дизайна повлияла AmigaOS . [9]
Проектирование системы
[ редактировать ]Ядро
[ редактировать ]Разрабатываемая подсистема обмена сообщениями ядра аналогична тем, которые используются в микроядрах, таких как Mach , хотя по конструкции она менее сложна. Подсистема обмена сообщениями DragonFly способна действовать как синхронно, так и асинхронно и пытается использовать эту возможность для достижения максимально возможной производительности в любой конкретной ситуации. [10]
По словам разработчика Мэтью Диллона , достигнут прогресс в обеспечении возможностей ввода/вывода устройств (I/O) и обмена сообщениями виртуальной файловой системы (VFS), что позволит достичь остальных целей проекта. Новая инфраструктура позволит перенести многие части ядра в пользовательское пространство; здесь их будет легче отлаживать, поскольку они будут меньшими по размеру изолированными программами, а не небольшими частями, переплетенными в более крупный фрагмент кода. Кроме того, миграция избранного кода ядра в пользовательское пространство делает систему более надежной; если произойдет сбой драйвера пользовательского пространства, это не приведет к сбою ядра. [11]
Системные вызовы разделяются на версии пользовательского пространства и ядра и инкапсулируются в сообщения. Это поможет уменьшить размер и сложность ядра за счет перемещения вариантов стандартных системных вызовов на уровень совместимости пользовательской среды и поможет поддерживать прямую и обратную совместимость между версиями DragonFly. Код совместимости Linux и других Unix-подобных ОС переносится аналогичным образом. [9]
Резьба
[ редактировать ]Поскольку поддержка архитектур с несколькими наборами команд усложняет поддержку симметричной многопроцессорной обработки (SMP), [7] DragonFly BSD теперь ограничивает свою поддержку платформой x86-64 . [12] Изначально DragonFly работал на архитектуре x86 , однако начиная с версии 4.0 она больше не поддерживается. Начиная с версии 1.10, DragonFly поддерживает потоки пользовательского пространства 1:1 (один поток ядра на каждый поток пользовательского пространства). [13] которое считается относительно простым решением, которое также легко поддерживать. [9] Унаследованный от FreeBSD, DragonFly также поддерживает многопоточность. [14]
В DragonFly каждый процессор имеет собственный планировщик потоков. При создании потоки назначаются процессорам и никогда не переключаются с одного процессора на другой заранее; они переносятся только путем передачи сообщения межпроцессорного прерывания (IPI) между участвующими процессорами. Межпроцессорное планирование потоков также осуществляется путем отправки асинхронных сообщений IPI. Одним из преимуществ такого четкого разделения подсистемы потоков является то, что встроенные кэши процессоров в симметричных многопроцессорных системах не содержат дублированных данных, что позволяет повысить производительность за счет предоставления каждому процессору в системе возможности использовать свой собственный кэш для хранения различных данных. вещи, над которыми нужно работать. [9]
Подсистема LWKT используется для разделения работы между несколькими потоками ядра (например, в сетевом коде есть один поток на каждый протокол и процессор), уменьшая конкуренцию за счет устранения необходимости совместного использования определенных ресурсов между различными задачами ядра. [7]
Защита общих ресурсов
[ редактировать ]Для безопасной работы на многопроцессорных машинах доступ к общим ресурсам (таким как файлы, структуры данных) должен быть сериализован , чтобы потоки или процессы не пытались одновременно изменить один и тот же ресурс. Чтобы предотвратить одновременный доступ нескольких потоков к общему ресурсу или его изменение, DragonFly использует критические секции и сериализует токены для предотвращения одновременного доступа. Хотя и Linux, и FreeBSD 5 используют детализированные модели мьютексов для достижения более высокой производительности в многопроцессорных системах, DragonFly этого не делает. [7] До недавнего времени DragonFly также использовал spls , но он был заменен критическими разделами.
Большая часть ядра системы, включая подсистему LWKT , подсистему обмена сообщениями IPI и новый распределитель памяти ядра, не имеет блокировок, что означает, что они работают без использования мьютексов, при этом каждый процесс работает на одном процессоре. Критические секции используются для защиты от локальных прерываний индивидуально для каждого процессора, гарантируя, что исполняемый в данный момент поток не будет вытеснен. [13]
Токены сериализации используются для предотвращения одновременного доступа со стороны других процессоров и могут удерживаться одновременно несколькими потоками, гарантируя, что в любой момент времени работает только один из этих потоков. Таким образом, заблокированные или спящие потоки не препятствуют доступу других потоков к общему ресурсу, в отличие от потока, удерживающего мьютекс. Помимо прочего, использование сериализации токенов предотвращает многие ситуации, которые могут привести к взаимоблокировкам и инверсиям приоритетов при использовании мьютексов, а также значительно упрощает разработку и реализацию многоэтапной процедуры, которая потребует совместного использования ресурса между несколько потоков. Код токена сериализации развивается во что-то очень похожее на функцию « Чтение-копирование-обновление », доступную теперь в Linux. В отличие от текущей реализации RCU в Linux, реализация DragonFly реализована таким образом, что затрагиваются только процессоры, конкурирующие за один и тот же токен, а не все процессоры в компьютере. [15]
DragonFly перешел на мультипроцессорный безопасный slab-аллокатор , который не требует ни мьютексов, ни операций блокировки для задач распределения памяти. [16] В конечном итоге он был перенесен в стандартную библиотеку C в пользовательском пространстве, где заменил реализацию malloc во FreeBSD. [17]
Виртуальное ядро
[ редактировать ]Начиная с версии 1.8 DragonFly имеет механизм виртуализации, аналогичный Linux пользовательского режима . [18] позволяя пользователю запускать другое ядро в пользовательском пространстве. Виртуальное ядро ( vkernel ) запускается в полностью изолированной среде с эмулируемыми интерфейсами сети и хранилища, что упрощает тестирование подсистем ядра и функций кластеризации. [9] [11]
У vkernel есть два важных отличия от настоящего ядра: в нем отсутствуют многие процедуры для низкоуровневого управления оборудованием, и стандартной библиотеки C там, где это возможно, вместо встроенных реализаций используются функции (libc). Поскольку как реальное, так и виртуальное ядро компилируются из одной и той же базы кода, это фактически означает, что зависящие от платформы подпрограммы и повторные реализации функций libc четко разделены в дереве исходного кода. [19]
vkernel работает поверх аппаратных абстракций, предоставляемых реальным ядром. К ним относятся таймер на основе kqueue , консоль (сопоставленная с виртуальным терминалом , где выполняется vkernel), образ диска и Ethernet-устройство виртуального ядра ( VKE интерфейсу хоста ), туннелирующее все пакеты к ответвительному . [20]
Управление пакетами
[ редактировать ]Стороннее программное обеспечение доступно на DragonFly в виде бинарных пакетов через pkgng
или из собственной коллекции портов — DPorts . [21]
Первоначально DragonFly использовала коллекцию портов FreeBSD в качестве официальной системы управления пакетами , но начиная с версии 1.4 перешла на NetBSD систему pkgsrc , что воспринималось как способ уменьшения объема работы, необходимой для доступности стороннего программного обеспечения. [6] [22] В конечном итоге, поддержание совместимости с pkgsrc
оказалось, что потребовалось больше усилий, чем первоначально предполагалось, поэтому в рамках проекта был создан 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 . [9] [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 со многими общими библиотеками, больше всего выиграют от этой поддержки. [32]
Разработка и распространение
[ редактировать ]
Как и в случае с FreeBSD и OpenBSD , разработчики DragonFly BSD постепенно заменяют прототипа предварительной функции в стиле код C более современными эквивалентами ANSI . Подобно другим операционным системам, версия коллекции компиляторов GNU от DragonFly имеет усовершенствование, называемое Stack-Smashing Protector (ProPolice), включенное по умолчанию, обеспечивающее некоторую дополнительную защиту от атак, основанных на переполнении буфера . По состоянию на 23 июля 2005 г. [update], ядро больше не имеет этой защиты по умолчанию. [32]
Будучи производной от FreeBSD, DragonFly унаследовала простую в использовании интегрированную систему сборки, которая может пересобрать всю базовую систему из исходного кода с помощью всего лишь нескольких команд. Разработчики DragonFly используют систему контроля версий Git для управления изменениями исходного кода DragonFly . В отличие от своей родительской FreeBSD, DragonFly имеет как стабильные, так и нестабильные версии в одном дереве исходного кода из-за меньшей базы разработчиков. [7]
Как и другие ядра BSD (и большинства современных операционных систем), DragonFly использует встроенный отладчик ядра , помогающий разработчикам находить ошибки ядра. Кроме того, по состоянию на октябрь 2004 г. [update], ядро отладки, которое делает отчеты об ошибках более полезными для отслеживания проблем, связанных с ядром, устанавливается по умолчанию за счет относительно небольшого количества дискового пространства. При установке нового ядра из резервной копии предыдущего ядра и его модулей удаляются символы отладки, чтобы еще больше минимизировать использование дискового пространства.
Средства распространения
[ редактировать ]Операционная система распространяется в виде Live CD и Live USB , с которых загружается полная система DragonFly. [18] [31] Он включает в себя базовую систему и полный набор страниц руководства, а также может включать исходный код и полезные пакеты в будущих версиях. Преимущество этого состоит в том, что с помощью одного компакт-диска пользователи могут установить программное обеспечение на компьютер, использовать полный набор инструментов для восстановления поврежденной установки или продемонстрировать возможности системы без ее установки. Ежедневные снимки доступны на главном сайте для тех, кто хочет установить самые последние версии DragonFly без сборки из исходного кода.
Как и другие бесплатные BSD с открытым исходным кодом, DragonFly распространяется на условиях современной версии лицензии BSD .
История выпусков
[ редактировать ]
Версия | Дата [33] | Изменения |
---|---|---|
6.4 | 30 декабря 2022 г. | |
6.2.1 | 9 января 2022 г. |
|
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
- Сравнение операционных систем с открытым исходным кодом
- Сравнение ядер операционных систем
- Lumina (среда рабочего стола)
Ссылки
[ редактировать ]- ^ «Стрекоза BSD 6.4» . Стрекоза БСД . Проверено 15 января 2023 г.
- ^ Диллон, Мэтью (22 августа 2006 г.), «Re: Сколько микроядра?» , список рассылки ядра , получено 14 сентября 2011 г.
- ^ «Лицензия DragonFly BSD» , DragonFly BSD , получено 17 января 2015 г.
- ^ Диллон, Мэтью (16 июля 2003 г.), «Анонсируем DragonFly BSD!» , список рассылки freebsd-current , получено 26 июля 2007 г.
- ^ Лихи, Грег (2001), Улучшение реализации SMP во FreeBSD (PDF) , USENIX , получено 22 февраля 2012 г.
- ^ Jump up to: а б Кернер, Шон Майкл (10 января 2006 г.), «Новый DragonFly выпущен для пользователей BSD» , InternetNews , заархивировано из оригинала 28 июня 2011 г. , получено 20 ноября 2011 г.
- ^ Jump up to: а б с д и ж Бьянкуцци, Федерико (8 июля 2004 г.), «Behind DragonFly BSD» , O'Reilly Media , заархивировано из оригинала 9 апреля 2014 г. , получено 20 ноября 2011 г.
- ^ Лоли-Керу, Евгения (13 марта 2004 г.), «Интервью с Мэтью Диллоном из DragonFly BSD» , OSNews , получено 22 февраля 2012 г.
- ^ Jump up to: а б с д и ж Чисналл, Дэвид (15 июня 2007 г.), «DragonFly BSD: UNIX для кластеров?» , ИнформИТ , дата обращения 22 ноября 2011 г.
- ^ Сюй, Джеффри М. (13 марта 2004 г.). Операционная система DragonFly BSD (PDF) . АзияBSDCon 2004 . Тайбэй, Тайвань . Проверено 20 ноября 2011 г.
- ^ Jump up to: а б с Эндрюс, Джереми (6 августа 2007 г.), «Интервью: Мэтью Диллон» , KernelTrap , заархивировано из оригинала 15 мая 2011 г.
- ^ «Производительность DragonFly BSD MP значительно улучшена» , OSNews , 16 ноября 2011 г. , получено 19 ноября 2011 г.
- ^ Jump up to: а б Лучани, Роберт (24 мая 2009 г.), многопоточность M:N в DragonflyBSD (PDF) , BSDCon, заархивировано из оригинала (PDF) 23 декабря 2010 г.
- ^ Шерилл, Джастин (11 января 2004 г.), «Расплата уже» , заархивировано из оригинала 30 апреля 2014 г. , получено 20 ноября 2011 г.
- ^ Пистритто, Джо; Диллон, Мэтью; Шерилл, Джастин С.; и др. (24 апреля 2004 г.), «Сериализация токена» , список рассылки ядра , заархивировано из оригинала 15 апреля 2013 г. , получено 20 марта 2012 г.
- ^ Бонвик, Джефф ; Адамс, Джонатан (3 января 2002 г.), Журналы и Vmem: расширение распределителя блоков на множество процессоров и произвольных ресурсов , USENIX , получено 20 ноября 2011 г.
- ^ Диллон, Мэтью (23 апреля 2009 г.), «Новый libc malloc зафиксирован» , список рассылки ядра , получено 8 августа 2011 г.
- ^ Jump up to: а б с д Вервлёсем, Коэн (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 лет pkgsrc» . НетБСД . Йорг Зонненбергер о pkgsrc на DragonFly BSD и его проектах разработки pkgsrc . Проверено 22 ноября 2011 г.
- ^ Шерилл, Джастин (30 сентября 2013 г.), «Почему dports?» , DragonFly BSD Digest , заархивировано из оригинала 30 апреля 2014 г. , получено 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 г.), «Проектный документ для HAMMER2 (обновление от 8 февраля 2012 г.)» , пользователи , получено 22 февраля 2012 г.
- ^ Диллон, Мэтью (18 августа 2017 г.), «В следующем выпуске DFly будет первоначальная реализация HAMMER2» , пользователи , получено 3 июля 2018 г.
- ^ Jump up to: а б Mr (7 января 2010 г.), «DragonFlyBSD с Мэтью Диллоном» , bsdtalk , заархивировано из оригинала ( ogg ) 25 апреля 2012 г. , получено 20 ноября 2011 г.
- ^ Jump up to: а б «Дневник 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" " .
- ^ Jump up to: а б Кернер, Шон Майкл (25 июля 2006 г.), «DragonFly BSD 1.6 Cuts the Cord» , InternetNews , получено 20 ноября 2011 г.
- ^ Таунсенд, Трент (18 января 2006 г.), «Краткий обзор DragonFly BSD 1.4» , OSNews , получено 16 ноября 2011 г.
Внешние ссылки
[ редактировать ]- Стрекоза БСД
- программное обеспечение 2004 года
- Распространение программного обеспечения Беркли
- Свободное программное обеспечение, операционные системы
- Дистрибутивы операционной системы, загружаемые с носителя, доступного только для чтения.
- Программные вилки
- Программное обеспечение, использующее лицензию BSD
- Варианты Unix
- Операционные системы X86-64