Minix 3 - Minix 3

Minix 3
Rocky Raccoon maskot af MINIX 3.jpg
Minix 3.png
Minix 3 kører X11 med twm som Window Manager
Udvikler Andrew S. Tanenbaum et al.
Skrevet i C , samlingssprog
OS familie Unix-lignende
Arbejdstilstand Forladt
Kildemodel Åben kilde
Første udgivelse 24. oktober 2005 ; 15 år siden ( 2005-10-24 )
Depot
Marketing mål Indlejrede systemer , uddannelse
Tilgængelig i engelsk
Platforme IA-32 , ARM
Kernel type Mikrokernel
Brugerland MINIX, NetBSD
Standard
brugergrænseflade
aske
Licens 2005: BSD-3-klausul
Original: BSD-3-klausul
Forud af Minix 1.0, 1.5 og 2.0
Officiel hjemmeside www .minix3 .org

Minix 3 er et projekt, der skal skabe et lille, højt tilgængeligt , højt fungerende Unix-lignende operativsystem . Den udgives under en BSD-3-klausul- licens og er et efterfølgerprojekt til de tidligere versioner, Minix 1 og 2.

Projektets hovedmål er, at systemet skal være fejltolerant ved at opdage og reparere sine egne fejl i farten, uden brugerindgreb. Systemets hovedanvendelser forventes at være integrerede systemer og uddannelse.

Fra 2017 understøtter MINIX 3 IA-32 og ARM arkitekturprocessorer . Det kan også køre på emulatorer eller virtuelle maskiner , såsom Bochs , VMware Workstation , Microsoft Virtual PC , Oracle VirtualBox og QEMU . En port til PowerPC -arkitektur er under udvikling.

Distributionen kommer på en live -cd og kan downloades som et levende USB -stick -billede. Den seneste udgivelse er "minix_R3.4.0rc6-d5e4fc0.iso.bz2" (9. maj 2017).

MINIX 3 menes at blive brugt i Intel Management Engine (ME) fundet i Intels Platform Controller Hub startende med introduktionen af ​​ME 11, der bruges sammen med Skylake- og Kaby Lake -processorer.

Dets anvendelse i Intel ME kunne gøre det til det mest udbredte operativsystem på x86 / AMD64 -processorer fra og med 2015 med flere installationer end Microsoft Windows, Linux eller macOS.

Mål for projektet

Struktur af henholdsvis monolitisk kerne og mikrokernelbaserede operativsystemer

Efter at have reflekteret over arten af monolitiske kernebaserede systemer, hvor en driver (som ifølge MINIX -skaberen Tanenbaum har cirka 3-7 gange så mange fejl som et sædvanligt program) kan nedbringe hele systemet, har MINIX 3 til formål at skabe et operativsystem system, der er en "pålidelig, selvhelende, multiserver Unix-klon".

For at opnå dette skal koden, der kører i kernen, være minimal, idet filserveren, processerveren og hver enhedsdriver kører som separate bruger-mode-processer. Hver driver overvåges omhyggeligt af en del af systemet, der hedder reinkarnationsserveren . Hvis en driver ikke reagerer på ping fra denne server, lukkes den ned og erstattes af en ny kopi af driveren.

I et monolitisk system kan en fejl i en driver let gå ned på hele kernen. Dette er langt mindre tilbøjeligt til at forekomme i MINIX 3.

Historie

MINIX 3 versioner
Version Udgivelses dato Beskrivelse
3.1.0
( OSDI3 )
2005-10-18
  • Den første udgivelse af MINIX 3 (bogudgivelse), under BSD-3-klausul .
3.1.1
(SOSP)
2005-10-24
3.1.2 2006-04-18
  • Den første version under den brugerdefinerede BSD-3-Clause- licens.
3.1.2a 2006-05-29
  • Ny Packman pakkeleder.
  • Rettede et installationsproblem med automatisk partitioneringsdiske.
3.1.3 2007-04-13
3.1.3a 2007-06-08
  • Fejlrettelser.
