Это хорошая статья. Для получения дополнительной информации нажмите здесь.
Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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), систему передачи сообщений внутри ядра и файловую систему HAMMER . [7] На многие концепции дизайна повлияла AmigaOS . [8]

Системный дизайн [ править ]

Ядро [ править ]

Ядра подсистема обмен сообщения разрабатываются аналогично тем , которые содержатся в микроядрах , такие как Мах , хотя он является менее сложным по конструкции. Однако DragonFly использует монолитную систему ядра. [9] Подсистема обмена сообщениями DragonFly может работать как в синхронном, так и в асинхронном режиме и пытается использовать эту возможность для достижения максимальной производительности в любой конкретной ситуации. [10]

По словам разработчика Мэтью Диллона , наблюдается прогресс в обеспечении возможностей обмена сообщениями как с устройством ввода-вывода (I / O), так и с виртуальной файловой системой (VFS), что позволит достичь остальных целей проекта. Новая инфраструктура позволит перенести многие части ядра в пользовательское пространство; здесь их будет легче отлаживать, поскольку они будут меньшими по размеру изолированными программами, а не маленькими частями, вплетенными в более крупный фрагмент кода. Кроме того, перенос выбранного кода ядра в пользовательское пространство дает преимущество в том, что делает систему более надежной; если произойдет сбой драйвера пользовательского пространства, это не приведет к сбою ядра. [11]

Системные вызовы разделяются на версии пользовательского пространства и ядра и инкапсулируются в сообщения. Это поможет уменьшить размер и сложность ядра за счет перемещения вариантов стандартных системных вызовов на уровень совместимости со стороны пользователя и поможет поддерживать прямую и обратную совместимость между версиями DragonFly. Аналогичным образом переносится код совместимости с Linux и другими Unix-подобными ОС. [8]

Threading [ править ]

Поскольку поддержка архитектур с несколькими наборами команд усложняет поддержку симметричной многопроцессорной обработки (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] В конце концов, поддержание совместимости с pkgsrcWindows потребовало больше усилий, чем предполагалось изначально, поэтому в проекте был создан 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 .

История выпусков [ править ]

См. Также [ править ]

  • Сравнение операционных систем BSD
  • Сравнение операционных систем с открытым исходным кодом
  • Сравнение ядер операционных систем

