Sunteți pe pagina 1din 96

1.

Magistrala PCI (Peripheral Component Interconnect)

Specifica!iile PCI definesc complet, din punct de vedere arhitectural "i func!ional, un standard de magistral# dezvoltat de Intel "i devenit ulterior foarte popular printre produc#torii de componente. Deoarece specifica!iile PCI sunt independente de procesor, magistrala a fost folosit# nu numai n sistemele cu arhitectur# Intel ci "i pe arhitecturi ca PowerPC, Alpha sau SPARC. Conexiunea magistralei PCI la magistrala de sistem se face prin intermediul unei pun!i (bridge). Dispozitivele I/O de vitez# ridicat#, cum ar fi adaptoarele grafice sau de re!ea, sunt conectate direct la magistrala PCI. Dispozitivele conforme cu alte standarde de magistral#, ca ISA sau SCSI, se interfa!eaz# cu magistrala PCI printr-o punte ISA, respectiv un adaptor SCSI. Totodat#, magistrala PCI poate fi extins# cu ajutorul unor pun!i PCI.

Modul de lucru
Dispozitivele compatibile PCI trebuie s# con$in# un set standard de registre de configura!ie. La ini!ializare, sistemul de operare cite"te aceste registre pentru a determina diverse aspecte legate de identificarea %i func$ionarea dispozitivelor. Fiecare dispozitiv conectat la magistrala PCI este identificat printr-o adres# unic# "i poate func!iona fie ca slave, fie ca master. Unui dispozitiv master i se mai spune "i ini!iator, deoarece poate ini!ia transferuri pe magistral#, iar unui dispozitiv slave i se mai spune %i !int# (target). Un dispozitiv !int# nu poate ini!ia transferuri pe magistral#. Dispozitivele ini!iator "i !int# sunt numite agen!i PCI. Magistrala PCI este o magistral# paralel# de 32 sau 64 de bi$i. Toate opera!iile magistralei sunt sincronizate cu ajutorul unui semnal de ceas, astfel c# magistrala este sincron#. Pentru a reduce num#rul pinilor "i dimensiunea conectorilor necesari cupl#rii la magistral#, adresele "i datele sunt multiplexate. Totodad#, specifica!iile magistralei PCI impun o limitare de 10 nc#rc#ri electrice a magistralei (ceea ce de obicei se ob!ine prin conectarea a 3 sau 4 pl#ci de extensie).

Transferul de informa!ie cu dispozitivele PCI se realizeaz# n tranzac!ii. De obicei, o tranzac!ie are dou# etape. n prima etap#, pe liniile magistralei se transmite o adres#, iar n a doua, pe acelea"i linii, se transmite unul sau mai multe cuvinte de date. Arbitrajul de magistral# trebuie executat la nceputul tranzac$iei. n timpul etapei de adresare se transmite adresa de nceput "i tipul tranzac!iei care urmeaz#. Dispozitivul !int# memoreaz# adresa de nceput ntr-un contor de adrese "i, dac# tranzac$ia se face n rafal#, incrementeaz# aceast# adres# pentru fiecare cuvnt de date. Cele mai multe transferuri se execut# n rafal#. n acest mod, la nceputul unui

transfer, se precizeaz# adresa de nceput a blocului de date, dup# care datele sunt transferate de la adrese consecutive f#r# precizarea adresei. Nu exist# limit# privind lungimea ciclului de transfer n rafal#. Dac# un dispozitiv !int# poate efectua numai tranzac!ii singulare, la ncercarea dispozitivului master de a executa o tranzac!ie n rafal#, !inta termin# tranzac!ia dup# primul transfer de date. Astfel, dispozitivul master va fi obligat s# solicite din nou magistrala printr-un proces de arbitraj. n acest mod performan!ele vor fi mai reduse, dar dispozitivele care nu necesit# rate ridicate de transfer pot utiliza aceste tranzac!ii singulare. Presupunnd c# nici ini!iatorul, nici dispozitivul !int# nu insereaz# st#ri de a"teptare, se poate transfera cte un cuvnt pe fiecare front cresc#tor al semnalului de ceas. La o frecven!# de 33 MHz se ob!ine o rat# de transfer de 132 MB/s, n cazul implement#rii pe 32 de bi!i, sau 264 MB/s, pentru implement#rile de 64 de bi!i. Cu o frecven!# a ceasului de 66 MHz se pot ob!ine rate de transfer de 264 MB/s, respectiv 528 MB/s.

Identificarea dispozitivelor
Fiecare dispozitiv conectat la o magistral# PCI este identificat printr-un set de trei numere: Num#rul de magistral#, 8 bi!i, este num#rul magistralei la care este conectat dispozitivul; numerotarea ncepe de la 0. Specifica!iile PCI permit maxim 256 de magistrale per sistem. Num#rul de dispozitiv, 5 bi!i, este un num#r de identificare unic n cadrul unei magistrale. La o magistral# pot fi ata"ate maxim 32 de dispozitive. Dispozitivele conectate la magistrale diferite pot avea acela"i num#r de dispozitiv. Num#rul de func!ie, 3 bi!i, este folosit pentru dispozitive cu mai multe unit#!i func!ionale. De exemplu, o singur# plac# de re!ea g#zduie"te dou# interfe!e, caz n care interfe!ele individuale sunt identificate prin numere de func!ie diferite. Standardul PCI define"te un num#r maxim de 8 unit#!i func!ionale per dispozitiv. Specifica!iile PCI permit unui sistem s# con!in# pn# la 256 de magistrale, dar deoarece acest num#r nu este suficient de mare pentru sistemele mari, Linux folose%te no!iunea de domenii PCI. Fiecare domeniu PCI poate g#zdui p#n# la 256 de magistrale. Fiecare magistral# g#zduie"te pn# la 32 de dispozitive "i fiecare dispozitiv poate fi o plac# multifunc!ional# cu maxim 8 func!ii.

Spa!iile de adrese
Comunica!ia procesorului cu dispozitivele PCI are loc prin intermediul a trei spa!ii de adrese: memorie, adrese de I/O "i configura!ie. n func!ie de tipul de procesor, adresele de memorie sunt de 32 sau 64 de bi!i; n acest mod de lucru exist# posibilitatea p#str#rii datelor n memorie (caching) "i pot avea loc tranzac!ii de tip rafal#. Comunica!ia prin intermediul adresele de I/O este p#strat# din motive de compatibilitate. De"i specifica!iile magistralei PCI permit tranzac!ii de tip rafal# n orice spa!iu de adrese, majoritatea dispozitivelor le suport# numai pentru adresele de memorie "i nu I/O. Spa!iul de configura!ie PCI con!ine informa!ie detaliat# cu privire la tipul "i caracteristicile individuale ale dispozitivelor.

Informa!ia de configura!ie
Fiecare dispozitiv PCI are un spa!iu de configura!ie de 256 de octe!i. Formatul primilor 64 de octe!i este definit de specifica!iile PCI. Aceast# zon# reprezint# antetul de configura!ie al dispozitivului. Restul octe!ilor r#mn la discre!ia produc#torului "i de obicei sunt folosi!i pentru schimbul de informa!ie ntre dispozitiv "i driverul de dispozitiv. Specifica!iile definesc dou# formate de antet, numite tipul 0 "i 1. Tipul 1 este definit pentru pun!ile de leg#tur# ntre dou# magistrale PCI. Tipul 0 este utilizat de toate celelalte dispozitive. Formatul antetului de tip 0 este prezentat n figur#.

Cmpurile din antet se mai numesc "i registre. De aceea ne putem referi la acestea cu denumirile: registrul de identificare a dispozitivului, registrul de identificare a produc#torului, registre pentru controlul func!iilor "i detectarea st#rii dispozitivului, etc.. Trebuie remarcat faptul c# nu toat# informa!ia din primii 64 de octe!i este obligatorie; unele cmpuri sunt op!ionale "i pot fi ini!ializate cu zero dac# nu sunt necesare dispozitivului. Cmpurile obligatorii sunt marcate cu gri (identificatorul produc#torului, identificatorul dispozitivului, registrul de comand#, registrul de stare, identificatorul de versiune, tipul de antet). Valorile din registrele PCI sunt date ntotdeauna n format little-endian. Bi!ii 6 0 din cmpul Tip antet definesc formatul antetului de configura!ie: 0 sau 1. Bitul 7 indic# dac# dispozitivul are o singur# func!ie sau este multifunc!ional (ncorporeaz# mai multe func!ii). Identificatorul produc#torului "i identificatorul dispozitivului identific# produc#torul "i tipul dispozitivului. Primul este atribuit de un consor!iu industrial (PCI Special Interest Group) pentru identificarea companiilor individuale, ultimul poate fi selectat liber de produc#tor. De exemplu, toate dispozitivele Intel sunt etichetate cu acela"i num#r de produc#tor, 0x8086. mpreun#, cei doi identificatori formeaz# semn#tura dispozitivului. Pentru o descriere mai exact# a interfe!elor generice pot fi folosite nc# dou# registre adi!ionale cu nume similare produc#torul subsistemului "i identificatorul subsistemului. Identificatorul de versiune reprezint# versiunea dispozitivului. Permite utilizatorilor s# selecteze versiuni mbun#t#!ite de drivere de dispozitiv, n care au

fost eliminate disfunc!ionalit#!i hardware cunoscute sau n care au fost ad#ugate noi func!ionalit#!i. Codul de clas#, registru de 24 de bi!i, este folosit n procesul de atribuire a dispozitivului la diferite grupuri func!ionale "i este mp#r!it n dou# p#r!i. Primii 8 bi!i indic# clasa de baz# (de exemplu, controler pentru dispozitive de stocare), iar urm#torii 16 bi!i o subclas# a clasei de baz# (de exemplu, controler SCSI). n Linux, clasele de baz# "i subclasele corespunz#toare lor sunt enumerate n fi"ierul pci_ids.h din linux-headers (tot aici se g#se%te %i identificatorul produc#torului, identificatorul dispozitivului, identificatorul produc#torului de subsistem, identificatorul subsistemului). #define PCI_BASE_CLASS_STORAGE #define PCI_CLASS_STORAGE_SCSI #define PCI_CLASS_STORAGE_IDE #define PCI_CLASS_STORAGE_FLOPPY 0x01 0x0100 0x0101 0x0102 0x02 0x0200 0x0201 0x0202

#define PCI_BASE_CLASS_NETWORK #define PCI_CLASS_NETWORK_ETHERNET #define PCI_CLASS_NETWORK_TOKEN_RING #define PCI_CLASS_NETWORK_FDDI

Registrul de comand# poate specifica anumite func!ii: activarea dispozitivului, activarea accesului la memoria dispozitivului, activarea func!iei de master a dispozitivului, activarea parit#!ii, activarea semnal#rii erorilor de sistem. Registrul de stare p#streaz# informa!ii de stare, cum ar fi frecven!a de func!ionare (33 sau 66 MHz), etc.. Cele "ase adrese de baz#, fiecare de 32 de bi!i, sunt folosite la definirea adreselor n vederea comunica!iei ntre dispozitivul PCI "i restul sistemului. n ce prive%te ultimele dou# registre (Pin ntr., Linie ntr.), magistrala PCI are patru linii pentru cererile de ntrerupere; acestea fac parte din liniile op!ionale ale magistralei. Num#rul de ntrerupere specific# ntreruperea folosit# de dispozitiv. Pot fi acceptate valori ntre 0 "i 255, o valoare de 0 indic# faptul c# dispozitivul nu folose"te ntreruperi. Chiar dac# standardul PCI suport# 255 de ntreruperi, num#rul care poate fi folosit este n general limitat de arhitectura de sistem. ncepnd cu standardul PCI 2.2 a fost implementat# o metod# alternativ# de generare a ntreruperilor, ntreruperi semnalizate prin mesaje (MSI Message Signaled Interrupts). MSI permite dispozitivelor s# scrie un mesaj special la o anumit# adres# din spa!iul de memorie. Datele din mesaj sunt folosite de chipset pentru a determina ntreruperea care trebuie generat# la procesor. Dispozitivul este configurat cu un identificator de 16 bi!i "i cu o adres# la care s# scrie (de obicei un

registru de control dintr-un controler de ntreruperi). Num#rul de ntrerupere este ad#ugat la cuvntul de date pentru a identifica ntreruperea.

1.1.1. Decodificarea datelor PCI n sistemele Linux


Kernelul Linux reprezint# dispozitivele PCI ca pseudo-dispozitive n sistemul de fi"iere sysfs:
root@centos:~# ls -la /sys/bus/pci/devices/ total 0 drwxr-xr-x. 2 root root 0 Feb 28 12:55 . drwxr-xr-x. 5 root root 0 Feb 28 12:55 .. lrwxrwxrwx. 1 root root 0 Feb 28 12:55 ../../../devices/pci0000:00/0000:00:00.0 lrwxrwxrwx. 1 root root 0 Feb 28 12:55 ../../../devices/pci0000:00/0000:00:01.0 lrwxrwxrwx. 1 root root 0 Feb 28 12:55 ../../../devices/pci0000:00/0000:00:02.0 lrwxrwxrwx. 1 root root 0 Feb 28 12:55 ../../../devices/pci0000:00/0000:00:03.0 lrwxrwxrwx. 1 root root 0 Feb 28 12:55 ../../../devices/pci0000:00/0000:00:04.0 lrwxrwxrwx. 1 root root 0 Feb 28 12:55 ../../../devices/pci0000:00/0000:00:05.0 lrwxrwxrwx. 1 root root 0 Feb 28 12:55 ../../../devices/pci0000:00/0000:00:06.0 lrwxrwxrwx. 1 root root 0 Feb 28 12:55 ../../../devices/pci0000:00/0000:00:07.0 lrwxrwxrwx. 1 root root 0 Feb 28 12:55 ../../../devices/pci0000:00/0000:00:08.0

0000:00:00.0 0000:00:01.0 0000:00:02.0 0000:00:03.0 0000:00:04.0 0000:00:05.0 0000:00:06.0 0000:00:07.0 0000:00:08.0

-> -> -> -> -> -> -> -> ->

Pentru o intrare ca:


lrwxrwxrwx 1 root root 0 Mar 27 13:27 ../../../devices/pci0000:00/0000:00:04.0 0000:00:04.0 ->

Putem mp#r!i num#rul de dispozitiv 0000:00:04.0 astfel: 0000 domeniul PCI (fiecare domeniu poate con!ine pn# la 256 de magistrale PCI) 04 num#rul magistralei PCI la care este ata"at dispozitivul 00 num#rul de dispozitiv .0 func!ia dispozitivului PCI

Pentru a ob!ine informa!ie suplimentar# despre dispozitiv, putem intra n directorul 0000:04:00.0 "i afi"a unul sau mai multe fi"iere.

root@centos:~# cd 0000:04:00.0 root@centos:~# ls -la total 0 drwxr-xr-x. 4 root root 0 Feb 28 10:55 . drwxr-xr-x. 39 root root 0 Feb 28 12:55 .. -rw-r--r--. 1 root root 4096 Mar 27 13:36 broken_parity_status -r--r--r--. 1 root root 4096 Feb 28 12:55 class -rw-r--r--. 1 root root 4096 Feb 28 10:55 config -r--r--r--. 1 root root 4096 Feb 28 10:55 device -rw-------. 1 root root 4096 Mar 27 13:36 enable lrwxrwxrwx. 1 root root 0 Mar 27 13:36 firmware_node -> ../../LNXSYSTM:00/LNXSYBUS:00/PNP0A03:00/device:1e -r--r--r--. 1 root root 4096 Feb 28 10:55 irq -r--r--r--. 1 root root 4096 Mar 27 13:36 local_cpulist -r--r--r--. 1 root root 4096 Mar 27 13:36 local_cpus -r--r--r--. 1 root root 4096 Mar 27 13:36 modalias -rw-r--r--. 1 root root 4096 Mar 27 13:36 msi_bus -r--r--r--. 1 root root 4096 Mar 27 13:36 numa_node drwxr-xr-x. 3 root root 0 Feb 28 12:55 pci_bus drwxr-xr-x. 2 root root 0 Mar 27 13:36 power --w--w----. 1 root root 4096 Mar 27 13:36 remove --w--w----. 1 root root 4096 Mar 27 13:36 rescan -r--r--r--. 1 root root 4096 Feb 28 10:55 resource lrwxrwxrwx. 1 root root 0 Feb 28 10:55 subsystem -> ../../../bus/pci -r--r--r--. 1 root root 4096 Feb 28 10:55 subsystem_device -r--r--r--. 1 root root 4096 Feb 28 10:55 subsystem_vendor -rw-r--r--. 1 root root 4096 Feb 28 12:55 uevent -r--r--r--. 1 root root 4096 Feb 28 10:55 vendor root@centos:~# cat vendor 0x8086 root@centos:~# cat device 0x340b root@centos:~# cat class 0x060400

Fiecare fi"ier con!ine o informa!ie unic#, cum ar fi produc#torul dispozitivului PCI (vendor), clasa dispozitivului (class), identificatorul dispozitivului (device), informa!ii despre ntreruperile folosite sau alte resurse atribuite. Majoritatea distribu!iilor de linux con!ine un pachet de utilitare PCI, care pot interoga, configura "i actualiza informa!ia dispozitivului PCI. Utilitarul lspci furnizeaz# informa!ie cu privire la magistralele PCI prezente n sistem "i dispozitivele conectate la acestea. Pentru defini!iile registrelor PCI se poate consulta fi"ierul /usr/include/linux/pci.h.

Studiu de caz nu se cere la test

http://www.via.com.tw/en/products/chipsets/k7-series/km400/
root@desktop:~# lspci
00:00.0 Host bridge: VIA Technologies, Inc. VT8378 [KM400/A] Chipset Host Bridge 00:01.0 PCI bridge: VIA Technologies, Inc. VT8237/VX700 PCI Bridge (de fapt, calculatorul are un VT8235 care nu !tie de SATA !i RAID). 00:08.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8139/8139C/8139C+ (rev 10) 00:09.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8139/8139C/8139C+ (rev 10) 00:0a.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8139/8139C/8139C+ (rev 10)

00:10.0 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80) 00:10.1 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80) 00:10.2 USB Controller: VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller (rev 80) 00:10.3 USB Controller: VIA Technologies, Inc. USB 2.0 (rev 82) 00:11.0 ISA bridge: VIA Technologies, Inc. VT8235 ISA Bridge 00:11.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06) 00:11.5 Multimedia audio controller: VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller (rev 50) 00:12.0 Ethernet controller: VIA Technologies, Inc. VT6102 [RhineII] (rev 74) 01:00.0 VGA compatible controller: ATI Technologies Inc RV350 AS [Radeon 9550] 01:00.1 Display controller: ATI Technologies Inc RV350 AS [Radeon 9550] (Secondary)

Comanda lspci cite"te intr#rile din sysfs "i decodific# numerele de produc#tor "i dispozitiv folosind informa!ia din /usr/share/hwdata/pci.ids. Acest fi"ier se modific# pe m#sur# ce sunt ad#uga!i noi produc#tori "i dispozitive "i poate fi actualizat cu ajutorul utilitarului update-pciids. Dac# n sistem este introdus un dispozitiv nou "i lspci nu afi"eaz# detalii despre el este indicat s# actualiza!i fi"ierul pci.ids la ultima variant#.
root@centos:~# update-pciids
% Total Time Current Left Speed 100 196k 100 -:-- 250k Done. % Received % Xferd Average Speed Upload Time Total Time Spent Dload 196k 0 0 201k

0 --:--:-- --:--:-- --:-

Pentru o perspectiv# ierarhic# a dispozitivelor PCI prezente n sistem, se folose%te lspci cu op$iunea t.
root@desktop:~# lspci -tv
-[0000:00]-+-00.0 VIA Technologies, Inc. VT8378 [KM400/A] Chipset Host Bridge +-01.0-[0000:01]--+-00.0 ATI Technologies Inc RV350 AS [Radeon 9550] | \-00.1 ATI Technologies Inc RV350 AS [Radeon 9550] (Secondary) +-08.0 Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ +-09.0 Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ +-0a.0 Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+ +-10.0 VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller +-10.1 VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller +-10.2 VIA Technologies, Inc. VT82xxxxx UHCI USB 1.1 Controller +-10.3 VIA Technologies, Inc. USB 2.0 +-11.0 VIA Technologies, Inc. VT8235 ISA Bridge

+-11.1 VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE +-11.5 VIA Technologies, Inc. VT8233/A/8235/8237 AC97 Audio Controller \-12.0 VIA Technologies, Inc. VT6102 [Rhine-II]

Op!iunea -x afi"eaz# partea standard a spa!iului de configura!ie (primii 64 de octe!i) sub form# hexazecimal#.
root@desktop:~# lspci 00:00.0 Host bridge: Chipset Host Bridge 00: 06 11 05 32 06 00 10: 08 00 00 b0 00 00 20: 00 00 00 00 00 00 30: 00 00 00 00 80 00 -x | head -11 VIA Technologies, Inc. VT8378 [KM400/A] 30 00 00 00 22 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 06 00 00 00 00 00 43 00 08 00 10 00 00 00 18 00 00 00 81 00

00:01.0 PCI bridge: VIA Technologies, Inc. VT8237/VX700 PCI Bridge 00: 06 11 98 b1 07 01 30 02 00 00 04 06 00 00 01 00 10: 00 00 00 00 00 00 00 00 00 01 01 00 90 90 20 22 root@desktop:~# lspci -D
0000:00:00.0 Host bridge: VIA Technologies, Inc. VT8378 [KM400/A] Chipset Host Bridge

Primul num#r, 0000, reprezint# num#rul de domeniu PCI, al doilea num#r, 00 reprezint# num#rul de magistral#, urmat apoi de num#rul de dispozitiv %i de func$ie. Implicit, lspci nu afi"eaz# num#rul de domeniu PCI.
root@desktop:~# lspci -nn
00:00.0 Host bridge [0600]: VIA Technologies, Inc. VT8378 [KM400/A] Chipset Host Bridge [1106:3205] 00:01.0 PCI bridge [0604]: VIA Technologies, Inc. VT8237/VX700 PCI Bridge [1106:b198]

Alte utilitare pentru detectarea hardware-ului: lshw, lscpu, lsusb, ls -la /dev/disk/by-id/usb-*, lspnp, hwinfo, hardinfo, dmidecode, hdparm -I /dev/sdx, wodim devices, wodim scanbus, x86info, likwid-topology.

PCI-X nu se cere la test


PCI-X este o extensie a magistralei PCI cu performan!e mai ridicate. Este compatibil# cu diferitele variante PCI, att hardware ct "i software, lucru care nseamn# c# sistemele de operare nu necesit# vreo modificare. Versiunea 1.0 a magistralei PCI-X permite frecven!e de func!ionare de pn# la 133 MHz. La aceast# frecven!#, rata de transfer maxim# pentru o magistral# de 64 de bi!i este de 1064 MB/s. Versiunea 2.0 introduce dou# frecven!e noi de func!ionare a magistralei, 266 MHz "i 533 MHz, ratele maxime de transfer fiind de 2128 MB/s, respectiv 4264 MB/s. Indiferent de variante, atunci cnd lucreaz# la frecven!ele standard, 133 MHz, 266 MHz, 533 MHz, PCI-X permite utilizarea unui singur conector "i a unei singure nc#rc#ri electrice, a"adar, pot fi folosite numai pentru conexiuni punct la punct. Dac# nu sunt utiliza!i conectori (componentele sunt lipite), exist# posibilitatea unor nc#rc#ri multiple. Pe lng# frecven!ele mai ridicate, pentru o func!ionare mai eficient# inclusiv la frecven!ele PCI standard, versiunile PCI-X introduc "i mbun#t#!iri ale protocolului PCI conven!ional.

2. PCI Express Gen. 2

PCIe este o conexiune serial# care opereaz# mai degrab# ca o re!ea dect ca o magistral#. n loc de o singur# magistral# care s# transfere date ntre diferite dispozitive, PCIe folose"te un comutator (switch) ce controleaz# cteva conexiuni seriale punct-la-punct. Aceste conexiuni pleac# din switch direct la dispozitive. Fiecare dispozitiv are propria conexiune dedicat#, astfel nct l#!imea de band# nu mai este partajat# ntre dispozitive, ca n cazul unei magistrale PCI obi"nuite. La pornirea calculatorului, PCIe detecteaz# dispozitivele prezente pe placa de baz#, apoi identific# leg#turile dintre ele, crend o hart# de trafic "i negociind l#!imea fiec#rei leg#turi. Procesul de identificare a dispozitivelor "i conexiunilor folose"te acela"i protocol ca PCI, a"adar PCIe nu necesit# modific#ri ale sistemului de operare.

Comutatorul ofer# comunica!ii punct-la-punct ntre diferite dispozitive. Arhitectura PCIe, structurat# pe niveluri, este reprezentat# n figura de mai jos. Nivelul de configurare asigur# compatibilitatea cu modul de adresare PCI (o arhitectur# de tip ncarc#/stocheaz# "i un spa!iu liniar de adrese) "i mecanismul de configurare definit n specifica!iile PCI Plug-and-Play. Acest lucru nseamn# c# nu sunt necesare modific#ri la nivelul aplica!iilor sau driverelor de dispozitiv. Nivelul software genereaz# cereri de citire "i scriere care sunt transportate la dispozitive prin intermediul nivelului de tranzac!ie. Nivelul de tranzac$ie folose%te un protocol bazat pe pachete.

Pentru un transfer ct mai eficient, nivelul leg#turii de date adaug# acestor pachete numere de secven!# "i sume de verificare (coduri CRC). Nivelul fizic const# dintrun canal serial, dual, implementat ca o pereche de transmisie "i una de recep!ie.

