DragonFly BSD - DragonFly BSD

DragonFly BSD
DragonFly BSD Logo.svg
DragonFly BSD 5.2.0 screenshot.png
DragonFly BSD 5.2.0 cu mediu desktop Lumina
Dezvoltator Matthew Dillon
Familia OS Unix-like
Starea de lucru Actual
Modelul sursă Sursa deschisa
Eliberarea inițială 1.0 / 12 iulie 2004 ; Acum 17 ani ( 12.07.2004 )
Ultima lansare 6.0.1 / 13 octombrie 2021 ; Acum o zi ( 13-10-2021 )
Repertoriu
Disponibil in Engleză
Manager de pachete pachet
Platforme x86-64
Tipul de nucleu Hibrid
Userland BSD

Interfață de utilizator implicită
Unix shell
Licență BSD
Site oficial www .dragonflybsd .org

DragonFly BSD este un sistem de operare gratuit și open-source Unix asemănător cu cel de la FreeBSD 4.8. Matthew Dillon , dezvoltator Amiga la sfârșitul anilor 1980 și începutul anilor 1990 și dezvoltator FreeBSD între 1994 și 2003, a început să lucreze la DragonFly BSD în iunie 2003 și l-a anunțat pe listele de distribuție FreeBSD pe 16 iulie 2003.

Dillon a început DragonFly în convingerea că tehnicile adoptate pentru filetare și multiprocesare simetrică în FreeBSD 5 ar duce la probleme de performanță și întreținere. El a căutat să corecteze aceste probleme anticipate în cadrul proiectului FreeBSD. Datorită conflictelor cu alți dezvoltatori FreeBSD privind implementarea ideilor sale, abilitatea sa de a schimba direct baza de cod a fost în cele din urmă revocată. În ciuda acestui fapt, proiectele DragonFly BSD și FreeBSD încă funcționează împreună, partajând remedieri de erori, actualizări ale driverelor și alte îmbunătățiri.

Conceput ca continuarea logică a seriei FreeBSD 4.x, DragonFly a diferit semnificativ de FreeBSD, implementând fire de kernel ușoare (LWKT), un sistem de transmitere a mesajelor în kernel și sistemul de fișiere HAMMER . Multe concepte de design au fost influențate de AmigaOS .

Proiectarea sistemului

Nucleu

Nucleu Subsistemul de mesaje în curs de dezvoltare este similar cu cele găsite în micronucleu , cum ar fi Mach , deși este mai puțin complex prin design. Cu toate acestea, DragonFly folosește un sistem de nucleu monolitic. Subsistemul de mesagerie DragonFly are capacitatea de a acționa fie într-o manieră sincronă, fie asincronă și încearcă să utilizeze această capacitate pentru a obține cele mai bune performanțe posibile în orice situație dată.

Potrivit dezvoltatorului Matthew Dillon , se fac progrese în furnizarea atât a capacităților de mesagerie de intrare / ieșire a dispozitivului (I / O), cât și a sistemului de fișiere virtuale (VFS) care vor permite îndeplinirea celorlalte obiective ale proiectului. Noua infrastructură va permite ca multe părți ale nucleului să fie migrate în spațiul utilizatorilor; aici vor fi depanate mai ușor, deoarece vor fi programe mai mici, izolate, în loc să fie părți mici legate într-o bucată mai mare de cod. În plus, migrarea codului de nucleu selectat în spațiul utilizatorilor are avantajul de a face sistemul mai robust; dacă un driver de spațiu utilizator se blochează, acesta nu va bloca nucleul.

Apelurile de sistem sunt împărțite în versiunile userland și kernel și sunt încapsulate în mesaje. Acest lucru va ajuta la reducerea dimensiunii și complexității nucleului prin mutarea variantelor de apeluri de sistem standard într-un strat de compatibilitate a țării utilizatorilor și va ajuta la menținerea compatibilității înainte și înapoi între versiunile DragonFly. Linux și alte coduri de compatibilitate cu sistemul de operare similar Unix sunt migrate în mod similar.

Filetat

