Ce este Linux Kernel? Arhitectura si caracteristici

Ce este Linux Kernel? Arhitectura si caracteristici

0 Shares
0
0
0

Ce este Linux Kernel? Nucleul Linux – Linux kernel, este un nucleu de sistem de operare Unix, gratuit si open-source, monolitic, modular, multitasking.

A fost conceput si creat in 1991 de Linus Torvalds pentru computerul sau bazat pe arhitectura i386 si a fost adoptat in curand ca nucleu pentru sistemul de operare GNU, care a fost creat ca inlocuitor gratuit pentru UNIX.

De atunci, a dat nastere unui numar mare de distributii de sisteme de operare, numite in mod obisnuit si Linux.

Linux este implementat pe o mare varietate de sisteme de calcul, cum ar fi dispozitive incorporate, dispozitive mobile (inclusiv utilizarea sa in sistemul de operare Android), computere personale, servere, mainframe si supercomputere.

Poate fi adaptat pentru arhitecturi specifice si pentru mai multe scenarii de utilizare folosind o familie de comenzi simple (adica, fara a fi nevoie de editarea manuala a codului sursa inainte de compilare); utilizatorii privilegiati pot, de asemenea, sa regleze parametrii nucleului in timpul rularii.

Majoritatea codului kernel-ului Linux este scris folosind extensiile GNU ale GCC la limbajul de programare standard C si cu ajutorul instructiunilor specifice arhitecturii (ISA). Acest lucru produce un executabil foarte optimizat (vmlinux) in ceea ce priveste utilizarea spatiului de memorie si timpii de executie a sarcinilor.

Discutiile de dezvoltare de zi cu zi au loc pe lista de corespondenta a nucleului Linux (LKML). Modificarile sunt urmarite folosind sistemul de control al versiunilor git, care a fost creat de Torvalds ca inlocuitor personalizat pentru BitKeeper. Linux in ansamblu este lansat numai sub Licenta publica generala GNU versiunea 2 (doar GPL-2.0) cu o exceptie explicita de apel sistem (Linux-syscall-note), dar contine si cateva fisiere sub alte licente compatibile.

Arhitectura si caracteristici

Arhitectura si caracteristici

Linux este un nucleu monolitic cu un design modular (de exemplu, poate insera si elimina module de nucleu incarcate in timpul executiei), care accepta majoritatea functiilor disponibile odata doar in nucleele cu sursa inchisa ale sistemelor de operare non-libere.

Numerele care urmeaza numele comenzilor, interfetelor si altor caracteristici au scopul de a specifica sectiunea (adica tipul de componenta sau caracteristica a sistemului de operare) careia ii apartin (de exemplu, “execve” se refera la un apel de sistem). , in timp ce “exec” se refera la un strat de biblioteca in spatiul utilizatorului).