Nivelul fizic
nainte de PCIe, toate magistralele "i sloturile de expansiune ale calculatoarelor personale foloseau transmisia paralel#. n comunica!ia paralel#, ntr-un singur ciclu de ceas, sunt transfera!i n acela"i timp mai mul!i bi!i, fiecare parcurgnd firul electric corespunz#tor. n comunica!ia serial#, ntr-un ciclu de ceas este transferat numai un singur bit. La nceput, comunica!ia paralel# era mai rapid#, deoarece cu ct transmitem mai mul!i bi!i o dat#, cu att ob!inem viteze de transfer mai mari. Dar comunica!ia paralel# ntmpin# cteva probleme care mpiedic# transmisiile s# ating# rate mari de transfer. Cu ct ciclul de ceas este mai mic, cu att efectul interferen!ei electromagnetice (cmpul electromagnetic creat n jurul unui fir induce curent electric n firele adiacente, corupnd informa!ia transmis#) "i a ntrzierii de propagare (este greu s# ob!inem pe placa de baz# exact aceea"i dimensiune pentru toate firele, iar la rate mari de transfer, datele care parcurg firele mai scurte ajung primele, %i n consecin!#, nainte de a ncepe procesarea datelor receptorul trebuie s# a"tepte sosirea tuturor bi!ilor).

1.1.2. Transmisia serial" PCIe


Procesul de transmisie serial# din PCIe este mai simplu de implementat, deoarece sunt necesare mai pu!ine fire. PCIe folose"te patru fire dou# pentru transmisie, dou# pentru recep!ie, folosind o tehnic# de evitare a interferen!elor electromagnetice numit# transmisie diferen!ial#. Transmisia diferen!ial# se refer# la faptul c# acela"i semnal este transmis pe dou# fire, al doilea fir transmi!nd semnalul oglindit (polaritate inversat#) fa!# de semnalul original.

La receptor, semnalele sunt comparate. n mod ideal, ar trebui ca ele s# fie egale, dar oglindite. n realitate ele nu sunt egale, dar e u"or de dedus faptul c# diferen!a dintre cele dou# semnale este zgomot. n acest fel, acest procedeu de transmisie u"ureaz# sarcina receptorului n opera!ia sa de detec!ie "i eliminare a zgomotului. Pe lng# imunitate crescut# la interferen!ele electromagnetice, comunica!ia serial# este imun# "i la ntrzierile de propagare. O alt# diferen!# major# ntre cele dou# tipuri de comunica!ii const# din faptul c# o comunica!ie paralel# de obicei, din cauza num#rului mare de fire ce trebuie folosite, are loc ntr-un singur sens (half duplex - acela"i fir este utilizat fie la transmisie, fie la recep!ie). Comunica!ia serial# poate avea loc mult mai u"or n ambele sensuri n acela"i timp (transmisia "i recep!ia folosesc un set de fire separate), deoarece este nevoie de numai dou# fire n fiecare direc!ie. n cazul transmisiei ntr-un singur sens, dou# dispozitive nu pot comunica n acela"i timp, unul din ele ori transmite, ori recep!ioneaz#. n cazul transmisiei simultane n ambele sensuri, ambele dispozitive pot transmite n acela"i timp. &i totu"i, cum este posibil ca transmisia serial# s# fie mai rapid#? Deoarece n comunica$ia serial# pot fi folosite frecven$e mai mari. O conexiune paralel# de 32 de bi!i per ciclu de ceas, la 33 MHz, atinge o rat# maxim# de 32/8 ' 33 MHz, adic# 133 MB/s. O conexiune serial# PCIe de 2.5 GHz ' 1 bit, atinge o rat# de transfer de 250 MB/s.

1.1.3. Conexiunile PCIe


Conexiunea PCIe se bazeaz# pe no!iunea de lane (canal de comunica!ie), care descrie o comunica!ie serial# de 1 bit, de mare vitez#, cu transmisie simultan# n ambele sensuri. Ceasul de date este ncorporat. Se transmite un bit per ciclu n fiecare direc!ie. Pentru a cre"te l#!imea de band# lane-urile pot fi grupate. De exemplu, cnd dou# dispozitive folosesc pentru conexiunea lor patru lane-uri, aceasta se consider# conexiune x4 "i va fi capabil# s# ating# de 4 ori mai mult# l#!ime de band# dect o singur# conexiune, x1. n figur# ilustr#m dou# dispozitive conectate folosind dou# lane-uri, altfel spus, o conexiune x2. De"i n teorie poate fi grupat orice num#r de lane-uri ntre 1 "i 32, cele mai ntlnite conexiuni sunt x4, x8 "i x16. Octe!ii sunt distribui!i ntre lane-uri ca n Figura 9.

PCIe 1.0 "i 2.0 folosesc sistemul de codare 8b/10b (la fel ca Fast Ethernet, 100 Mbps). Acest lucru nseamn# c# fiecare octet de date este codificat "i transmis ca num#r de 10 bi!i. De obicei, o valoare dat# este convertit# din bi!i pe secund# (bps) n octe!i pe secund# (B/s) prin mp#r!ire la 8, din moment ce un octet este un grup de opt bi!i. Totu"i, din cauza cod#rii 8b/10b, trebuie s# mp#r!im la 10, nu la 8. Acesta este motivul pentru care cu o frecven!# de 2.5 GHz sau 5 GHz, l#!imea de band# pentru o conexiune x1 este de 250 MB/s, respectiv 500 MB/s , "i nu 312.5 MB/s sau 625 MB/s. Cei doi bi!i n plus se numesc nc#rcare suplimentar# "i m#nnc# 20% din l#!imea de band# a canalului. PCIe 3.0 folose"te un sistem de codare diferit, 128b/130b. Dup# cum putem deduce, acest sistem transmite 130 de bi!i pentru fiecare 128 de bi!i de date, lucru care ofer# o nc#rcare suplimentar# mult mai mic#. Din cauza acestei cod#ri,

PCIe 3.0 poate ob!ine rate de transfer duble fa!# de PCIe 2.0 la o frecven!# de ceas de 8 GHz n loc de 10 GHz. PCIe 4.0 va folosi aceea"i codare ca PCIe 3.0, dar va dubla frecven!a de ceas, "i astfel, va dubla l#!imea de band# disponibil#. Versiune 1.0 2.0 3.0 4.0 Codare 8b/10b 8b/10b 128b/130b 128b/130b Frecven!# 2.5 Ghz 5 Ghz 8 Ghz 16 GHz L#!ime de band# (x1) 250 MB/s 500 MB/s 1 GB/s 2 GB/s

A"a cum am men!ionat, gruparea lane-urilor ne permite s# multiplic#m l#!imea de band# cu num#rul de lane-uri folosite. Astfel, o conexiune x8 cu PCIe 2.0 va avea o band# de 4 GB/s (500 MB/s x 8), n timp ce o conexiune x16 cu PCIe 2.0 va avea o l#!ime de band# de 8 GB/s.

1.1.4. Sloturi #i carduri


Specifica!iile PCIe permit sloturilor s# aibe dimensiuni diferite, n func!ie de num#rul de lane-uri conectate la slot. Un adaptor poate fi inserat n orice slot PCIe, atta timp ct are nevoie de un num#r mai mic de lane-uri dect are disponibil slotul. De exemplu, putem instala o plac# x1 n orice tip de slot PCIe, nu este neap#rat necesar un slot x1. Astfel, dac# avem o plac# de expansiune x4 "i placa de baz# nu integreaz# (con$ine) un slot PCIe x4, putem s# o introducem ntrun slot x8 sau x16. n timpul ini!ializ#rii sistemului, num#rul de lane-uri "i frecven!a de operare este negociat# de doi agen!i (capetele conexiunii) pentru fiecare leg#tur# PCIe. Nu este implicat n acest proces niciun firmware sau sistem de operare.

Nivelul leg"tur" de date


Rolul principal al acestui nivel este de a asigura transmisia eficient# a pachetelor de-a lungul leg#turilor PCIe. Nivelul leg#tur# de date este responsabil cu integritatea datelor "i adaug# la pachetele primite de la nivelul de tranzac!ie un num#r de secven!# "i o sum# de verificare.

n majoritatea cazurilor, transferul de date este ini!iat de la nivelul de tranzac!ie. Un protocol de control se asigur# de faptul c# pachetele sunt transmise numai atunci cnd se "tie c# la recep!ie este disponibil un buffer necesar pentru primirea acestora. Acest lucru elimin# necesitatea de a retransmite un pachet "i n consecin!# leg#tura este utilizat# mai eficient. Nivelul leg#tur# de date va retransmite automat un pachet semnalizat ca fiind corupt.

Nivelul de tranzac!ie
Nivelul de tranzac!ie recep!ioneaz# cererile de citire/scriere de la nivelul software "i creaz# pachete de cerere (transmisie). Toate cererile sunt implementate sub forma unor tranzac!ii divizate (permit unui ini!iator s# efectueze o cerere pentru un transfer "i apoi s# elibereze magistrala) (tranzac!iile sunt definite ca o serie de unu sau mai multe transmisii de pachete necesare finaliz#rii unui transfer de informa!ie ntre un client (requester) "i o surs# (completer)). Unele pachete de cerere vor avea nevoie de un pachet de r#spuns. De asemenea, nivelul de tranzac!ie recep!ioneaz# pachete de r#spuns de la nivelul de leg#tur# de date "i le compar# cu cererile originale primite de la nivelul software. Fiecare pachet are un identificator unic care permite nivelului de tranzac$ie s# direc$ioneze pachetele de r#spuns la sursa corect#. Formatul pachetelor permite adresarea pe 32 "i 64 de bi!i. Totodat#, pachetele au atribute ce pot fi folosite pentru rutarea optim# prin sistemul de I/O (no-soop, relaxed-ordering "i priority). Nivelul de tranzac!ie recunoa"te patru spa!ii de adrese: include cele trei spa!ii de adrese PCI (memorie, I/O "i configura!ie) "i adaug# un spa!iu de mesaje (Message Space). A%a cum am amintit anterior, PCI 2.2 a introdus ca op$iune o metod# alternativ# de propagare a ntreruperilor numit# MSI (Message Signaled Interrupt, ntreruperi semnalate prin mesaje). La PCIe MSI devine metod# principal# de procesare a ntreruperilor. n loc de un semnal transmis fizic, PCIe scrie la o adres# de memorie rezervat# un mesaj cu un format special. Totodat#, PCIe folose"te spa!iul de mesaje pentru a p#stra compatibilitatea cu toate semnalele dinainte, cum ar fi ntreruperi, cereri de gestiune a puterii consumate, reset-uri, ".a.m.d..

3. QuickPath Interconnect

Evolu!ia interfe!elor la procesor


n sistemele cu magistral# la procesor partajat#, ca n figur#, tot traficul este transmis de-a lungul unei singure magistrale partajate bi-direc!ionale, cunoscut# "i sub numele de FSB (Front Side Bus) (pe la Pentium Pro, 1992, primul microprocesor Intel ce avea suport pentru arhitecturi SMP). Aceste magistrale de 64 de bi!i pot transporta mai mul!i octe!i de date n acela"i timp.

ns# problema acestei abord#ri este cauzat# de constrngerile electrice ap#rute odat# cu cre"terea frecven!ei. Pentru a rezolva aceast# problem#, Intel a recurs la o serie de mbun#t#!iri tehnologice. Rata de date maxim# teoretic# a FSB este de 1.6 GT/s (Giga Tranzac$ii pe secund#). Pentru a cre"te l#!imea de band#, magistrala unic# a fost mp#r!it# n dou# magistrale independente (DIB Dual Independent Buses).

n final, fiecare procesor din sistem va primi propria FSB, strategie numit# DHSI (Dedicated High-Speed Interconnects).

Odat# cu introducerea procesoarelor cu microarhitectur# Core, procesoarele Xeon vor trece de la DHSI, care avea controlerul de memorie n chipset, la o arhitectur# distribuit# a memoriei partajate, folosind QPI (QuickPath Interconnect).

Prezentare general"
QPI este o metod# de interconectare punct-la-punct de mare vitez#. Datele sunt transmise n paralel de-a lungul a mai multor lane-uri "i pachetele sunt mp#r!ite n mai multe transferuri paralele. n figura urm#toare este prezentat un procesor care include un modul de interconectare QPI. Procesorul poate avea unul sau mai multe core-uri. Cnd sunt prezente mai multe core-uri, ele pot partaja memoriile cache sau nu. Tipic, procesorul con$ine "i unul sau mai multe controlere de memorie. n func!ie de nivelul de scalabilitate proiectat, procesorul poate include %i un ruter crossbar "i mai multe porturi QPI (un port con!ine o pereche de leg#turi unidirec!ionale). QPI are o arhitectur# structurat# pe cinci niveluri: fizic, leg#tur#, rutare, transport "i protocol.

Nivelul fizic
Nivelul fizic const# din firele purt#toare de semnal "i circuitele "i logica necesar# implement#rii tuturor caracteristicilor legate de transmiterea "i recep!ionarea de 0 "i 1. Fiecare port QPI de la procesor poate conecta o pereche de leg#turi format# din dou# magistrale unidirec!ionale care opereaz# simultan. Acest lucru transfer# informa$ii n ambele direc!ii n acela%i timp.

Fiecare leg#tur# complet# (full link) este compus# din 20 de lane-uri de 1 bit care folosesc transmisia (semnalizarea) diferen!ial# (DC coupled). Specifica!ia define"te operarea n leg#turi complete (full = 20 lane-uri), jum#t#$i (half =10 lane-uri) "i p#trimi (quarter = 5 lane-uri). Leg#tura opera!ional# este identificat# n timpul

ini!ializ#rii. n consecin!#, pentru o leg#tur# complet# (full), unitatea de transfer la nivelul fizic este de 20 de bi!i, numit# %i unitate fizic# sau, prescurtat, Phit (Phit Physical unit). Un Phit con!ine toat# informa!ia transferat# de nivelul fizic pe un singur front de und#. O leg#tut# complet# transfer# 20 de bi!i, o jum#tate transfer# 10 bi!i, iar o p#trime, 5 bi!i. Un Flit (cadrul de la nivelul leg#tur#) are ntotdeauna 80 de bi!i, indiferent de capacitatea leg#turii fizice, astfel nct num#rul de Phit necesari la transmiterea unui Flit va cre"te cu un factor de doi sau patru la leg#turile de jum#tate sau p#trime. De asemenea, fiecare leg#tur# are un semnal de ceas. Lane-ul de ceas este necesar pentru fiecare direc!ie. n total sunt 84 de semnale individuale care formeaz# o leg#tur# QPI. Acest num#r este semnificativ mai mic dect cel corespunz#tor FSB-ului de 64 de bi!i, care folose%te aproximativ 150 de pini. Toate tranzac!iile sunt ncapsulate de-a lungul acestor leg#turi, inclusiv mesajele de configurare "i toate ntreruperile.

Leg#tura opereaz# la dublul ratei de date (transferurile de bit apar att pe frontul cresc#tor ct "i pe cel descresc#tor al ceasului), ceea ce nseamn# c# rata bi!ilor de date este de dou# ori mai mare dect frecven!a ceasului. Ceasul este un semnal separat, nu codificat n semnalul de date ca la PCIe din genera$iile 1 "i 2. Implement#rile ini!iale ob!in rate de 6.4 GT/s.

Nivelul leg"tur"
Nivelul leg#tur# are trei responsabilit#!i majore: (1) s# garanteze livrarea datelor ntre dou# niveluri de protocol sau rutare; (2) s# controleze fluxul de informa$ii ntre doi agen!i de protocol; (3) s# abstractizeze nivelul fizic "i s# ofere servicii nivelurilor superioare. Cea mai mic# unitate de transfer la nivelul leg#tur# este un Flit (Flow control unit). Fiecare Flit are 80 de bi!i, care pe o leg#tur# complet# este echivalent cu 4 Phit. Fiecare Flit con!ine o sum# de verificare (CRC) de 8 bi!i, generat# de transmit#!orul nivelului leg#tur#, "i un cmp de 72 de bi!i cu date utile. Dac# nivelul leg#tur# detecteaz# o eroare CRC, receptorul notific# transmi!#torul prin intermediul unui Flit transmis pe cealalt# magistral# a leg#turii "i transmi!#torul retransmite Flit-ul de date. Pentru a preveni dep#"irea bufferului la receptor, nivelul leg#tur# implementeaz# controlul fluxului folosind o schem# de tip credit/debit. Nivelul leg#tur# suport# "ase clase diferite de mesaje, lucru care permite nivelurilor superioare s# disting# ntre Flit-uri de date "i Flit-uri de mesaje, acestea din urm# folosite n special pentru ntre!inerea "i p#strarea coeren!ei cache-urilor.

Nivelul de rutare
Nivelul de rutare lucreaz# cu unit#$i de 72 de bi!i constnd dintr-un antet de 8 bi!i "i un cmp util de 64 de bi!i. Antetul con!ine destina!ia "i tipul mesajului. Cnd nivelul de rutare prime"te o astfel de unitate, examineaz# tabelele de rutare "i determin# dac# unitatea este la destina!ie. Dac# da, unitatea este naintat# nivelului superior. Dac# nu, unitatea este transmis# la portul QPI de ie"ire corespuz#tor. Pentru un dispozitiv cu numai un port QPI, nivelul de rutare este minim. Pentru implement#ri mai complexe, tabelele de rutare sunt mai complexe "i sunt modificate dinamic pentru a evita leg#turile QPI defecte.

Nivelul de transport
Nivelul de transport nu este necesar "i nici prezent n dispozitivele destinate conexiunilor punct-la-punct. Acestea includ Core i7. Nivelul de transport transmite "i recep!ioneaz# date de la echivalentele sale aflate pe alte dispozitive (ce pot s# nu fie conectate direct), verific# faptul c# datele sunt complete, "i dac# nu, cere retransmisia acestora.

Nivelul de protocol
Nivelul de protocol transmite "i recep!ioneaz# date n numele dispozitivului. Un pachet obi"nuit este reprezentat de un rnd de memorie cache. De asemenea, nivelul de protocol particip# la men$inerea coeren!ei cache prin transmiterea "i recep!ionarea mesajelor de coeren!# cache.

Exemple de interconectare cu QPI: http://pc.watch.impress.co.jp/docs/2008/0331/ kaigai430.htm

4. SCSI (Small Computer System Interface) #i SAS (Serial Attached SCSI)

Prezentare general" SCSI


n 1986, la apari!ie, SCSI suporta l#!imi de band# de aproximativ 5 MB/s. De-a lungul anilor, standardul a suferit transform#ri succesive. Asemenea magistralei de sistem, SCSI este definit# att de l#$imea magistralei ct %i de rata de ceas. Cre%terea unuia din ace%ti doi parametrii duce la cre%terea l#$imii de band# a magistralei SCSI. L#$imea magistralei este ori ngust# (narrow, 8 bi$i) ori larg# (wide, 16 bi$i). L#$imea magistralei determin# num#rul de octe$i de date care pot fi transmi%i ntr-un ciclu de ceas. L#$imea de band# determin# %i num#rul de dispozitive care poate fi conectat la o singur# magistral# SCSI. Magistralele nguste puteau gestiona 8 dispozitive, iar magistralele largi, 16 dispozitive. Cum un num#r de dispozitiv este rezervat pentru controlerul SCSI, fiecare tip de magistral# putea conecta 7, respectiv 15 discuri. Prima implementare SCSI-1, avea o magistral# de 8 bi$i %i o frecven$# de ceas de 5 MHz. Un octet de date transmis de 5 milioane de ori pe secund# d# o l#$ime de band# de 5 MB/s. De la SCSI-1 au fost folosite mai multe frecven$e de ceas. Fast SCSI definea o frecven$# de 10 MHz (genernd o rat# de transfer de 10 MB/s). Apoi au fost definite %i implementate Ultra SCSI (20 MHz), Ultra2 SCSI (40 MHz), Ultra3 SCSI (80 MHz), Ultra 160 SCSI (magistral# larg# la 160 MHz). Pentru a facilita apari$ia modific#rilor, standardele SCSI au fost grupate n cteva niveluri.

Defini!iile globale SCSI sunt specificate n standardul SAM (SCSI Architectural Model), n timp ce seturile de comenzi specifice diferitelor tipuri de dispozitive sunt grupate ntr-un nivel al seturilor de comenzi. Nivelul seturilor de comenzi con$ine setul principal de comenzi SCSI (SPC - SCSI Primary Commands), comun pentru toate dispozitivele, plus alte seturi de comenzi necesare fiec#rui tip specific de dispozitiv. Al treilea nivel define"te modul n care comenzile sunt mapate la un anumit protocol, de exemplu, SPI (SCSI Parallel Interface), FCP (Fiber Channel Protocol) sau SAS (Serial Attached SCSI). n final, al patrulea nivel, define"te interconect#rile prin care dispozitivele pot comunica unele cu altele folosind protocoalele de pe nivelurile superioare. Avantaje SCSI: detaliile de nivel inferior au fost l#sate la discre$ia produc#torilor de discuri; acest lucru a ascuns detaliile de implementare de software-ul de sistem "i a permis acomodarea rapid# cu noile dispozitive ap#rute. spre deosebire de alte tehnologii (de exemplu IDE, devenit ulterior ATA) care permiteau conectarea unui singur sau a dou# discuri la o magistral#, SCSI gestiona 16 discuri pe o magistral# extins#. n sistemele SCSI, interfa!a magistralei SCSI cu magistrala de sistem (de exemplu, PCI) a calculatorului este asigurat# de un HBA (Host Bus Adapter). Acest lucru are un avantaj major deoarece decupleaz# magistrala SCSI de magistrala de sistem %i pot avea loc tranzac!ii simultan att pe magistrala de sistem ct "i pe magistrala SCSI.

Termeni SCSI $i SAS


Ini!iator. Dispozitivul care poate ini!ia comenzi SCSI "i recep!iona r#spunsuri. n SCSI, ini!iatorii sunt dispozitive relativ simple care, odat# ce comanda a fost transmis#, transfer# controlul tranzac!iei dispozitivului !int#. "int#. Dispozitivul cu rol de receptor pentru comenzi SCSI, acceptnd / returnnd date "i furniznd informa!ii legate de finalizarea tranzac!iei. n SCSI, dispozitivul !int# este dispozitivul mai complex "i preia controlul tranzac!iei odat# ce comanda a fost recep!ionat#. El decide dac# trebuie s# se deconecteze nainte de returnarea datelor, cnd s# trimit# datele citite sau cnd s# preia de la ini!iator datele ce trebuie scrise pe discuri.

Unitatea logic# (Logical Unit) este un sistem din dispozitivul !int# care func!ioneaz# ca surs# sau destina!ie pentru date. O !int# poate con$ine mai multe unit#!i logice, identificate printr-un num#r de unitate logic# (LUN - Logical Unit Number); minim, o $int# trebuie s# dispun# de LUN 0.

Nexus. Derivat din cuvntul latinesc ce nseamn# leg#tur# sau conexiune, un nexus descrie rela!ia dintre lucruri. n SCSI, monitorizarea rela!iei dintre dispozitive permite unei !inte s# se reconecteze mai trziu la un ini!iator. Identificator de port (Port ID). O adres# unic# dintr-un domeniu SCSI sau SAS pentru fiecare port. n SAS, adresa de 64 de bi!i asociat# unui port serve"te drept identificator de port. Un dispozitiv poate atribui aceea"i adres# SAS mai multor porturi fizice pentru a permite gruparea lor ntr-un port de capacitate mai mare. Numele de dispozitiv. Pentru SAS este tot adresa SAS. WWN (World-Wide Name). Un identificator unic de 8 sau 16 octe$i, dimensiunea %i formatul sunt determinate de cei mai semnificativi patru bi$i, denumi$i NAA (Network Address Authority). Ceilal$i bi$i identific# compania (OUI) %i o valoare definit# de produc#tor. Fiecare unitate logic# (LUN) de!ine de asemenea un WWN. Unit#!ile de extensie (expanders). Asemenea switch-urilor din re!elele de calculatoare, unit#$ile de extensie ruteaz# cererile de conexiune "i apoi folosesc aceste conexiuni la transmiterea cadrelor de date ntre dispozitive. A"a cum reiese din figura de mai sus, exist# dou# tipuri de unit#!i de extensie fanout "i edge. Un domeniu SAS poate con!ine numai o singur# unitate de extensie fanout. Prin defini!ie, un domeniu SAS are o structur# arborescent#, cu unitatea de extensie fanout ca r#d#cin#. Aceast# unitate trebuie s# !in# minte toate adresele prezente n domeniu "i n consecin!# are nevoie de mai mult# memorie. Unit#!ie de extensie edge (de margine) sunt dispozitive mai simple, care pot fi cascadate pentru a crea mai multe posibilit#!i de adresare. Acest tip de unitate de extensie de!ine "i un port folosit ca destina!ie implicit# pentru cererile de conexiune pe care nu le poate transforma n adres#. La SCSI, un transfer de date ncepe cnd o aplica!ie client aflat# pe ini$iator transmite unei $inte o comand#. (inta accept# sarcina, r#spunde transmi!nd sau recep!ionnd datele, apoi returneaz# o valoare de stare pentru tranzac!ie. (intele con!in "i un manager de sarcini cu ajutorul c#ruia administreaz# sarcinile pe care le poate grupa n vederea execu!iei. SCSI define"te "i o metod# prin care clientul poate gestiona aceast# coad# de sarcini (prin intermediul unor func!ii de management a sarcinilor). Pentru a face o cerere legat# de o sarcin#, precum renun!# la sarcina curent#, clientul transmite o func!ie specific# "i prime"te un r#spuns de la !int#.

Exemplu de lucru SCSI