Deoarece suportul pentru arhitecturi de seturi de instrucțiuni multiple complică suportul multiprocesării simetrice (SMP), DragonFly BSD își limitează acum suportul la platforma x86-64 . DragonFly a funcționat inițial pe arhitectura x86 , totuși de la versiunea 4.0 nu mai este acceptat. Începând cu versiunea 1.10, DragonFly acceptă threading 1: 1 userland (un fir de kernel per thread userland), care este considerat o soluție relativ simplă, care este, de asemenea, ușor de întreținut. Moștenit de la FreeBSD, DragonFly acceptă și multi-threading.

În DragonFly, fiecare procesor are propriul programator de fire. La creare, firele sunt atribuite procesoarelor și nu sunt niciodată comutate preventiv de la un procesor la altul; acestea sunt migrate numai prin trecerea unui mesaj de întrerupere inter-procesor (IPI) între procesoarele implicate. Programarea firelor inter-procesor se realizează și prin trimiterea de mesaje IPI asincrone. Un avantaj al acestei compartimentări curate a subsistemului de filetare este că cache - urile de la bord ale procesoarelor din sistemele multiprocesor simetrice nu conțin date duplicate, permițând performanțe mai mari oferind fiecărui procesor din sistem capacitatea de a utiliza propria cache pentru a stoca diferite lucruri la care să lucrezi.

LWKT Subsistemul este angajat la locul de muncă partiție între mai multe fire de nucleu (de exemplu , în codul de rețea există un fir per protocol per procesor), reducerea concurenței prin eliminarea necesității de a împărtăși anumite resurse între diferite sarcini de kernel.

Protecția resurselor partajate

Pentru a rula în siguranță pe mașini multiprocesor, accesul la resursele partajate (cum ar fi fișiere, structuri de date) trebuie serializat, astfel încât firele sau procesele să nu încerce să modifice aceeași resursă în același timp. Pentru a împiedica mai multe fire de acces sau de a modifica simultan o resursă partajată, DragonFly folosește secțiuni critice și serializează jetoane pentru a preveni accesul simultan. În timp ce atât Linux, cât și FreeBSD 5 folosesc modele mutex cu granulație fină pentru a obține performanțe mai mari pe sistemele multiprocesor , DragonFly nu. Până de curând, DragonFly folosea și spls , dar acestea au fost înlocuite cu secțiuni critice.

O mare parte din nucleul sistemului, inclusiv subsistemul LWKT , subsistemul de mesagerie IPI și noul alocator de memorie kernel, sunt fără blocare, ceea ce înseamnă că funcționează fără a utiliza mutexe, fiecare proces funcționând pe un singur procesor. Secțiunile critice sunt folosite pentru a proteja împotriva întreruperilor locale, individual pentru fiecare CPU, garantând că un fir executat în prezent nu va fi împiedicat.

Jetoanele de serializare sunt utilizate pentru a preveni accesele simultane de la alte procesoare și pot fi ținute simultan de mai multe fire de execuție, asigurându-se că doar unul dintre acele fire de execuție se execută la un moment dat. Firele blocate sau adormite, prin urmare, nu împiedică alte fire să acceseze resursa partajată, spre deosebire de un fir care ține un mutex. Printre altele, utilizarea jetoanelor de serializare previne multe dintre situațiile care ar putea duce la blocaje și inversiuni de prioritate atunci când se utilizează mutexuri, precum și simplificarea considerabilă a proiectării și implementării unei proceduri în mai mulți pași care ar necesita o resursă care să fie partajată între fire multiple. Codul jetonului de serializare evoluează spre ceva destul de similar cu caracteristica „ Citire-copiere-actualizare ” disponibilă acum în Linux. Spre deosebire de implementarea actuală a RCU Linux, DragonFly's este implementat astfel încât numai procesoarele care concurează pentru același token sunt afectate, mai degrabă decât toți procesoarele din computer.

DragonFly a trecut la repartitorul de plăci cu siguranță multiprocesor , care nu necesită nici mutexuri, nici operațiuni de blocare pentru sarcinile de atribuire a memoriei. În cele din urmă a fost portat în biblioteca standard C din țara utilizatorilor, unde a înlocuit implementarea malloc a FreeBSD.

Kernel virtual

De la lansarea 1.8 DragonFly are un mecanism de virtualizare similar cu Linux în modul utilizator , permițând utilizatorului să ruleze un alt kernel în țara utilizatorilor. Kernelul virtual ( vkernel ) este rulat într-un mediu complet izolat cu interfețe de rețea și stocare emulate, simplificând astfel testarea subsistemelor kernelului și caracteristicile de clusterizare.