3.1.4 2009-06-09
3.1.5 2009-11-05
  • Forbedringer ydeevne
  • Delt hukommelse
  • setitimer -funktion
  • ISO 9660 filsystem
  • Åbn lydsystem
  • Trap NULL får adgang nu, for brugervenlighed
  • Forbedret signalhåndtering
  • Bedre support til fejlfindere ( forbedringer af ptrace osv.)
  • Automatisk registrering af netværkskort (til understøttede PCI -kort ), forbedret netværkskonfiguration
3.1.6 2010-02-08
  • Nye netværksdrivere: Atheros L2, Intel E1000, Realtek 8169, DEC Tulip
  • PipeFS - fjernet rørhåndtering fra filsystemdrivere
  • HGFS - understøttelse af montering af VMware delte mapper som filsystem
  • VFS: supplerende gruppestøtte og sticky bit support
  • Understøttelse af flydende enhedsenhed
  • System Event Framework (SEF)
  • Eksperimentel APIC -understøttelse
3.1.7 2010-06-16
  • Brugerrumsplanlægning og en planlægningsserver
  • Korrekt understøttelse af flere Ethernet -kort af samme type
  • Boot -skærm tillader indlæsning af billeder> 16 MB
  • Understøttelse af buildsystem til at bygge MINIX med GCC
  • Understøttelse af Windows-1251 og KOI8-U tegnsæt
3.1.8 2010-10-04
3.2.0 2012-02-29
  • Porting GNU Debugger til MINIX 3 og implementering af kernedumpingsupport
  • FUSE- understøttelse med eksperimentelt NTFS-3G- filsystem
  • Gradvist udskiftning af brugerland , fra MINIX til NetBSD
  • Udskiftning af standardkompilatoren ACK med Clang ; GCC understøttes også
  • Skift til ELF og NetBSD libc biblioteker
  • Pkgsrc upstreaming og applikationsporting
  • Asynkron virtuel filsystem (VFS) server
  • Udskift bootloaderen fra MINIX til NetBSD
  • NCQ -understøttelse i AHCI -driveren
3.2.1 2013-02-21
3.3.0 2014-09-15
  • ARM arkitektur støtte; krydskompileres
  • Understøttelse af mmap()I/O -mekanisme; giver mulighed for delte dynamiske biblioteker og lavere hukommelsesbehov
  • Ny inputinfrastruktur: input -server og tastaturdriver adskilt fra TTY
  • VND: vnode disk (loopback) blokdriver
  • LLVM Bitcode build af systemet
  • Import af LLVM og clang i kilderne
  • Unified block cache delt af FSes og VM
  • Forbedret NetBSD-kompatibilitet: hjælpeprogrammer, opkald, typer (masser af 64-bit), værktøjskæde, kodebase og pakker
  • C -type til meddelelser: renere, større
  • Forbedret drivermodularitet: UDS adskilt fra PFS, PTY fra TTY, én controller pr. At_wini -forekomst, LOG fjernet fra startbillede
  • Pakker er nu dynamisk forbundet
3.4.0 rc6 2017-05-09 ?
  •   Bogudgivelse
  •   Gammel udgivelse
  •   Nuværende stabil udgivelse
  •   Nuværende udviklingsudgivelse

MINIX 3 blev offentligt annonceret den 24. oktober 2005 af Andrew Tanenbaum under hans hovedtale på toppen af Association for Computing Machinery (ACM) Symposium Operating Systems Principles konference. Selvom den stadig fungerer som et eksempel på den nye udgave af Tanenbaum og Woodhulls lærebog, er den omfattende redesignet til at være "brugbar som et seriøst system på ressourcebegrænsede og integrerede computere og til applikationer, der kræver høj pålidelighed."

Oprindeligt frigivet under den samme BSD-3-Clause- licens, som MINIX havde licens til siden 2000. I slutningen af ​​2005 blev ejeren af ​​ophavsretten ændret, og en fjerde klausul blev tilføjet.