n figura urm#toare este ilustrat# o magistral# SCSI (magistral# paralel#) care leag# un singur ini!iator de cteva dispozitive !int#. Sistemul client ruleaz# o aplica!ie care la un moment dat cere un serviciu de la o !int#. Pentru a face cererea, clientul apeleaz# driverul de dispozitiv SCSI "i driverul transmite de-a lungul magistralei de sistem o comand# la HBA. HBA-ul este de fapt doar o punte ntre magistrala SCSI "i magistrala de sistem.

Arbitrarea !i selec"ia HBA-ul, cu rol de ini!iator, trebuie s# foloseasc# magistrala SCSI pentru a transmite comanda. Deoarece magistrala este partajat# (ntre mai multe $inte, n acest caz $intele sunt reprezentate de discuri), pentru a preveni controlul magistralei de mai mult de un dispozitiv n acela"i timp este necesar un mecanism de arbitrare. Prima dat#, ini!iatorul trebuie s# c"tige el nsu"i controlul magistralei "i numai dup# aceea poate selecta dispozitivul !int#. n acest scop, protocolul SCSI include o etap# de arbitrare "i o etap# de selec!ie. Ini!iatorul folose"te propriul identificator pentru arbitrare. Dac# ini!iatorul c"tig# controlul magistralei, selecteaz# $inta folosind identificatorul acesteia. De exemplu, identificatorul pentru fiecare

dispozitiv SCSI este format de obicei numai din unul din cele 16 posibilit#!i "i este setat n hardware prin jumperi. Valori de identificator pot fi 7 pentru ini!iator "i 4 pentru !int#. Conexiune n progres Odat# !inta selectat#, att ea ct "i ini!iatorul particip# activ la tranzac!ie "i se spune c# sunt conectate. Cnd dispozitivele se conecteaz#, fiecare stocheaz# ($ine minte) identificatorul celuilalt dispozitiv n vederea unor referin!e ulterioare (acest lucru poart# numele de stabilire a unui nexus; un nexus reprezint# rela!ia ntre ini!iator "i !int#). Nexus-ul este util pentru !int# deoarece aceasta poate alege s# renun$e la magistral# pe durata prelucr#rii cererii "i s# se reconecteze la ini!iator mai trziu. Pentru a face acest lucru, $inta trebuie s# cunoasc# identificatorul ini!iatorului. Ini!iatorul are nevoie de nexus deoarece mai multe !inte se pot deconecta de la magistral#, ajungnd n situa$ia de a avea comenzi n a"teptare pentru mai multe !inte n acela"i timp. Ulterior, cnd prime"te r#spunsuri, folose"te informa!iile de nexus ca s# "tie care !int# a r#spuns. Odat# stabilit# o conexiune, !inta preia controlul "i decide cnd s# transfere datele pentru comenzile primite de la ini!iator. Din moment ce SCSI este o magistral# half-duplex (cu transmisie ntr-un singur sens), acest lucru nseamn# c# este necesar un mecanism de handshaking (pentru ca ini!iatorul "i !inta s# preia pe rnd magistrala). Magistrala r#mne dedicat# pentru utilizarea celor dou# dispozitive pn# cnd !inta o elibereaz#. Deoarece magistrala este comun# tuturor dispozitivelor, acest lucru nseamn# c# toate celelalte dispozitive vor trebui s# a"tepte pn# cnd conexiunea curent# se ncheie "i magistrala devine disponibil#. n timpul unei conexiuni ntre dou# dispozitive pot avea loc mai multe transferuri, dar pn# la urm#, !inta se va deconecta "i magistrala va fi disponibil# "i altor dispozitive. ncheierea conexiunii Dup# ce HBA-ul a primit de la !int# r#spunsul cerut (datele citite), informeaz# sistemul client de faptul c# a finalizat comanda. Acest lucru se face de obicei printr-o ntrerupere adresat# unui driver de dispozitiv. La rndul s#u, driverul de dispozitiv raporteaz# aplica!iei client c# datele sunt disponibile n bufferul corespunz#tor. Aplica!ia extrage datele, finaliznd acea secven!# de comand#.

Exemplu de lucru SAS


Acum s# consider#m topologia SAS din figura urm#toare.

SAS este o magistral# punct-la-punct care conecteaz# mpreun# dou# dispozitive. Punctele de conexiune se numesc porturi "i fiecare dispozitiv va avea cel pu!in unul, n timp ce unit#!ile de extensie "i HBA-urile vor avea mai multe. Un port poate consta dintr-un singur port fizic (PHY) (interfa!a electric# individual# la o leg#tur#) sau mai multe. Un port care are numai un PHY se nume"te Narrow Port (port ngust), iar un port care dispune de mai multe, se nume"te Wide Port (port larg). O leg#tur# une"te dou# PHY-uri unul de altul "i const# dintr-o pereche de fire cu transmisie diferen!ial# pentru a forma un canal de transmisie "i o alt# pereche de fire cu transmisie diferen$ial# pentru a forma un canal de recep!ie. Ca ilustrare de porturi nguste "i largi vede!i figura de mai jos, care prezint# un HBA cu mai multe PHY-uri.

Arbitrarea !i selec"ia La fel ca la SCSI, clientul transmite cererea la driver care, la rndul s#u, o transmite la HBA. HBA-ul nu trebuie s# arbitreze accesul la o magistral# partajat# deoarece toate magistralele (leg#turile) sunt acum punct la punct. Totu"i, pentru a ob!ine serviciul, HBA-ul tot trebuie s# se conecteze la !int#. Pentru aceasta, trimite o cerere de conexiune care include adresa destina!ie. Adresa destina!ie este examinat# n vederea determin#rii portului pe care trebuie rutat# comunica!ia. Fiecare port al unui dispozitiv SAS are atribuit# o adres# SAS de 64 de bi!i, iar cererile sunt direc!ionate la un dispozitiv pe baza adresei sale. Aceast# adres# este atribuit# din fabric# de produc#tor "i este stocat# n hardware-ul sau firmware-ul dispozitivului. Ca parte a secven!ei de resetare, dispozitivele raporteaz# aceast# adres# unic# vecinilor cu care are leg#turi. Mai trziu, ini!iatorii execut# o secven!# de pa"i, numit# proces de descoperire, pentru a citi informa!ia din unit#!ile de extensie (expanders) "i a crea o list# cu toate adresele accesibile lor n sistem. Acestea sunt adresele folosite la selectarea dispozitivului !int#. Pentru a %tii ce magistral# trebuie accesat#, HBA-ul are de asemenea nevoie de o hart# prin care s# determine ce adres# corespunde c#rei magistrale. Mecanismul de mapare este specific fiec#rui produc#tor. Stabilirea conexiunii Odat# cunoscut# topologia magistralei, nainte de a putea avea loc transferul de date, trebuie deschis# o conexiune ntre HBA "i dispozitivul

destina!ie. n acest sens, portul HBA transmite o cerere de conexiune sub forma unui cadru special. Acest cadru este rutat n func!ie de adres# "i n final ajunge la dispozitivul destina!ie. Cnd !inta prime"te cererea de conexiune, accept# ori refuz# cererea transmi$nd o primitiv#. Aceast# primitiv# de r#spuns nu are adres# "i nu este rutat#; pur "i simplu parcurge conexiunea stabilit# de cadrele cererii de conexiune n drumul lor ntre ini!iator "i !int#. Dac# !inta accept# cererea de conexiune, fiecare dispozitiv de pe traseu recunoa"te faptul c# conexiunea a fost complet stabilit# "i leg#tura devine un circuit dedicat de comunica!ie ntre cele dou# dispozitive. Conexiune n desf#!urare Odat# conexiunea stabilit#, informa!ia de nexus este stocat# la fel ca la SCSI. Tot la fel ca la SCSI, !inta preia controlul magistralei "i decide cnd s# extrag# datele care trebuie scrise sau s# transmit# datele citite. Pot fi transmise mai multe cadre n ambele direc!ii, chiar "i n acela"i timp (opera!iile full-duplex reprezint# un avantaj major pentru SAS), pn# cnd unul sau ambele dispozitive decide c# e timpul s# nchid# conexiunea. nchiderea conexiunii n protocolul SSP (Serial SCSI Protocol) presupune ca fiecare dispozitiv mai nti s# indice c# a terminat de utilizat conexiunea "i apoi s# trimit# o primitiv# de nchidere. ncheierea conexiunii La fel ca la SCSI, cnd HBA-ul a primit r#spunsul cerut de la !int# (datele citite, de exemplu), informeaz# clientul de finalizarea comenzii prin intermediul unei ntreruperi.

5. ATA (Advanced Technology Attachement) #i SATA (Serial ATA)1

Pentru a n!elege protocolul SATA sunt necesare cteva l#muriri. Protocoalele ATA "i SATA sunt de obicei implementate n medii de lucru cu un singur utilizator. n consecin!#, sunt optimizate pentru cel mult dou# discuri n configura!ie master/slave, lucru care permite ca protocolul s# fie simplu.

Principiul de func!ionare ATA


Standardul ATA permite conectarea dispozitivelor de stocare la placa de baz# prin intermediul unui cablu care are de obicei 40 de fire paralele "i trei conectori (de obicei, conectorul albastru pentru placa de baz#, iar conectorul negru "i gri pentru cele dou# unit#!i de stocare2).

Pe cablu, unul din periferice trebuie s# fie declarat master, cel#lalt slave. Conectorul de la extremitate (negru) este rezervat pentru master iar cel din mijloc
1

ATA este cunoscut "i sub denumirea de IDE (Integrated Drive Electronics) sau EIDE (Enhanced IDE) 2 Standardul ATA a fost destinat ini!ial pentru conectarea discurilor, totu"i o extensie numit# ATAPI (ATA Packet Interface) permite conectarea altor periferice de stocare. cum ar fi CD-ROM, DVD-ROM, etc..

(gri) pentru slave. La discurile IDE, un jumper aflat pe disc, numit CS (cable select) permitea definirea automat# a perifericelor master "i slave ct timp aceast# func!ionalitate era suportat# de BIOS. n ciuda nomenclaturii nefericite, ambele discuri puteau opera independent odat# sistemul ini$ializat, de%i discul care opera n modul slave avea performan$e mai reduse. Totodat#, numai dispozitivul master poate fi utilizat ca dispozitiv de boot, dar se putea folosi dispozitivul master de pe fiecare canal. Fiecare plac# de baz# con$inea dou# controlere ATA, la fiecare se putea ata%a un cablu, formnd cte un canal de transfer. n consecin$#, ntr-un sistem standard puteam avea maxim dou# dispozitive de boot %i un total de patru dispozitive ATA. Majoritatea utilizatorilor conectau discul principal pe prima interfa$# %i unitatea CD-ROM pe a doua, astfel nct ambele puteau fi folosite ca dispozitive de boot. Transmisia datelor3 n transmisia datelor poate fi folosit: protocolul PIO (Programmed Input/Output). PIO permite perifericelor s# schimbe date cu memoria RAM prin intermediul comenzilor gestionate direct de procesor. Totu"i, pentru transferurile de date mari acest lucru poate folosi procesorul intens "i n consecin!# poate ncetini tot sistemul; protocolul DMA (Direct Memory Access). Tehnica DMA permite calculatoarelor s# elibereze procesorul de controlul transferului, permi!nd fiec#rui periferic s# acceseze direct memoria. Protocolul DMA permite transferul unui singur cuvnt (single word DMA - 2 octe!i pentru fiecare sesiune de transfer) sau transferul succesiv a mai multor cuvinte n fiecare sesiune de transfer (multi word DMA). Modul PIO Mode 0 Mode 1 Mode 2 Mode 3 Mode 4 Rata de transfer (Mb/s) 3.3 5.2 8.3 11.1 16.7 Modul DMA 0 (single word) 1 (single word) 2 (single word) 0 (multi-word) 1 (multi-word) 2 (multi-word) Rata de transfer (Mb/s) 2.1 4.2 8.3 4.2 13.3 16.7

Standardul ATA era bazat pe modul de transfer asincron multiplexat; altfel spus, transferul comenzilor "i datelor avea loc la viteza magistralei pe fiecare front cresc#tor al semnalului de ceas "i nu puteau fi transmise n acela"i timp comenzi "i date. Pentru a cre"te rata de transfer a datelor, cum cre"terea frecven!ei pe o magistral# paralel# nu este o solu!ie, a fost introdus# tehnica Ultra DMA (UDMA).
3

http://en.kioskea.net/contents/pc/ide-ata.php3

UDMA folose%te pentru transferul de date att frontul cresc#tor ct "i frontul descresc#tor (lucru care a crescut rata de transfer de la 16.6 Mb/s la 33.3 Mb/s). Mai mult, UDMA introducea coduri CRC pentru detec!ia erorilor de transmisie. Diferitele moduri UDMA definesc frecven!a transferurilor de date. Modul UDMA UDMA 0 UDMA 1 UDMA 2 (Ultra-ATA/33) UDMA 3 UDMA 4 (Ultra-ATA/66 UDMA 5 (Ultra-ATA/100) UDMA 6 (Ultra-ATA/133) Rata de transfer (Mb/s) 16.7 25.0 33.3 44.4 66.7 100 133

Odat# cu introducerea UDMA 4, pentru a limita interferen!ele ntre fire (crosstalk), a fost folosit un nou cablu. Acest tip de cablu adaug# 40 de fire (ob$inndu-se un total de 80 de fire) intercalate cu firele de date cu scopul de a le izola. n schimb, au fost p#stra$i aceea%i conectori. Discurile au implementat numai UDMA 2, 4, 5, 6. Metode de programare Ini$ial, la apari$ia protocolului ATA, nivelul de aplica!ie ini!ia o opera!ie de transfer prin scrierea unui set de registre aflate n interiorul dispozitivului !int# (acest lucru avea loc prin intermediul procesorului, pentru a-l informa de comanda dorit#). Cnd registrul de comand# era actualizat, dispozitivul ncepea s# o execute n func!ie de parametrii prezen$i n alte registre. Ulterior, cu inten!ia de a da o defini$ie "i structur# standardului SATA, s-a folosit o metod# descris# ntr-o specifica!ie separat#, numit# AHCI (Advanced Host Controller Interface). Cu AHCI, aplica!iile creeaz# o list# de comenzi "i o list# de date pe care le cite%te/scrie ntr-o structur# de memorie "i apoi HBA-ului i se transmite numai loca!ia acestei structuri. HBA-ul extrage fiecare cadru, numit FIS (Frame Information Structure), deja formatat corespunz#tor, "i l nainteaz# discului. Folosind una din cele dou# metode de programare, comanda este livrat# discului "i acesta o execut#. Accesul la registru La ATA, software-ul scria un set de registre, numit registre Task File, din interiorul discului. HBA-ul ATA paseaz# pur "i simplu scrierile primite de la procesor direct la aceste registre, a"a cum se arat# n figura urm#toare. La SATA, o copie separat# a acestor registre, numit# Shadow task file, sunt incluse n HBA "i software-ul acceseaz# aceste registre n loc de registrele discului. Acest lucru

permite host-ului s# grupeze actualiz#rile la registre n pachete mai mari "i mai eficiente care sunt livrate discului la vitez# mai mare.

Nivelurile interfe!ei SATA


SATA folose"te conexiuni punct-la-punct dedicate ntre !int# "i host. Interfa$a SATA este structurat# pe niveluri: aplica$ie, transport, leg#tur# %i fizic. Trebuie re$inut c# arhitectura definit# de specifica!iile SATA este diferit# de cea SAS. Nivelul de aplica!ie reprezint# interfa!a de programare pentru mediul de lucru SATA. Interfa!a de programare este un set de registre ce are rolul de a p#stra compatibilitatea software cu ATA. Nivelul de transport creeaz# sau livreaz# cadrele de date. n specifica!iile SATA cadrele de date sunt numite FIS. La primirea unui FIS, acest nivel decodific# FIS-ul "i raporteaz# nivelului de aplica!ie posibilele erori. Nivelul de leg#tur# gestioneaz# aproape tot protocolul de leg#tur#. n timpul transmisiei, acest nivel genereaz# o sum# de verificare pentru fiecare cadru FIS, formateaz# cadrul FIS pentru a reduce influen$a interferen$elor electromagnetice "i genereaz# primitive folosite n protocolul SATA. n timpul recep!iei sunt efectuate opera!iile inverse. n timpul transmisiei "i recep!ie, nivelul fizic furnizeaz# func!iile de tranceiver. Tot acest nivel este responsabil cu ini!ializarea leg#turii "i detec!ia vitezei.

6. Arhitectura sistemului de fi$iere

Sistemele de operare permit stocarea persistent# informa$iilor (pentru perioade lungi de timp), astfel nct acestea s# poat# rezista la disfunc$ionalit#$i ale sistemului, lipsa temporar# a aliment#rii cu energie electric# sau altor probleme de acest tip. Altfel spus, sistemul de operare este capabil s# garanteze persisten$a datelor. De obicei, forma sub care sunt stocate datele este aceea de fi%ier. Fi%ierul reprezint# un %ir de octe$i de dimensiune variabil# ce poate fi accesat ncepnd cu orice pozi$ie specificat# numeric. Pentru accesul la fi%iere, sistemul de operare folose%te o structur# ierarhic# de directoare. Fiecare director are un nume %i poate con$ine fi%iere sau alte directoare, rezultnd astfel o structur# arborescent#. n unele cazuri, fi%ierele %i directoarele pot fi accesate prin mai multe nume, specificate direct (mai multe nume se refer# la acela%i obiect) sau indirect (un nume se refer# la alt nume, care se refer# la un obiect). Arhitectura mecanismului de stocare persistent# este influen$at# de tehnologia hardware folosit# n acest scop. Pentru mul$i ani, tehnologia dominant# a fost aceea a discurilor rigide, dispozitive electromagnetice cu discuri de stocare aflate n mi%care. n prezent, este din ce n ce mai folosit# memoria flash pentru a ob$ine a%a numitele dispozitive de stocare SSD (Solid State Flash Memory). SSD-urile folosesc memorie nevolatil# NAND %i nu au p#r$i mobile, lucru care le face mai rezistente la %ocurile mecanice %i genereaz# viteze de acces mai mari. Dar, cel pu$in pentru viitorul apropiat, discurile rigide vor r#mne principala form# de stocare. n consecin$# vom dezbate n continuare caracteristicile de performan$# ale discurilor rigide. Un disc rigid stocheaz# datele n blocuri de dimensiune fix# cunoscute sub numele de sectoare fizice. Dimensiunea tipic# pentru un sector este de 512 octe$i. Sistemul de operare vede discul ca pe un %ir de sectoare numerotate consecutiv, ncepnd cu 0 pn# la un num#r maxim care depinde de capacitatea discului. Procesorul poate cere controler-ului de disc s# efectueze dou# opera$ii: s# scrie date, adic# s# preia date de la o anumit# adres# de memorie %i s# le duc# pe disc, la un anumit num#r de sector. O cerere de scriere poate specifica %i transferul la mai multe sectoare consecutive. s# citeasc# date, adic# s# preia date de pe disc, de la un anumit sector, %i s# le duc# n memorie, la o anumit# adres#. Iar#%i, o cerere de citire poate specifica transferul a mai multor sectoare consecutive. Reprezentarea discului ca num#r secven$ial de sectoare ascunde cteva aspecte hardware ce pot influen$a substan$ial viteza de acces. Mai exact, din cauza modului lor de func$ionare, discurile pot asigura rate de transfer de ordinul zecilor de MB/s, dac# sunt accesate optim, sau de numai c$iva zeci de kB/s, dac# sunt accesate aleator.

Structura discului rigid


Un disc con$ine o stiv# de platane montate pe un ax central. Platanele se rotesc la o vitez# fix#, de exemplu 10000 rota$ii pe minut. Datele sunt nregistrate pe suprafa$a platanelor %i citite prin intermediul unor capete de citire. Pentru fiecare suprafa$# exist# un cap de citire %i unul de scriere. Capetele de citire sunt prinse de un bra$ care poate pivota astfel nct s# pozi$ioneze capetele mai aproape sau mai departe de axul central. Figura de deasupra arat# rela$ia dintre platane, axul central %i bra$ul capetelor de citire. Dac# bra$ul este l#sat ntr-o pozi$ie fix#, rota$ia platanelor creaz# o regiune circular# pe fiecare suprafa$# care trece pe sub capul de citire corespunz#tor. Regiunea circular# rezultat# pe o singur# suprafa$# se nume%te pist#; fiecare pist# este mp#r$it# n sute de sectoare. Colec$ia de piste, cte una pe suprafa$a fiec#rui platan, accesibil# la o anumit# pozi$ie a capului de citire se nume%te cilindru.

Numai un singur cap de citire poate fi activ la un moment dat. n func$ie de capul de citire activ %i de pozi$ia bra$ului, pot fi citite numai sectoarele unei singure piste. Pentru a putea accesa mai multe date avem dou# op$iuni. (1) Schimb#m capul de citire activ %i astfel avem acces la o alt# pist# din acela%i cilindru (proces de comutare). (2) Mi%c#m capul de citire pe o pozi$ie mai apropiat# sau mai dep#rtat# de ax pentru a avea acces la un alt cilindru (proces numit seek, c#utare). n prezent, timpul de comutare a capului de citire este similar cu timpul necesar trecerii la un cilindru adiacent o frac$iune de milisecund# astfel nct distinc$ia nu este important#. Timpul de c#utare este mai mare pentru pistele mai dep#rtate (trecerea bra$ului de citire la o pist# mai ndep#rtat#), dar nu propor$ional. Rezultatul este c# trecerea (procesul de c#utare) la o pist# aflat# la zeci de sute de cilindri dep#rtare poate consuma 5 ms, de zece ori mai mult dect trecerea la o pist# adiacent#. Acesta nu este singurul timp pierdut. Odat# ce capul de citire este pozi$ionat deasupra pistei corecte, controlerul de disc trebuie s# a%tepte ca sectorul corespunz#tor s# se alinieze cu pozi$ia capului de citire, o ntrziere cunoscut# sub numele de laten$# de rota$ie. Deoarece timpul necesar discului s# efectueze o rota$ie complet# este comparabil cu timpul de c#utare (trecere) necesar pozi$ion#rii capului de citire la zeci de mii de cilindrii, laten$a de rota$ie poate influen$a semnificativ timpul total de acces la un sector aleator. Odat# capul de citire pozi$ionat corespunz#tor, sectoarele consecutive pot fi citite sau scrise la vitez# mare. Chiar %i un transfer care implic# trecerea la o pist#

adiacent# va fi penalizat numai cu timpul de c#utare (mi%carea bra$ului de citire) %i nu cu timpul enorm al laten$ei de rota$ie, deoarece primul sector al pistei este pozi$ionat astfel nct s# poat# fi accesat imediat ce trecerea a avut loc. Dac# programele acceseaz# un num#r mare de sectoare consecutive, este mai avantajos ca acest proces s# se fac# ntr-un singur tranfer de dimensiune mare dect n cteva transferuri mai mici. Unul din avantaje rezult# din evitarea nc#rc#rii suplimentare ntlnite la nivelul interfe$ei dintre calculator %i disc. Cel#lalt avantaj, mai semnificativ, const# din faptul c# mai multe cereri separate nseamn# rota$ii suplimentare, n special pentru scrieri; ratarea unui sector la timpul potrivit implic# a%teptarea unei rota$ii complete (pn# apare din nou). Citirile nu sunt att de problematice deoarece discurile con$in memorie RAM, numit# %i cache buffers, care p#streaz# datele sectoarelor deja traversate de capul de citire, astfel nct ele pot fi citite f#r# s# se a%tepte apari$ia sectorul ratat. Discurile pot folosi cache-ul %i pentru scrieri, dar numai dac# programul este proiectat s# tolereze unele pierderi de date recent scrise. De exemplu, o disfunc$ionalitate (ntreruperea energiei electrice) nainte ca controlerul de disc s# fi scris datele din cache pe disc. Din acest motiv, secretul utiliz#rii discului la poten$ial maxim const# n localizarea datelor. Trebuie re$inut c#: accesul la un sector cu num#r de identificare similar cu cel mai recent accesat va fi mai rapid dect accesul la un sector cu num#r total diferit. accesul la sectoare consecutive va fi mai rapid dect accesul la sectoare chiar foarte apropiate, dar nu consecutive. accesul la sectoare consecutive ntr-o singur# opera$ie de transfer va fi mai rapid dect accesul lor n cteva cereri mai mici.

Formatarea discului
Crearea unui sistem de fi"iere implic# de obicei trei etape: 1. Formatarea de nivel inferior (cea mai apropiat# de hardware) marcheaz# suprafa!a discului cu delimitatori care indic# nceputul fiec#rui sector, plus alte informa!ii, cum ar fi suma de control a sectorului, folosite mai trziu de c#tre controlerul de disc n opera!iile de citire %i scriere. Formatarea de nivel inferior este fundamentul permanent al discului "i n prezent este un proces realizat din fabric#. 2. Formatarea intermediar#, sau parti!ionarea, creaz# structurile de date necesare sistemului de operare. Acest nivel de formatare include de obicei verificarea pistelor sau sectoarelor n vederea detect#rii defectelor. 3. Formatarea de nivel nalt creaz# formatul sistemului de fi"iere n cadrul structurii de formatare intermediar#. Aceast# formatare include crearea structurilor de date folosite de sistemul de operare la identificarea parti$iei (volumului logic) sau con!inutului parti!iei. Aceast# formatare se poate face n timpul instal#rii sistemului de operare sau la ad#ugarea unui disc nou.

1.1.5. Formatarea de nivel inferior


n prezent, formatarea de nivel inferior, adic# mp#r!irea pistelor n sectoare (blocuri fizice) de cte 512 octe!i, are loc n timpul procesului de fabrica$ie a discului. De fapt, chiar dac# am dori, nu mai este posibil s# format#m discurile la acest nivel deoarece discurile moderne sunt formatate nainte de introducerea lor n carcas#. Altfel spus, discurile sunt preformatate. Sectoarele fizice sunt n realitate mai mari de 512 octe!i. n plus fa!# de cei 512 octe!i de date mai exist# "i un cmp de identificare a sectorului, un cmp ECC (octe!i folosi$i la corec$ia erorilor) "i spa!ii libere ntre sectoare. n mod obi%nuit, ace"ti octe!i adi!ionali nu sunt inclu"i n capacitatea total# a discului.