Vkernel-ul are două diferențe importante față de nucleul real: îi lipsesc multe rutine pentru gestionarea hardware-ului de nivel scăzut și folosește funcții de bibliotecă standard C (libc) în locul implementărilor in-kernel ori de câte ori este posibil. Deoarece atât nucleul real, cât și cel virtual sunt compilate din aceeași bază de cod, aceasta înseamnă în mod eficient că rutinele dependente de platformă și reimplementările funcțiilor libc sunt clar separate într-un arbore sursă.

Vkernel rulează pe partea superioară a abstractizărilor hardware furnizate de nucleul real. Acestea includ cronometrul bazat pe kqueue , consola (mapată la terminalul virtual unde este executat vkernel), imaginea discului și dispozitivul Ethernet al kernelului virtual ( VKE ), tunelând toate pachetele către interfața de atingere a gazdei .

Gestionarea pachetelor

Software-ul terț este disponibil pe DragonFly ca pachete binare prin pkgngsau dintr-o colecție de porturi native - DPorts .

DragonFly a folosit inițial colecția FreeBSD Ports ca sistem oficial de gestionare a pachetelor , dar începând cu versiunea 1.4 a trecut la sistemul pkgsrc al NetBSD , care a fost perceput ca o modalitate de a reduce cantitatea de muncă necesară pentru disponibilitatea software-ului terților. În cele din urmă, menținerea compatibilității cu pkgsrcs-a dovedit a necesita mai mult efort decât s-a anticipat inițial, astfel încât proiectul a creat DPorts, o suprapunere peste colecția FreeBSD Ports .

Suport CARP

Implementarea inițială a Protocolului comun de redundanță a adresei (denumit în mod obișnuit CARP ) a fost finalizată în martie 2007. Începând din 2011, suportul CARP este integrat în DragonFly BSD.

Sisteme de fișiere HAMMER

Alături de sistemul de fișiere Unix , care este de obicei sistemul de fișiere implicit pe BSD-uri, DragonFly BSD acceptă sistemele de fișiere HAMMER și HAMMER2 . HAMMER2 este sistemul de fișiere implicit începând cu versiunea 5.2.0.

HAMMER a fost dezvoltat special pentru DragonFly BSD pentru a oferi un analog bogat în funcții, dar mai bine conceput al ZFS din ce în ce mai popular . HAMMER acceptă istoricul sistemelor de fișiere configurabile, instantanee , sumă de verificare , deduplicarea datelor și alte caracteristici tipice pentru sistemele de fișiere de acest gen.

HAMMER2, succesorul sistemului de fișiere HAMMER, este acum considerat stabil, utilizat în mod implicit și este centrul dezvoltării ulterioare. Planurile pentru dezvoltarea sa au fost inițial partajate în 2012. În 2017, Dillon a anunțat că următoarea versiune DragonFly BSD (5.0.0) va include o versiune utilizabilă, deși încă experimentală, a HAMMER2 și a descris caracteristicile designului. Odată cu lansarea după 5.0.0, versiunea 5.2.0, HAMMER2 a devenit noul sistem de fișiere implicit.

devfs

În 2007, DragonFly BSD a primit un nou sistem de fișiere de dispozitiv (devfs), care adaugă și elimină dinamic nodurile dispozitivului, permite accesarea dispozitivelor prin căile de conectare, recunoaște unitățile după numere de serie și elimină necesitatea /devierarhizării sistemului de fișiere pre-populat . A fost implementat ca un proiect Google Summer of Code 2009.

Instantanee ale aplicației

DragonFly BSD acceptă caracteristica aplicațiilor rezidente în stilul Amiga : realizează un instantaneu al spațiului de memorie virtual al unui program mare, legat dinamic, după încărcare, permițând instanțelor viitoare ale programului să înceapă mult mai repede decât ar fi avut altfel. Acest lucru înlocuiește capacitatea de prelinking la care se lucra mai devreme în istoria proiectului, deoarece asistența rezidenților este mult mai eficientă. Programele mari precum cele găsite în Compilația software KDE cu multe biblioteci partajate vor beneficia cel mai mult de acest suport.

Dezvoltare și distribuție