Pålidelighedspolitikker

Et af hovedmålene med MINIX 3 er pålidelighed. Nedenfor diskuteres nogle af de mere vigtige principper, der forbedrer dens pålidelighed.

Reducer kernestørrelse

Monolitiske operativsystemer som Linux og FreeBSD og hybrider som Windows har millioner af linjer kernekode . I modsætning hertil har MINIX 3 omkring 6.000 linjer med eksekverbar kernekode, hvilket kan gøre problemer lettere at finde i koden.

Bure bugs

I monolitiske kerner findes enhedsdrivere i kernen. Når en ny perifer enhed installeres, indsættes således ukendt, ikke -betroet kode i kernen. En dårlig kodelinje i en driver kan bringe systemet ned.

I stedet i MINIX 3 er hver enhedsdriver en separat bruger-mode proces. Drivere kan ikke udføre privilegerede instruktioner, ændre sidetabellerne , udføre vilkårlig input/output (I/O) eller skrive til absolut hukommelse. De skal foretage kernekald til disse tjenester, og kernen kontrollerer hvert opkald efter autoritet.

Begræns driverens hukommelsesadgang

I monolitiske kerner kan en driver skrive til ethvert hukommelsesord og dermed ødelægge brugerprogrammer ved et uheld.

I MINIX 3, når en bruger forventer data fra f.eks. Filsystemet, opbygger den en deskriptor, der fortæller, hvem der har adgang og på hvilke adresser. Det sender derefter et indeks til denne deskriptor til filsystemet, som kan sende det til en driver. Filsystemet eller driveren beder derefter kernen om at skrive via deskriptoren, hvilket gør det umuligt for dem at skrive til adresser uden for bufferen.

Overlev dårlige tips

At henvise til en dårlig markør i en driver vil ødelægge driverprocessen, men vil ikke have nogen effekt på systemet som helhed. Reinkarnationsserveren genstarter den nedbrudte driver automatisk. Brugere vil ikke bemærke gendannelse for nogle drivere (f.eks. Disk og netværk), men for andre (f.eks. Lyd og printer) kan de muligvis. I monolitiske kerner fører det normalt til et systemnedbrud, hvis du refererer til en dårlig markør i en driver.

Tæmme uendelige sløjfer

Hvis en chauffør kommer ind i en uendelig sløjfe , vil planlæggeren gradvist sænke sin prioritet, indtil den bliver inaktiv. Til sidst vil reinkarnationsserveren se, at den ikke reagerer på statusanmodninger, så den vil dræbe og genstarte looping -driveren. I en monolitisk kerne kunne en looping -driver hænge systemet.

Begræns skader fra bufferoverløb

MINIX 3 bruger meddelelser med fast længde til intern kommunikation, hvilket eliminerer visse bufferoverløb og bufferstyringsproblemer. Mange bedrifter virker også ved at overrulle en buffer for at narre programmet til at vende tilbage fra et funktionsopkald ved hjælp af en overskrevet stakreturadresse, der peger ind i angriberstyret hukommelse, normalt overløbsbufferen. I MINIX 3 lindres dette angreb, fordi instruktion og datarum er opdelt, og kun kode i (skrivebeskyttet) instruktionsrum kan udføres, kaldet eksekverbar rumbeskyttelse . Angreb, der er afhængige af at køre legitimt eksekverbar hukommelse på en ondsindet måde ( return-to-libc , returorienteret programmering ) forhindres imidlertid ikke af denne formindskelse.

Begræns adgang til kernefunktioner

Enhedsdrivere opnår kernetjenester (f.eks. Kopiering af data til brugernes adresserum) ved at foretage kernekald. MINIX 3 -kernen har et bit -kort for hver driver, der angiver, hvilke opkald den er autoriseret til at foretage. I monolitiske kerner kan hver driver kalde hver kernefunktion, autoriseret eller ej.

Begræns adgang til I/O -porte