De"i este imposibil s# formatezi la nivel inferior majoritatea discurilor moderne, termenul de formatare de nivel inferior este nc# utilizat pentru ceea ce poate fi considerat# o reini!ializare a discului la configura!ia din fabric#. Reini!ializarea ar trebui s# includ# identificarea ("i izolarea dac# este posibil) a oric#rui sector care nu poate fi scris sau citit corect. Termenul ns# este folosit s# denote "i numai scrierea fiec#rui sector cu o anumit# valoare. O metod# uzual# const# n scrierea discurilor cu valoarea 0, proces numit umplere cu zero. n Linux acest lucru se poate face cu ajutorul utilitarului dd astfel: dd if=/dev/zero of=/dev/sdb bs=16M4 Din 2009 to!i produc#torii mari de discuri au nceput s# formateze discurile n blocuri de 4096 de octe!i conform a%a numitului format avansat. Modificarea formatului de sector la o structur# de 4096 de octe!i nseamn# utilizarea mai eficient# a suprafe!ei de stocare, atunci cnd se lucreaz# cu fi"iere mari %i mai pu!in eficient# atunci cnd se lucreaz# cu fi"iere mici. Totodat#, pentru a p#stra integritatea datelor la densit#!i mari de stocare, sunt necesari algoritmi mai performan$i de corec!ie a erorilor. Prima genera!ie de format avansat combin# 8 sectoare de cte 512 octe!i fiecare ntr-un singur sector de 4096 de octe!i. Toate elementele esen!iale ale arhitecturii tradi!ionale de 512 octe!i sunt p#strate; adic# delimitatorii de identificare "i sincronizare de la nceputul sectorului "i zona codului corector de erori (ECC) de la sfr"itul acestuia. ntre antetul de sector "i
4

http://www.howtoforge.com/how-to-securely-destroy-wipe-data-on-hard-drives-withshred

zonele ECC sunt combinate 8 sectoare de 512 octe!i, eliminndu-se zonele de antet redundante dintre fiecare bucat# individual# de 512 octe!i. Dimensiunea de 4 kiB a fost aleas# din motive de coresponden!# cu dimensiunea paginilor de memorie folosite de procesoare "i de unele sisteme de operare, precum "i corela!ia sa cu dimensiunea tranzac!iilor standard din sistemele de baze de date. Formatul de 4 kiB ofer# destul spa!iu pentru extinderea cmpului ECC de la 50 la 100 de octe!i n vederea noilor algoritmi ECC. Acest lucru mbun#t#!e"te abilitatea de detec!ie "i corec!ie a defectelor mai mari de 50 de octe!i asociate cu sectorul vechi de 512 octe!i. Cmpul ECC poate fi %i distribuit. Primele asemenea discuri continu# s# prezinte sistemului de operare sectoare fizice de 512 octe!i, astfel nct se poate ob!ine o performan!# degradat# atunci cnd grani!ele de sector (ascunse) interne de 4 KiB nu coincid cu blocurile logice de 4 KiB, dimensiunea obi"nuit# pentru paginile de memorie virtual# %i paginile sistemului de fi"iere. Aceast# problem# este evident# la scrieri, cnd discul este for!at s# efectueze dou# opera!ii cite"te-modific#-scrie pentru a satisface o singur# opera!ie de scriere a unei pagini de 4 KiB nealiniate. Not# rapid# cu privire la prefixele SI5 kB = 103 octe$i MB = 106 octe$i GB = 109 octe$i TB = 1012 octe$i kiB = 210 octe$i MiB = 220 octe$i GiB = 230 octe$i TiB = 240 octe$i

Este indicat s# $inem cont de distinc$ia ntre prefixele zecimale (SI) %i binare (standardul IEEE 1541) atunci cnd discut#m despre dimensiunea discurilor %i a sectoarelor.

1.1.6.

Formatarea intermediar"

Parti!ionarea reprezint# mp#r$irea unui disc fizic n mai multe unit#$i logice, numite parti$ii. Parti$iile se folosesc, de obicei, pentru a delimita fi%ierele utilizate de sistemul de operare de cele ale utilizatorilor. n cazul unei defec$iuni ap#rute la sistemul de operare, acesta poate fi reinstalat f#r# a pune n pericol datele utilizatorilor. Un alt motiv care a condus la parti$ionarea discurilor a fost cel al instal#rii mai multor sisteme de operare pe acela%i disc. Majoritatea sistemelor de operare folosesc formatul MBR/MSDOS de etichetare a discurilor, reprezentat n figura de mai jos. Pentru arhitecturile x86/x86_64 acesta este formatul standard. n Linux, parti$ionarea se face cu ajutorul unui editor de parti!ii, de exemplu parted sau fdisk.

Parti%ionarea MBR/MSDOS

Primul sector fizic de pe disc, numit MBR (Master Boot Record), con!ine o tabel# de parti!ii primare (de obicei singurul tabel de parti!ii prezent n calculatoarele personale) "i un mic program (nc#rc#torul de sistem) care are rolul s# ncarce n memorie primul sector al parti!iei pe care se afl# sistemul de operare ales de utilizator la pornirea sistemului. Structura primului sector este dat# n tabelul de mai jos.

Structura sectorului MBR Deplasament (n cadrul sectorului) n zecimal n hexa 000 445 000 1BD 446 509 1BE 1FD 510 511 1FE 1FF

Lungime (n octe!i) 446 64 2

Descriere

Zona de cod executabil Tabela de parti!ii primare Semn#tura MBR

Zona de cod executabil con$ine o parte din codul nc#rc#torului de sistem (sectorul de boot al unui disc rigid) sau instruc$iuni pentru nc#rcarea unei secven$e mai mari de cod (sectorul de boot al unui CD). Codul executabil din MBR este nc#rcat n memorie de BIOS-ul calculatorului la pornirea acestuia. Tabela de parti!ii primare ocup# numai 64 de octe!i din cei 512 ai sectorului. Semn#tura MBR, numit# uneori "i num#r magic, este un cuvt de 16 bi!i exprimat n hexazecimal cu valoarea 0xAA55. Acest cuvnt este reprezentat de ultimii doi octe$i ai sectorului. Aceast# semn#tur# semnific# faptul c# sectorul con$ine cod executabil %i face propriu-zis acest sector bootabil. Tot ce este n acest chenar NU se cere la test. n continuare exemplific#m cum poate fi extras# informa$ia de parti$ionare direct din sectorul de boot pe un sistem care ruleaz# Linux. Comanda urm#toare creaz# o imagine a sectorului de boot. root@laptop:~# dd if=/dev/sda of=mbr.sec bs=512 count=1 1+0 records in 1+0 records out 512 bytes (512 B) copied, 8.2483e-05 s, 6.2 MB/s Comanda file este capabil# s# ofere detalii despre sectorul de boot ct %i despre informa$ia prezent# n tabela de parti$ii primare. root@laptop:~# file mbr.sec mbr.sec: x86 boot sector; partition 1: ID=0x7, active, starthead 32, startsector 2048, 204800 sectors; partition 2: ID=0x7, starthead 223, startsector 206848, 163635200 sectors; partition 3: ID=0x5, starthead 254, startsector 163844094, 70596610 sectors, code offset 0x63, OEM-ID " )", Bytes/sector 190, sectors/cluster 124, reserved sectors 191, FATs 6, root entries 185, sectors 64514 (volumes <=32 MB) , Media descriptor 0xf3, sectors/FAT 20644, heads 6, hidden sectors 309755, sectors 2147991229 (volumes > 32 MB) , physical drive 0x7e, dos < 4.0 BootSector (0x0)

Pentru aflarea dimensiunii parti$iei putem nmul$i num#rul de sectoare cu 512 direct din linia de comand# cu ajutorul utilitarului expr. root@laptop:~# expr 204800 \* 512 104857600 (dimensiunea parti!iei n octe!i, 104 MB) root@laptop:~# expr 163635200 \* 512 83781222400 (84 GB) root@laptop:~# expr 70596610 \* 512 36145464320 O alt# posibilitate de vizualizare a informa$iei prezente n sectorul de boot o reprezint# comanda de mai jos. root@laptop:~# file -s /dev/sda de scris rezultatul de pe celalalt laptop Pentru vizualizarea n hexazecimal a informa$iei din tabela de parti$ii primare putem comanda: root@laptop:~# hexdump -C -v -s 446 mbr.sec 000001be 80 20 21 00 07 df 13 0c 00 08 00 00 00 20 03 00 |. !.......... ..| 000001ce 00 df 14 0c 07 fe ff ff 00 28 03 00 00 e0 c0 09 |.........(......| 000001de 00 fe ff ff 05 fe ff ff fe 0f c4 09 02 38 35 04 |.............85.| 000001ee 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000001fe 55 aa |U.| Tabela de parti!ii primare con$ine patru intr#ri de cte 16 octe!i. Fiecare intrare con$ine informa$ii despre o singur# parti$ie. Astfel, discurile care folosesc tabelul de parti$ii primare nu permit crearea a mai mult de patru parti!ii primare. n schimb, a"a cum vom ar#ta n urm#toarea sec!iune, pot con$ine trei parti!ii primare %i o parti!ie extins#. Urm#torul tabel arat# structura standard a tabelei de parti$ii primare. Structura standard a tabelului de parti!ii primare (64 de octe!i) Deplasament Lungime Con!inut (n cadrul sectorului MBR) (n octe!i) n zecimal n hexa 446 461 1BE 1CD 16 Intrare pentru parti!ia primar# #1 462 477 1CE 1DD 16 Intrare pentru parti!ia primar# #2 478 493 1DE 1ED 16 Intrare pentru parti!ia primar# #3

494 - 509

1EE - 1FD

16

Intrare pentru parti!ia primar# #1

Tabela de parti$ii ncepe la pozi$ia hexazecimal# 1BE %i cum fiecare intrare are dimensiunea de 16 octe$i, acestea ncep la pozi$iile 1BE, 1CE, 1DE %i 1EE. Tot ce este n acest chenar NU se cere la test. O comand# care poate afi%a tabela de parti!ii primare este: root@laptop:~# sfdisk -d /dev/sda Warning: extended partition does not start at a cylinder boundary. DOS and Linux will interpret the contents differently. # partition table of /dev/sda unit: sectors /dev/sda1 : start= 2048, size= 204800, Id= 7, bootable /dev/sda2 : start= 206848, size=163635200, Id= 7 /dev/sda3 : start=163844094, size= 70596610, Id= 5 /dev/sda4 : start= 0, size= 0, Id= 0 /dev/sda5 : start=163844096, size= 8591360, Id=82 /dev/sda6 : start=172437504, size= 62003200, Id=83 Pentru a salva tabela de parti!ii putem folosi redirec!ionarea I/O. root@laptop:~# sfdisk -d /dev/sda > part_table Tabela de parti!ii primare poate fi rescris# n sectorul de boot cu comanda: root@laptop:~# sfdisk /dev/sda < part_table De asemenea, dac# dorim s# cre#m un tabel de parti!ii identic pe alt disc (probabil pentru a le utiliza n configura!ii RAID 1), putem parti!iona discul sdb exact ca sda astfel: sfdisk -d /dev/sda | sfdisk /dev/sdb Att MBR ct "i EBR (Extended Boot Records) folosesc acela"i format general pentru intr#rile din tabela de parti!ii. Tabelul urm#tor prezint# o intrare n tabela de parti$ii. Structura unei intr#ri de 16 octe!i din tabela de parti!ii Deplasamentul relativ Lungimea Con!inut (din cadrul intr#rii) (octe!i)

0 13 4 57 8 14 12 15

1 3 1 3 4 4

Indicatorul de boot (80H = parti!ie activ#) Valorile CHS de la care ncepe parti!ia Identificator pentru tipul parti!iei (tipul parti!iei) Valorile CHS la care se sfr"e"te parti!ia Sectorul de nceput al parti!iei (valoare LBA) Dimensiunea parti!iei (n sectoare)

n continuare studiem pe rnd cmpurile prezente ntr-o intrare a tabelei de parti$ii primare. Indicatorul de boot. Acest cmp are dimensiunea de un octet %i ne spune dac# pe parti$ia respectiv# este instalat un sistem de operare. Unele sisteme de operare mai vechi, de exemplu Windows 98, identificau parti!ia pe care se aflau cu ajutorul unui indicator de activ inclus n tabela de parti!ii. Conform acestei abord#ri, numai sistemul de operare aflat pe parti!ia activ# poate fi ini$ializat (bootat). Teoretic, numai parti!ia primar# activ# (bootabil#) trebuie s# aib# setat cel mai semnificativ bit, rezultnd un octet cu valoarea 80H, ca n acest caz, dar n EBR ve!i vedea numai rareori ceva diferit de 00H. root@laptop:~# hexdump -C -v -s 446 mbr.sec 000001be 80 20 21 00 07 df 13 0c 00 08 00 00 00 20 03 00 Sectorul de nceput al parti$iei, dat n valori CHS (Cylinder, Head, Sector) (3 octe!i). Aceste valori indic# loca!ia primului sector al parti!iei, dac# se afl# n primii 1024 de cilindrii ai discului. Cnd sectorul trece peste aceast# limit#, numerele CHS sunt setate la valorile lor maxime permise, 1023, 254, 63. Deoarece numerotarea cilindrului "i a capul de citire ncepe de la zero, ele denot# cel de al 1024 cilindru, 255-lea cap de citire "i al 63-lea sector. Aceste valori apar pe disc sub forma a trei octe!i FE FF FF (n aceast# ordine) %i arat# c# parti$ia are capacitatea mai mare de 8 GB. root@laptop:~# hexdump -C -v -s 446 mbr.sec 000001be 80 20 21 00 07 df 13 0c 00 08 00 00 00 20 03 00 Observa$ie: Ace"ti octe!i apar de fapt n ordinea H, S, C, iar valoarea cilindrului necesit# mai mult de 8 bi!i (10 bi!i) iar valoarea sectorului mai pu!in (6 bi!i). A"adar, scriem 20 21 00 astfel: 0010 0000 0010 0001 0000 000 H S C H = 0010 0000 = 32 S = 10 0001 = 33 C = 00 0000 000 = 0

CHS (0, 32, 33) Tot ce este n acest chenar NU se cere la acest test. Transformarea CHS n LBA n prezent se folose%te mai degrab# adresa logic# de bloc, sau LBA (Logical Block Addressing). Formula de conversie de la CHS la LBA este LBA = (C ' Ncapete + H) ' Nsectoare + (S 1) unde, Ncapete "i Nsectoare reprezint# num#rul de capete de citire, respectiv num#rul de sectoare, %i ambele numere depind de geometria discului. De exemplu, pentru o geometrie 1020 16 63 (Ncilindri, Ncapete, Nsectoare), un (C, H, S) de (3, 2 ,1) nseamn# un LBA = (3 ' 16 + 2) ' 16 = 3150. n cazul nostru, CHS (0, 32, 33), geometria discului o afl#m cu comanda: root@laptop:~# sfdisk -l /dev/sda Disk /dev/sda: 14593 cylinders, 255 heads, 63 sectors/track Warning: extended partition does not start at a cylinder boundary. DOS and Linux will interpret the contents differently. Units = cylinders of 8225280 bytes, blocks of 1024 bytes, counting from 0 Device Boot Start End #cyls #blocks Id System /dev/sda1 * 0+ 12- 13- 102400 7 HPFS/NTFS/exFAT /dev/sda2 12+ 10198- 10186- 81817600 7 HPFS/NTFS/exFAT /dev/sda3 10198+ 14593- 4395- 35298305 5 Extended /dev/sda4 0 0 0 0 Empty /dev/sda5 10198+ 10733- 535- 4295680 82 Linux swap / Solaris /dev/sda6 10733+ 14593- 3860- 31001600 83 Linux LBAini!ial = (0 ' 255 + 32) ' 63 + (33 1) = 2048 Dac# revede$i rezultatul comenzii file mbr.sec, la parti!ia 1, ve!i vedea c# sectorul de start este egal cu 2048. Tipul parti"iei. Acest octet poate lua maxim 256 de valori %i indic# tipul de date stocat n cadrul parti$iei. Cel mai adesea sunt stocate sisteme de fi%iere. Valorile de mai jos sunt n hexazecimal. O valoare de 83H indic# un sistem de fi"iere EXT3, 07 nseamn# NTFS. Pe lng# sisteme de fi%iere, parti$iile pot con$ine %i alte tipuri

de date, cum ar fi memoria virtual# utilizat# de Linux, sau identificatorul de parti$ie extins# care con$ine informa$ii despre alte parti$ii aflate pe disc. root@laptop:~# hexdump -C -v -s 446 mbr.sec 000001be 80 20 21 00 07 df 13 0c 00 08 00 00 00 20 03 00 Sectorul de sfr!it al parti"iei, dat n valori CHS (3 octe!i). root@laptop:~# hexdump -C -v -s 446 mbr.sec 000001be 80 20 21 00 07 df 13 0c 00 08 00 00 00 20 03 00 Calcul#m repede: H = dfH = 223, S = 13H = 19, C = 0cH = 12 (am !inut cont de cei doi bi!i, dar ace%tia fiind zero, valorile nu se modific#). LBAfinal = (12 * 255 + 223) * 63 + 18 = 206847 Din file mbr.sec avem num#rul total de sectoare din parti!ie, a"adar, LBAfinal LBAini!ial = 206847 2047 = 204800 Sectorul de nceput (4 octe"i), dat n valori LBA. Aceast# valoare identific# primul sector al parti!iei, la fel ca sectorul de nceput dat n valori CHS. Dar utilizeaz# o adres# logic# de bloc reprezentat# pe 4 octe!i (num#r#toarea ncepe de la sectorul 0), lucru care nseamn# c# poate localiza nceputul unei parti!ii n primele FFFF FFFFH sau 4.294.967.296 sectoare, pentru discuri de pn# la 2.048 GB. root@laptop:~# hexdump -C -v -s 446 mbr.sec 000001be 80 20 21 00 07 df 13 0c 00 08 00 00 00 20 03 00 Deoarece este o valoare reprezentat# n little-endian, o transform#m. Ob$inem 00 00 08 00, care n zecimal nseamn# sectorul cu num#rul 2048 (se verific# cu valoarea calculat# cu CHS). Dimensiunea parti"iei, exprimat# n num#r de sectoare (4 octe!i). La fel ca n cazul valorilor pentru sectorul de nceput, ace"ti patru octe!i permit un num#r de pn# la 2.048 GB = 2 TB pentru dimensiunea fiec#rei parti!ii. root@laptop:~# hexdump -C -v -s 446 mbr.sec 000001be 80 20 21 00 07 df 13 0c 00 08 00 00 00 20 03 00 Convertind, 00 03 20 00 nseamn# 204800 de sectoare. Tot ce este n acest chenar NU se cere la acest test.

Decodificarea valorilor CHS Deoarece valorile CHS sunt date sub forma H:S:C 8:6:10 bi!i, este mai dificil de aflat valorile pentru sectoare "i cilindre. Exemplul 1. Avem: 1111 1110 1011 1111 1101 0011 Rezult# H = 1111 1110 = FEH = 254, S = 11 1111 = 3FH = 63 "i C = 10 1101 0011 = 2D3H = 723. A"adar, sectorul de sfr"it este: (723, 254, 63). Exemplul 2. Pentru un sector de sfr"it dat n CHS egal cu 1F 3F 33, judec#m astfel: Octetul 1: 1FH = 31 denot# num#rul capului de citire, H, n acest caz 32 de capete per cilindru. Octetul 2: 3FH = 00 11 1111 = 63, num#rul de sector (se ignor# primii doi bi!i, care !in de cilindrii) Octetul 3: 33H = 00 0011 0011 = 51, num#rul de cilindru. A"adar, pentru a ob!ine num#rul sectorului se nmul!e"te num#rul de cilindri cu num#rul de capete "i num#rul de sectoare 52 ' 32 ' 63 = 104.832 de sectoare, ceea ce se traduce cu un LBA = 104.831, deoarece num#rarea LBA ncepe cu 0. Parti!ii extinse Din cauza faptului c# tabela de parti$ii primare nu permite mai mult de patru parti$ii s-a creat un tip special de parti$ie, numit parti$ie extins#. Primul sector al unei parti$ii extinse, numit EBR (Extended Boot Record) con$ine o tabel# de parti$ii similar# celei prezente n primul sector al discului, numit# tabela de parti$ii extinse. Tabela de parti$ii extinse difer# de tabela de parti$ii primare prin faptul c# indicatorul de boot are ntotdeauna valoarea 0 %i cmpurile sectorului de nceput dat n valori LBA %i dimensiunea parti$iei sunt relative la primul sector al parit$iei extinse. Utilizarea parti$iilor extinse conduce la apari$ia unui arbore de parti$ii. n cadrul unei parti$ii extinse se poate defini parti$ii logice. Fiecare parti!ie logic# ncepe cu un EBR. Dac# tabela de parti$ii primare a unui disc con!ine o intrare de parti!ie extins#, atunci trebuie examinat fiecare EBR n parte. Foarte important de re$inut este faptul c# o intrare de parti!ie extins# din MBR nu arat# ce con!ine aceasta, %tim doar c# este posibil s# existe n ea un anumit num#r de parti!ii logice (pentru DOS 3.30, un num#r maxim de 23 de parti!ii logice). Structura parti!iei extinse poate fi aflat# numai dup# citirea primului tabel de parti!ii extinse aflat n interiorul parti!iei extinse. root@laptop:~#dd if=/dev/sda3 of=ebr.sec bs=512 count=1

1+0 records in 1+0 records out 512 bytes (512 B) copied, 0.067708 s, 7.6 kB/s root@laptop:~# hexdump -C -s 446 ebr.sec 000001be 00 fe ff ff 82 fe ff ff 02 00 00 00 00 18 83 00 |................| 000001ce 00 fe ff ff 05 fe ff ff 02 18 83 00 00 20 b2 03 |............. ..| 000001de 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 000001fe 55 aa |U.| 00000200 Cmpul de tip parti!ie din intr#rile de parti!ii extinse au valoarea 05H sau 0FH, n func!ie de dimensiunea discului. Singura modalitate prin care putem afla cte parti!ii logice sunt n cadrul parti!iei extinse este prin analizarea fiec#rui tabel de parti!ii extinse din EBR-urile din parti!ia extins# "i fiecare parti!ie logic#, pn# se ajunge la ultimul EBR. Aceste EBR-uri sunt legate mpreun#, fiecare con!innd o leg#tur# c#tre urm#torul EBR, pn# la ultimul. A"adar, pentru a ob!ine structura complet# a unui disc ce con!ine o parti!ie extins#, este nevoie de o copie a datelor prezente n tabelele de parti!ii extinse din fiecare EBR precum "i n tabela de parti!ii primare. Structura unui EBR EBR-urile au o structur# similar# cu MBR-urile, dar majoritatea vor con!ine numai tabelele de parti!ii "i semn#tura 0xAA55; primii 446 de octe!i sunt zero. Apar excep!ii numai atunci cnd programatorul decide s# foloseasc# aceast# zon# pentru propriul cod "i date. Structura sectorului EBR Deplasament (n cadrul sectorului) n zecimal 000 445 446 509 510 511 n hexa 000 1BD 1BE 1FD 1FE 1FF

Lungime (n octe!i) 446 64 2

Descriere

Neutilizat# Tabelul de parti!ii extinse Semn#tura EBR

Con!inutul tabelei de parti!ii extinse: Structura standard a tabelei de parti!ii extinse (64 de octe!i) Deplasament Lungime Con!inut (n cadrul sectorului) (n octe!i) n zecimal n hexa 446 461 1BE 1CD 16 Intrare pentru aceast# parti!ie logic#

462 477 1CE 1DD 478 493 1DE 1ED 494 - 509 1EE - 1FD

16 16 16

Leg#tur# cu urm#toarea parti!ie logic# (dac# exist#) Neutilizat Neutilizat

Limit#rile formatului MBR/MSDOS mp#r$irea discului n parti$ii nu este obligatorie, mai ales dac# se folose%te numai un singur sistem de operare. Dar chiar dac# nu instal#m mai multe sisteme de operare pe un disc, n unele situa$ii acesta poate fi v#zut de mai multe sisteme de operare (de exemplu, la partajarea unui disc n re$ea). F#r# o etichetare standard este u%or s# credem c# discul este gol, cnd de fapt nu este, sau este greu s# determin#m ce con$ine. n prezent discurile rigide au atins capacit#$i mari %i formatul MBR / MSDOS de etichetare a discurilor nu mai scaleaz# corespunz#tor. n decursul timpului au fost ntmpinate probleme legate n special de dimensiunea maxim# a parti$iilor %i, implicit, a capacit#$ii discurilor, recunoscute de sistemele de operare. Cea mai important# limit# a fost cea de 8 GB rezultat# din produsul celor mai mari valori CHS, presupunnd un sector de 512 octe$i. Capacitatea maxim# a unei parti$ii calculat# cu CHS este: LBA = (1024 ' 255 + 255) ' 63 + (63 - 1) = 16466687 Capacitatea parti$iei = 16466687 ' 512 B = 8430943744 B * 8 GB Apoi sistemele de operare au nv#$at s# foloseasc# dimensiunea parti$iei dat# n valori LBA. Din cauza faptului c# num#rul de sectoare de pe disc se reprezint# printr-un num#r ntreg f#r# semn de 32 de bi$i, dimensiunea unei parti$ii este limitat# la 2 TB. n prezent, aceast# valoare nu mai este suficient#. Pe de alt# parte, parti!iile care con!in MBR sau EBR trebuie s# nceap# ntotdeauna la grani!e de pist# "i s# se sfr"easc# la grani!e de cilindru; parti!iile extinse ncep ntotdeauna la grani!e de cilindru. Acest lucru face ca prima parti!ie primar# s# nceap# la LBA 63, l#snd un gol de 62 de sectoare pe parti$iile ce con!in MBR-ul (sau EBR-ul), numit# MBR gap sau boot track. De la Windows Vista, prima parti!ie ncepe dup# un spa$iu liber (gol) de 2047 de sectoare, la LBA 2048, conform noii sale politici de aliniere la grani!a de 1 MiB, astfel nct s# fie evitat# nealinierea sectoarelor cu dimensiunea mai mare de 512 octe!i. Dintre limit#rile formatului MBR / MSDOS de etichetare, enumer#m: Sector limitat la 232 ' 512 = 2 147 483 648 kiB (2 TiB, ~ 2.2 TB). Probleme de integritate a datelor. Sectorul MBR reprezint# un singur punct de e%ec. n plus, deoarece fiecare parti!ie logic# este definit# printr-o list# de EBR-uri, defectarea unuia poate duce la blocarea accesului la parti!iile

logice urm#toare. Structurile MBR "i EBR nu con!in informa!ii capabile de detec!ia erorilor. mp#r$irea discului n mai mult de patru parti$ii necesit# solu$ii neatr#g#toare (parti$ii primare/extinse/logice). Sunt folosite anumite reprezent#ri f#r# relevan$# n prezent (C/H/S, etc.).

1.1.7. Tabela de parti!ii bazate pe identificatori unici globali (GPT GUID Partition Table)

GPT este cel mai recent standard de parti!ionare. A fost creat de Intel ca parte a specifica!iilor EFI (Extensible Firmware Interface) destinate nlocuirii BIOS-ului. Acest lucru nseamn# c# un sistem bazat pe UEFI (necesar pentru

func!ionalitatea Secure Boot, de exemplu) trebuie neap#rat s# foloseasc# GPT. Totu"i, este posibil ca sistemele cu BIOS s# foloseasc# GPT. Pentru definirea parti!iei, GPT folose"te identificatori unici globali (GUID). Un GUID este un num#r unic folosit ca identificator. Termenul GUID se refer# la diferite implement#ri ale standardului UUID (Universally Unique Identifier)6. Num#rul GUID este reprezentat de obicei ca valoare de 128 de octe!i, reprezenta!i ca 32 de digi!i hexazecimali, afi"a!i n cinci grupuri separate prin liniu!#. De exemplu, {21EC2020-3AEA-4069-A2DD-08002B30309D}. De asemenea, GPT folose"te exclusiv adresarea LBA n loc de CHS. Structura tabelului de parti$ii GUID este ilustrat# n figura de mai jos. Pe scurt, LBA 0 con!ine MBR-ul de protec$ie, LBA 1 antetul GPT, iar antetul GPT con$ine un indicator c#tre tabela de parti!ii, sau %irul de intr#ri tip parti!ie, de obicei LBA 2. Specifica!iile UEFI stipuleaz# c# pentru "irul de intr#ri tip parti!ie trebuie aloca!i minim 16.384 octe!i, indiferent de dimensiunea sectorului. Pentru un disc cu sectoare de 512 octe!i, nseamn# 16.384 / 512, adic# 32 de blocuri logice LBA. Plus dou# dinainte rezult# faptul c# fiecare nregistrare de parti$ie ncepe la LBA 34. GPT ofer# "i redundan!#, scriind antetul GPT "i tabelul de parti!ii att la nceputul ct "i la sfr"itul discului. Dac# este alocat# dimensiunea minim# pentru "irul de intr#ri tip parti!ie, 16.384, iar dimensiunea implicit# pentru fiecare intrare tip parti!ie este 128 de octe!i, se ob!ine un num#r maxim de 128 de parti!ii. O parti!ie GPT este identificat# prin eticheta EEH.