La fel ca în cazul FreeBSD și OpenBSD , dezvoltatorii DragonFly BSD înlocuiesc încet codul C- stil prototip funcțional cu echivalente ANSI mai moderne . Similar cu alte sisteme de operare, versiunea DragonFly a GNU Compiler Collection are o îmbunătățire numită Stack-Smashing Protector (ProPolice) activată în mod implicit, oferind o protecție suplimentară împotriva atacurilor bazate pe depășirea bufferului . Începând cu 23 iulie 2005, nucleul nu mai este construit în mod implicit cu această protecție.

Fiind un derivat al FreeBSD, DragonFly a moștenit un sistem de construcție integrat ușor de utilizat, care poate reconstrui întregul sistem de bază din sursă cu doar câteva comenzi. Dezvoltatorii DragonFly folosesc sistemul de control al versiunilor Git pentru a gestiona modificările aduse codului sursă DragonFly . Spre deosebire de FreeBSD-ul său părinte, DragonFly are atât versiuni stabile, cât și instabile într-un singur arbore sursă, datorită unei baze de dezvoltatori mai mici.

La fel ca celelalte nuclee BSD (și cele ale majorității sistemelor de operare moderne), DragonFly folosește un debugger încorporat pentru a ajuta dezvoltatorii să găsească erori ale nucleului. Mai mult, din octombrie 2004, un nucleu de depanare, care face ca rapoartele de erori să fie mai utile pentru depistarea problemelor legate de nucleu, este instalat în mod implicit, în detrimentul unei cantități relativ mici de spațiu pe disc. Când este instalat un nou nucleu, copia de rezervă a nucleului anterior și a modulelor sale sunt eliminate de simbolurile lor de depanare pentru a minimiza și mai mult utilizarea spațiului pe disc.

Medii de distribuție

Sistemul de operare este distribuit sub forma unui CD live și a unui USB Live ( disponibilă întreaga aromă X11 ) care pornește într-un sistem DragonFly complet. Acesta include sistemul de bază și un set complet de pagini de manual și poate include cod sursă și pachete utile în versiunile viitoare. Avantajul acestui lucru este că, cu un singur CD, utilizatorii pot instala software-ul pe un computer, pot folosi un set complet de instrumente pentru a repara o instalare deteriorată sau pot demonstra capacitățile sistemului fără a-l instala. Instantaneele zilnice sunt disponibile de pe site-ul principal pentru cei care doresc să instaleze cele mai recente versiuni ale DragonFly fără a construi din sursă.

La fel ca celelalte BSD-uri gratuite și open-source, DragonFly este distribuit în condițiile versiunii moderne a licenței BSD .

Istoricul lansărilor

Versiune Data Schimbări
6.0 10 mai 2021
  • Lucrul îmbunătățit al „dsynth” - instrument care permite menținerea depozitului local DPort
  • S-a eliminat suportul pentru MAP_VPAGETABLE mmap (), ca urmare, nu este posibil ca „vkernel” din această versiune să funcționeze
5.8 3 martie 2020
5.6 17 iunie 2019
  • Sistem de memorie virtuală îmbunătățit
  • Actualizări la radeon și ttm
  • Îmbunătățiri de performanță pentru HAMMER2
5.4 3 decembrie 2018
  • Drivere actualizate pentru rețea, mașini virtuale și afișaj
  • GCC 8.0 cu versiunile precedente GCC
  • Ciocan cu mai multe remedieri de probleme
5.2 10 aprilie 2018
5.0 16 octombrie 2017
  • Noul sistem de fișiere HAMMER2
  • Acum poate suporta peste 900.000 de procese pe o singură mașină
  • Suport i915 îmbunătățit
  • IPFW performanță mai bună
4.8 27 martie 2017
4.6 2 august 2016
  • Suport îmbunătățit i915 și Radeon
  • Suport NVM Express
  • Performanță SMP îmbunătățită
  • Performanță îmbunătățită a rețelei
  • Suport preliminar pentru bootarea UEFI
  • autofs importate din FreeBSD, amdeliminate
4.4 7 decembrie 2015
  • CCG 5.2
  • gold acum linkerul implicit
  • Suport îmbunătățit i915 și Radeon
  • Revizuirea completă a sistemului local
  • Suport de colaționare pentru localizări denumite
  • Biblioteca Regex înlocuită cu TRE
  • Suport pentru versiuni de simboluri în libc
  • Numeroase curățări și remedieri HAMMER
