stringtranslate.com

DragonFly BSD

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. [ необходима цитата ]

Задуманный как логическое продолжение серии 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 имеет механизм виртуализации, аналогичный User-mode Linux , [18] позволяющий пользователю запускать другое ядро ​​в пользовательском пространстве. Виртуальное ядро ​​( vkernel ) запускается в полностью изолированной среде с эмулированными сетевыми и хранилищными интерфейсами, что упрощает тестирование подсистем ядра и функций кластеризации. [9] [11]

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

Vkernel работает поверх аппаратных абстракций, предоставляемых реальным ядром. Они включают в себя таймер на основе kqueue , консоль (сопоставленную с виртуальным терминалом , где выполняется vkernel), образ диска и виртуальное ядро ​​Ethernet-устройства ( VKE ), туннелирующее все пакеты в интерфейс tap хоста . [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 Software Compilation со многими общими библиотеками, получат наибольшую выгоду от этой поддержки. [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] Она включает в себя базовую систему и полный набор страниц руководства, а также может включать исходный код и полезные пакеты в будущих версиях. Преимущество этого в том, что с помощью одного CD пользователи могут установить программное обеспечение на компьютер, использовать полный набор инструментов для восстановления поврежденной установки или продемонстрировать возможности системы без ее установки. Ежедневные снимки доступны на главном сайте для тех, кто хочет установить самые последние версии DragonFly без сборки из исходников.

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

История релизов

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

Ссылки

  1. ^ "DragonFly BSD 6.4". Dragonfly BSD . Получено 15 января 2023 г. .
  2. Диллон, Мэтью (22 августа 2006 г.), «Re: How much of microkernel?», список рассылки по ядру , получено 14 сентября 2011 г.
  3. ^ "DragonFly BSD License", DragonFly BSD , получено 17 января 2015 г.
  4. Диллон, Мэтью (16 июля 2003 г.), «Анонсируем DragonFly BSD!», список рассылки freebsd-current , получено 26 июля 2007 г.
  5. ^ Lehey, Greg (2001), Улучшение реализации FreeBSD SMP (PDF) , USENIX , получено 22 февраля 2012 г.
  6. ^ ab Kerner, Sean Michael (10 января 2006 г.), "New DragonFly Released For BSD Users", InternetNews , заархивировано из оригинала 28 июня 2011 г. , извлечено 20 ноября 2011 г.
  7. ^ abcdef Biancuzzi, Federico (8 июля 2004 г.), "Behind DragonFly BSD", O'Reilly Media , заархивировано из оригинала 9 апреля 2014 г. , извлечено 20 ноября 2011 г.
  8. Loli-Queru, Eugenia (13 марта 2004 г.), «Интервью с Мэтью Диллоном из DragonFly BSD», OSNews , получено 22 февраля 2012 г.
  9. ^ abcdef Chisnall, David (15 июня 2007 г.), "DragonFly BSD: UNIX для кластеров?", InformIT , получено 22 ноября 2011 г.
  10. ^ Hsu, Jeffery M. (13 марта 2004 г.). Операционная система DragonFly BSD (PDF) . AsiaBSDCon 2004. Тайбэй, Тайвань . Получено 20 ноября 2011 г.
  11. ^ abc Andrews, Jeremy (6 августа 2007 г.), «Интервью: Мэтью Диллон», KernelTrap , заархивировано из оригинала 15 мая 2011 г.
  12. ^ "DragonFly BSD MP Performance Significantly Improved", OSNews , 16 ноября 2011 г. , получено 19 ноября 2011 г.
  13. ^ ab Luciani, Robert (24 мая 2009 г.), M:N threading in DragonflyBSD (PDF) , BSDCon, архивировано из оригинала (PDF) 23 декабря 2010 г.
  14. Sherrill, Justin (11 января 2004 г.), Paying off already, архивировано из оригинала 30 апреля 2014 г. , извлечено 20 ноября 2011 г.
  15. Пистритто, Джо; Диллон, Мэтью; Шеррилл, Джастин С.; и др. (24 апреля 2004 г.), «Сериализация токена», список рассылки ядра , заархивировано из оригинала 15 апреля 2013 г. , извлечено 20 марта 2012 г.
  16. Бонвик, Джефф ; Адамс, Джонатан (3 января 2002 г.), Журналы и Vmem: расширение распределителя Slab для многих ЦП и произвольных ресурсов, USENIX , получено 20 ноября 2011 г.
  17. Диллон, Мэтью (23 апреля 2009 г.), «New libc malloc commited», список рассылки ядра , получено 8 августа 2011 г.
  18. ^ abcd Vervloesem, Koen (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. ^ Weinem, Mark (2007). "10 лет pkgsrc". NetBSD . Йорг Зонненбергер о pkgsrc на DragonFly BSD и его проектах по разработке pkgsrc . Получено 22 ноября 2011 г.
  23. Sherrill, Justin (30 сентября 2013 г.), «Почему dports?», DragonFly BSD Digest , заархивировано из оригинала 30 апреля 2014 г. , извлечено 2 декабря 2011 г.
  24. Sherrill, Justin (29 сентября 2013 г.), «Есть ли новые пакеты?», список рассылки пользователей , получено 2 декабря 2013 г.
  25. Buschmann, Jonathan (14 марта 2007 г.), «First Patch to get CARP on Dfly», список рассылки ядра , получено 20 ноября 2011 г.
  26. ^ "CARP(4) manual page", DragonFly On-Line Manual Pages , получено 20 ноября 2011 г.
  27. Диллон, Мэтью (10 октября 2007 г.), "Re: Обновление файловой системы HAMMER - проектный документ", список рассылки ядра , получено 20 ноября 2011 г.
  28. ^ Larabel, Michael (7 января 2011 г.), "Can DragonFlyBSD's HAMMER Compete With Btrfs, ZFS?", Phoronix , получено 20 ноября 2011 г. , HAMMER, похоже, очень интересная файловая система BSD. Она, хотя и не такая быстрая, как файловая система ZFS в BSD, но это также оригинальная файловая система для проекта DragonFlyBSD, а не порт из OpenSolaris. HAMMER не только в целом быстрее обычной файловой системы UFS, но и имеет гораздо больший набор функций.
  29. ^ Диллон, Мэтью (8 февраля 2012 г.), "DESIGN document for HAMMER2 (обновление от 08 февраля 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 diary", DragonFly BSD , 7 января 2006 г. , получено 19 ноября 2011 г.
  33. ^ "DragonFly: Releases", DragonFly BSD , получено 19 июня 2014 г.
  34. ^ Тижо, Франсуа (31 июля 2007 г.), «KMS + i915 support now in -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. ^ ab Kerner, Sean Michael (25 июля 2006 г.), "DragonFly BSD 1.6 Cuts the Cord", InternetNews , получено 20 ноября 2011 г.
  37. Таунсенд, Трент (18 января 2006 г.), «Краткий обзор DragonFly BSD 1.4», OSNews , получено 16 ноября 2011 г.

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