UUID este un identificator standard de 128 de bi!i folosit n programe, standardizat de Open Software Foundation "i parte a Distributed Computing Environment. Scopul UUID este s# permit# sistemelor distribuite s# identifice unic informa!ia, f#r# o coordonare central#.

n acest exemplu, fiecare bloc logic (LBA) are dimensiunea de 512 de octe!i "i fiecare intrare tip parti$ie (Entry 1, Entry 2, ...) are 128 de octe!i. Intr#rile corespunz#toare nregistr#rilor tip parti!ie sunt de la LBA 2 la LBA 33. Adresele LBA negative indic# pozi!ia tabelului de parti!ii secundar fa!# de sfr"itul volumului, cu -1 ca ultim bloc adresabil. ntr-un GPT, primul sector de disc, LBA 0, este tot un MBR, numit MBR de protec$ie. Aici este prezent un tabel de parti$ii care con$ine o singur# nregistrare ce descrie o parti$ie de tipul 0xEE (adic# parti$ie EFI GPT). Aceast# nregistrare acoper# tot discul sau maxim 2 TiB, oricare din acestea este valoarea mai mic#. Rolul s#u este s# protejeze discul GPT de daune provocate de utilitare care nu recunosc un disc GPT. Dac# un astfel de utilitar scaneaz# discul, ele vor vedea un disc MBR f#r# spa!iu liber. Tot el permite unui calculator ce folose"te BIOS s# poat# boota de pe un disc GPT, folosind un nc#rc#tor de sistem (boot loaderul) stocat n zona de cod a MBR-ului de protec!ie, dar asta n condi!iile n care att nc#rc#torul de sistem ct "i sistemul de operare recunosc GPT. MBR-ul de protec!ie nu mai con$ine nc#rc#torul de sistem (boot loader-ul). Indiferent de dimensiunea sectorului, antetul GPT ncepe de la al doilea bloc logic al dispozitivului. A%adar, LBA 1 este antetul tabelului de parti$ii GPT. Structura antetului GPT (LBA 1) este prezentat# n urm#torul tabel. Depl. +0 Lungime Con!inut (octe!i) 8 Semn#tur# ("EFI PART", 45h 46h 49h 20h 50h 41h 52h 54h)

+8 +12 +16 +20 +24 +32 +40 +48 +56 +72 +80 +84 +88 +92

4 4 4 4 8 8 8 8 16 8 4 4 4 *

