stringtranslate.com

Стрекоза БСД

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

Диллон основал 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] DragonFly, унаследованный от FreeBSD, также поддерживает многопоточность. [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 перешла на систему pkgsrc NetBSD , что воспринималось как способ уменьшения объема работы, необходимой для доступности стороннего программного обеспечения. [6] [22] В конце концов, поддержание совместимости с оказалось требующим больше усилий, чем первоначально предполагалось, поэтому в рамках проекта был создан DPorts, надстройка над коллекцией портов FreeBSD . [23] [24]pkgsrc

Поддержка 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]

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

DragonFly BSD 6.2.1 со средой рабочего стола Lumina

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

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

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

Средства распространения

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

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

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

Смотрите также

Рекомендации

  1. ^ "DragonFly BSD 6.4" . Стрекоза БСД . Проверено 15 января 2023 г.
  2. Диллон, Мэтью (22 августа 2006 г.), «Re: Сколько микроядра?», список рассылки ядра , получено 14 сентября 2011 г.
  3. ^ «Лицензия DragonFly BSD», DragonFly BSD , получено 17 января 2015 г.
  4. Диллон, Мэтью (16 июля 2003 г.), «Объявление DragonFly BSD!», список рассылки freebsd-current , получено 26 июля 2007 г.
  5. ^ Лехи, Грег (2001), Улучшение реализации SMP во FreeBSD (PDF) , USENIX , получено 22 февраля 2012 г.
  6. ^ Аб Кернер, Шон Майкл (10 января 2006 г.), «Новый DragonFly выпущен для пользователей BSD», InternetNews , заархивировано из оригинала 28 июня 2011 г. , получено 20 ноября 2011 г.
  7. ↑ abcdef Бьянкуцци, Федерико (8 июля 2004 г.), «Behind DragonFly BSD», O'Reilly Media , заархивировано из оригинала 9 апреля 2014 г. , получено 20 ноября 2011 г.
  8. Лоли-Керу, Евгения (13 марта 2004 г.), «Интервью с Мэтью Диллоном из DragonFly BSD», OSNews , получено 22 февраля 2012 г.
  9. ^ abcdef Чисналл, Дэвид (15 июня 2007 г.), «DragonFly BSD: UNIX для кластеров?», InformIT , получено 22 ноября 2011 г.
  10. Сюй, Джеффри М. (13 марта 2004 г.). Операционная система DragonFly BSD (PDF) . AsiaBSDCon 2004. Тайбэй, Тайвань . Проверено 20 ноября 2011 г.
  11. ↑ abc Эндрюс, Джереми (6 августа 2007 г.), «Интервью: Мэтью Диллон», KernelTrap , заархивировано из оригинала 15 мая 2011 г.
  12. ^ «Производительность DragonFly BSD MP значительно улучшена», OSNews , 16 ноября 2011 г. , получено 19 ноября 2011 г.
  13. ^ Аб Лучани, Роберт (24 мая 2009 г.), резьба M:N в DragonflyBSD (PDF) , BSDCon, заархивировано из оригинала (PDF) 23 декабря 2010 г.
  14. ^ Шерилл, Джастин (11 января 2004 г.), «Расплата уже» , заархивировано из оригинала 30 апреля 2014 г. , получено 20 ноября 2011 г.
  15. ^ Пистритто, Джо; Диллон, Мэтью; Шерилл, Джастин С.; и другие. (24 апреля 2004 г.), «Сериализация токена», список рассылки ядра , заархивировано из оригинала 15 апреля 2013 г. , получено 20 марта 2012 г.
  16. ^ Бонвик, Джефф ; Адамс, Джонатан (3 января 2002 г.), Журналы и Vmem: расширение распределителя блоков на множество процессоров и произвольных ресурсов , USENIX , получено 20 ноября 2011 г.
  17. ^ Диллон, Мэтью (23 апреля 2009 г.), «Новый libc malloc зафиксирован», список рассылки ядра , получено 8 августа 2011 г.
  18. ^ abcd Vervloesem, Коэн (21 апреля 2010 г.), «DragonFly BSD 2.6: к операционной системе свободной кластеризации», LWN.net , получено 19 ноября 2011 г.
  19. ^ Экономопулос, Аггелос (16 апреля 2007 г.), «Взгляд на виртуальное ядро ​​DragonFly», LWN.net , вып. часть 1 , получено 8 декабря 2011 г.
  20. ^ Экономопулос, Аггелос (16 апреля 2007 г.), «Взгляд на виртуальное ядро ​​DragonFly», LWN.net , вып. часть 2 , дата обращения 8 декабря 2011 г.
  21. ^ "HowTo DPorts", DragonFly BSD , получено 2 декабря 2013 г.
  22. ^ Вейнем, Марк (2007). «10 лет pkgsrc». НетБСД . Йорг Зонненбергер о pkgsrc на DragonFly BSD и его проектах разработки pkgsrc . Проверено 22 ноября 2011 г.
  23. ^ Шерилл, Джастин (30 сентября 2013 г.), «Почему dports?», DragonFly BSD Digest , заархивировано из оригинала 30 апреля 2014 г. , получено 2 декабря 2011 г.
  24. Шерилл, Джастин (29 сентября 2013 г.), «Есть ли новые пакеты?», список рассылки пользователей , получено 2 декабря 2013 г.
  25. Бушманн, Джонатан (14 марта 2007 г.), «Первый патч для получения CARP на Dfly», список рассылки ядра , получено 20 ноября 2011 г.
  26. ^ «Страница руководства CARP (4)», Страницы онлайн-руководства DragonFly , получено 20 ноября 2011 г.
  27. ^ Диллон, Мэтью (10 октября 2007 г.), «Re: Обновление файловой системы HAMMER - проектный документ», список рассылки ядра , получено 20 ноября 2011 г.
  28. ^ Ларабель, Майкл (7 января 2011 г.), «Может ли HAMMER DragonFlyBSD конкурировать с Btrfs, ZFS?», Phoronix , получено 20 ноября 2011 г. , HAMMER действительно кажется очень интересной файловой системой BSD. Хотя она и не так быстра, как файловая система ZFS в BSD, но это также оригинальная файловая система для проекта DragonFlyBSD, а не порт из OpenSolaris. HAMMER не только в целом быстрее обычной файловой системы UFS, но и имеет гораздо больший набор функций.
  29. Диллон, Мэтью (8 февраля 2012 г.), «ДИЗАЙН-документ для HAMMER2 (обновление от 8 февраля 2012 г.)» , пользователи , получено 22 февраля 2012 г.
  30. Диллон, Мэтью (18 августа 2017 г.), «Следующий выпуск DFly будет иметь первоначальную реализацию HAMMER2», пользователи , получено 3 июля 2018 г.
  31. ^ ab Mr (7 января 2010 г.), «DragonFlyBSD с Мэтью Диллоном», bsdtalk , заархивировано из оригинала ( ogg ) 25 апреля 2012 г. , получено 20 ноября 2011 г.
  32. ^ ab "Дневник DragonFly BSD", DragonFly BSD , 7 января 2006 г. , получено 19 ноября 2011 г.
  33. ^ "DragonFly: Releases", DragonFly BSD , получено 19 июня 2014 г.
  34. ^ Тижо, Франсуа (31 июля 2007 г.), «Поддержка KMS + i915 теперь в -master», список рассылки пользователей , получено 2 декабря 2013 г.
  35. ^ Мэтью Диллон (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"".
  36. ↑ Аб Кернер, Шон Майкл (25 июля 2006 г.), «DragonFly BSD 1.6 Cuts the Cord», InternetNews , получено 20 ноября 2011 г.
  37. Таунсенд, Трент (18 января 2006 г.), «Краткий обзор DragonFly BSD 1.4», OSNews , получено 16 ноября 2011 г.

Внешние ссылки