DragonFly BSD - DragonFly BSD
Загрузчик DragonFly BSD 4.2.3 | |
Разработчик | Мэтью Диллон |
---|---|
Семейство ОС | Unix-подобный |
Рабочее состояние | Текущий |
Исходная модель | Открытый исходный код |
изначальный выпуск | 1.0 / 12 июля 2004 г. |
Последний релиз | 5.8.3 / 24 сентября 2020[1] |
Репозиторий | |
Доступно в | английский |
Менеджер пакетов | упак. |
Платформы | x86-64 |
Ядро тип | Гибридный |
Userland | BSD |
Дефолт пользовательский интерфейс | Оболочка Unix |
Лицензия | BSD[2] |
Официальный веб-сайт | www |
DragonFly BSD это бесплатно и с открытым исходным кодом Unix-подобный Операционная система раздвоенный из FreeBSD 4.8. Мэтью Диллон, Amiga разработчик в конце 1980-х - начале 1990-х годов и разработчик FreeBSD в период с 1994 по 2003 год начал работу над DragonFly BSD в июне 2003 года и объявил об этом в списках рассылки FreeBSD 16 июля 2003 года.[3]
Диллон основал DragonFly, полагая, что методы, принятые для заправка и симметричная многопроцессорная обработка в FreeBSD 5[4] приведет к снижению производительности и проблемам с обслуживанием. Он стремился исправить эти ожидаемые проблемы в рамках проекта FreeBSD.[5] Из-за конфликтов с другими разработчиками FreeBSD по поводу реализации его идей,[6] его способность напрямую изменять кодовая база в конечном итоге был отозван. Несмотря на это, проекты DragonFly BSD и FreeBSD по-прежнему работают вместе, делясь исправлениями ошибок, обновлениями драйверов и другими улучшениями.
Задуманный как логическое продолжение серии FreeBSD 4.x, DragonFly значительно отличается от FreeBSD, реализовав легкие потоки ядра (LWKT), внутри ядра передача сообщений система, а МОЛОТОК файловая система.[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]
Ядро работает поверх аппаратных абстракций, предоставляемых настоящим ядром. К ним относятся kqueue -на основе таймера, консоль (привязана к виртуальный терминал где выполняется vkernel), образ диска и устройство Ethernet виртуального ядра (ВКЕ), туннелируя все пакеты на хост кран интерфейс.[20]
Управление пакетами
Стороннее программное обеспечение доступно на DragonFly в виде двоичных пакетов через pkgng
или от родного коллекция портов – DPorts.[21]
DragonFly изначально использовал Порты FreeBSD коллекция в качестве официального система управления пакетами, но начиная с версии 1.4 перешли на NetBSD pkgsrc система, которая воспринималась как способ уменьшить объем работы, необходимой для доступности стороннего программного обеспечения.[5][22] В конце концов, поддерживая совместимость с pkgsrc
оказалось, что для этого потребовалось больше усилий, чем предполагалось изначально, поэтому в рамках проекта был создан DPorts, наложение поверх Порты FreeBSD коллекция.[23][24]
Поддержка CARP
Первоначальная реализация Общий протокол резервирования адресов (обычно называют Карп) был закончен в марте 2007 года.[25] С 2011 года поддержка CARP интегрирована в DragonFly BSD.[26]
Файловые системы HAMMER
Наряду с Файловая система Unix, который обычно используется по умолчанию файловая система на BSD DragonFly BSD поддерживает МОЛОТОК и МОЛОТОК2 файловые системы. 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 со многими общие библиотеки извлекут максимальную пользу из этой поддержки.[32]
Разработка и распространение
Как и с FreeBSD и OpenBSD, разработчики DragonFly BSD постепенно заменяют прежниепрототип функции -стиль C код с более современным, ANSI эквиваленты. Как и в других операционных системах, версия DragonFly Коллекция компиляторов GNU есть улучшение, называемое Защита от разрушения стеков (ProPolice) включен по умолчанию, обеспечивая дополнительную защиту от переполнение буфера основанные атаки. По состоянию на 23 июля 2005 г.[Обновить], ядро больше не построено с этой защитой по умолчанию.[32]
Будучи производным от FreeBSD, DragonFly унаследовал простую в использовании интегрированную систему сборки, которая может перестроить всю базовую систему из исходного кода с помощью всего нескольких команд. Разработчики DragonFly используют Git система контроля версий для управления изменениями DragonFly исходный код. В отличие от своей родительской FreeBSD, DragonFly имеет как стабильные, так и нестабильные выпуски в едином дереве исходных текстов из-за меньшей базы разработчиков.[6]
Как и другие ядра BSD (и ядра большинства современных операционных систем), DragonFly использует встроенный отладчик ядра чтобы помочь разработчикам найти ошибки ядра. Кроме того, по состоянию на октябрь 2004 г.[Обновить], ядро отладки, которое делает отчеты об ошибках более полезными для отслеживания проблем, связанных с ядром, устанавливается по умолчанию за счет относительно небольшого количества дискового пространства. При установке нового ядра из резервной копии предыдущего ядра и его модулей удаляются символы отладки, чтобы дополнительно минимизировать использование дискового пространства.
СМИ распространения
Операционная система распространяется как Live CD и Живой USB (полный X11 доступен вариант), который загружается в полную систему DragonFly.[18][31] Он включает базовую систему и полный набор справочных страниц, а также может включать исходный код и полезные пакеты в будущих версиях. Преимущество этого заключается в том, что с одного компакт-диска пользователи могут установить программное обеспечение на компьютер, использовать полный набор инструментов для восстановления поврежденной установки или продемонстрировать возможности системы без ее установки. Ежедневные снимки доступны с главного сайта для тех, кто хочет установить самые последние версии DragonFly без сборки из исходников.
Как и другие бесплатные BSD с открытым исходным кодом, DragonFly распространяется на условиях современной версии Лицензия BSD.
История выпуска
Версия | Дата[33] | Изменения |
---|---|---|
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 5.8". Стрекоза BSD. Получено 25 сентября 2020.
- ^ «Лицензия DragonFly BSD», DragonFly BSD, получено 17 января 2015
- ^ Диллон, Мэтью (16 июля 2003 г.), "Представляем DragonFly BSD!", список рассылки freebsd-current, получено 26 июля 2007
- ^ Лехи, Грег (2001), Улучшение реализации FreeBSD SMP (PDF), USENIX, получено 22 февраля 2012
- ^ а б Кернер, Шон Майкл (10 января 2006 г.), «Выпущен новый DragonFly для пользователей BSD», ИнтернетНовости, получено 20 ноября 2011
- ^ а б c d е ж Бьянкуцци, Федерико (8 июля 2004 г.), "За DragonFly BSD", O'Reilly Media, получено 20 ноября 2011
- ^ Лоли-Керу, Евгения (13 марта 2004 г.), "Интервью с Мэтью Диллоном из DragonFly BSD", OSNews, получено 22 февраля 2012
- ^ а б c d е ж Чисналл, Дэвид (15 июня 2007 г.), "DragonFly BSD: UNIX для кластеров?", InformIT, получено 22 ноября 2011
- ^ Диллон, Мэтью (22 августа 2006 г.), "Re: Сколько в микроядре?", список рассылки ядра, получено 14 сентября 2011
- ^ Хсу, Джеффри М. (13 марта 2004 г.). Операционная система DragonFly BSD (PDF). АзияБСДВ 2004 г.. Тайбэй, Тайвань. Получено 20 ноября 2011.
- ^ а б c Эндрюс, Джереми (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 г.), Журналы и Vmem: расширение Slab Allocator на многие процессоры и произвольные ресурсы, USENIX, получено 20 ноября 2011
- ^ Диллон, Мэтью (23 апреля 2009 г.), "Новая библиотека libc malloc зафиксирована", список рассылки ядра, получено 8 августа 2011
- ^ а б c d Вервлосем, Коэн (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?", Дайджест BSD DragonFly, получено 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?", Фороникс, получено 20 ноября 2011,
HAMMER действительно кажется очень интересной файловой системой BSD. Хотя это не так быстро, как файловая система ZFS в BSD, но это также оригинальная файловая система для проекта DragonFlyBSD, а не порт из OpenSolaris. HAMMER не только быстрее, чем обычная файловая система UFS, но и имеет гораздо больший набор функций.
- ^ Диллон, Мэтью (8 февраля 2012 г.), "ДИЗАЙН-документ для HAMMER2 (обновление от 8 февраля 2012 г.)", пользователи, получено 22 февраля 2012
- ^ Диллон, Мэтью (18 августа 2017 г.), «В следующем выпуске DFly будет начальная реализация HAMMER2», пользователи, получено 3 июля 2018
- ^ а б Г-н (7 января 2010 г.), "DragonFlyBSD с Мэтью Диллоном", bsdtalk, заархивировано из оригинал (ogg ) 25 апреля 2012 г., получено 20 ноября 2011
- ^ а б "Дневник DragonFly BSD", DragonFly BSD, 7 января 2006 г., получено 19 ноября 2011
- ^ «DragonFly: релизы», 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 перерезает шнур», ИнтернетНовости, получено 20 ноября 2011
- ^ Таунсенд, Трент (18 января 2006 г.), «Краткий обзор DragonFly BSD 1.4», OSNews, получено 16 ноября 2011