Revizie (pentru GPT versiune 1.0 (pn# la cel pu!in versiunea UEFI 2.3.1), valoarea este 00h 00h 01h 00h) Dimensiunea antetului exprimat# n little-endian (n octe!i, de obicei 5Ch 00h 00h 00h, nsemnnd 92 de octe!i) CRC2 pentru antet (offset +0 pn# la dimensiunea antetului), cu acest cmp zero n timpul calculului Rezervat; trebuie s# fie zero LBA curent (loca!ia acestei copii a antetului) LBA de backup (loca!ia celeilalte copii a antetului) Primul LBA utilizabil pentru parti!ii (pentru tabelul de parti!ii principal este ultimul LBA + 1) Ultimul LBA utilizabil (pentru tabelul secundar de parti!ii este primul LBA - 1) GUID-ul discului (n Linux se nume"te UUID) LBA-ul de nceput pentru "irul de intr#ri tip parti!ie (ntotdeauna 2 n copia principal#) Num#rul de intr#ri de tip parti!ie din "ir Dimensiunea unei singure intr#ri tip parti!ie (de obicei 128) CRC2 pentru "irul de parti!ii Rezervat; trebuie s# fie zero pn# la sfr"itul blocului (420 de octe!i pentru un sector de 512 octe!i; dar poate fi mai mult pentru sectoare de dimensiune mai mare.

Se observ# cum, printre alte informa$ii, antetul GPT define%te num#rul maxim de parti$ii, dimensiunea unei singure nregistr#ri de parti$ie, %i specific# suma de verificare %i UUID-ul discului. Formatul GPT folosit n mod obi%nuit permite pn# la 128 de nregistr#ri de parti$ie, fiecare cu dimensiunea de 128 de octe$i. Valorile LBA curent "i LBA de backup trebuie s# adreseze al doilea sector de disc (LBA 1), respectiv ultimul sector de disc. Al doilea antet de la sfr"itul discului identific# propriile intr#ri de tip parti!ie, care sunt localizate chiar naintea acelui antet. Dup# antetul GPT urmeaz# cteva intr#ri de tip parti$ie. Structura acestora este prezentat# n tabelul urm#tor. Structura unei intr#ri de tip parti!ie Lungime Deplasament Con!inut (octe!i) 0 16 GUID-ul pentru tipul parti!iei 16 16 GUID-ul unic pentru parti!ie 32 8 Primul LBA (n little-endian) 40 8 Ultimul LBA (inclusiv, de obicei num#r impar) 48 8 Indicatori de atribute (de ex., bitul 60 denot# read-only) 56 72 Numele parti!iei (36 de unit#!i de cod UTF-16LE)

128

Total

Primii 16 bi!i denot# GUID-ul pentru tipul parti!iei. De exemplu, GUID-ul pentru parti!ia EFI este {C12A7328-F81F-11D2-BA4B-00A0C93EC93B}. Alte cteva tipuri de parti$ii sunt specificate n urm#torul tabel. Tipuri de parti$ii GUID Date Linux/Windows Linux swap Linux LVM Linux RAID EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 0657FD6D-A4AB-43C4-84E5-0933C84B4F4F E6D6D379-F507-44C2-A23C-238F2A3DF928 A19D880F-05FC-4D3B-A006-743F0F84911E

Urm#torul cmp de 16 octe!i con!ine GUID-ul unic al parti!iei. Adresele LBA de nceput "i sfr"it ale parti$iei, fiecare de 64 de bi!i, sunt nregistrate n cmpurile trei "i patru. Apoi urmeaz# intr#ri pentru numele parti$iei "i diverse alte atribute. Prima parti$ie de pe discul de boot este o parti$ie special# EFI (ESP - EFI System Partition), formatat# cu sistemul de fi%iere FAT. Linux o monteaz# de obicei n /boot/efi. Variabilele UEFI specific# pozi$ia nc#rc#torului de sistem de pe ESP. Linux o administreaz# cu utilitarul efibootmgr. Folosirea discurilor GPT n Red Hat Enterprise Linux Utilitarul fdisk este destinat numai pentru discuri MBR. Dac# la pornire detecteaz# un disc GPT va aten$iona utilizatorul %i va afi%a MBR ul de protec$ie. Utilitarul folosit pentru etichetarea GPT este parted. Este un utilitar interactiv care poate fi folosit %i din linie de comand#. Reetichetarea discului n vederea parti$ion#rii GPT (parted) mklabel gpt Afi%area parti$iilor GPT (parted) p Ie%irea din utilitarul parted (modific#rile sunt scrise pe disc) (parted) q Crearea unei parti$ii de date (parted) mkpart data 1G 2G Comanda creaz# o parti$ie nou# pe discul /dev/sda numit# data, care ncepe la 1 GiB fa$# de nceputul discului %i se sfr%e%te la 2 GiB tot fa$# de nceputul discului (dimensiunea este 1 GiB).

Crearea unei parti$ii swap (parted) mkpart swap linux-swap 2G 3G Comanda creaz# o parti$ie de swap nou# pe discul /dev/sda numit# swap %i o va eticheta cu tipul de parti$ie GUID corect. Pentru a boota un sistem de operare aflat pe un disc GPT, trebuie ca sistemul s# recunoasc# UEFI. Avantajele GPT: Sector limitat la 264 ' 512= 8 ZiB (8,6 miliarde TiB). Tabelul de parti$ii, complet, este prezent att la nceputul ct %i sfr%itul discului. n timp ce MBR folose"te un singur octet pentru identificarea tipului de parti!ie, GPT folose"te o valoare GUID de 16 octe!i. Acest lucru scade posibilitatea coliziunilor. Folose"te valori CRC pentru structurile de date, crescnd "ansele detec!iei datelor corupte. GPT stocheaz# toate parti!iile ntr-o singur# tabel# (cu backup), astfel nct nu sunt necesare parti!ii extinse sau logice. Num#r maxim de parti$ii este flexibil (implicit 128). Mai mult spa$iu pentru informa$ii cu privire la tipul unei parti$ii, un GUID %i o etichet# Unicode unic# pentru fiecare parti$ie. GPT permite stocarea unui nume de parti!ie lizibil. Acest cmp poate fi folosit la denumirea parti!iilor cu numele din Linux, /home, /var, etc., pentru o identificare mai facil# n programul de parti!ionare.

1.1.1. Formatarea de nivel nalt


Formatarea de nivel nalt denot# procesul de scriere pe disc a unui sistem de fi"iere. Sistemul de fi%iere reprezint# o modalitate de organizare a datelor pe disc. n plus, pentru calculatoarele personale, acest proces include instalarea unui sector de ini$ializare a sistemului de operare (sectorul de boot, MBR). Aceast# opera!ie este rapid#, de aceea formatarea de nivel superior este numit# uneori %i formatare rapid#. Op!ional, ntreaga parti!ie poate fi scanat# n vederea detect#rii defectelor, proces care poate fi mare consumator de timp.

7. Sistemele de fi#iere

Considera%ii generale
Formatarea intermediar# mparte discul ntr-un num#r oarecare de parti$ii. Fiecare parti$ie poate con$ine un singur sistem de fi%iere. Sistemele de fi%iere organizeaz# fi%ierele n structuri logice ierarhice bazate pe directoare, aflate la rndul lor n blocurile fizice ale dispozitivului. Dispozitivele de stocare persistent# transfer# date n blocuri, de aceea se numesc %i dispozitive bloc. Sistemele de fi%iere Linux consider# dispozitivele bloc simple colec$ii liniare de blocuri, nu cunosc %i nici nu le intereseaz# geometria fizic# a discului. Sistemul de fi%iere genereaz# o cerere de citire a unui bloc aflat pe dispozitiv. Driverul de dispozitiv o preia %i translateaz# cererea n termeni corespunz#tori pentru acel dispozitiv; de exemplu, pista, sectorul %i cilindrul discului la care se afl# blocul respectiv. Sistemul de fi%iere trebuie s# opereze la fel indiferent de dispozitivul pe care se afl#. Mai mult, pentru sistemele de fi%iere din Linux, nu conteaz# (cel pu$in pentru utilizator) c# diferite sisteme de fi%iere se afl# pe diferite medii fizice de stocare, controlate de diferite controlere hardware. Sistemul de fi%iere poate chiar s# nu se afle pe sistemul local, ci poate fi pe un disc partajat n re$ea. Fi%ierele dintr-un sistem de fi%iere sunt colec$ii de date. Un sistem de fi%iere nu con$ine numai datele prezente n fi%ierele din sistemul de fi%iere ci %i structura sistemului de fi%iere. Con$ine toat# informa$ia pe care utilizatorii %i procesele o v#d ca fi%iere, directoare, leg#turi simbolice, drepturi de acces, etc.. Mai mult, sistemele de fi%iere trebuie s# p#streze aceste informa$ii n condi$ii de siguran$# %i securitate, integritatea sistemului de operare depinznd direct de sistemul de fi%iere. n Linux, sistemele de fi%iere sunt separate de sistemul de operare %i serviciile de sistem de o interfa$# cunoscut# sub numele de sistemul de fi%iere virtual (VFS Virtual File System). Indiferent de tipul sistemului de fi%iere real, acesta trebuie s# implementeze anumite func$ii standard recunoscute de VFS. n acest mod, Linux recunoa%te o multitudine de sisteme de fi%iere, de obicei foarte diferite. Toate detaliile de implementare a sistemelor de fi%iere reale sunt ascunse de acest nivel software, astfel nct, pentru kernel %i aplica$iile care ruleaz# n sistem, toate sistemele de fi%iere sunt identice. Folosind un set comun de func$ii API, nivelul VFS ne permite s# mont#m transparent diferite sisteme de fi%iere pe diverse tipuri de dispozitive de stocare n acela%i timp. S# consider#m de exemplu apelul de sistem read, care permite citirea unui anumit num#r dat de octe$i de la un descriptor de fi%ier. Func$ia read nu are cuno%tin$# de tipul de sistem de fi%iere, cum ar fi ext3 sau NFS. De asemenea, nu %tie nici tipul de mediu de stocare pe care

se afl# sistemul de fi%iere, poate fi disc ATA, SAS sau SATA. Totu%i, atunci cnd este apelat#, func$ia read returneaz# datele. n Linux, diferitele sisteme de fi%iere pe care le poate utiliza sistemul nu sunt accesate prin intermediul unor identificatori de dispozitiv (cum ar fi num#rul sau numele de dispozitiv), ci sunt ad#ugate la o singur# structur# ierarhic# care reprezint# ierarhia de fi%iere (ca singur# entitate general#). n Linux, atunci cnd trebuie accesat un sistem de fi%iere trebuie mai nti adaugat la ierarhia de fi%iere. Asocierea unui sistem de fi%iere la un director din ierarhia de fi%iere n Linux este un proces numit montare. Orice sistem de fi%iere, indiferent de tip, este montat la un director %i fi%ierele sistemului de fi%iere respectiv nlocuiesc con$inutul acelui director. Opera$ia se nume%te montarea unui sistem de fi%iere, iar acest director este cunoscut ca director sau punct de montare. Cnd sistemul de fi%iere este demontat, fi%ierele anterioare ale directorului de montare sunt iar#%i vizibile.

Sistemul de fi$iere Ext2


Sistemul de fi%iere Ext2 (Second Extended Filesystem) a fost introdus n 1994. La fel ca multe alte sisteme de fi%iere, Ext2 a fost creeat pe baza premisei c# datele din fi%iere sunt stocate n blocuri de date, toate de aceea%i capacitate. La crearea sistemului de fi"iere Ext2 utilizatorul poate alege dimensiunea optim# a blocului logic7 (de la 1024 la 4096 de octe!i), n func!ie de dimensiunea medie preconizat# a fi"ierelor. Dimensiunea fiec#rui fi%ier este rotunjit# pn# la un num#r ntreg de blocuri. Dac# dimensiunea blocului este 1024 de octe$i, atunci un fi%ier de 1025 de octe$i va ocupa dou# blocuri de 1024. Acest lucru nseamn# c# n medie se pierde jum#tate dde bloc per fi%ier. Sistemele de operare trebuie s# fac# un compromis ntre utilizarea optim# a procesorului %i spa$iul de memorie %i disc ocupat. Linux, mpreun# cu majoritatea sistemelor de operare, reduce presiunea la procesor pe baza unei utiliz#ri relativ ineficiente a spa$iului pe disc. O dimensiune a blocului de 1024 este preferabil# atunci cnd dimensiunea medie a fi"ierelor este mai mic# de cteva sute de octe!i, deoarece acest lucru duce la mai pu!in# fragmentare intern#; altfel spus, o discrepan!# mai mic# ntre dimensiunea fi"ierului "i por!iunea de disc care o stocheaz#. Pe de alt# parte, pentru fi"iere mai mari, cu dimensiunea de cteva sute de octe!i, sunt preferate blocurile de dimensiune mare, deoarece transferul acestora necesit# mai pu!ine opera$ii de acces la disc, reducnd astfel nc#rcarea suplimentar# asupra sistemului. Nu toate blocurile sistemului de fi%iere con$in date, unele trebuie s# con$in# informa$ie care descrie structura sistemului de fi%iere. Ext2 define%te topologia sistemului de fi%iere prin reprezentarea fiec#rui fi%ier din sistem cu o structur# de date numit# inod. Un inod descrie care blocuri sunt ocupate de datele din fi%ier,
7

A nu se confunda blocul logic (creat de sistemul de fi%iere) cu blocul fizic (blocul de date prezent pe disc n etapa format#rii de nivel inferior)

precum %i drepturile de acces la fi%ier, timpul modific#rii fi%ierului %i tipul fi%ierului. Fiecare fi%ier din Ext2 este reprezentat de un singur inod %i fiecare inod are un num#r unic de identificare. Inodurile ntregului sistem de fi%iere sunt toate p#strate mpreun# n tabelele de inoduri. Directoarele Ext2 sunt simple fi%iere speciale (ele nsele reprezentate prin inoduri) care con$in anumi$i pointeri c#tre inodurile fi%ierelor sau directoarelor con$inute. Figura de mai jos arat# structura sistemului de fi%iere Ext2 ca ocupnd o serie de blocuri dintr-un dispozitiv mp#r$it n blocuri. n ce priveste orice sistem de fi%iere, dispozitivele bloc reprezint# numai o serie de blocuri care pot fi citite %i scrise. Un sistem de fi%iere nu trebuie s# se preocupe unde pe mediul fizic de stocare trebuie pus un bloc, aceasta este sarcina driverului de dispozitiv. De fiecare dat# cnd un sistem de fi%iere are nevoie s# citeasc# informa$ie sau date de pe dispozitivul bloc care l con$ine, cere ca driverul de dispozitiv s# citeasc# un num#r ntreg de blocuri. Sistemul de fi%iere Ext2 mparte parti$ia pe care o ocup# n grupuri de blocuri. Pe lng# faptul c# p#streaz# fi%iere %i directoare reale ca blocuri de informa$ie %i date, fiecare grup de blocuri duplic# informa$ia critic# pentru integritatea sistemului de fi%iere. Aceast# duplicare este necesar# n cazul recuper#rii sistemului de fi%iere dup# o disfunc$ionalitate. Urm#toarele sec$iuni descriu mai detaliat structurile de date Ext2 prezente pe disc.

1.1.2. Structurile de date Ext2 prezente pe disc


Primul bloc din fiecare parti!ie Ext2 nu este niciodat# gestionat de sistemul de fi"iere Ext2 deoarece este rezervat pentru sectorul de boot al parti!iei. Restul parti!iei Ext2 este mp#r!it# n grupuri de blocuri (block groups), fiecare din ele avnd structura din figura urm#toare. Toate grupurile de blocuri din sistemul de fi"iere au aceea"i dimensiune "i sunt stocate secven!ial, astfel nct kernelul poate deduce loca!ia (de pe disc a) unui grup direct din indexul s#u.

Grupurile de blocuri reduc fragmentarea fi"ierului, deoarece kernelul

ncearc# pe ct posibil s# p#streze blocurile de date ce apar!in aceluia"i fi"ier n acela"i grup de blocuri. Fiecare grup de blocuri con!ine urm#toarele informa!ii: o copie a superblocului (sistemului de fi%iere). o copie a descriptorilor de grup o hart# binar# (bitmap) a blocurilor de date. o hart# binar# a inodurilor. un tabel de inoduri. blocuri de date (o parte din datele care apar!in unui fi"ier). Dac# un grup de blocuri nu con!ine nicio informa!i util# (blocuri de date), se spune c# este liber. A"a cum reiese din figur#, superblocul "i descriptorii de grup sunt prezen!i (duplica!i) n fiecare grup de blocuri. ns# numai superblocul "i descriptorii de grup inclu"i n grupul de blocuri 0 sunt folosi!i de kernel, n timp ce celelalte superblocuri "i descriptori de grup r#mn neatin"i; de fapt, kernelul nici nu i interogheaz#. Cnd programul e2fsck verific# consisten!a sistemului de fi"iere, interogheaz# superblocul "i descriptorii de grup din grupul 0 "i apoi i copiaz# n toate celelalte grupuri de blocuri. Dac# se produce o defec$iune "i informa$iile din superbloc sau descriptorii de grup din grupul 0 sunt corupte (invalide), administratorul de sistem poate instrui e2fsck s# foloseasc# vechile copii ale acestora stocate ntr-un alt grup. De obicei, copiile redundante stocheaz# destul# informa!ie pentru a permite e2fsck s# refac# consisten!a parti!iei Ext2. Num#rul de grupuri de blocuri depinde att de dimensiunea parti!iei ct "i de dimensiunea blocului. Principalul factor constrng#tor l reprezint# faptul c# harta binar# a blocurilor de date, folosit# la identificarea blocurilor folosite "i libere dintr-un grup, trebuie s# fie stocat# ntr-un singur bloc. n consecin!#, n fiecare grup de blocuri, pot exista cel mult 8 " b blocuri, unde b este dimensiunea blocului n octe!i. Astfel, num#rul total de grupuri de blocuri este s / (8 " b), unde s este dimensiunea parti!iei n blocuri. De exemplu, pentru o parti!ie Ext2 de 32 GB cu blocuri de 4 kB, fiecare hart# de blocuri de 4 kB descrie 32 K de blocuri de date, nsemnnd 128 MB. A"adar, 32 GB /128 MB = 256 de grupuri de blocuri. Evident, cu ct este mai mic# dimensiunea blocului cu att este mai mare num#rul de grupuri. Superblocul are rolul de a descrie dimensiunea %i structura de ansamblu a acelui sistem de fi%iere. Informa$ia pe care o con$ine permite managerului de sistem de fi%iere s# foloseasc# %i s# monitorizeze sistemul de fi%iere. De obicei numai superblocul prezent n grupul de blocuri 0 este citit la montarea sistemului de fi%iere, dar fiecare grup de blocuri con$ine o copie n eventualitatea coruperii sistemului de fi%iere. Structura superblocului poate fi vizualizat# prin comanda: root@host:~# dumpe2fs /dev/sda1 -h Printre cmpurile superblocului ntlnim cteva care merit# o privire mai atent#.

Num#rul magic. Permite programului de montare s# verifice c# acesta chiar este un superbloc pentru un sistem de fi%iere Ext2. Num#rul grupului de bloc care con$ine aceast# copie a superblocului. Dimensiunea blocului pentru acest sistem de fi%iere, dat# n octe$i. De exemplu, 1024 de octe$i. Num#rul de blocuri per grup. Reprezint# num#rul de blocuri dintr-un grup. La fel ca dimensiunea blocului, acest num#r este fix, ob$inut la crearea sistemului de fi%iere. Blocuri libere, inoduri libere, primul inod, reprezint# num#rul de blocuri %i inoduri libere din sistemul de fi%iere, respectiv num#rul primului inod din sistemul de fi%iere. Primul inod dintr-o ierarhie de fi%iere Ext2 corespunde directorului r#d#cin#. Fragmentul. Fi"ierele mici stocate n blocuri de dimensiune mare irosesc mult spa!iu de disc. Aceast# problem# poate fi rezolvat# permi!nd mai multor fi"iere s# fie stocate n fragmente diferite ale aceluia"i bloc de date. Blocurile rezervate. Unele blocuri de disc sunt rezervate utilizatorului cu drepturi depline n sistem. Aceste blocuri permit administratorului de sistem s# poat# folosi sistemul de fi"iere chiar "i atunci cnd nu mai sunt disponibile blocuri pentru utilizatorii neprivilegia$i. Num#rul de mont#ri, num#rul maxim de mont#ri, ultima verificare "i intervalul de verificare sunt folosite pentru a permite verificarea automat# a sistemului de fi%iere n momentul ini!ializ#rii sistemului. Aceste cmpuri i permit utilitarului e2fsck s# ruleze dup# un num#r predefinit de opera!iuni de montare sau dup# un timp predefinit fa$# de ultima verificare a consisten!ei. Verificarea de consisten!# poate fi stabilit# "i la ini!ializare, dac# sistemul de fi"iere nu a fost de-montat corect (de exemplu, dup# o disfunc!ionalitate), sau cnd kernelul descoper# unele erori. Un cmp de stare stocheaz# valoarea 0 dac# sistemul de fi"iere este n prezent montat sau nu a fost de-montat corespunz#tor, 1 dac# a fost de-montat corespunz#tor, %i 2 dac# con!ine erori.

Descriptorul de grup are %i el o structur# de date care l reprezint#. La fel ca superblocul, to$i descriptorii de grup pentru toate grupurile de bloc sunt duplica$i n fiecare grup de blocuri n vederea unui eventual proces de recuperare. Fiecare descripor de grup con$ine urm#toarele informa$ii: num#rul blocului care con$ine harta binar# a blocurilor de date (folosit n timpul aloc#rii %i dealoc#rii blocurilor), num#rul blocului care con$ine harta binar# a inodurilor (folosit n timpul aloc#rii %i dealoc#rii blocurilor), num#rul blocului de la care ncepe tabelul de inoduri, num#rul de blocuri libere din grup, num#rul de inoduri libere din grup, num#rul de directoare din grup, aliniament, %i octe!i null suplimentari pentru a atinge num#rul de 24 de octe!i. Descriptorii de grup sunt plasa$i unul dup# altul %i mpreun# formeaz# tabelul descriptorilor de grup. Fiecare grup de blocuri con$ine tabelul ntreg al descriptorilor de grup imediat dup# copia superblocului, dar numai prima copie

(grupul de blocuri 0) este de fapt folosit# de Ext2. H#r"ile binare sunt secven!e de bi!i, unde o valoare de 0 specific# faptul c# inodul sau blocul de date corespunz#tor este liber, iar o valoare de 1 faptul c# este utilizat. Deoarece fiecare hart# binar# trebuie stocat# ntr-un singur bloc "i deoarece dimensiunea blocului poate fi de 1024, 2048 sau 4096 de octe!i, o singur# hart# binar# poate descrie starea a 8192, 16384 sau 32768 de blocuri. Tabelul de inoduri const# dintr-o serie de blocuri consecutive, fiecare din ele con!ine un num#r predefinit de inoduri. Num#rul blocului de nceput al tabelului de inoduri este stocat ntr-un cmp al descriptorului de grupuri. Toate inodurile au dimensiunea de 128 de octe!i. Un bloc de 1024 de octe!i con!ine 8 inoduri, n timp ce un bloc de 4096 de octe!i con!ine 32 de inoduri. Pentru a afla cte blocuri sunt ocupate de tabelul de inoduri se divide num#rul total de inoduri dintr-un grup (afi"at n listingul de superbloc) cu num#rul de inoduri per bloc. Structura tabelului de inoduri poate fi vizualizat# cu comanda stat. De exemplu, stat /etc/ passwd, stat /dev/sda, etc.. Observa!ii: ! Num#rul de blocuri de date este dat n unit#!i de 512 octe!i. Inodul Fiecare fi%ier sau director este descris de un singur inode. Originea termenului inode este necunoscut#, dar poate proveni de la index node. Inod-ul con$ine informa$ii despre dimensiunea, permisiunile, posesia %i loca$ia pe disc a fi%ierului sau directorului. Inodurile pentru fiecare grup de blocuri sunt stocate n tabelul de inoduri. Folosit mpreun# cu harta binar# a inodurilor sistemul poate urm#ri care inoduri sunt alocate sau nu. Figura de mai jos arat# formatul unui inod care, pe lng# alte informa$ii con$ine %i urm#toarele cmpuri: Mod. Con$ine dou# informa$ii: ce reprezint# acest inod %i ce permisiuni au utilizatorii asupra lui. n Ext2 un inod poate reprezenta un fi%ier regulat, director, leg#tur# simbolic#, dispozitiv bloc, dispozitiv caracter sau conduct#. Informa$ia posesorului. Identificatorii de utilizator %i grup care posed# acest fi%ier sau director. Dimensiune. Dimensiunea fi%ierului n octe$i. Amprenta de timp. Timpul la care a fost creat %i ultima dat# cnd a fost modificat. Blocuri de date. Pointeri c#tre blocurile care con$in datele obiectului reprezentat de acest inod. Primii 12 sunt pointeri direc$i c#tre blocurile de date iar ultimii trei pointeri con$in mai multe niveluri de indirectare. De exemplu, blocurile cu dubl# indirectare indic# la un bloc de pointeri c#tre al$i pointeri c#tre blocurile de date. Acest lucru nseamn# c# fi%ierele mai

mici sau egale cu dou#sprezece blocuri de date sunt accesate mai rapid dect fi%ierele mai mari.

Atributele extinse ale unui inode Pentru a evita fragmentarea intern# n cadrul blocurilor care stocheaz# tabelul de inoduri, dimensiunea unui inod trebuie s# fie o putere a lui 2. De fapt, cele 128 de caractere ale unui inod Ext2 sunt folosite aproape n totalitate "i pentru cmpuri adi!ionale nu mai este disponibil mult spa!iu. Pe de alt# parte, redimensionarea inodului la 256 de caractere ar fi prea mult "i n plus ar introduce probleme de compatibilitate (ntre sistemele de fi"iere Ext2 care folosesc dimensiuni diferite). Pentru a dep#"i aceast# limitare au fost introduse atributele extinse (xattr). Aceste atribute sunt stocate ntr-un bloc de disc din afara unui inod. Un cmp din inod indic# blocul care con!ine atributele extinse. Inoduri diferite care au acela"i set de atribute extinse pot partaja acela"i bloc. Fiecare atribut extins are un nume "i o valoare. Amndou# sunt reprezentate sub forma unor "iruri de caractere de lungime variabil#. Liste de control al accesului Listele de control a accesului mbun#t#!esc mecanismul de protec!ie a fi"ierelor n sistemele de fi"iere Unix. n loc de a clasifica utilizatorii unui fi"ier n trei clase proprietar, grup "i ceilal!i - o list# de control a accesului (ACL) poate fi

asociat# cu fiecare fi"ier. Mul!umit# acestei liste, un utilizator poate specifica numele anumitor utilizatori (sau grupuri de utilizatori) "i privilegiile acordate acestora pentru fiecare din fi"ierele sale. Linux implementeaz# listele ACL cu ajutorul atributelor extinse. De fapt, atributele extinse au fost introduse tocmai ca suport pentru ACL-uri. Tipuri de fi!iere Ext2 Unele fi"iere nu stocheaz# date "i n consecin!# nu au nevoie de blocuri de date. Tipul fi"ierului 0 1 2 3 4 5 6 7 Descriere Necunoscut Fi"ier regulat Director Dispozitiv caracter Dispozitiv bloc Pipe Socket Leg#tur# simbolic#

Fi$ier regulat. Fi"ierele regulate au nevoie de blocuri de date numai atunci cnd ncep s# primeasc# date. La creare, fi"ierul regulat este gol "i nu are nevoie de blocuri de date; de asemenea, poate fi golit prin trunchiere, de exemplu cnd introducem n linia de comand# > nume_fi!ier, interpretorul de comenzi creaz# un fi"ier gol sau truncheaz# unul existent. Director. Ext2 implementeaz# directorul ca pe un tip special de fi"ier a c#rui blocuri de date stocheaz# nume mpreun# cu numerele de inod corespunz#toare. n particular, asemenea blocuri de date formeaz# o structur# precum cea dat# ca exemplu n figura urm#toare (num#r de inod, lungime nume n octe$i, nume). Structura are dimensiune variabil#, deoarece ultimul cmp, cel care reprezint# numele obiectului, este un "ir de lungime variabil#, de pn# la maxim 255 de caractere (de obicei). Mai mult, din motive de eficien!#, dimensiunea unei intr#ri n director este ntotdeauna multiplu de patru "i, astfel, dac# este necesar, sunt ad#ugate caractere null pentru a completa sfr"itul intr#rii.

Cmpul file_type (tip_fi%ier) stocheaz# o valoare care specific# tipul fi"ierului. Cmpul rec_len (lungime nregistrare) poate fi interpretat ca fiind un pointer la urm#toarea intrare de director valid#: este deplasamentul care trebuie ad#ugat la adresa de nceput a intr#rii de director curente pentru a ob!ine adresa de nceput a urm#toarei intr#ri de director. Pentru a "terge o intrare de director este suficient s# setezi cmpul inod n 0 "i s# incrementezi corespunz#tor valoarea cmpului rec_len a intr#rii de director anterioare.

Primele dou# intr#ri din fiecare director sunt ntotdeauna intr#rile standard . %i .. (semnificnd directorul curent, respectiv directorul p#rinte). Leg#tur# simbolic#. Dac# calea de nume a unei leg#turi simbolice are pn# la 60 de caractere, atunci este stocat# n cmpul i_block din inod, care const# dintr-un "ir de 15 ntregi de cte 4 octe!i; a"adar, nu sunt necesare blocuri de date. n schimb, dac# calea de nume este mai mare de 60 de caractere, este necesar un singur bloc de date. Fi$iere de dispozitiv, pipe-uri $i socket-uri. Nu sunt necesare blocuri de date pentru aceste tipuri de fi"iere. Toat# informa!ia necesar# este stocat# n inod.

1.1.3. Structurile de date Ext2 prezente n memorie


Din motive de eficien!#, majoritatea informa!iilor stocate n structurile de date de pe disc a unei parti!ii Ext2 sunt copiate n RAM la montarea sistemului de fi"iere, permi!nd kernelului s# evite repetarea unui num#r mare de opera!ii de citire disc. Aceast# zon# de memorie se nume%te page cache. Deoarece toate

structurile Ext2 prezente pe disc sunt stocate n blocurile parti!iei Ext2, kernelul folose"te page cache-ul pentru a le actualiza. Datele care sunt actualizate foarte frecvent sunt permanent stocate n memorie (superblocul "i descriptorii de grup); altfel spus, datele sunt permanent stocate n memorie "i incluse n page cache pn# cnd parti!ia Ext2 corespunz#toare este deconectat# (de-montat#). Periodic totu"i, datele trebuie scrise napoi pe disc. Datele care nu reprezint# informa!ie util# nu sunt niciodat# p#strate n memorie (de exemplu tabelul de inoduri "i blocurile libere). ntre aceste extreme sunt structurile de date nc#rcate n memorie n mod dinamic. n acest mod, datele sunt p#strate ntr-un cache ct timp obiectul asociat (inod, bloc de date sau hart# binar#) este n uz; cnd fi"ierul este nchis sau blocul de date este "ters, datele asociate sunt scoase din cache.

1.1.4. Crearea sistemului de fi#iere Ext2


Sistemele de fi"iere Ext2 sunt create cu programul mke2fs. Comanda presupune urm#toarele op!iuni implicite, dar pot fi modificate de utilizator din linie de comand#: ! dimensiunea blocului: 1024 de octe!i (valoare implicit# pentru un sistem de fi"iere de dimensiuni reduse). ! dimensiunea fragmentului: 1024 de octe!i, adic# dimensiunea blocului (fragmentarea blocului nu este implementat#). ! num#rul de inoduri alocate: 1 inode pentru fiecare 8192 de octe!i. ! procentajul blocurilor rezervate: 5%. Programul realizeaz# urm#toarele ac!iuni: 1. Ini!ializeaz# superblocul "i descriptorii de grup. 2. Op!ional, verific# dac# parti!ia con!ine blocuri defecte; dac# da, creaz# o list# cu acestea. 3. Pentru fiecare grup de blocuri, rezerv# toate blocurile de disc necesare pentru stocarea superblocului, descriptorilor de grup, tabelei de inoduri "i a celor dou# h#r!i binare. 4. Ini!ializeaz# cu zero harta binar# a inodurilor "i harta binar# a blocurilor de date pentru fiecare grup de blocuri. 5. Ini!ializeaz# tabelul de inoduri pentru fiecare grup de blocuri. 6. Creaz# directorul /root. 7. Creaz# directorul lost+found, care este folosit de e2fsck la stocarea blocurilor defecte pierdute "i reg#site. 8. Actualizeaz# harta binar# a inodurilor "i harta binar# a blocurilor de date pentru grupul de blocuri n care au fost create cele dou# directoare de la punctele 6 "i 7. 9. Grupeaz# blocurile defecte (dac# sunt) n directorul lost+found. Majoritatea informa!iilor cu privire la un sistem de fi"iere Ext2 pot fi ob!inute

folosind programele dumpe2fs "i debugfs.

Sistemul de fi#iere Ext3


Ext3 este un sistem de fi"iere care a evoluat din Ext2. A fost proiectat special pentru a r#spunde la dou# cerin!e: ! s# fie un sistem de fi"iere jurnalizat. ! s# fie, ct de mult posibil, compatibil cu vechiul sistem de fi"iere Ext2. Din aceste motive, n esen!#, Ext3 este foarte asem#n#tor cu Ext2. n consecin!#, structurile sale de date sunt aproape identice cu cele ale Ext2. De fapt, un sistem de fi"ere Ext3 poate fi montat ca sistem de fi"iere Ext2. La fel, crearea unui jurnal pe un sistem de fi"iere Ext2 "i remontarea lui ca Ext3 este o opera!ie simpl# "i rapid#. Sisteme de fi!iere jurnalizate n vederea unor performan!e ridicate, nainte de a fi scrise pe disc, modific#rile blocurilor de date de pe disc sunt p#strate n memorie pentru perioade lungi de timp. Apari!ia unui accident, cum ar fi o c#dere de tensiune sau o defectare a sistemului, poate l#sa sistemul de fi"iere ntr-o stare inconsistent#. Pentru a dep#"i aceast# problem#, fiecare sistem de fi"iere Unix tradi!ional este verificat nainte de a fi montat. Dac# nu a fost de-montat corect, un anumit program execut# o opera!ie de verificare exhaustiv#, mare consumatoare de timp, "i corecteaz# toate structurile de date de pe disc ale sistemului de fi"iere. De exemplu, starea Ext2 este memorat# ntr-un cmp al superblocului de pe disc. La ini!ializarea sistemului, un script folose%te programul e2fsck ca s# verifice valoarea stocat# n acest cmp "i dac# detecteaz# c# sistemul de fi"iere nu a fost de-montat corect, ncepe s# verifice toate structurile de date de pe disc. n mod evident, timpul petrecut cu verificarea consisten!ei depinde n principal de num#rul de fi"iere "i directoare care trebuie examinate; a"adar, depinde de dimensiunea discului. n prezent, sistemele de fi"iere ating dimensiuni de ordinul TB, o singur# verificare a consisten!ei poate consuma ore, lucru inacceptabil n cazul serverelor. Scopul unui sistem de fi"iere jurnalizat este s# evite rularea verific#rilor de consisten!# asupra ntregului sistem de fi"iere, verificnd n schimb o zon# special# de pe disc care con!ine cele mai recente opera!ii de scriere. Aceast# zon# se nume%te jurnal. Remontarea unui sistem de fi"iere jurnalizat dup# o defec!iune a sistemului este o opera!ie de cteva secunde.

Sistemul de fi!iere jurnalizat Ext3

Ideea din spatele jurnaliz#rii Ext3 a fost ca fiecare modificare de nivel superior a sistemului de fi"iere s# se fac# n doi pa"i. Primul, o copie a blocurilor ce vor fi modificate este stocat# n jurnal. Apoi, cnd transferul de date c#tre jurnal a fost finalizat (pe scurt, datele sunt nregistrate n jurnal), blocurile sunt scrise n sistemul de fi"iere. Cnd transferul de date cu sistemul de fi"iere se ncheie (datele sunt nregistrate n sistemul de fi$iere), copiile blocurilor de date din jurnal sunt "terse. n timpul recuper#rii sistemului de fi"iere dup# o defec!iune a sistemului, e2fsck distinge urm#toarele dou# cazuri: ! defec!iunea sistemului a ap#rut naintea nregistr#rii datelor n jurnal. n acest caz, fie copiile blocurilor lipsesc din jurnal, fie acestea sunt incomplete. n ambele cazuri, e2fsck le ignor#. ! defec!iunea sistemului a ap#rut dup# o nregistrare n jurnal. Copiile blocurilor sunt valide "i e2fsck le scrie n sistemul de fi"iere. n primul caz, modificarea blocurilor este pierdut#, dar starea sistemului de fi"iere este consistent#. n al doilea caz, e2fsck aplic# modificarea, corectnd fiecare inconsisten!# ap#rut# din cauza unui transfer de date cu sistemul de fi"iere nefinalizat. Sistemele de fi"iere jurnalizate asigur# consisten!a numai la nivel de apel de sistem. De exemplu, copiem un fi"ier de dimensiune mare, care are nevoie de mai multe apeluri de scriere separate. O defec!iune de sistem care ntrerupe copierea dup# un apel de scriere intermediar va genera un fi"ier duplicat mai scurt dect cel original. Mai mult, sistemele de fi"iere jurnalizate de obicei nu copiaz# toate blocurile n jurnal. De fapt, fiecare sistem de fi"iere con!ine dou# tipuri de blocuri: cele care con!in a"a numitele metadate "i cele care con!in date regulate. n cazul Ext2 "i Ext3 sunt trei tipuri de metadate: superblocurile, descriptorii de grup, inodurile, blocurile folosite pentru adresarea indirect# (blocurile de indirectare), blocurile h#r!ilor binare a blocurilor date "i blocurile h#r!ilor binare a inodurilor.

Alte sisteme de fi"iere pot folosi metadate diferite. Cteva sisteme de fi"iere jurnalizate, cum ar fi XFS "i JFS, nregistreaz# n jurnal numai metadatele. De fapt, nregistrarea metadatelor n jurnal este suficient# pentru refacerea consisten!ei structurilor de date ale sistemului de fi"iere. Totu"i, din moment ce opera!iile cu blocurile de date ale fi"ierelor nu sunt nregistrate n jurnal, nimic nu previne ca o defec!iune de sistem s# corup# con!inutul fi"ierelor. Sistemul de fi"iere Ext3 poate fi configurat s# nregistreze (logheze) n jurnal opera!iile ce afecteaz# att metadatele sistemului de fi"iere ct "i blocurile de date ale fi"ierelor. Deoarece nregistrarea fiec#rui tip de opera!ii de scriere are ca efect o penalitate semnificativ# de performan!#, Ext3 las# administratorul de sistem s# decid# ce trebuie nregistrat n jurnal. Ext3 ofer# trei moduri diferite de nregistrare n jurnal: ! Journal. n jurnal sunt nregistrate att metadatele ct "i datele. Acest mod minimizeaz# posibilitatea pierderii actualiz#rilor, dar necesit# opera!ii adi!ionale de acces la disc. ! Ordered. Numai modific#rile la metadate sunt nregistrate n jurnal. Totu"i, Ext3 nti scrie datele pe disc "i apoi metadatele n jurnal (nti nregistreaz# n sistemul de fi"iere datele, apoi metadatele). n acest fel, apari!ia unor date corupte n interiorul fi"ierelor este mai sc#zut# (de exemplu, fiecare scriere care adaug# ceva la un fi"ier este protejat# complet de jurnal). Acesta este modul implicit pentru Ext3. ! Writeback. n jurnal sunt nregistrate numai metadatele, iar datele sunt scrise direct n blocurile fizice. Este modul cel mai rapid. Acest mod p#streaz# structura sistemului de fi%iere %i evit# coruperea datelor, dar coruperea datelor poate ap#rea (de exemplu, dac# sistemul se defecteaz# dup# ce metadatele sunt scrise n jurnal, dar nainte de scrierea datelor pe disc). Modul de nregistrare n jurnal este specificat printr-o op!iune a comenzii de sistem mount. De exemplu: mount -t ext3 -o data=writeback /dev/sda2 /mnt

Sistemul de fi#iere Ext4 - NU SE CERE LA TEST


http://www.ibm.com/developerworks/linux/library/l-anatomy-ext4/index.html Ext4 este urm#toarea genera!ie de sisteme de fi"iere jurnalizate. Ext4 p#streaz# compatibilitatea cu sistemul de fi"iere precedent, Ext3, dar este mai scalabil, fiabil "i ofer# noi func!ionalit#!i. Scalabilitate

Una din primele diferen!e vizibile n Ext4 este cre"terea limitelor pentru volumele acoperite de sistemul de fi"iere, dimensiunea fi"ierelor "i a subdirectoarelor. Ext4 suport# sisteme de fi"iere de pn# la 1 EB. Fi"ierele din cadrul ext4 pot ajunge la 16 TB (prespunnd blocuri de 4 KiB), de trei ori limita prezent# n Ext3. Limita de subdirectoare a crescut de la 32768 la un num#r nelimitat. Indexarea directoarelor a fost de asemenea optimizat# astfel nct de"i limitele sunt mai mari, ext4 experimenteaz# timpi foarte rapizi de c#utare. Unul din dezavantajele ext3 a constat din metoda sa de alocare. Fi"ierele sunt alocate folosind o hart# binar# a spa!iului liber, metod# nu prea rapid# "i nici prea scalabil#. Formatul ext3 este foarte eficient pentru fi"iere mici dar extrem de ineficient pentru fi"iere mari. Pentru a mbun#t#!i procesul de alocare "i a ob!ine o structur# de stocare mai eficient#, ext4 nlocuie"te mecanismul de adresare indirect# a blocurilor (dubl# %i tripl#) folosit de ext3 cu un mecanism bazat pe structuri extent. Formatul structurii extent este ar#tat mai jos:
struct ext4_extent { __le32 ee_block; /* __le16 ee_len; /* __le16 ee_start_hi; /* __le32 ee_start; /* fizic */ } primul bloc logic adresat de extent */ num#rul de blocuri acoperit de extent */ cei mai semnif. 16 bi$i ai blocului fizic */ cei mai pu$in semnif. 32 de bi$i ai blocului

Structura extent are 12 octe$i %i cuprinde 32 de bi$i pentru num#rul unui bloc logic (rezultnd dimensiunea fi%ierului de 16 TB8), 48 de bi$i pentru num#rul unui bloc fizic (rezultnd un sistem de fi%iere de 1 EB9) %i 15 bi$i pentru num#rul de blocuri acoperit de extent (rezultnd maxim 128 MB). O structur# extent este o modalitate simpl# de a reprezenta o secven!# contigu# de blocuri. n acest fel, metadatele ocup# mai pu!in spa!iu, deoarece n loc s# se p#streze informa!ie despre locul unde este stocat un bloc, extent-ul p#streaz# informa!ie despre unde este stocat# o list# lung# de blocuri contigue (astfel reducndu-se spa!iul necesar stoc#rii metadatelor). n vederea unei eficien!e ct mai bune, pentru reprezentarea fi"ierele de dimensiuni mici, extent-urile sunt organizate stratificat, iar pentru reprezentarea fi"ierelor mari, extent-urile sunt organizate ierarhic, sub form# de arbore. De exemplu, un singur inode ext4 are suficient spa!iu s# adreseze trei extent-uri (unde fiecare extent reprezint# un set de blocuri contigue).

8 9

232 ' 4 KiB = 232 ' 22 ' 210 B = 240 ' 24 B = 16 TB 248 ' 4 KiB = 248 ' 22 ' 210 B = 250 ' 210 B = 260 = 1 EB

Pentru fi"ierele mari (inclusiv cele fragmentate), care au nevoie de mai mult de trei extent-uri, un inode poate adresa un nod index, fiecare la rndul s#u poate adresa un nod frunz# (care adreseaz# mai multe extent-uri).

Acest arbore (de tip B-Tree) de extent-uri d# posibilitatea reprezent#rii eficiente a unor fi"iere mari, poten!ial fragmentate. De asemenea, nodurile includ mecanisme de auto-verificare pentru a protec!ie mpotriva coruperii sistemului de fi"iere.

Performan"# Anumite aplica!ii, cum ar fi bazele de date sau con!inut de streaming, presupun ca fi"ierele s# fie stocate n blocuri contigue (pentru a optimiza citirea datelor). De"i extent-urile pot genera segmente de blocuri contigue, o metod# alternativ# este s# se prealoce sec!iuni foarte mari de blocuri contigue de m#rime dorit#. Ext4 implementeaz# aceast# tehnic# prin intermediul unui apel nou de sistem care prealoc# "i ini!ializeaz# un fi"ier de capacitate dat#. Alt# optimizare bazat# pe dimensiunea fi"ierului este alocarea ntrziat# (delayed allocation). Aceast# tehnic# amn# alocarea blocurilor fizice pn# cnd datele trebuie neap#rat scrise pe disc (unele sisteme de fi%iere aloc# blocurile nainte de scrierea datelor pe disc). Ideea este s# se adune ct mai multe date n vederea scrierii lor n blocuri contigue. Iar#"i o optimizare bazat# pe blocuri contigue este repartitorul de blocuri. n ext3, repartitorul de blocuri aloc# cte un bloc o dat#. Cnd sunt necesare mai multe blocuri, este posibil s# g#seasc# date contigue n blocuri ne-contigue. Ext4 repar# acest lucru folosind un repartitor de blocuri care aloc# mai multe blocuri o dat#, de cele mai multe ori contigue. Un alt aspect al aloc#rii mai multor blocuri o dat# este reprezentat de timpul de procesare necesar aloc#rii blocurilor. Alocarea mai multor blocuri o dat# are nevoie de mult mai pu!ine apeluri la repartitorul de blocuri, rezultnd o alocare mai rapid# "i procesare redus#. Fiabilitate Ext4 este un sistem de fi"iere jurnalizat. Jurnalizarea este procesul de consemnare ntr-un jurnal (care este un jurnal circular aflat ntr-o regiune de disc contigu#) a modific#rilor ap#rute n sistemul de fi"iere. Modific#rile propriu-zise la spa!iul fizic de stocare sunt apoi citite din jurnal, proces mai rezistent la erori chiar %i atunci cnd sistemul se defecteaz# sau se pierde alimentarea cu energie electric# n timpul opera!iei de actualizare. Rezultatul este o reducere a "anselor de corupere a sistemului de fi"iere. Dar chiar "i cu jurnalizare, corup!ia datelor este posibil# dac# n jurnal apar intr#ri eronate. Pentru a preveni acest lucru, ext4 protejeaz# jurnalul cu o sum# de control. De"i ext4 ncorporeaz# func!ionalit#!i pentru reducerea fragment#rii din cadrul sistemului de fi"iere (extent-uri pentru alocarea secven!ial# a blocurilor), este posibil s# apar# o anumit# fragmentare dac# sistemul de fi"iere este folosit pentru o perioad# ndelungat# de timp. Din acest motiv, exist# o unealt# de defragmentare online (e4defrag) capabil# s# defragmenteze att sistemul de fi"iere ct "i fi"iere individuale. Utilitarul de defragmentare n timpul func!ion#rii este o unealt# simpl# ce copiaz# fi"iere ntr-un nou inode care adreseaz# extent-uri contigue. Cel#lalt aspect al defragment#rii online este reducerea timpului necesar verific#rii sistemului de fi%iere (e2fsck). n acest sens, ext4 marcheaz# grupurile

de blocuri nefolosite din cadrul tabelei de inoduri pentru a permite procesului de verificare s# le ignore complet.

8. Fi$iere de dispozitiv. Filosofia totul este un fi$ier

Sistemele de operare nrudite cu Unix se bazeaz# pe no!iunea de fi"ier. Fi%ierul este privit ca un container pentru informa!ia structurat# sub forma unei secven!e de octe!i. Un fi"ier este o secven!# de m octe!i B0, B1, B2 ... Bk .... Bm-1.

Toate dispozitivele, pl#cile de re!ea, discurile, terminalele, sunt reprezentate ca fi"iere, "i toate opera!iile de citire "i scriere sunt realizate prin citirea "i scrierea fi"ierelor corespunz#toare. n concordan!# cu aceast# abordare, dispozitivele de intrare-ie%ire sunt tratate ca fi"iere speciale numite fi"iere de dispozitiv. Astfel, acela"i apel de sistem folosit la interac!iunea cu fi"ierele obi"nuite pot fi folosite "i pentru interac!iunea direct# cu dispozitivele I/O. Amndou# sunt manipulate cu exact acelea"i func!ii de bibliotec#. De exemplu, aceea%i func$ie de scriere10 poate fi folosit# la scrierea datelor ntr-un fi"ier obi"nuit sau la trimiterea lor la imprimant# prin scrierea n fi"ierul de dispozitiv /dev/lp0. Un fi"ier de dispozitiv este modul n care un program care ruleaz# n spa!iul utilizator poate accesa o anumit# func!ie sau dispozitiv hardware. De exemplu, fi"ierul de dispozitiv /dev/hda este folosit pentru reprezentarea primului disc IDE din sistem. Numele hda corespunde att num#rului major ct "i celui minor, ambele folosite de kernel ca s# determine cu ce dispozitiv hardware comunic#.
10

apelul de sistem write()

Modalit#!ile prin care sunt interschimbate datele ntre periferice "i sistem pot fi clasificate n dou# categorii. Unele dispozitive sunt mai potrivite pentru schimburi orientate pe caractere, deoarece volumele de date transferate sunt mici. Altele sunt potrivite pentru transferuri n blocuri de date, fiecare bloc avnd un num#r fix de octe!i. Kernelul face distinc!ia ntre dispozitivele caracter "i dispozitivele bloc. Prima categorie include consolele, n timp ce a doua include discurile, unit#!ile CD "i altele asem#n#toare. Un fi"ier de dispozitiv este de obicei un fi"ier real stocat n sistemul de fi"iere. Totu%i, inodul s#u nu are nevoie s# includ# pointeri c#tre blocuri de date de pe disc deoarece acestea nu exist#. n loc de aceasta, un inod trebuie s# includ# un identificator al dispozitivului hardware, corespunz#tor fi"ierului de dispozitiv caracter sau bloc. Urm#toarea comand# listeaz# unele fi"iere din directorul /dev. root@e-chimie:~# ls -l /dev/sd{a,c} /dev/ttyS{0,1}
brw-rw---brw-rw---crw-rw---crw-rw---1 1 1 1 root root root root disk disk dialout dialout 8, 0 2012-06-07 09:17 8, 32 2012-12-14 06:43 4, 64 2012-12-15 17:16 4, 65 2012-12-15 17:16 /dev/sda /dev/sdc /dev/ttyS0 /dev/ttyS1

n mare, rezultatul este asem#n#tor cu cel al fi"ierelor regulate, n special permisiunile de acces. Totu"i se observ# "i cteva diferen!e: litera care precede permisiunile de acces este b sau c, n func$ie de tipul de dispoziv, bloc sau caracter. n loc de dimensiunea fi"ierului, sunt date dou# numere. Acestea reprezint# num#rul major "i num#rul minor. mpreun# formeaz# un num#r unic care permite kernelului s# identifice driverul de dispozitiv corespunz#tor. Kernelul identific# driverul corespunz#tor dispozitivului hardware prin numerele major "i minor. Motivul pentru care sunt folosite dou# numere este legat de structura general# a driverului de dispozitiv. Pe de o parte, sistemul poate include mai multe dispozitive de acela"i tip care sunt gestionare de un singur driver de dispozitiv (nu ar avea sens s# ncarci acela"i cod n kernel de mai multe ori). Pe de alt# parte, dispozitivele din aceea"i categorie pot fi combinate astfel nct ele pot fi inserate logic n structurile de date ale kernelului. Num#rul major identific# tipul de dispozitiv, a"adar driverul de dispozitiv nsu"i. Toate fi"ierele de dispozitiv cu acela"i num#r major "i de acela"i tip partajeaz# acela"i set de opera!iuni cu fi"ierele, deoarece ele sunt gestionate de acela"i driver de dispozitiv. De exemplu, a"a cum am vedem n exemplul anterior, num#rul major pentru primul controler SATA, pe care se afl# discul sda, este 8. Num#rul minor identific# un anumit dispozitiv din grupul de dispozitive care partajeaz# acela"i num#r major. n exemplu, dispozitivele individuale ale driverului (discul sda "i sdc) sunt identificate prin numere minore diferite; 0 pentru sda "i 32 pentru sdc. De ce este

o diferen!# att de mare ntre cele dou# numere minore. S# ne uit#m la fi"ierele care se refer# la discul sda din /dev. root@host:~# ls -l /dev/sda*
brw-rw---- 1 root disk 8, 0 2012-06-07 09:17 /dev/sda brw-rw---- 1 root disk 8, 1 2012-06-07 09:17 /dev/sda1 brw-rw---- 1 root disk 8, 2 2012-06-07 09:17 /dev/sda2

Parti!iile individuale ale unui disc pot fi adresate prin intermediul fi"ierelor de dispozitiv /dev/sda1, /dev/sda2, ".a.m.d, n timp ce /dev/sda se refer# la ntreg discul. Numerele minore consecutive sunt folosite la identificarea parti!iilor, astfel nct driverul este capabil s# disting# ntre diferitele versiuni. Un singur driver poate rezerva mai mult de un num#r major. Dac# n sistem sunt prezente dou# magistrale SATA, al doilea canal SATA prime"te un num#r major diferit de primul canal. Aceast# reprezentare este valabil# "i pentru dispozitive caracter. De exemplu, num#rul major pentru driverul interfe!elor seriale este 4, iar interfa!a individual# are un num#r minor de la 64 n sus. Totodat#, re!ine!i c# dispozitivele bloc "i caracter au numerotare independent#, astfel, dispozitivul bloc (3,0) este diferit de dispozitivul caracter (3,0).

Alocarea numerelor de dispozitiv - NU SE CERE LA TEST


n Linux, numerele majore sunt standardizate de organiza!ia LANANA (Linux Assigned Name And Numbers Authority, www.lanana.org). Sursele kernelului includ fi"ierul Documentation/devices.txt cu datele actualizate la momentul apari!iei kernelului respectiv. De asemenea, o distribu!ie de linux include "i ni"te constante preprocesor definite n /usr/include/ linux/major.h. Numerele din acest fi"ier sunt sincronizate cu lista LANANA, dar nu toate numerele atribuite de LANANA au atribuite simboluri preprocesor. De asemenea numerele minore nu sunt alocate static deoarece ele pot fi alocate dinamic, la fel ca "i crearea fi"ierelor dispozitiv. Alocarea dinamic# a numerelor de dispozitiv Fiecare driver de dispozitiv specific# n etapa de nregistrare n sistem intervalul de numere minore pe care l poate gestiona. Kernelul aloc# unul sau un interval de numere "i le atribuie driverului respectiv. n consecin!#, driverele de dispozitiv pentru noi dispozitive hardware nu mai au nevoie de numere de dispozitiv specificate n registrul oficial. Ele pot folosi orice numere sunt

disponibile n prezent n sistem. n acest caz ns#, fi"ierul de dispozitiv nu poate fi creeat pentru totdeauna, ci trebuie creat imediat dup# ini!ializarea driverului de dispozitiv cu numerele majore "i minore corespunz#toare. De aceea, trebuie s# existe o modalitate standard de export a numerelor de dispozitiv folosite de fiecare driver c#tre aplica!iile din spa!iul utilizator. Solu!ia a fost ca numerele majore "i minore s# fie stocate n atributele (fi"ierele) dev con!inute n subdirectoarele din /sys/class.

1.1.5. Crearea dinamic" a fi#ierelor dispozitiv


Tradi!ional, fi"ierele dispozitiv erau create static n directorul /dev. Odat# cu cre"terea num#rului de dispozitive recunoscute de Linux, num#rul acestora a crescut semnificativ n jur de 18000 de intr#ri pentru o distribu!ie tipic#. Majoritatea acestor nregistr#ri sunt inutile pentru un sistem obi"nuit, care con!ine o mn# de dispozitive. n prezent, toate distribu!iile folosesc un set de programe utilizator cunoscute sub numele de unelte udev. Un daemon care permite crearea dinamic# a fi"ierelor dispozitiv din spa!iul utilizator, numit udevd, gestioneaz# con!inutul directorului /dev. De fiecare dat# cnd kernelul detecteaz# un dispozitiv, creeaz# un obiect kernel pe care l export# n spa!iul utilizator cu ajutorul sistemului de fi"iere sysfs. La pornirea sistemului directorul /dev este golit "i udevd scaneaz# subdirectoarele din /sys/class n c#utarea fi"ierelor dev. Pentru fiecare fi"ier dev, care reprezint# o combina!ie de numere majore "i minore pentru un dispozitiv logic suportat de kernel, daemonul creeaz# un fi"ier de dispozitiv corespunz#tor n /dev. De asemenea, daemonul atribuie nume de fi"ier "i creeaz# leg#turi simbolice n func!ie de un fi"ier de configura!ie, n a"a fel nct s# semene cu schema de nume tradi!ional# Unix pentru fi"ierele dispozitiv. n cele din urm#, /dev va con!ine fi"ierele de dispozitiv ale tuturor dispozitivelor prezente n sistem "i recunoscute de kernel, "i nimic mai mult. Adesea, un fi"ier de dispozitiv este creeat dup# ce sistemul a fost ini!ializat. Acest lucru se ntmpl# fie atunci cnd a fost nc#rcat un modul ce con!ine un driver de dispozitiv pentru un dispozitiv nc# necunoscut, fie cnd a fost conectat n sistem un dispozitiv hot-pluggable (de exemplu, un periferic USB). Deoarece Linux suport# conectarea la cald a dispozitivelor (device hotplugging), udevd poate creea automat fi"ierul de dispozitiv corespunz#tor. Dup# detec!ia "i ini!ializarea dispozitivului de c#tre kernel (vede!i dmesg) "i exportul informa!iei n directorul /sys, kernelul trimite un semnal (uevent) care este recep!ionat de daemonul udevd. Daemonul udevd adun# informa!ia disponibil# "i verific# fi"ierele de configura!ie din /etc/udev/rules.d/ "i /lib/udev/ rules.d/ pentru a afla regulile de creeare a leg#turilor simbolice n /dev, permisiunile care trebuie setate, programele care trebuie rulate "i alte cteva variabile cu privire la dispozitiv (man udev).

De la introducerea mecanismului udev, /dev nu se mai afl# pe un sistem de fi"iere aflat pe disc, ci folose"te devtmpfs o varia!ie a sistemului de fi"iere din RAM, ramfs. Acest lucru nseamn# c# fi"ierele de dispozitiv nu persist# la restart. Dac# un dispozitiv este deconectat n timpul n care sistemul este oprit, fi"ierul dispozitiv corespunz#tor nu va mai fi n prezent n /dev.

1.1.6. Crearea fi#ierelor dispozitiv


Comanda mknod este utilizat# la crearea fi"ierelor de dispozitiv. Prime"te ca parametri numele fi"ierului de dispozitiv, tipul s#u, num#rul major "i minor. De obicei, un fi"ier de dispozitiv este asociat cu un dispozitiv hardware (de exemplu, un disc IDE, /dev/hda) sau o parte fizic# sau logic# dintr-un dispozitiv hardware (cum ar fi o parti!ie de disc de exemplu, /dev/hda2). n unele cazuri ns#, un fi"ier de dispozitiv nu este asociat cu un dispozitiv hardware real, ci reprezint# un dispozitiv logic fictiv. De exemplu, /dev/null este un fi"ier de dispozitiv corespunz#tor unei g#uri negre, toate datele scrise n el sunt pur "i simplu eliminate (desc#rcate) "i fi"ierul ntotdeauna apare ca fiind gol. Nume /dev/hda /dev/hda2 /dev/ttyp0 /dev/null /dev/zero /dev/random Tip Bloc Bloc Char Char Char Char Major Minor Descriere 3 0 Primul disc IDE 3 2 A doua parti!ie de pe discul IDE primar 3 0 Terminal 1 3 Dispozitivul NULL 1 5 Sursa pentru caractere NULL 1 8 Generator nedeterministic de numere aleatoare

Nu se cere la test Scrierea unor reguli udev personalizate Pentru udev (User-space DEVice management), modul de lucru "i de creeare a diferitelor noduri n /dev este dictat de anumite fi"iere de configura!ie. Sunt trei tipuri principale de fi"iere de configura!ie udev: fi"ierul de configura!ie principal, fi"ierele de permisiuni udev "i fi"ierele de reguli udev. Principalul fi"ier de configura!ie, /etc/udev/udev.conf, specific# directoarele care con!in fi"ierele de permisiuni "i reguli, unde se afl# baza de date udev (o simpl# baz# de date n memorie care con!ine toat# informa!ia curent# cu privire la dispozitive precum "i regulile de denumire a dispozitivelor) "i unde creeaz# udev nodurile dispozitiv. Fi"ierele de permisiuni specific# permisiunile ce trebuie setate

pentru un anumit tip de nod dispozitiv. Fi"ierele de reguli udev sunt folosite de udev pentru a determina numele de dispozitiv folosite pentru dispozitivele prezente n sistem. Unul din scopurile udev este s# dea utilizatorilor posibilitatea s# numeasc# dispozitivele n func!ie de anumite politici. Pentru a determina numele unui dispozitiv dat, udev pune la dispozi!ia utilizatorului o procedur# n cinci pa"i. Ace"ti pa"i sunt consulta!i n ordine "i dac# numele dispozitivului poate fi determinat la oricare din ele, acel nume este folosit. Pa"ii sunt urm#torii: 1. eticheta sau num#rul serial (LABEL) 2. num#rul de magistral# al dispozitivului (NUMBER) 3. topologia pe magistral# (TOPOLOGY) 4. numele nlocuit (REPLACE) 5. numele din kernel. Primul pas verific# dac# dispozitivul ad#ugat n sistem are un identificator unic, n func!ie de tipul dispozitivului. De exemplu, pentru dispozitive USB, se verific# existen!a num#rului serial USB; pentru dispozitive SCSI, se verific# UUID-ul; pentru dispozitive bloc, eticheta sistemului de fi"iere (filesystem label). Dac# acestea sunt egale cu un identificator furnizat de utilizator ntr-un fi"ier de configura!ie, pentru dispozitiv este folosit numele specificat n fi"ierul de configura!ie. UUID (Universally Unique Identifier) sau identificatorul unic universal este folosit la identificarea unic# a obiectelor printr-un $ir de 128 de bi!i. n al doilea pas, identificatorul se verific# pe baza num#rului de magistral# al dispozitivului. Pentru majoritatea magistralelor, acest num#r nu se modific# n timp, "i pentru toate numerele de magistral# exist# garan!ia c# sunt unice la un anumit moment n sistem. De exemplu, numerele de magistral# PCI se modific# foarte rar (numai actualiz#ri de BIOS sau controlere PCI hotplug pot renumerota num#rul magistralei PCI la urm#torul restart). Iar#"i, dac# num#rul de magistral# corespunde identificatorului specificat de utilizator, numele rezultat este atribuit dispozitivului. n al treilea pas se verific# pozi!ia dispozitivului pe magistral#. De exemplu, un dispozitiv USB poate fi descris ca aflndu-se n al 3-lea port al hubului ata"at la primul port al hub-ului r#d#cin#. Aceast# topologie nu va fi modificat# dect dac# utilizatorul mut# fizic dispozitivul "i este independent# de orice modificare a numerot#rii magistralei ce poate ap#rea ntre restart#rile sistemului. Dac# pozi!ia topologic# pe magistral# corespunde pozi!iei specificate de utilizator, se atribuie dispozitivului numele specificat. Al patrulea pas este o simpl# nlocuire de "iruri. Dac# numele kernel pentru un dispozitiv este egal cu numele specificat n fi"ierul de configura!ie, noul nume va fi utilizat n locul acestuia. Acest lucru este util n cazul dispozitivelor pentru care utilizatorul "tie c# ntotdeauna vor avea acela"i nume n kernel, dar doresc s# l numeasc# altfel.

Ultimul pas reprezint# pasul implicit. Dac# niciunul din pa"ii anteriori nu au putut determina un nume pentru dispozitiv, va fi folosit numele kernel. Pentru majoritatea dispozitivelor din sistem acesta este numele care va fi folosit. Exemplu:
# USB Epson printer to be called lp_epson LABEL, BUS="usb", serial="HXOLL0012202323480", NAME="lp_epson" # USB HP printer to be called lp_hp, LABEL, BUS="usb", serial="W09090207101241330", NAME="lp_hp" # sound card with PCI bus id 00:0b.0 to be the first sound card NUMBER, BUS="pci", id="00:0b.0", NAME="dsp" # sound card with PCI bus id 00:07.1 to be the second sound card NUMBER, BUS="pci", id="00:07.1", NAME="dsp1" # USB mouse plugged into the third port of the first hub to be # called mouse0 TOPOLOGY, BUS="usb", place="1.3", NAME="mouse0" # USB tablet plugged into the second port of the second hub to be # called mouse1 TOPOLOGY, BUS="usb", place="2.2", NAME="mouse1" # ttyUSB1 should always be called visor REPLACE, KERNEL="ttyUSB1", NAME="visor"

Fiecare linie din fi"ierele de reguli define"te modul n care un atribut de dispozitiv specific este mapat la un fi"ier de dispozitiv. Dac# toate cheile specificate ntr-o regul# se potrivesc dispozitivului g#sit, este creat fi"ierul dispozitiv specificat. Reguli Forma de baz# pentru o regul# udev este key, [key, ...] name [, symlink] Fiecare cheie este un cmp care trebuie s# se potriveasc# cu un dispozitiv specific. Aceste cmpuri sunt specificate sub forma tip=valoare. Diferitele tipuri de cmp sunt: BUS. Specific# (matches) tipul magistralei la care trebuie s# fie conectat dispozitivul. Valori des ntlnite sunt usb, scsi "i ide. KERNEL. Specific# numele de dispozitiv implicit atribuit dispozitivului de

c#tre kernel. Exemplele includ hda, ttyUSB0 "i lp0. ATTRS. Specific# un atribut sysfs pentru dispozitiv, sau un atribut sysfs al unuia din dispozitivele p#rinte. SUBSYSTEM. Specific# numele subsistemului kernel pentru dispozitiv. Acesta este de obicei acela"i cu valoarea BUS dar cteodat# poate fi diferit#. Dintre exemple enumer#m usb "i scsi. DRIVER. Specific# numele driverului care controleaz# dispozitivul. Exemple, orinoco "i usb-storage. ID. Specific# num#rul de dispozitiv de pe magistrala la care este conectat. Exemple, identificatorul magistralei PCI (PCI bus id) sau identificatorul USB pentru dispozitiv. PLACE. Specific# pozi!ia topologic# a dispozitivului pe magistrala la care este ata"at dispozitivul. De obicei acesta este valid numai pentru dispozitive USB, deoarece acestea precizeaz# topologia lor n cadrul magistralei USB. SYSFS {filename}. Udev cite"te fi"ierul sysfs cu numele filename din directorul dispozitivului "i ncearc# s# identifice (match) valoarea citit# din el. Acest lucru este util n determinarea produc#torului, etichetei, num#rului serial, UUID sau eticheta de sistem a unui dispozitiv. Orice se afl# n arborele sysfs poate fi comparat. Aceea"i regul# poate fi verificat# n pn# la cinci fi"iere sysfs diferite, "i orice num#r de caractere spa!iu de la sfr"itul fi"ierelor sysfs este ignorat. PROGRAM. Permite udev s# apeleze orice program extern "i s# i foloseasc# rezultatele la numirea unui dispozitiv. Aceast# cheie este valid# dac# programul extern se ncheie cu succes. Cnd programul este apelat, toate variabilele mediului de lucru pasate la udev sunt de asemenea disponibile programului pentru a le putea evalua. &irul returnat de program poate fi de asemenea comparat cu cheia RESULT. RESULT. Folosit la identificarea "irului returnat de ultimul apel PROGRAM. Aceast# cheie poate fi folosit# n orice regul# ulterioar#, dup# un apel PROGRAM, permi!nd diferitelor reguli s# compare un apel PROGRAM precedent.

Dac# toate cheile specificate sunt valide ntr-o regul#, atunci urm#toarele valori specific# ce trebuie s# fac# udev cu dispozitivul:

NAME. Acesta este numele nodului de dispozitiv pe care trebuie s# l creeze udev. SYMLINK. Acesta este numele unei leg#turi simbolice create s# indice napoi la NAME-ul specificat. Pot fi specificate mai multe leg#turi simbolice, separate printr-un caracter spa!iu. Dac# ntr-o regul# exist# un cmp SYMLINK f#r# un cmp NAME, regula nu este aplicat# imediat. n schimb, valoarea leg#turii simbolice este ad#ugat# listei de leg#turi simbolice n vederea oric#rei reguli viitoare ce ar putea creea un nod de dispozitiv. Acest lucru este util cnd se dore"te ad#ugarea unei leg#turi simbolice specificate de utilizator la un nod dispozitiv care este specificat mai trziu ntr-un fi"ier de reguli diferit. Substitu"ia !irurilor

n fi"ierele de reguli pot fi folosite operatori de substitu!ie asem#n#tori celor printf. Cei mai comuni operatori sunt %k "i %n. Operatorul %k reprezint# numele kernel pentru dispozitiv. De exemplu, sda3 pentru un dispozitiv care apare la /dev/sda3. Operatorul %n reprezint# num#rul kernel pentru dispozitiv. De exemplu, 3 nseamn# /dev/sda3. Pentru o func!ionalitate mai avansat#, udev pune la dispozi!ie "i al!i operatori de substitu!ie. Consulta!i pagina de manual udev. Exist# "i o sintax# alternativ# pentru ace"ti operatori - $kernel "i $number pentru exemplele de mai sus. Din acest motiv, dac# dori!i s# verifica!i egalitatea literei % ntr-o regul#, trebuie s# scrie!i %%, iar dac# dori!i s# verifica!i existen!a literei $ trebuie s# scrie!i $$. Udev recunoa"te "i cteva expresii regulate: * - orice caracter, de zero sau mai multe ori. ? - orice caracter, exact o singur# dat#. [] - orice caracter specificat ntre paranteze, sunt permise "i intervale. Prin conven!ie, numele fi"ierelor de reguli udev ncep cu un num#r urmat de un %ir de caractere. Num#rul determin# sistemul de fi"iere s# listeze automat regulile n ordinea de la mai mic la mai mare f#r# ca udev s# aplice vreo logic# de ordonare. Regulile cu numere mai mici sunt evaluate naintea celor cu numere mai mari, astfel regula 15-early-rule.rules va fi evaluat# naintea 45-setattributes.rules. n Ubuntu, fi"ierele de reguli udev se g#sesc n dou# directoare: /lib/udev/rules.d/ "i /etc/udev/rules.d/. Primul specific# reguli globale, la nivel de sistem, furnizate de distribu!ie. Al doilea specific# regulile locale, create de utilizator. A"adar, administratorul de sistem trebuie s# creeze reguli proprii n /etc/udev/rules.d/. Cteva comenzi utile:

root@host:~# udevadm info --environment root@host:~# udevadm info -a -p $DEVICE Exemple: http://www.weather-watch.com/smf/index.php?topic=39257.0 # WH-1081 Weather Station ACTION!="add|change", GOTO="weather_station_end" SUBSYSTEM=="usb", ATTRS{idVendor}=="1941", ATTRS{idProduct}=="8021", GROUP="weather" LABEL="weather_station_end" ACTION!= nseamn# c# dac# ac!iunea curent# udev nu este add sau change, mergi la sfr"itul fi"ierului cu alte cuvinte, nu ncerca s# folose"ti aceste reguli. Restul cheilor verific# (folosind operatorul ==) adev#rul valorilor descoperite cu udevadm info.

9. Ini%ializarea sistemului de operare

BIOS
Firmware-ul reprezint# o colec!ie de programe distribuit# sub form# binar# nc#rcat# ntr-o memorie persistent# de c#tre produc#torul sistemului de calcul. Pentru arhitecturile x86, setul de programe este stocat ntr-o memorie ROM de pe placa de baz#. Deoarece con$ine "i cteva proceduri de nivel inferior folosite de sistemele de operare n timpul ini!ializ#rii sistemului la gestionarea dispozitivelor, acest firmware poart# numele de BIOS (Basic Input Output System). Al#turi de memoria ROM este prezent# %i o memorie nevolatil# de mici dimensiuni "i consum redus de energie (CMOS) n care utilizatorul are posibilitatea s# salveze c!iva parametri de func!ionare a calculatorului. Aceast# memorie CMOS este alimentat# prin intermediul unei baterii. Atunci cnd bateria este scoas#, op$iunile modificate se pierd %i BIOS-ul revine la configura$ia implicit#.

1.1.7. Procesul de ini%ializare a sistemului


BIOS-ul folose"te procesorul n modul real (procesorul emuleaz# un 8088), deoarece este singurul mod de func!ionare disponibil la pornirea calculatorului. Procedura de ini!ializare a BIOS-ului efectueaz# n principal urm#toarele patru opera!ii: Verific# componentele hardware ale sistemului. n acest sens, execut# o serie de teste asupra dispozitivelor pentru a stabili ce dispozitive sunt prezente n sistem "i dac# acestea func!ioneaz# corespunz#tor. Aceast# etap# se nume"te POST (Power-On Self Test). Sunt verificate placa de baz#, memoria, controlerele de disc, adaptorul video, tastatura "i alte componente ale sistemului. Testele efectuate pot genera erori fatale, caz n care BIOS-ul genereaz# mesaje de eroare scrise sau semnale sonore. n cazul func!ion#rii corecte, rezultatele POST sunt scrise n memorie sub forma unui tabel. n prezent, sistemele x86 folosesc standardul ACPI (Advanced Configuration and Power Interface). Codul de ini!ializare dintrun BIOS compatibil ACPI creaz# cteva tabele cu informa$ii despre dispozitivele prezente n sistem. Aceste tabele au un format independent de produc#tor "i sunt citite de sistemul de operare pentru a nv#!a cum s# gestioneze dispozitivele. Ini!ializeaz# dispozitivele. Chiar alimentat cu energie, un dispozitiv PCI r#mne inactiv. Cu alte cuvinte, dispozitivul r#spunde numai la tranzac!ii

de configuare. La pornire, dispozitivul PCI nu dispune de loca!ii de memorie "i porturi I/O mapate n spa!iul de adrese. La fel, orice alt# func!ionalitate specific# dispozitivului, cum ar fi raportarea ntreruperii, este de asemenea dezactivat#. BIOS-ul cite"te "i scrie registrele din spa!iul de configura!ie al fiec#rui dispozitiv n vederea aloc#rii loca!iilor de memorie "i regiunilor I/O necesare. Aceast# etap# este crucial# pentru arhitecturile moderne bazate pe PCI, deoarece garanteaz# faptul c# toate dispozitivele opereaz# f#r# conflicte pe liniie de ntrerupere (IRQ) "i porturi I/O. La sfr"itul acestei etape este generat un tabel cu toate dispozitivele PCI. Caut# un sistem de operare pe care s#-l lanseze n execu!ie. n func!ie de set#rile BIOS, procedura de ini!ializare poate ncerca s# acceseze (de o manier# predefinit#, customizabil#) primul sector al fiec#rei unit#!i de disc rigid sau flexibil din sistem, pentru a verifica dac# este bootabil. Sectorul bootabil se caracterizeaz# prin faptul c# ultimii doi octe$i sunt 0xAA55. Imediat ce a g#sit un sector bootabil, BIOS-ul copiaz# con!inutul zonei sale executabile n RAM, ncepnd cu adresa fizic# 0x00007c00. Apoi sare la acea adres# "i execut# codul tocmai nc#rcat.

1.1.8. Limit"rile BIOS-ului


BIOS-ul a ap#rut n primul IBM PC din 1981 "i a fost mbun#t#!it de-a lungul timpului pentru a face fa!# noilor cerin!e. Actualizarea "i mbog#!irea acestuia cu func!ii noi este restric!ionat# de cteva limit#ri arhitecturale semnificative. O problem# major# o reprezint# faptul c# BIOS-ul ruleaz# n modul de lucru de 16 bi!i al procesorului, cauznd urm#toarele limit#ri de func!ionalitate: poate fi adresat numai 1 MB de memorie; n consecin$#, o spa!iul de memorie disponibil pentru ROM-urile cu op!iuni PCI este limitat, restrngnd att num#rul de adaptoare ce pot fi instalate (aproximativ patru) ct "i ct# func!ionalitate pot acestea ngloba; o spa!iul de memorie disponibil pentru func!ionalit#!i avansate este limitat; imaginea de firmware este monolitic# "i ne-modular#. Pe de alt# parte, nc# de la origine, BIOS-ul nu a fost proiectat pentru tehnologii folosite n servere, cum ar fi mecanismele prin care se ob$ine scalabilitatea sistemelor: managementul "i plafonarea consumului de energie, consol# accesat# de la distan!# sau posibilitatea managementului de sistem.

UEFI
n sistemele din prezent, BIOS-ul este nlocuit cu firmware-uri compatibile cu specifica!iile UEFI (Unified Extensible Firmware Interface). La fel ca BIOS-ul, acestea sunt responsabile cu ini!ializarea componentelor hardware esen!iale (memorie, procesoare, magistrale PCI), crearea func!iilor "i structurilor de date necesare sistemului de operare, ini!ializarea dispozitivelor de boot "i nc#rcarea boot loader-ului (nc#rc#torului de sistem). Pentru a boota, UEFI are nevoie de prezen!a unei parti!ii de sistem EFI (ESP EFI System Partition). ESP trebuie s# con!in# un sistem de fi"iere FAT32. Standardul EFI nu specific# o dimensiune, dar este suficient# o parti!ie cu capacitatea ntre 100 MiB "i 500 MiB. UEFI define"te o interfa!# standard ntre sistemul de operare, firmware-ul platformei "i dispozitivele externe. Pune la dispozi!ie func$ionalit#$i mult mai eficiente dect cele BIOS. Din mediul de lucru UEFI (a%adar nainte de ini!ializarea sistemului) pot fi lansate n execu$ie: nc#rc#torul de sistem al (boot loader-ul) sistemului de operare. Acesta trebuie s# fie o aplica!ie compatibil# UEFI. Aplica!ii UEFI. Fi"iere care con!in cod ma"in# specific unei arhitecturi sau cod octet EFI ce poate fi nc#rcat n memorie "i invocat. Exemple de astfel de aplica!ii sunt interpretorul de comenzi UEFI (mediu de lucru n linie de comand#) %i diverse utilitare.

1.1.9. Procesul de ini%ializare a sistemului


Deschidem discu$ia cu o observa$ie: un sistem de operare bootabil cu BIOS poate fi instalat numai pe o parti!ie MBR, iar un sistem de operare bootabil EFI poate fi instalat numai pe o parti!ie GPT. Parti!iile MBR "i GPT nu pot coexista pe acela"i volum. A"adar, dac# parti!ia selectat# este MBR, atunci sistemul de operare este bootat prin BIOS, dac# este GPT, este bootat prin EFI. nainte de a ncerca s# se instaleze un sistem de operare compatibil UEFI pe un disc deja formatat cu MBR, trebuie s# se "tearg# toate parti!iile de pe disc sau discul s# fie reformatat cu GPT. Procesul de boot UEFI difer# semnificativ de cel BIOS. n loc s# booteze dispozitive, sistemul booteaz# anumite !inte din c#i de directoare de pe dispozitive fizice sau logice, astfel nct dispozitivele pot con!ine un num#r de !inte de boot (instan!e de sistem de operare) teoretic nelimitat. Specifica!iile UEFI extind procesul de boot cu cteva caracteristici noi. Caracteristicile cheie din UEFI includ abilitatea utilizatorului de a crea op!iuni de boot specifice, posibilitatea asocierii unor parametrii adi!ionali la boot loader, atribuirea unor nume unice (de exemplu, Kernelul recompilat) "i gestionarea mai multor instan!e de sisteme de operare pe un singur dispozitiv de boot. Urm#torul tabel compar# procesele de boot "i eviden!iaz# cteva diferen!e ntre bootarea BIOS "i bootarea UEFI.

Procesul de ini"ializare BIOS Procesul de ini"ializare UEFI ncarc# n memorie codul executabil din Execut# un boot loader din parti!ia UEFI. MBR %i l lanseaz# n execu$ie. Un singur MBR per dispozitiv de boot. Pe un singur dispozitiv de boot pot exista mai multe boot loadere. Op!iunile sunt limitate la categorii de Utilizatorul poate defini op!iuni de boot genul unit#!ilor de CD sau disc rigid. n plus fa!# de categoriile de dispozitive generice. Nu exist# posibilitatea transmiterii unei Utilizatorul sau un agent al sistemului de informa!ii de configurare la MBR sau la operare poate ad#uga parametri la sistemul de operare. op!iunile de boot. Informa!ia cu privire la ordinea de boot Op!iunile de boot "i ordinea lor este este stocat# ntr-o memorie CMOS. stocat# n NVRAM. Pentru un mediu bootabil UEFI (disc sau CD), boot loaderul compatibil UEFI se afl# de obicei n calea \efi\boot\bootx64.efi. Boot loaderul trebuie s# se afle la aceast# loca!ie dac# se dore"te ca firmware-ul s# l booteze automat f#r# a fi nevoie ca utilizatorul s# adauge manual o op!iune de boot n care s# specifice calea unde se afl# binarul boot loaderului. Specifica!ia UEFI 2.4 permite boot managerului UEFI s# caute pe disc, n \efi\boot\bootx64.efi, un boot loader valid UEFI atunci cnd nu este specificat un boot loader n op!iunile de boot. Specifica!iile UEFI anterioare puneau acest lucru la dispozi!ie numai pentru medii de boot externe, cum ar fi stick-uri USB. Observa!ie: Toate mediile de boot UEFI trebuie s# fie formatate FAT32.

1.1.10.

Configura!ia firmware

Sistemele cu BIOS folosesc pentru stocarea configura!iei o memorie CMOS alimentat# de o baterie. Printre problemele asociate cu un astfel de mecanism sunt incluse limit#rile de spa!iu "i faptul c# decodificarea set#rilor se bazeaz# pe map#ri specifice tipului de CMOS. Totodat#, set#rile pot fi actualizate numai dup# ce serverul este alimentat "i ini!ializat. n schimb, pentru stocarea set#rilor, sistemele UEFI pot folosi o strategie cu dou# niveluri de memorie flash. n primul nivel, set#rile sunt stocate ntr-o memorie NVRAM standard, la care codul UEFI are acces direct "i rapid. n al doilea nivel, set#rile sunt modelate (XML), stocate "i gestionate de o aplica!ie de management, cum ar fi IBM IMM (Integrated Management Module), DELL DRAC, HP iLO, n propriul s#u NVRAM. Aceast# strategie permite dezvoltarea de noi func$ionalit#$i, p#strnd n acela"i timp disponibilitatea specific# strategiilor mai simple, cu func!ionalit#!i mai reduse. Cu UEFI set#rile pot fi gestionate, clonate "i restaurate n timp ce sistemele sunt oprite (power off), dar alimentate.

1.1.11.

Interpretorul de comenzi UEFI

Interpretorul de comenzi UEFI este o aplica!ie conform# cu standardele UEFI cu acces direct la hardware, care ncorporeaz# o interfa!# n linie de comand#, un set de API-uri (API Application Programming Interface), comenzi, biblioteci pentru comenzi externe. Interpretorul de comenzi UEFI este destinat pentru func!ii avansate de management "i scripting nainte de ini!ializare. UEFI folose"te o parte din flash pentru a stoca informa!ie persistent# de la boot la boot pentru interpretorul de comenzi UEFI (UEFI shell) "i managerul de boot UEFI. Toate op!iunile de boot v#zute pe ecran n timpul boot#rii sunt salvate n aceast# zon# flash. Variabilele interpretorului de comenzi UEFI "i cele setate de utilizator sunt stocate tot n aceast# zon#. Rolul NVRAM este s# stocheze urm#toarele: informa!ii care ajut# la nc#rcarea unui sistem de operare instalat n sistem. loca!ia pentru driverele EFI prezente n sistem necesare procesului de boot sau pentru managementul sistemului. n interpretorul de comenzi, comanda map folose"te flash-ul pentru a stoca toate dispozitivele cu transfer pe blocuri (block I/O) "i fsX. De fiecare dat# cnd este executat# comanda map -r, memoria NVRAM este actualizat# cu un nou set de informa!ii blk "i fsX. Pentru a verifica con!inutul NVRAM, se poate folosi comanda dmpstore, care va lista fiecare octet din NVRAM. Lista poate fi redirec!ionat# ntr-un fi"ier (dmpstore 1>A nv.txt) "i examinat# cu orice editor de text. Reprezint# o modalitate simpl# de a determina ce se afl# n NVRAM pentru managerul de boot "i interpretorul de comenzi UEFI. Comanda map mapeaz# un sistem de fi"iere la dispozitive "i afi"eaz# aceste map#ri. Un driver UEFI este un program care gestioneaz# un anumit dispozitiv hardware din sistem. Un driver UEFI include "i informa!ii adi!ionale care permit sistemului sau utilizatorului s# identifice anumite atribute ale driverului. Pentru a lista to!i driverii UEFI din sistem, se introduce comanda drivers. Comanda afi"eaz# to!i driverii care respect# specifica!iile UEFI. Urm#torul tabel descrie coloanele. Numele Descriere coloanei DRV Specific# identificatorul driverului. Indic# ce versiune a driverului este nc#rcat#. Dac# versiunea este mai Version mic# de 10H (sau 0FH), driverul este incompatibil cu UEFI. Poate face un apel de sistem folosit n BIOS, ca INT 16 sau INT 10. Specific# dac# driverul este de magistral# sau de dispozitiv. Un semn de TYPE ntrebare nseamn# c# driverul poate fi nc#rcat n tabelul de drivere dar n

CFG

DIAG #D #C driver name image name

prezent nu este folosit de sistem. Specific# dac# driverul include un program de configurare. Dac# driverul de!ine un astfel de program, acesta poate fi invocat folosind comanda drvcfg, care prime"te identificatorul driverului "i controlerul gestionat de driver. Specific# dac# driverul include un program de diagnostic. Dac# da, acesta poate fi invocat prin comanda drvdiag, care prime"te identificatorul driverului "i controlerul pe care l gestioneaz#. Indic# num#rul de dispozitive pe care driverul le gestioneaz# n prezent. Indic# num#rul de dispozitive copil pe care le-a generat driverul. Afi"eaz# "irul extras din driver pentru ca utilizatorul s# identifice mai u"or pentru ce este driverul; poate include "i un num#r de versiune. Numele folosit pentru executabil, la compilarea driverului.

Dac# un driver este activ trebuie s# aib# un num#r de #D "i #C active. Pentru a opri derularea informa!iilor pe ecran se poate folosi comanda drivers -b (acest lucru este valabil pentru toate comenzile). Comanda dh -d (device handlers) afi"eaz# informa!ii cu privire la un driver specific. Cu aceasta putem determina versiunea, numele "i ce controlere gestioneaz# driverul. Exemplu: dh -d 75 (75 este identificatorul driverului). Dat# pentru controlerul gestionat de driver, comanda dh d va afi"a informa!ii suplimentare, cum ar fi driverul care gestioneaz# controlerul "i ce identificator are p#rintele controlerului. Calea de dispozitiv va specifica de asemenea unde este conectat controlerul n sistem (n mod obi"nuit, calea este dat# de Host Bus Bridge, dispozitiv PCI "i num#r de func!ie). Comanda devices afi"eaz# toate dispozitivele din sistem gestionate de drivere UEFI. Pentru a vedea rela!ia dintre controlere, se poate folosi comanda devtree. Aceast# comand# va afi"a ierarhia de controlere. Comanda memmap poate determina cantitatea de memorie din sistem. Aceast# comand# afi"eaz# harta memoriei folosit# de mediul de lucru UEFI, "i mediul de lucru EFI este cel care $ine eviden$a memoriei fizice din sistem "i a modului n care este folosit# n prezent. Ad#ugarea unei op"iuni de bootare pentru CentOS Linux Descriem n continuarea cum poate fi ad#ugat# o intrare n lista de op!iuni de boot pentru CentOS. Putem ad#uga boot loaderul \EFI\redhat\grub.efi din EFI Shell sau din EFI Boot Manager (meniul Boot Option Maintenance). Din EFI Shell se acceseaz# parti!ia de sistem EFI (EFI System Partition), fsX: unde X este num#rul sistemului de fi"iere pentru dispozitivul din care se dore"te s# boot#m Linux. De exemplu, n linia de comand# scriem fs2: pentru a

accesa parti!ia de sistem EFI din sistemul de fi"iere bootabil 2. Promptul liniei de comand# se modific# pentru a reflecta faptul c# sistemul de fi"iere fs2 este n prezent accesat. Calea complet# pentru boot loaderul CentOS este \EFI\redhat\grub.efi. Managementul listei de op!iuni se face cu bcfg. Comanda bcfg include urm#toarele op!iuni de editare a listei: bcfg boot dump afi"eaz# toate op!iunile de bootare; bcfg boot rm # - "terge op!iunea cu num#rul #; bcfg boot mv #a #b mut# op!iunea cu num#rul #a la pozi!ia specificat# de #b; bcfg boot add # file.efi Descriere - adaug# o nou# op!iune de boot pe pozi!ia #. Noua op!iune adreseaz# file.efi "i este listat# cu textul specificat n Descriere. n cazul nostru, ad#ugarea op!iunii se face prin comanda:
bcfg boot add 1 \EFI\redhat\grub.efi CentOS 6.3

nc"rc"torul de sistem (Bootloaderul)


nc#rc#torul de sistem (bootloader) ncarc# sistemul de operare n memorie la pornirea calculatorului. Pe sistemele cu BIOS, atunci cnd utilizatorul apas# butonul de pornire, calculatorul ncepe s# ruleze BIOS-ul. BIOS-ul ncarc# n memorie zona de cod din MBR. Aceasta con$ine o parte din sau nc#rc#torul de sistem complet. Din cauza spa!iului redus de date (446 de octe!i) accesibil BIOS-ului, majoritatea nc#rc#toarelor de sistem scriu n MBR numai o parte a nc#rc#torului de sistem. n acest caz, procesul de ini$ializare a sistemului cuprinde dou# etape. n prima etap#, BIOS-ul ncarc# n memorie aceast# prim# component# a nc#rc#torului de sistem. Prima component# interogheaz# tabela de parti$ii (caut# o parti$ie activ#) n vederea localiz#rii celei de a doua componente a nc#rc#torului de sistem. A doua component# con$ine interfa$a cu utilizatorul %i nc#rc#torul de kernel. Interfe$ele cu utilizatorul pot fi grafice sau n linie de comand#. nc#rc#toarele de sistem pot fi configurate ca principale sau secundare. n cazul nc#rc#toarelor de sistem principale, prima component# a acestora este intalat# n MBR. n cazul nc#rc#toarelor de sistem secundare, prima component# este instalat# pe o parti$ie bootabil# (activ#). n acest ultim caz este nevoie ca n MBR s# fie deja prezent un nc#rc#tor de sistem separat, configurat astfel nct s# predea controlul nc#rc#torului de sistem secundar. n Linux ntlnim de obicei dou# nc#rc#toare de sistem: GRUB Legacy %i GRUB 2.

1.1.12.

Anatomia unui nc"rc"tor de sistem

Figura de mai sus prezint# procesul de ini$ializare a sistemului folosit att de GRUB Legacy ct %i de GRUB 2. BIOS-ul ncarc# primul sector al unui dispozitiv activ %i ncepe s# execute codul pe care l con$ine. n cazul unui disc rigid, acest prim sector este MBR %i con$ine prima component# a nc#rc#torului de sistem (stage 1) %i tabela de parti$ii. Deoarece majoritatea discurilor folosesc un sector de 512 octe$i, codul din prima component# trebuie s# fie mic. GRUB Legacy %i GRUB 2 stocheaz# cod adi$ional n alt# parte a discului. n cazul GRUB Legacy, acest cod adi$ional este cunoscut sub numele de stage 1.5 %i de regul# este plasat ntr-o zon# liber# aflat# imediat dup# MBR (n MBR gap). Rolul acestui cod este s# permit# accesul la fi%ierele de configura$ie din /boot/grub prin intermediul func$iilor implementate de sistemul de fi%iere %i nu prin citirea blocurilor fizice. Mai mult cod, numit stage 2, este stocat n fi%iere n parti$ia de boot Linux (directorul /boot). Etapa a doua ncarc# fi%ierul grub.conf. n acest moment apare interfa$a grafic# GRUB. ntr-un sistem cu mai multe sisteme de operare exist# "i un nc#rc#torul de sistem secundar (de exemplu nc#rc#torul de sistem NTLDR, specific sistemelor Windows), care poate stoca alte fi%iere de configura$ie n alt# parte a discului. Procesul GRUB 2 este similar GRUB Legacy, dar elimin# stage 1.5 %i folose%te o configura$ie modular#, n care codul pentru gestionarea diferitelor tipuri de parti$ii, sisteme de fi%iere %i alte extensii sunt stocate n fi%iere separate - de obicei n /boot/grub. Configura$ia abia descris# poate fi modificat# att pentru GRUB Legacy ct %i GRUB 2. De exemplu, este posibil s# instal#m codul GRUB stage 1 n primul sector al parti$iei de boot Linux %i nu n MBR. n aceste caz, n MBR se afl# un alt nc#rc#tor de sistem care adreseaz# GRUB. Deoarece EFI dispune de un nc#rc#tor de sistem integrat, o astfel de configura$ie este disponibil# pentru GRUB 2 n sistemele cu EFI.

1.1.13.

Avantajele GRUB 2

n viitorul apropiat, majoritatea distribu$iilor vor nlocui GRUB Legacy cu GRUB 2. De%i GRUB Legacy func$ioneaz# foarte bine, principalul motiv al tranzi$iei are leg#tur# cu dezvoltarea nc#rc#torului de sistem. GRUB Legacy con$ine cod considerat de dezvoltatori greu de extins. Pentru ad#ugarea de noi func$ionalit#$i, ace%tia au ales mai degrab# s# rescrie de la zero codul nc#rc#torului de sistem. n ce prive%te administratorii de sistem, GRUB 2 ofer# cteva func$ionalit#$i importante n prezent %i chiar mai importante n viitor. Portabilitate pe mai multe arhitecturi. GRUB Legacy suport# numai sistemele x86 %i x86_64. GRUB 2 suport# %i arhitecturile PowerPC %i SPARC (Scalable Process Architecture). Suport pentru scripturi, localizare "i interna!ionalizare (i18n). GRUB 2 suport# mai multe tipuri de firmware, incluznd BIOS, EFI %i OpenFirmware. GRUB 2 suport# GPT oficial. Oficial, GRUB Legacy recunoa%te numai schema de parti$ionare MBR. Totu%i majoritatea distribu$iilor folosesc versiuni de GRUB Legacy care ncorporeaz# suport GPT. GRUB Legacy nu are suport pentru configura$ii RAID software sau LVM. Acest lucru nseamn# c# sistemul trebuie s# foloseasc# cel pu$in un sistem de fi%iere ntr-o parti$ie standard (sau n configura$ie RAID 1) astfel nct GRUB Legacy s# %i poat# citi fi%ierele de configura$ie. GRUB 2 suport# %i RAID %i LVM nativ, astfel nct sistemul poate fi configurat numai cu parti$ii RAID %i LVM. Pentru citirea fi%ierelor de configura$ie, GRUB trebuie s# recunoasc# sistemul de fi%iere care stocheaz# aceste fi%iere. GRUB Legacy recunoa%te familia Ext, FAT, JFS, ReiserFS %i XFS. Pentru sistemele care ruleaz# numai Linux, sistemele recunoscute de GRUB 2 sunt acelea%i de la GRUB Legacy. Totu%i, GRUB 2 recunoa%te %i sisteme de fi%iere non-Linux, cum ar fi HFS+ (Hierarchical File System Plus), NTFS, ZFS.

S-ar putea să vă placă și