Kernen opretholder også en tabel, der fortæller, hvilke I/O -porte hver driver kan få adgang til. En driver kan således kun røre ved sine egne I/O -porte. I monolitiske kerner kan en buggy -driver få adgang til I/O -porte, der tilhører en anden enhed.

Begræns kommunikation med OS -komponenter

Ikke hver driver og server behøver at kommunikere med hver anden driver og server. Derfor bestemmer et bit-kort pr. Proces, hvilke destinationer hver proces kan sende til.

Reinkarner døde eller syge chauffører

En særlig proces, kaldet reinkarnationsserveren, pinger periodisk hver enhedsdriver. Hvis føreren dør eller ikke reagerer korrekt på pings, erstatter reinkarnationsserveren den automatisk med en ny kopi. Registrering og udskiftning af ikke-fungerende drivere er automatisk, uden brug af brugerhandling. Denne funktion fungerer ikke for diskdrivere i øjeblikket, men i den næste udgave vil systemet være i stand til at gendanne selv diskdrivere, som vil blive skygget i tilfældig adgangshukommelse (RAM). Drivergendannelse påvirker ikke kørende processer.

Integrer afbrydelser og meddelelser

Når der opstår et afbrydelse , konverteres det på et lavt niveau til en meddelelse, der sendes til den relevante driver. Hvis chaufføren venter på en besked, får den afbrydelsen med det samme; ellers får den RECEIVEbeskeden, næste gang den gør en for at få en besked. Denne ordning eliminerer indlejrede afbrydelser og gør driverprogrammeringen lettere.

Arkitektur

Arkitekturen i MINIX 3

Som det kan ses, er det nederste niveau mikrokernel , som er omkring 4.000 linjer kode (for det meste i C , plus en lille mængde samlingssprog ). Det håndterer afbrydelser , planlægning og meddelelsesoverførsel. Det understøtter også en applikationsprogrammeringsgrænseflade (API) på omkring 30 kernekald, som autoriserede servere og drivere kan foretage. Brugerprogrammer kan ikke foretage disse opkald. I stedet kan de udsende POSIX -systemopkald , som sender beskeder til serverne. Kerneopkaldene udfører funktioner såsom indstilling af afbrydelser og kopiering af data mellem adresserum.

På det næste niveau op er der enhedsdrivere , der hver kører som en separat brugerlandsproces . Hver enkelt styrer en I/O -enhed, f.eks. En disk eller printer. Driverne har ikke adgang til I/O -portrummet og kan ikke udstede I/O -instruktioner direkte. I stedet skal de foretage kernekald med en liste over I/O -porte, der skal skrives til, og de værdier, der skal skrives. Selvom der er en lille overhead ved at gøre dette (typisk 500 ns), gør denne ordning det muligt for kernen at kontrollere autorisation, så lyddriveren f.eks. Ikke kan skrive på disken.

På det næste niveau er der servere . Det er her næsten alle operativsystemets funktioner findes. Brugerprocesser opnår filtjeneste, f.eks. Ved at sende meddelelser til filserveren for at åbne, lukke, læse og skrive filer. Til gengæld får filserveren disk I/O udført ved at sende meddelelser til diskdriveren, som styrer disken.

En af de centrale servere er reinkarnationsserveren. Dens opgave er at afstemme alle de andre servere og drivere for regelmæssigt at kontrollere deres helbred. Hvis en komponent ikke reagerer korrekt, eller forlader eller kommer ind i en uendelig loop , dræber reinkarnationsserveren (som er driverens og serverens overordnede proces) den defekte komponent og erstatter den med en ny kopi. På denne måde gøres systemet automatisk selvhelende uden at forstyrre kørende programmer.

I øjeblikket er reinkarnationsserveren, processerveren og mikrokernen en del af den pålidelige database . Hvis nogen af ​​dem mislykkes, går systemet ned. Ikke desto mindre øger systemets pålidelighed i høj grad en reduktion af den pålidelige database fra 3-5 millioner linjer kode, som i Linux- og Windows-systemer, til omkring 20.000 linjer.