Ссылки [ править ]

  1. ^ "DragonFly BSD 5.8" . Стрекоза BSD . Проверено 25 сентября 2020 года .
  2. ^ "DragonFly BSD License" , DragonFly BSD , получено 17 января 2015 г.
  3. Диллон, Мэтью (16 июля 2003 г.), «Объявление DragonFly BSD!» , список рассылки freebsd-current , получено 26 июля 2007 г.
  4. ^ Лехи, Грег (2001), Улучшение реализации SMP FreeBSD (PDF) , USENIX , получено 22 февраля 2012 г.
  5. ^ a b Кернер, Шон Майкл (10 января 2006 г.), «Новый выпуск DragonFly для пользователей BSD» , InternetNews , получено 20 ноября 2011 г.
  6. ^ a b c d e f Бьянкуцци, Федерико (8 июля 2004 г.), "Behind DragonFly BSD" , O'Reilly Media , получено 20 ноября 2011 г.
  7. ^ Loli-Queru, Eugenia (13 марта 2004), "Интервью с Мэтью Диллон из DragonFly BSD" , OSNews , извлекаться 22 февраля +2012
  8. ^ a b c d e f Чиснолл, Дэвид (15 июня 2007 г.), "DragonFly BSD: UNIX для кластеров?" , InformIT , получен 22 ноября +2011
  9. ^ Диллон, Мэтью (22 августа 2006 г.), "Re: Сколько в микроядре?" , список рассылки ядра , получено 14 сентября 2011 г.
  10. Сюй, Джеффри М. (13 марта 2004 г.). Операционная система DragonFly BSD (PDF) . AsiaBSDCon 2004 . Тайбэй, Тайвань . Проверено 20 ноября 2011 года .
  11. ^ a b c Эндрюс, Джереми (6 августа 2007 г.), «Интервью: Мэтью Диллон» , KernelTrap , архивировано с оригинала 15 мая 2011 г.
  12. ^ «Производительность DragonFly BSD MP значительно улучшена» , OSNews , 16 ноября 2011 г. , получено 19 ноября 2011 г.
  13. ^ a b Лучани, Роберт (24 мая 2009 г.), потоки M: N в DragonflyBSD (PDF) , BSDCon, заархивировано из оригинала (PDF) 23 декабря 2010 г.
  14. ^ Sherrill, Джастин (11 января 2004), Заплатить уже , получен 20 ноября 2 011
  15. ^ Пистритто, Джо; Диллон, Мэтью; Шерилл, Джастин К.; и другие. (24 апреля 2004 г.), «Сериализация токена» , список рассылки ядра , заархивировано из оригинала 15 апреля 2013 г. , получено 20 марта 2012 г.
  16. ^ Бонвик, Джефф ; Адамс, Джонатан (3 января 2002 г.), Magazines и Vmem: расширение Slab Allocator на многие процессоры и произвольные ресурсы , USENIX , получено 20 ноября 2011 г.
  17. Диллон, Мэтью (23 апреля 2009 г.), «New libc malloc commit» , список рассылки ядра , получено 8 августа 2011 г.
  18. ^ a b c d Vervloesem, Koen (21 апреля 2010 г.), «DragonFly BSD 2.6: на пути к бесплатной кластерной операционной системе» , LWN.net , получено 19 ноября 2011 г.
  19. ^ Economopoulos, Aggelos (16 апреля 2007), "Быстрый взгляд на DragonFly Virtual Кернел" , LWN.net (часть 1) , получен 8 декабря +2011
  20. ^ Economopoulos, Aggelos (16 апреля 2007), "Быстрый взгляд на DragonFly Virtual Кернел" , LWN.net (часть 2) , получен 8 декабря 2 011
  21. ^ "HowTo DPorts" , DragonFly BSD , получено 2 декабря 2013 г.
  22. ^ Weinem, Марк (2007). «10 лет ПКГСРК» . NetBSD . Йорг Зонненбергер о pkgsrc на DragonFly BSD и своих проектах по разработке pkgsrc . Проверено 22 ноября 2011 года .
  23. ^ Шерилл, Джастин (30 сентября 2013 г.), «Почему dports?» , DragonFly BSD Digest , получено 2 декабря 2011 г.
  24. ^ Sherrill, Джастин (29 сентября 2013), "Любые новые пакеты?" , список рассылки пользователей , получено 2 декабря 2013 г.
  25. ^ Buschmann, Джонатан (14 марта 2007), «Первый патч , чтобы получить CARP на Dfly» , список рассылки ядра , получен 20 ноября +2011
  26. ^ "Страница руководства CARP (4)" , страницы онлайн-руководства DragonFly , получено 20 ноября 2011 г.
  27. ^ Диллон, Мэтью (10 октября 2007 г.), «Re: HAMMER filesystem update - design document» , список рассылки ядра , получено 20 ноября 2011 г.
  28. ^ Ларабель, Майкл (7 января 2011 г.), «Может ли МОЛОТОК DragonFlyBSD конкурировать с Btrfs, ZFS?» , Phoronix , получено 20 ноября 2011 г. , HAMMER действительно кажется очень интересной файловой системой BSD. Хотя это не так быстро, как файловая система ZFS в BSD, но это также оригинальная файловая система для проекта DragonFlyBSD, а не порт из OpenSolaris. HAMMER в целом не только быстрее, чем обычная файловая система UFS, но и имеет гораздо больший набор функций.
  29. ^ Диллон, Мэтью (8 февраля 2012 г.), «DESIGN document for HAMMER2 (обновление от 8 февраля 2012 г. , пользователи , получено 22 февраля 2012 г.
  30. ^ Диллон, Мэтью (18 августа 2017 г.), «В следующем выпуске DFly будет начальная реализация HAMMER2» , пользователи , получено 3 июля 2018 г.
  31. ^ a b Mr (7 января 2010 г.), «DragonFlyBSD с Мэтью Диллон» , bsdtalk , заархивировано из оригинала ( ogg ) 25 апреля 2012 г. , получено 20 ноября 2011 г.
  32. ^ a b «Дневник DragonFly BSD» , DragonFly BSD , 7 января 2006 г. , получено 19 ноября 2011 г.
  33. ^ "DragonFly: Releases" , DragonFly BSD , получено 19 июня 2014 г.
  34. ^ Tigeot, Francois (31 июля 2007), "KMS + i915 поддержка теперь -МАСТЕР" , пользователи список рассылки , получен 2 декабря 2 013
  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. ^ a b Кернер, Шон Майкл (25 июля 2006 г.), «DragonFly BSD 1.6 перерезает шнур» , InternetNews , получено 20 ноября 2011 г.
  37. ^ Таунсенд, Трент (18 января 2006 г.), «Краткий обзор DragonFly BSD 1.4» , OSNews , получено 16 ноября 2011 г.

Внешние ссылки [ править ]

  • Официальный веб-сайт