Nucleul Linux
De la Wikipedia, enciclopedia liberă
Nucleul Linux (în engleză "kernel") reprezintă nucleul sistemului de operare deschis care a fost creat de Linus Torvalds în 1991 şi care a fost îmbunătăţit ulterior cu ajutorul programatorilor din întreaga lume.
Acesta a fost dezvoltat iniţial pentru microprocesorul Intel 80386, însă ulterior a fost portat pe multe alte platforme. Este scris aprope în întregime în limbajul de programare C, împreună cu nişte extensii GNU C şi cu cîteva linii de cod scrise în limbajul de asamblare.
Dezvoltat sub licenţa GNU GPL (GNU General Public License), codul sursă al nucleului Linux este software liber.
Nucleul este cel mai bine cunoscut ca principala componentă a sistemului de operare GNU/Linux. Distribuţiile de software bazate pe nucleul Linux se numesc Distribuţii GNU/Linux.
Cuprins |
[modifică] Istorie
Proiectul a fost lansat în anul 1991 cu faimosul mesaj apărut în reţeaua Usenet comp.os.minix care includea următoarea frază:
- "Creez un sistem de operare (liber) - e doar o pasiune, nu va fi la fel de mare şi de profesional ca GNU - pentru calculatoarele compatibile AT 386(486)..." [1]
Pînă în acel moment, proiectul GNU crease multe componente necesare unui sistem de operare liber, dar nucleul său, numit "GNU Hurd", nu era complet si nici disponibil. Sistemul de operare BSD nu era încă eliberat de constrîngerile legale, ceea ce a permis nucleului Linux să umple golul respectiv şi, deşi avea iniţial o funcţionalitate limitată, a atras comunitatea dezvoltatorilor de software şi a utilizatorilor. Pînă astăzi, mii de programatori şi-au adus contribuţia la codul sursă al nucleului.
La început, "Linux" a fost numele nativ al nucleului. Termenul "nucleu" inseamnă aplicaţia de sistem de nivel scăzut ("low-level") care crează nivelul de abstractizare a componentelor hardware, controlează accesul la hard-disc şi la sistemul de fişiere, permite lucrul multitasking, accesul distribuit şi la reţeaua (locală), constrîngerile de securitate informatică. Nucleul Linux nu este un sistem de operare complet (cum este el cunoscut în mod uzual). Un sistem complet bazat pe nucleul Linux este mai cunoscut ca "Linux", deşi unii preferă să-l numească GNU/Linux. Există şi o controversă privind modul de referire la acest sistem de operare. Oamenii fac deseori confuzie între nucleul şi sistemul de operare Linux, ceea ce poate duce la apariţia unor termeni greşiţi, cum ar fi ideea că Linus Torvalds a scris sau a coordonat şi alte componente ale sistemului de operare, în afară de nucleu.
[modifică] Evoluţie
- Aprilie 1991 - Linus Torvalds, la vârsta de 21 de ani, începe să se gîndească la un sistem de operare simplu. A pornit cu crearea unui comutator de task-uri de sistem (folosind instrucţiunile procesorului Intel 386) şi a unui driver de terminal.
- 25 august 1991 - Linus a trimis mesajul la grupul de ştiri comp.os.minix: [2]
-
- "Scriu un sistem de operare (gratuit) (e doar un hobby, nu va fi mare şi profesional ca gnu) pentru clone de 386(486) AT. Mă gândesc la asta din aprilie, şi începe să fie gata. Aş dori orice fel de feedback referitor la lucruri care plac/displac oamenilor în minix, fiindcă SO-ul meu i se aseamnănă cumva (aceeaşi structură fizică a sistemului de fişiere (din motive practice) printre altele).
-
- Tocmai am portat bash(1.08) şi gcc(1.40), şi se pare că merg. Asta înseamnă că o să obţin ceva practic în câteva luni [...] Da - nu are nici un pic de cod minix, şi are un sistem de fişiere multi-thread. NU este portabil (foloseşte comutare de task 386 etc), şi probabil că nu va suporta niciodată alt harddisk decât AT, fiindcă altceva nu am :-(.
-
- [...] E scris cel mai mult în C, dar mulţi n-ar numi C ceea ce scriu eu. Foloseşte fiecare feature al lui 386 pe care m-am putut gândi, fiindcă a avut şi scopul de a mă învăţa pe mine despre 386. Cum am mai spus, foloseşte un MMU, atât pentru paginare (nu pe disc încă) şi segmentare. Segmentarea e cea care îl face cu ADEVĂRAT dependent de 386 (fiecare task are un segment de 64Mb pentru cod & date - maxim 64 task-uri în 4Gb. Oricui îi trebuie mai mult decât 64Mb/task - ghinion). [...] Unele din fişierele mele "C" (mai ales mm.c) au cam tot atâta limbaj de asamblare cât C. [...] Spre deosebire de minix, mie îmi cam PLAC întreruperile, deci întreruperile sunt tratate fără a se încerca ascunderea motivului din spatele lor"
- Septembrie 1991 - Este lansat Linux versiunea 0.01. (10.239 linii de cod.)
- Octobrie 1991 - Este lansat Linux versiunea 0.02. [3]
- Decembrie 1991 - Este lansat Linux 0.11. Această versiune este prima versiune self-hosted. (adică: se poate compila Linux 0.11 sub Linux 0.11)
- 19 Ianuarie 1992 - Primul post pe alt.os.linux newsgroup. [4]
- 31 Martie 1992 - Newsgroup-ul comp.os.linux este creat. [5]
- Martie 1992 - Linux versiunea 0.95 este prima versiune capabilă de a rula X Window System.
- Anul 1993, şi începutul anului 1994 - 15 versiuni în dezvoltare 0.99.*, cu 0.99.11 (Iulie 1993) introducând BogoMips în nucleu
- 14 Martie 1994 - Este lansat Linux 1.0.0. (176.250 linii de cod.)
- Martie 1995 - Este lansat Linux 1.2.0 (310.950 linii de cod.)
- 9 Mai 1996 - Pinguinul Tux este propus ca mascotă Linux
- 9 Iunie 1996 - Este lansat Linux 2.0.0. (777.956 linii de cod.)
- 25 Ianuarie 1999 - Este lansat Linux 2.2.0, la început cu multe defecte. (1,800,847 linii de cod.)
- 18 Decembrie 1999 - Patchuri pentru IBM mainframe pentru 2.2.13 sunt publicate, aducândîn cele mai mari întreprinderi.
- 4 Ianuarie 2001 - Este lansat Linux 2.4.0. (3.377.902 linii de cod.)
- 17 Decembrie 2003 - Este lansat Linux 2.6.0. (5.929.913 linii de cod.)
[modifică] Versiuni
Dezvoltând mai departe propriul cod şi integrând modificări operate de alţi programatori, Linus Torvalds continuă să lanseze noi versiuni ale nucleului Linux. Aceste versiuni se numesc nucleuri vanilla, însemnând că nu au fost modificate pentru nimeni. Mulţi furnizori de sisteme de operare GNU/Linux îşi modifică kernelul produsului lor, în principal pentru a adăuga suport pentru drivere sau feature-uri care nu au fost oficial etichetate ca stabile, în timp ce alte distribuţii, cum ar fi Slackware, se bazează pe nucleuri vanilla.
[modifică] Numerotarea versiunilor
Numărul de versiune al nucleului Linux constă în prezent din patru numere, ca urmare a unei recente modificări în vechea politică a schemei de versiuni cu trei numere. De exemplu, să presupunem că numărul versiunii se compune astfel: A.B.C[.D] (de ex. 2.2.1, 2.4.13 sau 2.6.12.3).
- Numărul A reprezintă versiunea de nucleu. Este schimbat cel mai rar, şi doar când au loc schimbări majore în cod şi în concepţia nucleului. El a fost modificat de două ori în istoria nucleului: În 1994 (versiunea 1.0) şi în 1996 (versiunea 2.0).
- Numărul B reprezintă revizia majoră a nucleului. Numerele pare indică un release stabil, adică unul considerat potrivit pentru producţie, cum ar fi 1.2, 2.4 sau 2.6. Numerele impare sunt release-uri în dezvoltare, cum ar fi 1.1 sau 2.5. Ele sunt folosite pentru testarea feature-urilpr şi driver-elor noi până când acestea devin suficient de stabile pentru a fi incluse într-un release stabil.
- Numărul C indică revizia minoră a nucleului. În vechea schemă de versiuni, cu trei numere, aceasta era modificată când erau implementate în nucleu patch-uri de securitate, bufix-uri, feature-uri noi sau driver-e. În noua politică, însă, ea nu se modifică decât la introducerea de noi feature-uri sau driver-e; reparaţiile minore sunt tratate de numărul D.
- Un număr D a apărut prima oară când a fost detectată o eroare gravă, care a necesitat reparare imediată, în codul de NFS din 2.6.8. Totuşi, nu erau suficiente alte modificări pentru a justifica lalnsarea unei noi revizii minore (care ar fi fost 2.6.9). Astfel, s-a lansat 2.6.8.1, singura modificare fiind repararea acelei erori. Odată cu 2.6.11, aceasta a fost adoptată ca noua politică oficială de versionare. Bugfix-urile şi patch-urile de securitate sunt acum tratate de al patrulea număr, pe când modificările mai mari sunt implementate în schimbările reviziilor minore (numărul C).
[modifică] Oamenii
În timp ce Linus Torvalds supervizează modificările codului şi release-urile ultimelor versiuni de nucleu, el a delegat mentenanţa versiunilor mai vechi altor programatori:
Versiunea nucleului | Menţinător |
---|---|
2.0 | David Weinehall |
2.2 | Marc-Christian Petersen (fost Alan Cox) |
2.4 | Marcelo Tosatti |
2.6 | Andrew Morton / Linus Torvalds |
Alţi programatori de nucleu linux sunt Robert Love şi Ingo Molnar . (Vezi fişierul cu echipa de mentenanţă Linux).
[modifică] Istoria versiunilor stabile
- Versiunea 1.0 din Martie 1994 suporta doar maşini cu un singur procesor i386.
- Versiunea 1.2 din Martie 1995 a adăugat suport pentru Alpha, Sparc şi Mips.
- Versiunea 2.0 din Iunie 1996 a adăugat suport pentru mai multe familii de procesoare şi a inclus suport pentru SMP.
- Versiunea 2.2 din Ianuarie 1999 (Minunata lume a Linux 2.2).
- Versiunea 2.4.0 din Ianuarie 2001
- Suport pentru procesoare: procesorul Hewlett-Packard PA-RISC, procesoarele ETRAX CRIS ("Code Reduced Instruction Set") de la Axis Communications
- adăugat ISA Plug-and-Play
- adăugat suport pentru USB şi PC Card
- 2.4.6: adăugat suport Bluetooth
- Sisteme de fişiere şi de stocare a datelor
- adăugat Logical Volume Manager versiunea 1 (LVM)
- suport pentru dispozitive RAID
- 2.4.15: Suport pentru sistemul de fişiere InterMezzo.
- Pentru mai multe informaţii vezi articolul: Wonderful World of Linux 2.4
- Versiunea 2.6 - curentă (17 Decembrie 2003 până în prezent)
- integrat uClinux (pentru microcontrollere)
- suport pentru CPU: cu suport pentru seria H8/300 de la Hitachi, NEC v850, şi procesoarele embedded m68k de la Motorola, suport NUMA, suport pentru arhitectura Voyager de la NCR, suport pentru hyperthreading şi PAE ("Physical Address Extension") de la Intel
- integrat driverul de sunet ALSA
- Suport OS:
- Îmbunătăţit suportul APIC.
- Mărit numpărul maxim de utilizatori şi grupuri de la 65.000 la peste 4 miliarde.
- Mărit numărul de id-uri de procese de la 32.000 la 1 miliard.
- Mărit numărul maxim de tipuri de dispozitive (dispozitive majore) de la 255 la 4095 şi numărul maxim de dispăzitive de fiecare tip (dispozitive minore) de la 255 la peste un milion.
- Îmbunătăţit suportul pentru 64 de biţi şi sisteme de fişiere de până la 16 terabytes pe hardware comun.
- Îmbunătăţiri la "timpii generali de răspuns" pentru procese interactive (nucleul a devenit complet preemptiv şi planificatorul de I/E a fost rescris).
- Suport pentru futex-uri, o rescriere a infrastructurii cu fire de execuţie pentru a permite utilizarea Native POSIX Thread Library (NPTL).
- Un încărcător de module îmbunătăţit.
- Integrarea User Mode Linux.
- Suport 2.6.11 Infiniband
- Suport pentru stocare:
- LVM actualizat la versiunea 2
- suport pentru sistemul de fişiere SGI XFS.
- Un nou sistem de fişiere sistem, numit sysfs, destinat să uşureze procfs de informaţiile legate de sistem.
- 2.6.12 (17 Iunie 2005) suport iSCSI
- 2.6.13 suport inotify
- 2.6.14 suport FUSE
- (şi mai multe schimbări: Minunata lume a Linux 2.6)
[modifică] Arhitectura
Nucleul Linux include multitasking real, memorie virtuală, biblioteci partajate, demand loading, executabile partajate copy-on-write, gestiunea memoriei corectă, şi reţele TCP/IP.
Astăzi, Linux este un nucleu monolitic cu încărcare de module. Device driver-e şi extensii de nucleu rulează tipic în inelul 0, cu acces total la hardware, deşi unele rulează în spaţiul utilizator. Spre deosebire de nucleele monolitice standard, device driver-ele se configurează uşor ca module, şi se încarcă sau se descarcă în timpul rulării sistemului. Tot spre deosebire de nucleele monolitice standard, device driver-ele pot fi pre-empted în anumite condiţii. Acest din urmă feature a fost adăugat pentru a trata întreruperile hardware corect, şi pentru a îmbunătăţi suportul pentru multiprocesare simetrică. Preemptiunea de asemenea ameliorează latenţa, crescând viteza de răspuns şi făcând Linux mai potrivit pentru aplicaţii de timp real.
Faptul că Linux nu este un microkernel a fost subiectul principal al celebrului flame war între Linus Torvalds şi Andy Tanenbaum pe comp.os.minix în 1992. [8] [9]
Codul sursă complet al diferitelor versiuni ale nucleului Linux pot fi găsite la http://lxr.linux.no .
[modifică] Limbaje de programare
Nucleul Linux este scris în versiunea limbajului de programare C suportată de compilatorul GNU GCC (care suportă un superset al C-ului standard), împreună cu unele secţiuni relativ scurte de cod scrise în limbajul de asamblare al arhitecturii ţintă (la ultima numărătoare, Linux suporta aproximativ 20 de familii diferite de procesoare). Datorită extensiilor C suportate de compilatorul GCC, acesta a fost (împreună cu setul de unelte asociat) multă vreme singurul compilator capabil să compileze corect un nucleu Linux. Mai recent, Intel susţine că şi-a modificat compilatorul C astfel încât şi acesta să poată modifica nucleul.
Sunt folosite, pe lângă C, şi multe alte limbaje, în primul rând în legătură cu procesul de 'construire' a nucleului (metodele prin care este creată din surse imaginea bootabilă). Printre acestea se numără Perl, Python, şi diferite limbaje de shell scripting. Unele driver-e ar putea fi scrise şi în C++, Fortran, sau alte limbaje, dar acest comportament este cu tărie nerecomandat. Sistemul de construire a nucleului suportă doar GCC pentru compilarea nucleului şi a driver-elor.
[modifică] Portabilitate
Deşi iniţial nu s-a intenţionat ca Linux să fie un sistem de operare portabil, el este acum unul din cele mai mult portate nuclee de sistem de operare (deşi NetBSD a fost portat şi el pe aproape tot atâtea arhitecturi), rulând pe o gamă largă de sisteme, de la iPAQ (un calculator handheld) până la IBM System z9 (un server mainframe masiv care poate rula sute sau chiar mii de instanţe concurente de Linux). Linux este gândit pentru a rula ca sistem de operare principal pe noua arhitectură de supercalculator Blue Gene de la IBM, când aceasta va fi terminată. Linus a inclus, probabil în glumă, BogoMips în nucleu ca pseudo-unealtă de comparare a performanţelor.
Este important de notat că eforturile lui Linus au fost îndreptate cu succes şi către un alt fel de portabilitate. Portabilitate, conform lui Linus, era abilitatea de a compila aplicaţii dintr-o varietate de surse pe sistemul său; astfel Linux a devenit la început popular în parte pentru că necesita cel mai mic efort de a face să funcţioneze pe el aplicaţii populare sub licenţă GPL, precum şi alte aplicaţii open source.
Linux rulează în prezent pe următoarele arhitecturi:
- ARM
- Acorn: seriile Archimedes, A5000 şi RiscPC
- StrongARM, Intel XScale etc.
- iPAQ de la HP
- DS de la Nintendo(Proiectul DS Linux)
- Apple iPod (IPodLinux Proiectul iPodLinux)
- Axis Communications CRIS
- Fujitsu FR-V
- Alpha de la Hewlett Packard
- PA-RISC de la Hewlett Packard
- Hitachi: SuperH (SEGA Dreamcast), H8/300
- IBM S/390 (31-bit)
- Mainframe-uri IBM zSeries şi System z9 (pe 64 de biţi)
- Intel 80386 şi mai sus: IBM PC-uri şi compatibile cu procesoare:
- 80386, 80486, şi cu variantele lor AMD, Cyrix, TI şi IBM
- întreaga serie Pentium;
- AMD 5x86, K5, K6, Athlon (toate versiunile pe 32 de biţi), Duron;
- AMD64: tehnologia AMD de procesoare pe 64 de biţi (fosta x86-64)
- Seriile Cyrix 5x86, 6x86 (M1), 6x86MX and MediaGX (National/AMD Geode).
- Procesoare VIA Technologies VIA C3 şi ulterioare
- Suport pentru procesoare Intel 8086, 8088, 80186, 80188 şi 80286 este în curs de dezvoltare (see ELKS project)
- Microsoft Xbox (cu procesor Pentium III) (vezi Xbox Linux)
- SGI Visual Workstation (cu procesoare Pentium II/III cu chipset SGI)
- Intel IA-64
- MIPS
- Silicon Graphics, Inc.
- Cobalt Qube, Cobalt Raq
- Sony PlayStation 2 (vezi PS2 Linux)
- DECstation
- altele
- Motorola 68020 şi mai sus:
- Amiga-uri mai noi: A1200, A2500, A3000, A4000
- Apple Macintosh II, LC, Quadra, Centris şi primele serii Performa
- Staţiile de lucru Sun Microsystems (experimental, foloseşte Sun-3 MMU)
- Maşinile nebazate pe Sun 68020 necesită Motorola 68851 PMMU
- NEC v850e
- Renesas M32R
- PowerPC şi IBM POWER:
- majoritatea calculatoarelor Apple (toate Power Macintosh-urile bazate pe PCI, suport limitat pentru NuBus Power Mac-urile) mai vechi
- clone ale lui PCI Power Mac lansate pe piaţă de Power Computing, UMAX şi Motorola
- Amiga-uri upgradate cu un card "Power-UP" (cum ar fi Blizzard sau CyberStorm)
- Sisteme IBM RS/6000, iSeries şi pSeries
- Plăci Pegasos I şi II
- câteva platforme Power PC embedded
- SPARC şi UltraSparc: staţii de lucru şi servere Sun 4-series, SPARCstation/SPARCserver, Ultra, Blade şi Fire, precum şi clone realizate Tatung şi alţii.
O listă completă a portărilor Linux se găseşte aici.
[modifică] Termeni de licenţiere
Iniţial, Torvalds a lansat Linux sub o licenţă care interzicea orice exploatare comercială a lui. Aceasta a fost însă înlocuită curând cu GNU General Public License (exclusiv versiunea 2). Această licenţă permite distribuirea şi chiar vânzarea unor versiuni posibil modificate de Linux dar necesita ca toate copiile să fie eliberate sub aceeaşi licenţă şi însoţite de codul sursă.
Torvalds a descris decizia de a licenţia Linux sub GPL ca fiind "cel mai bun lucru pe care l-am făcut vreodată." [10]
O întrebare generală privind aplicarea GPL al Linux este dacă modulele de nucleu încărcabile sunt considerate "lucrări derivate" sub legea dreptului de autor, şi de aceea intră sub incidenţa GPL. Torvalds şi-a afirmat opinia că modulele care folosesc doar o sumulţime limitată, "publică" a interfeţelor nucleului pot fi uneori considerate lucrări independente, permiţând astfel unele driver-e doar binare (fără sursă publică) şi alte module care nu respectă GPL. Însă nu toţi contribuitorii la nucleu sunt de acord cu această interpretare, şi chiar şi Torvalds admite că multe module de nucleu sunt evident lucrări derivate, şi într-adevăr el afirmă că „modulele de nucleu SUNT implicit derivate"; finalmente, asemenea chestiuni se pot rezolva doar în tribunal.
Linux este o marcă înregistrată a lui Linus Torvalds.
[modifică] Mascota
Mascota Linux (imagine) este un pinguin numit Tux, creat de Larry Ewing.
Există mai multe variante ale pinguinului Tux, unele în 3D.
Mascota este un pinguin pentru că, aşa cum a spus Torvalds, "Lui Linus îi plac pinguinii. Asta e." Numele Tux vine de la (T)orvalds (U)ni(X). [11]
[modifică] Kernel panic
- Main article: Kernel panic
În Linux, un "panic" este o eroare de sistem nerecuperabilă detectată de nucleu, spre deosebire de unele erori similare detectate de cod din spaţiul utilizator. Codul nucleului poate indica o astfel de stare prin apelul funcţiei panic
aflate în fişierul header sys/system.h. Totuşi, majoritatea panic-urilor sunt rezultatul unor excepţii procesor netratate în codul de nucleu, cum ar fi referinţe la adrese de memorie invalide. Acestea indică în mod tipic un bug undeva pe lanţul de apel care a condus la panic.
[modifică] Bibliografie
- Torvalds, Linus; Diamond, David (2001). Just For Fun: The Story of an Accidental Revolutionary. HarperBusiness. ISBN 0066620724 (hardcover); HarperAudio ISBN 0694525391 (casetă audio, ediţie prescurtată, citită de David Diamond) - despre naşterea nucleului Linux
- [12], Nikolai Bezroukov. Portraits of Open Source Pioneers. Capitolul 4: A benevolent dictator
(Carte electronică Softpanorama).
- LinkSys and binary modules, LWN.net Weekly Edition, 16 octombrie, 2003.
- Revolution OS - un documentar despre istoria Linux conţinând câteva interviuri cu hackeri importanţi, printre care şi Torvalds
Format:Linux
[modifică] Legături externe
Format:Wikibooks
- www.kernel.org - Arhiva oficială a nucleului Linux
- Linux Kernel HowTo
- Kernel Traffic, un sumar al listelor de e-mail despre nucleul Linux
- KernelTrap
- LWN.net kernel page
- Linux Kernel Source Code Viewer
- Linux Kernel Janitor
- Linux Device Drivers, 3rd Edition
- Understanding the Linux Kernel, 2nd Edition
- Linux: The GPL And Binary Modules
- The Linux kernel in colour
Urmatoarele ar trebui adăugate
- http://old.lwn.net/2001/features/Timeline/
- http://www.nd.edu/~ljordan/linux/tuxhistory.html
- http://www.linuxjournal.com/article.php?sid=6000
- https://netfiles.uiuc.edu/rhasan/linux
[modifică] Linux - versiunea 2.6
- Upgrade to 2.6 kernel
- The Wonderful World of Linux 2.6; Joseph Pranevich; decembrie 2003
- Understanding the Linux 2.6.8.1 CPU Scheduler; Josh Aas, 17 februarie 2005
[modifică] Pagini ce conţin legături către multiple informaţii suplimentare
- Linux kernel @ dmoz.org
- Linux kernel @ google
- http://www.linuxlinks.com/Kernel/
- http://www.topology.org/soft/lkernel.html
- http://loll.sourceforge.net/linux/links/Kernel/
- http://www.linux.org/dist/kernel.html
- Kernel Newbies.org
- Linux Kernel Developers' email list
Notă: Articolul este tradus şi adaptat după Nucleul Linux („Linux kernel“ în engleză)