4.2 29 iunie 2015
  • CCG 5.1.1
  • Suport îmbunătățit i915 și Radeon
  • Suport de sunet îmbunătățit
  • Suport îmbunătățit pentru controlerul de memorie și senzorii de temperatură
  • Path MTU Discovery activat în mod implicit
  • Suportul SCTP a fost eliminat
  • Sendmail înlocuit de DMA
  • Paginile de informații GNU au fost eliminate
4.0 25 noiembrie 2014
  • PF fără blocare, multi-filet
  • Rețelele conexe sunt mai bine filetate pentru un randament îmbunătățit
  • Funcția de securitate Procctl din kernel
  • Suport pentru până la 256 de procesoare
  • Suport îmbunătățit pentru rețeaua wireless
  • Rust și Free Pascal sunt acum acceptate
  • Suportul i915 s-a îmbunătățit mult
  • CCG 4.7.4
3.8 4 iunie 2014
  • Rădăcină dinamică și suport PAM
  • USB4BSD este acum implicit
  • Suport nativ C-State pentru procesoare Intel
  • Jeton de port TCP împărțit pentru performanțe mai bune de conectare TCP (2)
  • CCG 4.7.3
  • HAMMER2 în sistem (nu este pregătit pentru utilizare în producție)
  • Ultima versiune pe 32 de biți
3.6 25 noiembrie 2013
  • Reducerea conținutului SMP
  • Setarea modurilor de kernel pentru GPU-urile Intel și AMD
  • Accelerare hardware pentru procesoarele grafice Intel până la Ivy Bridge
3.4 29 aprilie 2013
  • A fost introdus noul manager de pachete, DPorts
  • CCG 4.7
  • Utilizare îmbunătățită a procesorului și performanță tmpfs sub sarcină extremă
3.2 2 noiembrie 2012
  • Nucleul capabil de multiprocesor a devenit obligatoriu.
  • Îmbunătățiri de performanță în planificator.
  • USB4BSD importat din FreeBSD.
  • PUFFS importate din NetBSD.
3.0 22 februarie 2012
  • Nucleul capabil de multiprocesor a devenit implicit
  • Îmbunătățiri ale performanței HAMMER
  • TrueCrypt - suport de criptare compatibil
  • dm-crypt înlocuit cu o bibliotecă compatibilă cu licență BSD
  • Compatibilitate POSIX îmbunătățită
  • Driver de dispozitiv pentru memoria ECC
  • Stivuire majoră a protocolului de rețea și îmbunătățiri SMP
  • Îmbunătățiri legate de ACPI
2.10 26 aprilie 2011
  • Blocare gigant eliminată din fiecare zonă, cu excepția subsistemului de memorie virtuală
  • Deduplicare HAMMER
  • CCG 4.4
  • Sistem de punte rescris
  • Îmbunătățiri majore ale performanței
2.8 30 octombrie 2010
2.6 6 aprilie 2010
  • Swapcache
  • tmpfs importat din NetBSD
  • HAMMER și îmbunătățiri generale I / O
2.4 16 septembrie 2009
  • devfs
  • Noul driver AHCI , inclusiv suport NCQ complet
  • Îmbunătățiri NFS
  • Suport complet x86-64
2.2 17 februarie 2009
  • HAMMER este pregătit oficial pentru producție
  • Îmbunătățiri majore ale stabilității
  • Noua versiune media: LiveCD și LiveUSB
2.0 20 iulie 2008
  • Îmbunătățiri majore ale HAMMER
1.12 26 februarie 2008
1.10 6 august 2007
1.8 30 ianuarie 2007
1.6 24 iulie 2006
  • Nou generator de numere aleatorii
  • Cadrul IEEE 802.11 refactorizat
  • Îmbunătățiri majore majore ale blocării, clusterizării și utilizatorului VFS
  • Îmbunătățiri majore ale stabilității
1.4 7 ianuarie 2006
1.2 8 aprilie 2005
1.0 12 iulie 2004
  • Vitrina tehnologică
  • Noul program de instalare BSD
  • Subsistem LWKT și porturi ușoare / sistem de mesagerie
  • Majoritatea stivei de rețea sigure MP
  • Alocator de memorie fără blocare
  • Linkuri simbolice variante
  • Suport pentru verificarea aplicației .

Vezi si

Referințe

linkuri externe