Forskelle mellem MINIX 3 og tidligere versioner

Diagram over forholdet mellem flere Unix-lignende systemer

MINIX 1.0, 1.5 og 2.0 blev udviklet som værktøjer til at hjælpe folk med at lære om design af operativsystemer.

MINIX 1.0, udgivet i 1987, var 12.000 linjer C og nogle x86 samling sprog . Kildekoden for kernen, hukommelsesadministratoren og filsystemet til MINIX 1.0 udskrives i bogen. Tanenbaum udviklede oprindeligt MINIX til kompatibilitet med IBM PC og IBM PC/AT mikrocomputere, der var tilgængelige på det tidspunkt.

MINIX 1.5, udgivet i 1991, omfattede support til MicroChannel IBM PS/2 -systemer og blev også portet til Motorola 68000- og SPARC -arkitekturen, der understøtter computerplatformene Atari ST , Commodore Amiga , Apple Macintosh og Sun Microsystems SPARCstation . En version af MINIX, der kører som en brugerproces under SunOS, var også tilgængelig.

MINIX 2.0, udgivet i 1997, var kun tilgængelig for x86- og Solaris -hostede SPARC -arkitekturer. Minix-vmd blev oprettet af to forskere fra Vrije Universiteit og tilføjede virtuel hukommelse og understøttelse af X Window System .

MINIX 3 gør det samme og giver et moderne operativsystem med mange nyere værktøjer og mange Unix -applikationer. Professor Tanenbaum sagde engang:

Vær opmærksom på, at MINIX 3 ikke er din bedstefars MINIX ... MINIX 1 blev skrevet som et uddannelsesværktøj ... MINIX 3 er det plus en start på at opbygge et yderst pålideligt, selvhelende, oppustet operativsystem ... MINIX 1 og MINIX 3 er relateret på samme måde som Windows 3.1 og Windows XP er: samme fornavn.

Mange forbedringer er også foretaget i strukturen af ​​kernen siden MINIX 2 -udgivelsen, hvilket gør systemet mere pålideligt. MINIX version 3.1.5 blev udgivet 5. november 2009. Den indeholder X11 , Emacs , vi , cc, GCC , Perl , Python , Almquist shell , Bash , Z shell , FTP -klient , SSH -klient , Telnet -klient, Pine og over 400 andre almindelige Unix -hjælpeprogrammer. Med tilføjelsen af ​​X11 markerer denne version overgangen væk fra et tekst-kun system. Et andet træk ved denne version, som vil blive forbedret i fremtidige versioner, er systemets evne til at modstå enhedsdrivernedbrud og i mange tilfælde få dem automatisk udskiftet uden at påvirke kørende processer. På denne måde er MINIX selvhelende og kan bruges i applikationer, der kræver høj pålidelighed.

MINIX 3.2.0 blev udgivet i februar 2012. Denne version har mange nye funktioner, herunder Clang -kompilatoren , eksperimentel symmetrisk multiprocessing -understøttelse, procfs og ext2fs -filsystemsupport og GNU Debugger (GDB). Flere dele af NetBSD er også integreret i udgivelsen, herunder bootloader, libc og forskellige hjælpeprogrammer og andre biblioteker .

MINIX 3.3.0 blev udgivet i september 2014. Denne udgivelse er den første version, der understøtter ARM -arkitekturen ud over x86. Det understøtter også et NetBSD -brugerland , hvor tusinder af NetBSD -pakker kører lige ud af kassen.

Maskot

Rocky Raccoon, maskoten til MINIX 3.

Rocky Raccoon er maskoten til MINIX 3.

MINIXKon

MINIXCon er en konference om deling af samtaler, indsatser og undersøgelser relateret til MINIX.

Det blev afholdt en gang i 2016. MINIXCon2017 blev aflyst på grund af manglende foredrag.

Se også

Noter

Referencer

Yderligere læsning

eksterne links