Urmatoarea lista si sectiunile ulterioare descriu o prezentare necuprinzatoare a designului arhitectural Linux si a unora dintre caracteristicile sale demne de remarcat:

  • Calcul concurent si (cu disponibilitatea a suficiente nuclee CPU pentru sarcini care sunt gata de rulare) chiar si executie paralela reala a mai multor procese simultan (fiecare dintre ele avand unul sau mai multe fire de executie) pe arhitecturile SMP si NUMA.
  • Selectarea si configurarea a sute de caracteristici si drivere ale nucleului (folosind una din familia de comenzi make *config, inainte de a rula compilarea), modificarea parametrilor kernelului inainte de pornire (de obicei prin inserarea de instructiuni in linii din meniul GRUB2) si reglarea fina a comportamentului kernel-ului in timpul rularii (folosind interfata sysctl(8) la /proc/sys/).
  • Configurarea (din nou folosind comenzile make *config) si modificarile in timpul rularii politicilor (prin nice(2), setpriority(2) si familia de apeluri de sistem sched_*(2)) ale programatorilor de activitati care permit multitasking preventiv (atat in ​​modul utilizator, cat si, incepand cu seria 2.6, in modul kernel; Completly Fair Scheduler (CFS) este planificatorul implicit al Linux din 2007 si foloseste un arbore rosu-negru care poate cauta, insera si sterge informatiile de proces (structura de sarcini) cu complexitate de timp O(log n), unde n este numarul sarcinilor executabile.
  • Gestionare avansata a memoriei cu memorie virtuala paginata.
  • Comunicatii intre procese si mecanism de sincronizare.
  • Un sistem de fisiere virtual deasupra mai multor sisteme de fisiere concrete (ext4, Btrfs, XFS, JFS, FAT32 si multe altele).
  • Programatoare I/O configurabile, ioctl(2) syscall care manipuleaza parametrii dispozitivului de baza ai fisierelor speciale (este un apel de sistem non-standard, deoarece argumentele, returnarile si semantica depind de driverul de dispozitiv in cauza), suport pentru I/O asincron POSIX (cu toate acestea, pentru ca se scaleaza slab cu aplicatiile multithreaded, a trebuit creata o familie de apeluri de sistem I/O specifice Linux (io_*(2)) pentru gestionarea I/E asincrona).
  • Virtualizare la nivel de sistem de operare (cu Linux-VServer), paravirtualizare si virtualizare asistata de hardware (cu KVM sau Xen si folosind QEMU pentru emularea hardware); nucleul Linux ofera suport pentru construirea de distributii Linux (cum ar fi openSuSE Leap si multe altele) care functioneaza ca Dom0, care sunt servere gazda pentru masini virtuale care ofera mediul de management pentru masinile virtuale ale utilizatorului (DomU).
  • Virtualizare I/O cu VFIO si SR-IOV. Virtual Function I/O (VFIO) expune accesul direct al dispozitivului la spatiul utilizatorului intr-un mediu protejat cu memorie securizata (IOMMU). Cu VFIO, un VM Guest poate accesa direct dispozitivele hardware de pe serverul VM Host. Aceasta tehnica imbunatateste performanta, in comparatie atat cu virtualizarea completa, cat si cu paravirtualizarea. Cu toate acestea, cu VFIO, dispozitivele nu pot fi partajate cu mai multi oaspeti VM. Single Root I/O Virtualization (SR-IOV) combina castigurile de performanta ale VFIO si capacitatea de a partaja un dispozitiv cu mai multi invitati VM (dar necesita hardware special care trebuie sa fie capabil sa apara pentru doi sau mai multi oaspeti VM ca dispozitive diferite).
  • Mecanisme de securitate pentru controlul discretionar si obligatoriu al accesului (SELinux, AppArmor, ACL-uri POSIX si altele).
  • Mai multe tipuri de protocoale de comunicatii stratificate (inclusiv suita de protocoale Internet).

Majoritatea driverelor de dispozitiv si a extensiilor de nucleu ruleaza in spatiul nucleului (ring 0 in multe arhitecturi CPU), cu acces deplin la hardware. Unele exceptii ruleaza in spatiul utilizatorului; Exemple notabile sunt sistemele de fisiere bazate pe FUSE/CUSE si parti ale UIO. In plus, X Window System si Wayland, sistemul de ferestre si protocoalele serverului de afisare pe care majoritatea oamenilor le folosesc cu Linux, nu ruleaza in nucleu. In mod diferit, interfata reala cu GPU-urile placilor grafice este un subsistem in kernel numit Direct Rendering Manager (DRM).

Spre deosebire de nucleele monolitice standard, driverele de dispozitiv sunt usor configurate ca module si incarcate sau descarcate in timp ce sistemul ruleaza si pot fi, de asemenea, anticipate in anumite conditii pentru a gestiona corect intreruperile hardware si pentru a sprijini mai bine multiprocesarea simetrica. La alegere, Linux nu are o interfata binara stabila pentru aplicatia driver de dispozitiv.

Linux foloseste de obicei protectia memoriei si memoria virtuala si poate gestiona, de asemenea, accesul neuniform la memorie, cu toate acestea, proiectul a absorbit μClinux, ceea ce face posibila rularea Linux pe microcontrolere fara memorie virtuala.

Hardware-ul este reprezentat in ierarhia fisierelor. Aplicatiile utilizatorului interactioneaza cu driverele de dispozitiv prin intrari din directoarele /dev sau /sys. Procesele si informatiile sunt mapate la sistemul de fisiere prin directorul /proc.

Interfete

Se disting patru interfete: doua interne ale nucleului si doua dintre nucleu si spatiul utilizatorului.

Linux este o clona a UNIX si urmareste respectarea specificatiilor POSIX si UNIX unice. Nucleul ofera, de asemenea, apeluri de sistem si alte interfete care sunt specifice Linux. Pentru a fi inclus in nucleul oficial, codul trebuie sa respecte un set de reguli de licentiere.

Interfata binara a aplicatiei Linux (ABI) dintre kernel si spatiul utilizatorului are patru grade de stabilitate (stabila, de testare, invechita, eliminata); cu toate acestea, apelurile de sistem sunt de asteptat sa nu se schimbe niciodata.

Modulele de nucleu incarcabile (LKM), prin proiectare, nu se pot baza pe un ABI stabil. Prin urmare, ele trebuie sa fie intotdeauna recompilate ori de cate ori este instalat un nou executabil kernel intr-un sistem, altfel nu vor fi incarcate. Driverele din arbore care sunt configurate pentru a deveni parte integranta a executabilului nucleului (vmlinux) sunt legate static prin procesul de construire.

De asemenea, nu exista nicio garantie a stabilitatii API-ului in nucleu la nivel sursa si, din aceasta cauza, codul driverelor de dispozitiv, precum si codul oricarui alt subsistem al nucleului, trebuie mentinute actualizate cu evolutia nucleului. Orice dezvoltator care face o modificare a API-ului trebuie sa repare orice cod care se intrerupe ca urmare a modificarii lor.

API kernel-to-userspace

API kernel-to-userspace

Setul API-ului kernel-ului Linux care se refera la interfetele expuse aplicatiilor utilizator este compus in mod fundamental din apeluri de sistem specifice UNIX si Linux.

Un apel de sistem este un punct de intrare in nucleul Linux. De exemplu, printre cele specifice Linux se numara familia apelurilor de sistem clone(2). Majoritatea extensiilor trebuie sa fie activate prin definirea macrocomenzii _GNU_SOURCE intr-un fisier antet sau cand este compilat codul utilizatorului.

Apelurile de sistem pot fi invocate numai prin utilizarea instructiunilor de asamblare care permit tranzitia de la spatiul utilizator neprivilegiat la spatiul kernel privilegiat din inelul 0.

Din acest motiv, biblioteca standard C (libC) actioneaza ca un invelis pentru majoritatea apelurilor de sistem Linux, care, numai daca este nevoie, pot intra in mod transparent in nucleul care se va executa in numele procesului de apelare. Pentru acele apeluri de sistem care nu sunt expuse de libC, biblioteca ofera o functie numita syscall(2) care poate fi folosita pentru a le invoca in mod explicit.

Pseudosisteme de fisiere (de exemplu, sistemele de fisiere sysfs si procfs) si fisierele speciale (de exemplu, /dev/random, /dev/sda, /dev/tty si multe altele) constituie un alt strat de interfata cu structurile de date ale nucleului reprezentand dispozitive hardware sau logice( software).

API din kernel

La XDC2014, Alex Deucher de la AMD a anuntat driverul unificat pentru modul kernel. Driverul grafic proprietar pentru Linux, libGL-fglrx-glx, va partaja aceeasi infrastructura DRM cu Mesa 3D. Deoarece nu exista un ABI stabil in kernel, AMD a trebuit sa adapteze in mod constant fostul blob binar folosit de Catalyst.

Exista mai multe API-uri interne ale nucleului utilizate intre diferitele subsisteme. Unele sunt disponibile numai in cadrul subsistemelor kernel, in timp ce un set oarecum limitat de simboluri in nucleu (de exemplu, variabile, structuri de date si functii) este expus si modulelor care se pot incarca dinamic (de exemplu, drivere de dispozitiv incarcate la cerere), indiferent daca sunt exportate cu macrocomenzile EXPORT_SYMBOL() si EXPORT_SYMBOL_GPL() (aceasta din urma rezervata modulelor lansate sub o licenta compatibila cu GPL).

Linux ofera API-uri in kernel care manipuleaza structurile de date (de exemplu, liste legate, arbori radix, arbori rosu-negru, cozi) sau realizeaza rutine obisnuite (de exemplu, copiaza date din si in spatiul utilizatorului, aloca memorie, linii de tiparire in jurnalul de sistem si asa mai departe) care au ramas stabile cel putin de la versiunea Linux 2.6.

API-urile din kernel includ biblioteci de servicii comune de nivel scazut utilizate de driverele de dispozitiv:

  • Interfete SCSI si libATA – respectiv, un protocol de comunicatie peer-to-peer bazat pe pachete pentru dispozitivele de stocare atasate la USB, SATA, SAS, Fibre Channel, FireWire, dispozitiv ATAPI, si o biblioteca in kernel pentru a suporta controlere si dispozitive gazda ATA.
  • Direct Rendering Manager (DRM) si Kernel Mode Setting (KMS) – pentru interfata cu GPU-urile si pentru a sustine nevoile hardware-ului video modern accelerat 3D, dar si pentru a seta rezolutia ecranului, adancimea culorii si rata de reimprospatare.
  • Buffere DMA (DMA-BUF) – pentru partajarea bufferelor pentru accesul hardware direct la memorie pe mai multe drivere de dispozitiv si subsisteme.
  • Video4Linux – pentru hardware de captare video.
  • Advanced Linux Sound Architecture (ALSA) – pentru placi de sunet.
  • Nou API – pentru controlere de interfata de retea.
  • mac80211 si cfg80211 – pentru controlere de interfata de retea fara fir.
0 Shares
You May Also Like