sistemul de fisiere - ingineria sistemelor de...

40
Sistemul de fisiere Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei 1 SISTEMUL DE FISIERE Studenti: Ion Alexandru Nicolae Suliman Hulia Voicu Eduard Robert Profesor coordonator:Stefan Stancescu

Upload: dangtuyen

Post on 19-Feb-2018

248 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

1

SISTEMUL DE FISIERE

Studenti: Ion Alexandru Nicolae

Suliman Hulia

Voicu Eduard Robert

Profesor coordonator:Stefan Stancescu

Page 2: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

2

Cuprins

I. Introducere (Ion Alexandru)

II. Concepte fundamentale (Ion Alexandru)

a. Sistemul de operare Windows

a. Introducere

b. Concepte Fundamentale

c. Comparatie NTFS si FAT

b. Sistemul de operare Linux

III. Functiile principale Win32 Api (Suliman Hulia)

IV. Apelurile pentru sistemul de fisiere in Linux (Suliman Hulia)

a. Descriptori de fisier

b. Apeluri sistem pentru lucrul cu fisiere

c. Functii pentru lucrul cu directoare

V. Ext2 si arhitectura NFS la Linux (Voicu Robert)

a. Implementarea sistemului de fisiere

b. Sistemul de fisiere EXT2

c. NFS: Network File System

i. Arhitectura NFS

ii. Protocoalele NFS

iii. Implementarea NFS

VI. Compresia si criptarea fisierelor NTFS (Ion Alexandru)

a. Introducere criptare

i. Functionare

ii. Caracteristiciile cheilor EFS

iii. Procesul de criptare si decriptare

b. Compresia fisierelor NTFS

i. Compresia NTFS

ii. Starea compresiei

iii. Metode de comprimare

VII. Bibliografie

Page 3: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

3

I. Introducere

[1]”Sistemul de operare reprezinta ansamblul de programe care asigura utilizarea

optima a resurselor fizice si logice ale unui sistem de calcul. El are rolul de a gestiona

functionarea componentelor hardware ale sistemului de calcul, de a coordona si controla

executia programelor si de a permite comunicarea utilizatorului cu sistemul de calcul. Folosirea

hardware-ului unui sistem de calcul ar fi dificila si ineficienta in lipsa unui sistem de operare. Pe

scurt, sistemul de operare este componenta software care coordoneaza si supravegheaza

intreaga activitate a sistemului de calcul si asigura comunicarea utilizatorului cu sistemul de

calcul.”

Resursele[2] unui sistem de prelucrare automata a datelor sunt:

a) Resurse fizice: procesorul central, procesoarele de I/E, memoria interna si

externa, dispozitivele preiferice;

b) Resursele logice: fisierele.

Un sistem de operare este o colectie de programe de control rezidente in memoria

interna sau externa , care asigura:

a) Gestinarea resurselor fizice si logice ale sistemului de calcul;

b) serie de functiuni de asistenta, avand obiectivul de a asigura functionarea

performanta a sistemului.

Programele de control sunt programe care contin instructiuni privilegiate, cum ar fi:

mascarea intreruperilor, protectia memoriei etc. Ele se executa in mod nucleu (master,

supervisor). Programele de control sunt organizate intr-o ierarhie cu doua niveluri[2]:

a) Nivelul fizic, care primeste controlul prin intermediul sistemului de intreruperi

instalat, avand procedure de intrare si iesire din sistemul de operare, procedure

de tratare a intreruperilor etc.

b) Nivelul logic, care cuprinde proceduri pentru alocarea resurselor la procese,

planificarea proceselor pentru executie, comunicarea si sincronizarea proceselor,

etc.

Programele de serviciu nu contin intructiuni privilegiate si se executa in mod

aplicatie(slave, utilizator). Ele contin: editoare de text, compilatoare, editorul de legaturi ,

depanatoare etc.

Page 4: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

4

Sistemul de operare constituie interfata intre utilizator si hardware. Datorita acestui

lucru, interpretorul de comenzi, desi este un program executat la fel ca oricare program

utilizator, este considerat ca facand parte din sistemul de operare.

Termenul de sistem de operare[1] a inceput sa fie folosit o data cu crearea unor

programe de control, care permiteau inlantuirea automata a lucrarilor, multiprogramarea,

proelucrarea conversationala, etc. Sistemele de operare au evoluat in timp, rolul lor crescand

de la o generatie la alta a sistemelor de calcul.

Notiunile fundamentale cu care lucreaza un sistem de operare sunt procesele si

fisierele. Un sistem de operare are in structura sa module de gestionare a proceselor(implicit si

a procesorului), a memoriei, a fisierelor si a dispozitivelor periferice vazute ca fisiere speciale.

Toate aplicatiile computerelui trebuie sa stocheze si sa recupereze informatie. In timp

ce ruleaza un process , poate stoca o cantitate limitata de informatie in interiorul memoriei de

adrese proprie. Totusi, capacitatea de stocare este restrictionata la marimea memoriei de

adrese virtuala. Pentru unele aplicatii aceasta marime este rezonabila dar pentru altele cum ar

fi rezervarile pentru companiile aeriene, online banking si registrele corporatiilor, este mult

prea mica.

O a doua problema cu stocarea informatiei in interiorul spatiilor de adresa de procesare

este faptul ca atunci cand procesul se incheie, informatia se pierde. Pentru multe aplicatii (ex.

Pentru baze de date), informatia trebuie pastrata saptamani , luni sau chiar pentru totdeauna.

Faptul ca dispare in momentul in care se incheie procesul este inacceptabil. Mai mult, nu

trebuie sa dispara in momentul in care calculatorul are un crash si intrerupe procesul.

O a treia problema este necesitatea frecventa ca mai multe procese sa acceseze (parti

din ) informatia in acelasi timp. Daca avem un director de telefon online stocat in interiorul

spatiului adresei unui singur process, doar acel proces are acces la informatie. Felul in care

aceasta problema poate fi rezolvata este de a face informatia in sine independent de orice

proces.

a) Astfel avem trei cerinte esentiale pentru stocarea informatiei pe durata

indelungata:

b) Este necesar sa se poata stoca o cantitate mare de informatii

c) Informatia trebuie sa supravietuiasca incetarii procesului

d) Procese multiple trebuie sa aiba acces simultan la informative.

Discurile magnetice au fost folosite multi ani pentru socarea de durata indelungata.

Casete si discuri oprice sunt folosite ,de asemenea, dar au performanta scazuta. Pentru

Page 5: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

5

moment , este suficient sa consideram un disc ca o secventa liniara in pachete fixe care suporta

doua operatii: scriere si citire. In realitate exista mai mult de doua metode care pot, in principiu,

rezolva problema stocarii pe termen lung.

Insa, aceste metode sunt foarte inconvenabile, in special pe sisteme mari folosite de multe

aplicatii sau chiar multi utilizatori(ex. pe server). O serie de intrebari apar:

a) Cum gasesti informatia?

b) Cum limitezi accesul unui utilizator la datele altuia?

c) Cum recunosti care pachete sunt libere?

d) Etc.

Fisierele[4] sunt unitati logice de informative create prin procesare. Un disc va contine ,

in mod normal, mii sau chiar milioane de informatii independente . Procesele pot citi fisiere

existente si sa creeze unele noi. Informatia stocata in fisiere trebuie sa persiste in sensul de a nu

fii afectate de procesul de creare sau procesul de incheiere. Un fisier ar trebui sa dispara doar

atunci cand utilizatorul il sterge in mod explicit. Desi operatiile de citire si scriere a fisierelor

sunt cele mai des intalnite , exista multe altele.

Fisierele sunt manageriate de sistemul de operare. Felul in care sunt structurate ,

denumite, accesate, utilizate, protejate si implementate sunt punctele importante in designul

unui sistem de operare. Ca intreg, acea parte a sistemului de operare care se ocupa de fisiere

este cunoscut sub numele de sistem de fisiere si acesta este subiectul lucrarii.

Din punctul de vedere al utilizatorului cel mai important aspect al sistemului de fisiere

este felul in care apare, adica, ce constituie acele fisiere, cum sunt numite, cum sunt protejate,

ce operatii sunt premise, si asa mai departe.

1. http://www.lib.ugal.ro/cursuri/Sisteme_Operare/curs/Definitii,compenente,clasificari.html 2. http://www.scritube.com/stiinta/informatica/STRUCTURA-SI-FUNCTIONAREA-UNUI81924.php 3. http://en.wikipedia.org/wiki/Operating_system 4. http://ro.wikipedia.org/wiki/Fi%C8%99ier

Page 6: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

6

II. Concepte fundamentale

Sistemul de operare Windows

1. Introducere

Sistemul de operare Windows suporta cateva timpuri de fisiere de sistem, dintre care

cele mai importante sunt FAT-16, FAT-32, si NTFS[1](NT File System). FAT-16 este vechiul sistem

de fisiere MS-DOS. Utilizeaza discuri de adresa de 16-biti, ceea ce limiteaza marimea partitiilor

pe disc la maximum 2GB. De obicei este utilizat pentru a accesa floppy-discuri, pentru client

care inca le utilizeaza. FAT-32 utilizeaza discuri de adresa de 32 de biti si suporta partitionari ale

discului pana la 2TB. Nu exista securitate in FAT-32, si in ziua de astazi este folosit doar pentru a

transporta date , de exempu, in unitati flash. NTFS este tipul de fisiere de sistem dezvoltat in

special pentru versiunea de NT a Windows-ului. Incepand cu Windows XP a devenit sistemul de

fisiere implicit, instalat de cei mai multi producatori de calculatoare, imbunatatind in mod

evident securitatea si functionalitatea Windows-ului. Sistemul de fisiere NTFS utiizeaza adrese

de disc pe 64 de biti si teoretic poate suporta partitii de disc pana la 264 biti, chiar daca alte

considerente limiteaza la marimi mai mici ale spatiului.

Vom examina sistemul de fisiere NTFS deoarece este un sistem de fisiere modern cu

multe caracteristici interesante si modele inovatoare.

2. Concepte Fundamentale[4]

Numele individiale de fisiere in NTFS sunt limitate la 255 de caractere, iar intreaga cale a

unui fisier este limitata la 32,767 caractere. Numele fisiereleor sunt in Unicode, permitand

utilizatorilor din tari in care nu este folosit alfabetul latin (ex. Grecia, Japonia, India , Rusia), sa

denumeasca fisierele folosind alfabetul lor nativ. NTFS suporta in totalitate numele case-

sensitive. Suportul pentru case-sensitivity exista atunci cand este ruleaza subsistemul POSIX

care are rolul de a mentinte compatibilitatea cu UNIX. Win32 nu este case-sensitive, dar este

case-preserving, asa ca, numele fisierelor pot avea diferite tipuri de litere in ele. Chiar daca

case-sensitive este o proprietate care este foarte familiara utilizatorilor de UNIX, ea reprezinta

un inconvenient utilizatorilor care nu fac aceasta distinctie in mod normal.

Un fisere NTFS nu este doar o secventa liniara de biti, cum sunt FAT-32 si fisierele UNIX.

In schimb, un fisier este constituit din mai multe atribute, fiecare dintre acestea fiind

reprezentate de un stream de biti. Cele mai multe fisiere au putine stream-uri de dimensiuni

mici, cum ar fii, numele fisierelor si ID-ul obiectului pe 64 biti plus un curent de date de tip long.

Fiecare stream are un nume constituit din numele fisierului, doua puncte si numele stream-ului.

Page 7: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

7

Fiecare stream are propria lui dimensiune si este protejat independent de celalte stream-uri.

Ideea de stream-uri multiple intr un fisier nu este o noutate in NTFS. Sistemul de fisiere pe

Apple Macinstosh utilizeaza doua stream-uri pe fiecare fisier, bifurcatie de date si bifurcatie de

resurse. Prima utilizare a stream-urilor multiple pentru NTFS era pentru a permite unui fisier Nt

server sa serveasca clientii Macintosh. Stream-uri multiple de date sunt folosite, de asemenea,

pentru a reprezenta metadata despre fisiere cum ar fi: miniaturi ale imaginilor JPEG, imagini

disponibile in Windows GUI. Dar stream-urile multiple de date sunt fragile si de obicei cedeaza,

atunci cand fisierele sunt transportate la alte fisiere de sistem, trensportate prin retea, sau

chiar cand sunt create rezerve (backup) al acestor date sau cand mai tarziu sunt restaurate,

deoarece multe utilitare le ignora.

NTFS este un sistem de fisiere ierarhic, similar cu sistemul de fisiere folosit de UNIX.

Separatorul dintre componentele numelor este ”\”, totusi, in loc de ”/”, o ramasita mostenita

de la cerintele de compatibilitate cu CP/M cand MS-DOS a fost creat. Spre deosebire de UNIX

conceptul de actualul directorul actual functional, au fost implementate link-uri catre directorul

curent(.) si catre directorul parinte(), fiind implementate ca conventii ,decat ca arhitectura de

design.

3. Compararea sistemelor de fisiere NTFS si FAT[2][6]

NTFS[5]

NTFS este sistemul de fișiere preferat de aceasta versiune de Windows. Acest sistem

prezinta multe avantaje fata de sistemul de fișiere FAT32, incluzand:

a) Capacitatea de a recupera automat dupa anumite erori legate de disc, ceea ce

FAT32 nu poate realiza.

b) Suport imbunatatit pentru hard diskuri mai mari.

c) Securitate mai buna, deoarece aveti posibilitatea sa utilizati permisiuni și criptare

pentru a restrictiona accesul la anumite fișiere numai la utilizatorii autorizati.

d) foloseste adrese de disc de 64 de biti si poate suporta partitii de pana la 264

bytes

e) ofera posibilitatea folosirii caracterelor Unicode in numele de fisiere

f) permite indexare generala a fisierelor

g) ofera posibilitatea managementului dinamic al sectoarelor

h) permite utilizarea fisierelor cu seturi multiple de date.

Page 8: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

8

FAT32 [3]

FAT32, și varianta mai rar utilizata FAT, au fost utilizate in versiuni anterioare ale

sistemelor de operare Windows, incluzand Windows 95, Windows 98 și Windows Millennium

Edition. FAT32 nu ofera securitatea furnizata de NTFS, astfel ca, daca detineti o partitie sau un

volum FAT32 pe computer, orice utilizator care are acces la computer poate citi orice fișier din

acesta. FAT32 are, de asemenea, limitari de dimensiune. Nu aveti posibilitatea sa creati o

partitie FAT32 mai mare de 32 GO in aceasta versiune de Windows, nici sa stocati un fișier mai

mare de 4 GO pe o partitie FAT32.

Principalul motiv de utilizare a FAT32 este detinerea unui computer care executa

uneoriWindows 95, Windows 98 sau Windows Millennium Edition, iar alteori executa aceasta

versiune de Windows, configuratie denumita și multi-incarcare. In acest caz, va fi necesar sa

instalati sistemul de operare mai vechi pe o partitie FAT32 sau FAT și sa va asigurati ca este o

partitie primara (una care poate gazdui un sistem de operare). Orice partitii suplimentare pe

care va trebui sa le accesati cand se utilizeaza versiuni anterioare deWindows trebuie sa fie, de

asemenea, formatate utilizand FAT32. Aceste versiuni anterioare de Windows pot accesa

partitiile NTFS sau volumele printr-o retea, dar nu pe computerul dvs

[1] http://en.wikipedia.org/wiki/NTFS#File_compression

[2] http://vlaurie.com/computers2/Articles/filesystems.htm

[3] http://support.microsoft.com/kb/154997

[4] http://www.ntfs.com/#ntfs optim

[5] http://technet.microsoft.com/en-us/library/cc781134(v=ws.10)

[6]http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-

us/choosing_between_ntfs_fat_and_fat32.mspx?mfr=true

Poza http://www.ntfs.com/ntfs_vs_fat.htm

Page 9: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

9

Page 10: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

10

Sistemul de operare Linux

Sistemul de operare Linux a aparut din dorinta unui student finlandez, Linus Torvalds, de

a scrie un sistem de operare multitasking pentru microprocesorul Intel 386[2]. Aceasta se

intampla in vara anului 1991 cand isi cumpase primul sau calculator cu microprocesor 386 si

trebuia sa transfere niste fisiere prin retea, iar sistemul MS-DOS nu era tocmai mediul nimerit

pentru aceasta operatie.

La baza elaborarii sistemului Linux se afla sistemul de operare Unix care ofera multe

facilitati privind retelele de calculatoare. Sistemul Linux a preluat aceste facilitati si a adaugat

altele noi. O alta idee deosebita in elaborarea sistemului Linux a fost aceea ca dezvoltarea

sistemului a fost posibila prin contributiile aduse de mii de programatori din intreaga lume care

au utilizat mediul Internetpentru a dialoga prin grupuri de stiri (newsgroups) in vederea

transmiterii de informatii si rezultate. Aceasta a fost o premiera mondiala in elaborarea unui

proiect.

Un rol important in dezvoltarea sistemului Linux il are sistemul Internet, fara de

care miracolul Linux nu era posibil. Comunicarea permanenta si rapida a permis cooperarea

intreprogramatori entuziasti care s-au dedicat proiectului initiat de Linus Torvalds[ 1].

Planul initial (nucleul-Kernel[6]) al proiectului a fost:

· scrierea unui driver de disk;

· conceperea unui sistem de fisiere pentru a citi si scrie fisiere in sistemul

central Minix (sistem de tip Unix creat de Andrew Tannenbaum-Olanda);

· scrierea de drivere pentru diverse periferice.

Facilitati[9] oferite de sistemul de operare Linux:

· achizitionare gratuita (free software);

· sistem de operare multitasking si multiuser ce ofera protectie datelor si programelor;

· protectia memoriei prin definirea unui spatiu propriu pentru orice utilizator;

· incarcarea la cerere (load on demand) prin care la un moment dat sunt incarcate

dintr-un program numai portiunile efevtiv folosite;

· biblioteci partajate statice si dinamice, precum si executabile partajate;

Page 11: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

11

· memorie virtuala[8] paginata (o pagina= 4KB) formata din memoria fizica si

un spatiu de swap (maxim 2GB) aflat pe o partitie dedicata exclusiv acestui scop (se

pot folosi 16 partitii deswap de dimensiune maxima de 128 MB);

· sistem deschis ce poate functiona pe acelasi calculator cu alte sisteme de operare;

nici un alt sistem de operare nu poate functiona pe calculatoare

cu procesoare Power-PC, Motorola,DEC-Alpha, MIPS;

· recunoaste un numar foarte mare de sisteme de fisiere si are un boot-

manager inteligent (poate accesa partitii DOS si VFAT (tip Windows 95/98/NT);

. compatibil cu totate variatele UNIX[4] produse de firmele SUN,SCO,IBM,Hwelett-Packard[5]

· toate sursele programelor sunt mereu disponibile utilizatorilor;

· compatibilitate mare cu retelele si protocoalele de comunicatie, suportand toata

gama de protocoale TCP/IP, incluzand ftp, telnet, NFS si multe altele;

· ofera serverul samba[7] ce poate exporta discuri pe care statiile Windows

95/98/NT le considera ca si cum ar proveni de la calculatoare sub DOS/Windows,

precum si un emulator de server Novell Netware, numit Mars-NEW.

In Linux[12], sistemul de fisiere este caraterizat prin trei aspecte: structura ierarhica,

independenta fata de hardware si o mare flexibilitate. Structura ierarhica este organizata sub

forma unui arbore cu un director radacina(root). Directorul radacina poata contine fisisere

ordinare, fisiere de tip legatura sau alte directoare, numite subdirectoare. Subdirectoarele sunt

noduri in arbore, iar fisierele sunt frunze. Independenta fata de hardware rezulta din faptul ca

fisierele sunt vizibile si accesibile utilizatorului ca o succesiune de octeti. Flexibilitatea se

bazeaza pe posibilitatea de a monta(insera) sau demonta, la orice nivel in ierarhia de fisiere, noi

structure arborescente de directoare si fisiere.

Struncura standard a sistemului de fisiere Linux contine, pe langa alte directoare si

urmatoarele: bin, boot, dev, etc, home, lib, porc, tmp, var.

Page 12: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

12

http://www-uxsup.csx.cam.ac.uk/pub/doc/suse/suse9.3/suselinux-userguide_en/cha.shell.html

Structura arborescenta a sistemului de fisiere da posibilitatea utilizatorilor sa creeze si

sa gestioneze un numar mare de fisiere. Nu exista limitare a numarului de noduri, eventualele

restrictii fiind impuse de hardware. Referirea la un fisier se face prin specificarea numelui sau

precedat de un sir de caractere numit cale, sir prin care se indica pozitia in arbore a fisierului

coborand pe nivelurile arborelui, fie pornind de la directorul radacina(cale absoluta sau

completa), fie de la cel curent(cale relativa). Prin director curent se intelege directorul la care se

raporteaza la un moment dat o anumita aplicatie. Calea unui fisier poate fi de orice lungime,

caracterul ”/” fiind folosit pentru delimitarea numelor de directoare din cale . Caracteruul “/”

pe langa rolul de separator de directoare si fisiere, identifica si directorul radacina. In ceea ce

priveste specificarea caii, precum si unele caracteristici ale unui fisier sau director, pot fi

precizate cateva diferenta fata de sistemul de operare Windows, precum:

a) caracterul “\” este inlocuit in Linux cu “/”;

b) in Linux se face distinctia intre litere mici si litere mari;

c) un fisier executabil in Linux este un fisier ce are setat dreptul de

executie(indiferent de extensia sa);

Page 13: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

13

d) modul de stabilire si organizare a drepturilor de acces asupra unui fisier

difera in cele doua sisteme de operare, desi interpretarea lor este foarte

asemanatoare;

e) un fisier text in Linux are marcat sfarsitul de linie(‘\n’) printr-un singur

caracter(cel cu codul 10), in timp ce in Windows prin doua caractere(cu

codurile 13 si 10).

Initial fisierele de sistem ale Linux-ului era sistemul de fisiere MINIX 1[13]. Totusi

datorita faptului ca limita numele fisierelor la 14 caractere, pentru a fii compatibile cu UNIX

verisunea 7, si marimea maxima a fisierelor era de 64 MB, s-a dorit inca de la incaputul

dezvolarii Linux-ului un sistem de fisiere mai performant. Prima imbunatatire a fost sistemul de

fisiere ext, care a permis ca numele fisierelor sa fie de 255 de caractere si fisierele sa aiba

capacitate de 2 GB, dar era mai inceata decat sistemul de fisiere MINIX 1, asa ca s-a contiunuat

cu cautarea unor implementari mai bune. Urmeaza aparitia sistemului de fisiere ext2 care

permitea fisiere cu nume mai mari, capaciate mai mare, perfomanta imbunatatita, devenind

astfel principalul tip de fisier. Totusi Linux suporta mai multe tipuri de fisiere folosind Virtual

File System(VFS)[14].

Un fisier Linux este o secventa de 0 sau mai multi biti care contine informatie arbitrara.

Nu este realizata nici o distinctie intre fisierele ASCII, fisierele binare, sau oricare alt tip de

fisiere. Numele fisierelor este limitat la 255 de caractere, si toate caracterele ASCII[11]

,exceptand NUL, sunt permise in numele fisierelor.

1- http://ro.wikipedia.org/wiki/Linus_Torvalds 2- http://en.wikipedia.org/wiki/Intel_80386 3- https://www.linux.com/learn/docs/ldp 4- http://en.wikipedia.org/wiki/Unix 5- http://en.wikipedia.org/wiki/Hewlett-Packard

6- http://en.wikipedia.org/wiki/Linux_kernel 7- http://www.samba.org/ 8- http://oss.sgi.com/LDP/LDP/sag/x1752.html 9- http://packratstudios.com/index.php/2008/04/06/the-pros-and-cons-of-linux-windows-and-

osx/ 10-http://www-uxsup.csx.cam.ac.uk/pub/doc/suse/suse9.3/suselinux-userguide_en/cha.shell.html 11-http://linux.about.com/library/cmd/blcmdl7_ascii.htm 12-http://en.wikipedia.org/wiki/Linux 13- http://en.wikipedia.org/wiki/MINIX 14- http://en.wikipedia.org/wiki/Virtual_file_system

Page 14: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

14

III. Functiile principale Win32 Api pentru sistemul de fisiere NTFS

Acronimul API[1] este o abreviere a Application Programming Interface[1]. Aşadar

Windows API (sau Win32 API) este un set de funcţii oferite de sistemul de operare Windows pentru manipularea resurselor calculatorului .Orice sistem de operare oferă (sau exportă) un set de astfel de functii, pentru a fi utilizate de programatori în dezvoltarea de aplicaţii specifice acelui sistem de operare. Denumirea de Win32 API mai este folosită uneori pentru a marca diferenta dintre sistemele de operare Windows pe 16 biti (Windows 3.X) şi sistemele de operare Windows pe 32 de biti (Windows 9X, Windows NT, Windows 2000, Windows XP). Din acest motiv ele sunt construite in mare parte pentru programatori. Programatorilor li s-a oferit multa flexibilitate si putere in dezvoltarea aplicatiilor. In aceasi timp aplicatiilor Windows li s-a impus mare responsabilitate in manipularea nivelelor inferioare.

Pe parcurs au fost facute multe modificari la sistemul de operare Windows si Interfetele API Windows[2] au fost de asemenea schimbate pentru a tine pasul cu sistemul de operare. Interfetele API pentru Windows 1.0 au avut mai putin de 450 de functii, in comparatie cu API-uri moderne care au mii de functii. Avand asta in vedere, Microsoft a pus mare accent pentru compatibilitatea inversa, adica compatibilitatea API-urilor noi cu API-uri din urma. Pentru a oferi compatibilitate, Microsoft a scris, pentru noile versiuni pe 32 biti, o schema complexa de Interfete API [3]care permiteau codului scris pe 32 biti sa apeleze cod scris pe 16 biti (si invers in unele cazuri limitate).

Aproape fiecare noua versiune a sistemului de operare Windows aintrodus schimbari in Interfete API Windows. Numele a ramas consistent intre diferite versiuni. Denumirea de Win32 API mai este folosită uneori pentru a marca diferenţa dintre sistemele de operare Windows pe 16 biţi (Windows 3.X) şi sistemele de operare Windows pe 32 de biţi (Windows 9X, Windows NT, Windows 2000, Windows XP).

Toate resursele (fisiere, procese etc.) sistemelor de operare derivate din Windows NT

sunt identificate si accesate prin intermediul unor structuri de date numite handler-e. Orice

proces care doreste folosirea unei resurse trebuie sa obtina un handler pentru acea resursa.

Handler-ul este similar descriptorilor de fisier din sistemele UNIX. Asfel, atunci cand este creat

sau deschis un fisier, se returneaza un handler si fisierul poate fi accesat pentru citire si scriere

folosind acest handler.

Page 15: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

15

Functia CreateFile[4]

Functia este folsita pentru a crea un fisier sau pentru a deschide un fisier existent.

Sintaxa functiei este urmatoarea:

HANDLE CreateFile( LPCTSTR lpFileName , DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile);

Semnificatia parametrilor este urmatoarea:

lpFileName – Este un pointer catre un sir de caractere terminat cu 0, care specifica

numele fisierului care se creeaza sau care se deschide

dwDesireAccess – Specifica tipul de acces la fisier. O aplicatie poate obtine acces doar

pentru citire, doar pentru scriere, pentru scriere si citire sau acces de interogare a

dispozitivelor. Cele mai importante valori pentru aces parametru sunt:

0 – Obtinerea caracteristicilor dispozitivelor sistemului si a fisierelor, fara

accesarea acestora. De exemplu se poate verifica existenta unui fisier, fara

deschiderea lui.

GENERIC_READ – dreptul de citire a fisierului. Datele se pot citi din fisier si

pointerul de fisier poate fi deplasat.

GENERIC_WRITE – Dreptul de scriere a fisierului. Datele pot fi scrise in fisier si

pointerul fisierului poate fi deplasat. Combinat cu GENERIC_READ indica

dreptul de citire si scriere.

DELETE – Dreptul de a sterge fisierul.

READ_CONTROL – Dreptul de a citi informatiie din descriptorul de securitate

al fisierului.

WRITE_OWNER – Dreptul de a schimba proprietarul in desciptorul de

securitate al fisierului.

SYNCHRONIZE - Dreptul de a folosi fisierul pentru sincronizare. Acesta ii da

unui thread posibilitatea de a astepta pana cand fisierul este in starea

marcata.

Page 16: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

16

GENERIC_EXECUTE – Dreptul la executie.

dwShareMode Specifica modul in care poate fi partajat fisierul intre mai multi

utilizatori.Daca dwShareMode este 0 si CreateFile se incheie cu succes, fisierul nu poate fi

partajat si nu poate fi deschis din nou pana cand handler-ul nu este inchis. Pentru a partaja

fisierul, se poate folosi o combinatie a urmatoarelor valori:

FILE_SHARE_DELETE – urmatoarele operatii de deschidere a fisierului vor

reusi numai daca este solicitat accesul de stergere.

FILE_SHARE_READ – urmatoarele operatii de deschidere a fisierului vor reusi

numai daca este sololicitat accesul de citire.

FILE_SHARE_WRITE – urmatoarele operatii de deschidere a fisiierului vor

reusi numai daca este solicitat accesul de scriere.

lpSecurityAttributes este un pointer la o structura SECURITY_ATTRIBUTES care

determina daca handelr-ul poate fi mostenit de procesele fiu. Daca atributul

lpSecurityAtributtes este NULL , atunci handelr-ul nu poate fi mostenit.

dwCreationDisposition Specifica actiunea care se va efectua asupra fisierelor care exista

si ce actiune sa se efectueze daca fisierul nu exista. Aces parametru ce trebuie sa ia una dintre

valorile urmatoare:

CREATE_NEW – Creeaza un fisier nou. Functia esueaza daca fisierul exista

deja.

CREATE_ALWAYS – Creeaza un fisier nou. Daca fisierul exista, functia

suprascrie fisierul, sterge atributele existente si combina atributele de fisier si

optiunile specificate de parametrul dwFlagsAndAttributes cu optiunea

FILE_ATTRIBUTE_ARCHIVE.

OPEN_EXISTING - deschide un fisier. Functia esueaza daca fisierul nu exista.

OPEN_ALWAYS – Deschide fisierul, daca acesta exista. Daca fisierul nu exista,

functia creeaza fisierul ca si cum paramatrul dwCreationDisposition ar fi

CREATE_NEW.

dwFlagsAndAttributes Specifica atributele fisierului si diferite optiuni pentru fisier.Un

fisier poate avea urmatoarele atribute: archive, encrypted, hidden, normal, offline, system,

read-only, temporary si urmatoarele optiuni: write through, overlapped, no buffering, randm

access, sequential scan, delete on close, backup semantics, POSIX semnatics, open reparse si

open no recall.

Page 17: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

17

hTemplateFile Specifica un handler cu acces GENERIC_READ la un fisier template.

Fisierul template furnizeaza atributele de fisier pentru fisierul ce se ceeaza.

Daca funcia are scucces, valoarea returnata este un handler prin care se acceseaza in

continuare fisierul specificat. Daca functia esueaza, valoarea returnata este

INVALID_HANDLE_VALUE. Pentru a obtine informatii detaliate despre eroarea aparuta trebuie

folosita functia GetLastError.

Functia ReadFile[6] si WriteFile

Functia ReadFile citeste date dintr-un fisier, incepand de la pozitia indicata de catre

pointerul fisierului. Dupa ce operatia de citire a fost finalizata, pointerul de fisier este ajustat cu un numarul de octeti cititi efectiv, mai putin in cazul in care handler-ul de fisier este creat cu atributul FILE_FLAG_OVERLAPPED. Daca handler-ul de fisier este creat pentru intare- iesire suprapusa(I/O), aplicatia trebuie sa ajusteze pozitia pointerului de fisier dupa operatia de citire.

BOOL ReadFile( HANDLE hFile, // handler catre fisier LPVOID lpBuffer, //buffer de date DWORD nNumberOfBytesToRead, //nr octeti de citit LPDWORD lpNumberOfBytesRead, //nr octeti cititi LPOVERLAPPED lpOverlapped); //buffer suprapus

Semnificatia parametrilor este urmatoare: hFile – Handler catre fisierul de citit. Handler-ul de fisier trebuie sa fi fost creat cu accesul GENERIC_READ la fisier. lpBuffer – Adresa de memorie unde se pun datele citite dub fisier. nNumberOfBytesToRead – Specifica numarul de octeti care trebuie cititi din fisier. lpNumberOfBytesToRead – Ponter la o variabila in care se scrie numarul de octeti efectiv cititi. lpOverlapped – Pointer la o structura OVERLAPPED. Aceasta structura este solicitata daca hFile a fost creat cu FILE_FLAG_OVERLAPPED. Se revine din functia ReadFile daca numarul de octeti cerut nu a fost citit sau daca a aparut o eroare. Daca functia reuseste, valoarea returnata este nenula. Functia WriteFile[5] scrie date intr-un fiisier si este destinata atat pentru operatii sincrone cat si pentru operatii asincorne. Functia incepe sa scrie datele in fiseir la pozitia indiacata de pointerul de fisier. Dupa ce operatia de scriere a fost termintata, pointerul de fisier

Page 18: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

18

este ajutat cu numarul de octeti scrisi efectiv, cu exceptia cazului in care fisierul este deschis cu FILE_FLAG_OVERLAPPED. BOOL WriteFile( HANDLE hFile, LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite, LPDWORD lpNumberOfBytesWritten, LPOVERLAPPED lpOverlapped); Semnificatiile parametriilor sunt similare cu cele ale parametrilor functiei ReadFile. Daca functia se termina cu succes, valoarea returnata va fi nenula. Daca functia esueaza, valoarea returnata este 0. Functia SetFilePointer[7] Functia SetFilePointer deplaseaza pointerul unui fisier deschis. DWORD SetFilePointer( HANDLE hFile, LONG LDistanceToMove, PLONG lpDistanceToMoveHigh, DWORD dwMoveMethod); Semnificatia parametrilor este urmatoarea: hFile Handler la fisierul al carui pointer se va deplasa. Handlerul de fisier trebue sa fi fost creat cu unul din urmatoarele tipuri de acces la fisier GENERIC_READ sau GENERIC_WRITE.

lDistanceToMove Contine cei mai puntin semnificativi 32 de biti ai valorii cu care se va deplasa pointerul fisierului. Pentru o valoare pozitiva pointerul va fi mutat spre sfarsitul fisierului, iar pentru una negativa spre inceput.

lpDistanceToMoveHigh Indica cei mai semnificativi 32 de biti ai valorii cu care se va deplasa pointerul fisierului. Daca nu este nevoie de 64 de biti, ci sunt suficienti 32, valoarea acestui parametru trebuie sa fie NULL.

dwMoveMethod Pozitia relativ la care se va face deplasarea pointerului de fisier. Acest parametru poate avea una din urmatoarele valori:

FILE_BEGIN - Inceputul fisierului.

FILE_CURRENT – Actuala valoare a pointerului fisierului.

Page 19: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

19

FILE_END – Sfarsitul fisierului. Daca functia SetFilePointer se termina cu succes si lpDistanceToMoveHigh este NULL, valoarea returnata este dublu-cuvantul(32 de biti) cel ami putin semnificativ al noii pozitii a pointerului de fisier. Daca lpDistanceToMoveHigh nu este NULL, atunci functia scire la adresa indicata acest parametru dublu0cuvantul cel mai semnificativ al noii pozitii a pointerului de fisier. Daca functia esueaza, valoarea returnata este INVALID_SET_FILE_POINTER. [1]http://en.wikipedia.org/wiki/Application_programming_interface [2] http://en.wikipedia.org/wiki/Windows_API [3] http://www.computerworld.com/s/article/43487/Application_Programming_Interface [4] http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx [5] http://msdn.microsoft.com/en-us/library/windows/desktop/aa365747(v=vs.85).aspx http://support.microsoft.com/default.aspx?scid=kb;en-us;99456 [6] http://msdn.microsoft.com/en-us/library/windows/desktop/aa365467(v=vs.85).aspx [7] http://msdn.microsoft.com/en-us/library/windows/desktop/aa365541(v=vs.85).aspx

Page 20: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

20

IV. Apelurile pentru sistemul de fisiere in Linux

Capitolul prezinta apelurile sistem uzuale folosite in operatiile de intrare/iesire pe fisiere

si cele de manipulare a fisierelor si directoarelor in sistemul de operare Linux.

1. Descriptori de fisier

Sistemul de operare ataseaza intern fiecarui fisier deschis un descriptor sau identificator de fisier (in principiu, un numar intreg pozitiv). La deschiderea unui fisier sau la crearea unui fisier nou, sistemul returneaza un descriptor de fisier procesului care a executat operatia. Fiecare proces isi are propriii descriptori de fisier. Prin conventie, primii trei descriptori de fisier ai fiecarui proces sunt alocati automat la crearea lui. Descriptorul de fisier 0 este asociat intrarii standard (tastatura), 1 iesirii standard (ecranul), iar 2 iesirii standard de eroare (ecranul). Ceilalti descriptori sunt folositi de proces pentru deschiderea de fisiere ordinare, pipe, speciale sau directoare.

Exista cinci apeluri sistem care genereaza descriptori de fisiere:

creat, open,fcntl, dup si pipe.

2. Apeluri sistem pentru lucrul cu fisiere

Apelul sistem OPEN[1]

Deschiderea sau crearea unui fisier se poate face prin apelul sistem open. Sintaxa acestui apel este:

#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *cale, int optiuni, mode_t permisiuni);

Functia returneaza un descriptor de fisier sau -1 in caz de eroare. La apelul acestei

functii se pot specifica doua sau trei argumente, al treilea argument fiind folosit doar la crearea de fisiere noi. Apelul cu doua argumente este folosit pentru deschiderea fisierelor existente. Functia returneaza cel mai mic descriptor de fisier disponibil. Acesta va fi utilizat in apelurile sistem ulterioare: read, write, lseek si close.

Procesul care executa apelul sistem open trebuie sa aiba drepturi de citire si/sau scriere

asupra fisierului pe care incearca sa-l deschida, in functie de valoarea argumentului optiuni. Pointerul din fisier (pozitia curenta relativ la care se vor efectua operatiile de citire si scriere)

Page 21: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

21

este pozitionat pe primul octet din fisier. Argumentul optiuni se formeaza printr-un SAU pe biti intre urmatoarele constante, definite in fisierul fcntl.h:

O_RDONLY Fisierul este deschis doar pentru citire. O_WRONLY Fisierul este deschis doar pentru scriere. O_RDWR Fisierul este deschis pentru citire si scriere. O_APPEND Are efect doar daca fisierul e deschis pentru scriere. In acest caz, scrierile in fisier se fac intotdeauna la sfarsitul fisierului. Acest lucru este asigurat automat de catre sistemul de operare, ca si cum procesul ar pozitiona anterior scrierii, pointerul in fisier la sfarsitul fisierului. O_CREAT Daca fisierul nu exista, el este creat. Daca exista, este trunchiat. O_EXCL Daca fisierul exista si este specificata si optiunea O_CREAT, apelul open nu se executa cu succes. O_NONBLOCK O_NDELAY La fisiere pipe si cele speciale pe bloc sau caracter cauzeaza trecerea in modul fara blocare atat pentru apelul open, cat si pentru operatiile viitoare de I/E. O_TRUNC Daca fisierul exista, i se sterge continutul. O_SYNC Forteaza scrierea efectiva pe disc prin write. Intarzie mult intregul sistem, dar e eficace in cazuri critice. Argumentul al treilea, permisiuni, poate fi o combinatie de SAU pe biti intre urmatoarele

constante predefinite: S_IRUSR, S_IWUSR, S_IXUSR Proprietar: read, write, execute. S_IRGRP, S_IWGRP, S_IXGRP Group: read, write, execute. S_IROTH, S_IWOTH, S_IXOTH Altii: read, write, execute.

Aceste constante definesc drepturile de acces asupra unui fisier si sunt definite in fisierul sys/stat.h. Apelul sistem CREAT[2]

Un fisier nou este creat cu ajutorul apelului sistem creat, a carui sintaxa este: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>

int creat(const char *cale, mode_t permisiuni);

Functia creat returneaza descriptorul de fisier sau -1 in caz de eroare. Apelul functiei creat este echivalent cu apelul functiei open in forma: open(cale, O_WRONLY | O_CREAT | O_TRUNC, mod);

Page 22: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

22

Argumentul cale specifica calea si numele fisierului, iar permisiuni drepturile de acces. Daca fisierul creat nu exista, este alocat un nou i-node si o legatura spre el este plasata in directorul unde acesta a fost creat. Proprietarul procesului (dat de UID-ul efectiv si GUID-ul efectiv) care executa acest apel trebuie sa aiba permisiunea de scriere in directorul unde se creeaza fisierul. Fisierul deschis va avea drepturile de acces specificate de argumentul al doilea din apel (vezi si umask). Apelul intoarce cel mai mic descriptor de fisier disponibil. Fisierul este deschis in scriere, iar dimensiunea sa initiala este 0.

Timpii de acces si modificare din i-node sunt actualizati. Daca fisierul exista (este nevoie

de permisiunea de cautare in director) continutul lui este sters, fisierul este deschis in scriere, dar nu se modifica proprietarul sau drepturile de acces asupra lui. In acest ultim caz, al doilea argument este ignorat. Apelul sistem READ[3] si WRITE[4]

Pentru a citi un anumit numar de octeti dintr-un fisier de la pozitia curenta, se foloseste apelul sistem read[3]. Sintaxa lui este:

#include <unistd.h> ssize_t read(int fd, void* buf, size_t noct);

Functia returneaza numarul de octeti cititi efectiv, 0 pentru sfarsit de fisier (EOF) si -1 in caz de eroare. Se incearca citirea a noct octeti din fisierul deschis referit de descriptorul fd si se depun la adresa de memorie indicata de parametrul buf. Pointerul (pozitia curenta) in fisier este incrementat automat dupa o operatie de citire cu numarul de octeti cititi. Se revine din functia read doar dupa ce datele citite de pe disc (din fisier) sunt transferate in memorie. Acest tip de functionalitate se numeste sincrona.

Pentru a scrie un anumit numar de octeti intr-un fisier la pozitia curenta, se foloseste apelul sistem write. Sintaxa lui este:

#include <unistd.h> ssize_t write(int fd, const void* buf, size_t noct); Functia returneaza numarul de octeti scrisi si -1 in caz de eroare. Apelul scrie noct octeti

preluati de la adresa de memorie indicata de parametrul buf in fisierul al carui descriptor este fd. Interesant de remarcat referitor la acest apel este faptul ca scrierea fizica pe disc este intarziata. Ea se efectueaza la initiativa sistemului de operare fara ca utilizatorul sa fie informat. Daca procesul care a efectuat apelul sau un alt proces citeste datele care inca nu au fost scrise pe disc, sistemul le citeste inapoi din bufferele cache. Scrierea intarziata este mai rapida, dar are trei dezavantaje:

1. eroare pe disc sau caderea sistemului duce la pierderea datelor; 2. un proces care a initiat o operatie de scriere nu poate fi informat in

Page 23: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

23

cazul aparitiei unei erori de scriere; 3. ordinea scrierilor fizice nu poate fi controlata.

Pentru a elimina aceste dezavantaje, in anumite cazuri se foloseste optiunea O_SYNC specificata in momentul deschiderii fisierului. Dar cum aceasta scade viteza sistemului si avand in vedere fiabilitatea sistemelor de astazi, se prefera mecanismul de lucru cu tampoane cache. Apelurile sistem STAT[5], LSTAT[6] si FSTAT

Pentru a obtine informatii detaliate despre un fisier se pot folosi apelurile sistem stat, lstat sau fstat.

#include <sys/types.h> #include <sys/stat.h> int stat(const char* cale, struct stat* buf); int lstat(const char* cale, struct stat* buf); int fstat(int fd, struct stat* buf);

Cele trei functii returneaza 0 in caz de succes si -1 in caz de eroare. Primele doua primesc ca parametru calea si numele spre un fisier si completeaza structura de la adresa buf cu informatii din i-node-ul fisierului. Apelul fstat e similar, dar functioneaza pentru fisiere deschise carora li se cunoaste descriptorul. Diferenta intre stat si lstat apare doar in cazul unui fisier legatura simbolica, caz in care stat returneaza informatii despre fisierul referit (legat), pe cand lstat returneaza informatii despre fisierul legatura. Structura struct stat e definita in fisierul sys/stat.h si contine campurile:

struct stat { mode_t st_mode; // tip fisier & drepturi ino_t st_ino; // i-node dev_t st_dev; // numar de dispozitiv (SF) nlink_t st_nlink; // numarul de legaturi uid_t st_uid; // ID proprietar gid_t st_gid; // ID grup off_t st_size; // dim. pt. fisiere ordinare time_t st_atime; // timpul ultimului acces time_t st_mtime; // timpul ultimei modificari time_t st_ctime; // timpul schimbarii starii dev_t st_rdev; // nr. dispozitiv

// pt. fisiere speciale long st_blksize; // dimensiunea optima

// a blocului de I/E long st_blocks; // numar de blocuri

// de 512 octeti alocate};

Page 24: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

24

Comanda Linux care foloseste cel mai des acest apel sistem este ls. Declaratiile de tipuri

pentru membrii structurii se gasesc in fisierul sys/types.h. Tipul fisierului este codificat, alaturi de drepturile de acces, in campul st_mode si poate fi determinat folosind urmatoarele macrouri:

Tabelul 1. Macrouri pentru obtinerea tipului unui fisier Macro Semnificatie S_ISREG(st_mode) Fisier obisnuit S_ISDIR(st_mode) Fisier director S_ISCHR(st_mode) Dispozitiv special de tip caracter S_ISBLK(st_mode) Dispozitiv special de tip bloc S_ISFIFO(st_mode) Fisier pipe sau fifo S_ISLNK(st_mode) Legatura simbolica

Decodificarea informatiilor din st_mode poate fi facuta testand rezultatul operatiei de „SI pe biti” (&) intre campul st_mode si una dintre constantele (masti de biti): S_IFIFO, S_IFCHR, S_IFBLK, S_IFDIR, S_IFREG, S_IFLNK, S_ISUID (setat bitul suid), S_ISGID (setat bitul sgid), S_ISVTX (setat bitul sticky), S_IRUSR (drept de citire pentru proprietar), S_IWUSR (drept de scriere pentru proprietar), S_IWUSR (drept de executie pentru proprietar) etc. [1] http://linux.die.net/man/3/open [2] http://linux.die.net/man/1/function [3] http://linux.die.net/man/3/read [4] http://linux.die.net/man/3/write [5] http://linux.die.net/man/3/stat [6] http://linux.about.com/library/cmd/blcmdl2_lstat.htm]

Page 25: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

25

3. Functii pentru lucrul cu directoare

Continutul unui director poate fi obtinut de catre procesele care au drept de citire asupra directorului prin operatii de citire similare cu cele asupra fisierelor. Scrierea intr-un director poate fi facuta doar de catre sistemul de operare. Structura unui director apare utilizatorului ca o succesiune de structuri (elemente) numite intrari in director. O intrare in director contine, printre alte informatii, umele fisierului si i-node-ul acestuia. Pentru citirea intrarilor unui director exista urmatoarele functii:

#include <sys/types.h> #include <dirent.h> DIR* opendir(const char* cale); struct dirent* readdir(DIR* dp); void rewinddir(DIR* dp); int closedir(DIR* dp);

Functia opendir [1]are ca efect deschiderea directorului, adica pregatirea pentru operatiile ulterioare de citire a continutului lui. Ea returneaza un pointer valid daca deschiderea a reusit si NULL in caz de eroare.

Functia readdir[2] citeste la fiecare nou apel al ei, in ordine secventiala, urmatoarea

intrare din director: primul apel readdir citeste prima intrare din director, urmatorul apel citeste urmatoarea intrare si asa mai departe. Functia returneaza un pointer valid spre o structura de tip dirent, dacacitirea a reusit si NULL in caz contrar (sfarsitul directorului).

Functia rewinddir[3] repozitioneaza indicatorul din director spre prima intrare din director (inceputul directorului).

Functia closedir inchide un director deschis anterior. Returneaza -1 in caz de eroare.

Structura dirent, definita in fisierul dirent.h, contine cel putin doi membri: struct dirent { ino_t d_fileno; // nr. i-node char d_name[MAXNAMLEN + 1]; // nume fisier }

[1] http://linux.die.net/man/3/opendir

[2] http://www.kernel.org/doc/man-pages/online/pages/man3/readdir.3.html

[3] http://www.kernel.org/doc/man-pages/online/pages/man3/closedir.3.html

Page 26: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

26

V. Ext si arhitectura NFS la Linux

1. Implementarea sistemului de fisiere

In aceasta sectiune ne vom concentra atentia asupra sistemului virtual de fisiere(Virtual

File System - VFS). Sistemul virtual de fisiere ascunde fata de procesele si aplicatiile de nivel

inalt diferentele asupra multor tipuri de sisteme suportate de Linux, chiar daca acestea stau pe

hard disk-uri proprii sau pe spatii de memorie aflate la distanta,care trebuiesc accesate de la

distanta printr-o retea. Dispozitivele si alte fisiere speciale sunt ,de asemea, accesate prin

stratul VFS. In cele ce urmeaza vom descrie implementarea primului sistem de fisiere de scara

larga,ext2.

Pentru a putea face ca aplicatiile sa interactioneze cu diferitele sisteme de fisiere,

implementate pe diferitele tipuri de dispozitive,Linux adopta o abordare similara cu cea a

Unix-ului: VFS. Virtual File System,sistemul de fisiere virtual defineste un set de fisiere de sistem

de baza si operatiile cu care ne sunt permise captarile de fisiere.

Obiect Descriere Operatii

Superblock Sistemul de fisiere specific read_inode;sync_fs

Dentry Directorul de intrare create;link

I-node Fisier specific d_compare;d_delete

File Fisier asociat cu un proces read;write

In acest table sunt sintetizate cele patru structuri principale suportate de catre sistemul

virtual de fisiere(VFS).Superblock-ul contine informatii pretioase despre aspectul sistemului de

fisiere.Distrugerea superblock-ului va face ca sistemul de fisiere sa nu mai poate fi citit.Fiecare i-

node descrie doar cate un singur fisier. Atat superblock-ul cat si i-node-ul au o structura

corespunzatoare cu hard disk-ul principal unde sistemul se afla.In masura in care dorim ca sa

facilitam anumite operatii asupra directoarelor sau sa avem traversari de legaturi cum ar

fi:/usr/ast/bin,VFS-ul are o structura de dat e, dentry , care reprezinta directorul de

intrare.Aceasta structura de date este creata de sistemul de fisiere atunci cand este instalat.

Directoarele de intrare sunt memorate intr-un dentry_cache.De exemplu ,dentry_cache,poate

contine intrarile pentru: /,/usr, /usr/ast etc.Daca mai multe procese acceseaza acelasi fisier prin

acceasi cale,fisierul obiect corespunzator va pointa la aceeasi intrare in acest dentry_cache.

Structura de date file este o reprezentare in memorie a unui singur fisier si este create in urma

unui apel de sistem.Suporta operatii precum:citire,scriere,trimitere etc.

Page 27: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

27

Actualul sistem de fisiere implementat dedesubtul VFS-ului nu foloseste cu exactitate

aceleasi captari si operatii interne.

Modern Operating Systems Tanenbaum 3Rd.Edition

2. Sistemul de fisiere EXT2

EXT2 este sistemul de fisiere implementat in LINUX.LINUX este un sistem de operare

similar cu UNIX care ruleaza, printre altele, si pe calculatoare PC-386.Prima data LINUX a fost

implementat ca o extensie a sistemului de operare MINIX (clona de UNIX) si prima sa varianta

folosea sistemul de fisiere MINIX, cu toate deficientele sale (dimensiunea sistemului de fisiere

era limitata la 64 MB si numele fisierelor la 14 caractere.Ulterior, au fost realizate doua noi

sisteme de fisiere care au fost implementate in nucleul LINUX. Aceste sisteme de fisiere au fost

numite „Extended File System” (Ext) si „Second Extended File System” (Ext2) care au diminuat

limitarile si au adaugat noi facilitati.Specific nucleului de LINUX este usurinta cu care sistemului

de operare i se pot asocia noi sisteme de fisiere; facilitatea este asigurata de o componenta a

nucleului, Virtual File System.

Ext2 suporta tipurile de fisiere standard UNIX: fisiere propriu-zise, directoare, fisiere

speciale dispozitiv si legaturi simbolice.Ext2 este capabil sa administreze discuri cu adevarat

foarte mari, de 4 TB, eliminand astfel necesitatea partitionarii hard discului.Ext2 permite nume

lungi de fisiere iar numele de directoare pot avea o lungime variabila. Limita de 255 de

caractere, daca este necesar, poate fi extinsa la 1012.Ext2 rezerva circa 5% din spatiul discului

pentru administratorul sistemului (root). Aceasta asigura o modalitate simpla de recuperare in

situatia in care sistemul de fisiere a fost afectat.Fata de aceste trasaturi UNIX, Ext2 suporta

cateva caracteristici care nu sunt intalnite in alte sisteme de operare:fisierele atributelor permit

utilizatorilor sa modifice comportamentul nucleului cand actioneaza asupra unor fisiere

specifice; la initializare poate fi selectata o sintaxa de tip BSD sau System V;permite folosirea

actualizarilor sincrone (la montarea unui disc metadatele sunt scrise sincron pe disc ori de cate

ori acestea sunt modificate, asigurandu-se o consistenta stricta a metadatelor);marimea

blocului logic poate fi selectata la o valoare egala cu 1024, 2048 sau 4096 octeti;legaturile

simbolice rapide, care, fara a folosi nici un bloc suplimentar de date, permit definirea unei

relatii intre un fisier tinta si un nume simbolic;Ext2 monitorizeaza starea sistemului de fisiere;

un camp special din structura sistemului de fisiere reflecta starea sistemului iar functie de

continutul sau, la initializare, sunt luate anumite masuri pentru eliminarea erorilor;au fost

adaugate atribute noi: „Stergere sigura” (care scrie date aleatoare in blocurile unui fisier care a

fost sters), „Imobil” (nu pot fi modificate, sterse sau mutate de catre orice utilizator) sau

Page 28: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

28

„Numai adaugare” (similar cu „Imobil”, numai ca este permisa adaugarea de date la sfarsitul

fisierului).

Sistemul de fisiere LINUX implementeaza un set concepte implementate in UNIX si,

in special, in sistemul de fisiere al BSD.

Ext2 este format din grupuri de blocuri, spre deosebire de sectoarele din FAT. Totusi, blocurile

nu sunt strict legate de structura discului deoarece discurile moderne sunt optimizate pentru

acces secvential, ascunzandu-si geometria sistemului de operare.

Structura fizica a sistemului de fisiere, este foarte simpla, asigurandu-se astfel o siguranta

deosebita in functionare si eliminarea prompta a erorilor aparute (figura de mai jos).

Înregistrare Boot

Grupul 1

Grupul 2

… Grupul N

Fiecare grup de blocuri contine o copie redundanta a unor informatii de control

esentiale ale sistemului de fisiere (superbloc si descriptorii sistemului de fisiere), precum si alte

componente ale sistemului de fisiere (hartile blocurilor si i-nodurilor, un tabel de i-noduri si

blocuri de date).

Structura discului este predictibila, cat timp se cunosc cateva informatii de baza:

dimensiunea blocului, numarul de blocuri si i-noduri al unui grup. Toate acestea se pot calcula

sau localiza in structura superblocului.

Utilizarea grupurilor de blocuri este un mare castig in materie de siguranta in

functionare deoarece structurile de control esentiale sunt duplicate in fiecare grup, sistemul de

fisiere recuperand simplu informatiile daca un superbloc a fost afectat. Aceasta structura

permite, de asemenea, obtinerea unor performante dinamice deosebite prin reducerea

distantei intre tabelul i-noduri si blocurile de date (se micsoreaza deplasarea capetelor de

citire/scriere ale discului in timpul operatiilor de intrare/iesire cu fisiere).

Modern Operating Systems Tanenbaum 3Rd.Edition

Page 29: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

29

3. NFS

Retelistia a jucat un rol major in Linux,si in Unix la modul general, chiar de la inceputuri.

In cele ce urmeaza vom examina NFS-Network File System,care este folosit pe toate

sistemele Linux modern pentru a alatura sistemele de fisiere aflate pe calculatoare separate.In

prezent implementarea dominanta de NFS este la versiune 3,introdusa in 1994.NFSv4 a fost

introdus in 2000 si aduce anumite imbunatatiri peste versiunea 3 de NFS. Ne sunt de interes

trei aspect ale NFS-ului:arhitectura,protocoalele si implementarea.

3.1 Arhitectura NFS

Ideea principala din spatele NFS-ului este aceea de a ne permite arbitrarea colectiilor de

useri si servere pentru a pune la comun sisteme de fisiere. In majoritatea cazurilor,toti clienti si

toate serverele se afla in acelasi LAN,dar nu obligatoriu.Este,de asemenea,posibil sa rulam NFS

peste un WAN chiar daca serverul se afla la mare distanta fata de client.Pentru simplitate vom

vorbi despre client si servere ca si cum ar fi masini independente,dar in realitate NFS permite

fiecarei masina sa fie totodata client cat si server.

Fiecare server NFS exporta una sau mai multe directoare pentru accesul de la distanta a

clientilor.Cand un director devine accesibil,deci si toate subdirectoarele acestuia devin vizibile

clientului. Lista cu directoare exportate de server sunt mentinute,de obicei, intru-un fisier: /ext,

/exports,deci toate aceste directoare pot fi exportate automat cand serverul booteaza. Clienti

acceseaza direcoarele exportate montandu-le. Cand un client monteaza un director exportat,

acesta devine parte a ierarhiei de diractoare a clientului.

Modern Operating Systems Tanenbaum 3Rd.Edition

Page 30: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

30

3.2 Protocoale NFS

Unul dintre telurile NFS-ului este sa suporte sitemele heterogene,cu clientii si serverele

aflate pe masini distincte si cu sisteme de operare diferite,este esential ca intrefata dintre client

si server sa fie foarte bine definite. Doar atunci este posibil ca oricine sa fie capabil sa scrie o

noua implentare de client sis a se astepte ca va rula fara erori in compatibilitate cu serverele

deja existente.

NFS face posibil acest tel prin definirea a doua protocoale client-server.Un protocol este

un set de cereri trimise de client catre server, cu corespondenta inversa server-client.

Primul protocol NFS se ocupa de montaj.Un client poate trimite un nume de cale catre

un server si cererea permite ca directorul sa fie montat in ierarhia de documente.Locul unde

este montat directorul nu se afla in mesaj, pentru ca nici server-ului nu ii pasa de locul unde se

va monta directorul.Daca numele de cale este legal si directorul specificat a fost exportat,

serverul returneaza un maner de fisier catre client.Manerul de fisier contine campuri unice

identificate de catre tipul de sistem de fisier,de hard disk,de numarl i-node-ului al directorului si

informatii de securitate.

Cand Linux-ul booteaza,aceste ruleaza /etc/rc shell script inainte sa intre in starea de

multiuser.Comezi de montaj de fisiere pot fi plasate in aceste scripturi si in plus se

automatizeaza montajul atunci cand este necesar. Noile versiuni de Linux au support pentru

auto-montaj.Auto-montajul are doua avantaje principale in plus fata de montajul static.Primul

avantaj este acela ca atunci cand serverul este cazut este imposibila conectarea clientului la

acel server.Al doilea avantaj permite clientului sa incerce un set de servere in parallel,un mic

numar de greseli este posibil,iar performanta poate fi crescuta.

Pe de alta parte se presupune ca toate fisierele de sistem specificate ca alternative

pentru auto-montaj sunt identice.Intrucat NFS nu prevede support pentru replici de fisiere sau

directoare,este datoria userului sa aranjeze ca toate fisierele sa fie identice.In concluzie auto-

montajul este adesea folosit doar pentru citire sistemelor de fisiere.

Al doile protol NFS este pentru accesul de fisiere si pentru directoare.Clientii pot trimite

mesaje catre server pentru manipularea directoarelor si pentru a citi sau scrie fisiere.Clientii

pot,de asemea,sa acceseze atributele fisierelor:marimea,ora ultimei modificari,extensia etc.

Majoritatea apelurilor de sistem Linux care suporta NFS,au exclusa posibilitatea inchiderii si

deschiderii de fisiere.

Page 31: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

31

Aceasta omitere nu este deloc un accident.Este perfect intentionata.Nu este necesar ca

sa deshidem un fisier inainte sa il citim,sau sa nu il inchidem cand am terminat de lucrat cu el.

In schimb,pentru a citii un fisier,clientul trimite catre server un mesaj continand numele

fisierului impreuna cu o cerere de a returna un maner pentru acel fisier,care este o structura

care identifica fisierul. Spre deosebire de un apel deschis,aceasta operatie de cautare nu

copiaza nici o informative in tablele interne ale sistemului.Acest mesaj este auto-continut.

Avantajul acestei arhitecturi este acela ca serverul nu are obligatia de a memora nimic despre

conexiunile deschise intre apeluri si server.In plus daca serverul pica si apoi isi revine,nici o

informatie despre vreun fisier nu se pierde.Un server ca acesta care nu mentine starea

informatiilor despre fisierele deschise se numesc stateless.

Din pacate aceasta medota a NFS-ului face dificila realizarea exacta a fisierelor sematice

ale Linux-ului. De exmplu,in Linux un fisier poate fi deschis si apoi blocat astfel incat alte

procese nu il pot accesa.Cand fisierul se inchide blocarea este eliberata.Intr-un server stateless

blocarile nu pot fi asociate cu fisierele deschise din cauza ca server-ul nu stie care fisier este

deschis. Asadar NFS-ului ii trebuie un alt mechanism, separate, pentru blocare.

NFS-ul foloseste mecanismul de protectie standard al Unix-ului,cu bitii rw x pentru

owner,grupuri si alti useri.Original,fiecare mesaj de cerere simplu contine userul si id-urile de

grup ale apelantilor,cu care serverul NFS se foloseste pentru a valida accesul. Efectul este acela

ca clientii nu pot trisa.

Modern Operating Systems Tanenbaum 3Rd.Edition

Page 32: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

32

3.3 Implementarea NFS

Cu toate ca implementarea clientilor si serverului este independenta de protocoalele

NFS-ului, majoriatatea sistemelor Linux folosesc o implementarea cu trei straturi.Stratul cel mai

de sus este stratul sistemului de apeluri. Acest nivel realizeaza apeluri precum deschidere,citire

si inchidere.Dupa parsarea apelului si verificarea parametrilor, se invoca al doilea nivel,nivelul

VFS(Virtual File System).

Sarcina sistemului virtual de fisiere este sa mentina un tabel cu o intrare pentru fiecare

fisier deschis.Fiecare VFS are o intrare,un i-node virtual sau v-node pentru fiecare fisier deschis.

V-node-ul este folosit pentru a spune daca fisierul se afla pe statia locala sau se afla pe o alta

statie.Pentru fisierele aflate la distanta este data destula informatie pentru a putea fi accesate

fisiere.Pentru fisiere locale,fisierul de sistem si i-node-ul sunt inregistrate deoarece sistemele

Linux moderne suporta multiple sisteme de fisier. Cu toate ca VFS a fost inventat pentru

suportul NFS,majoritatea sistemelor Linux moderne au suportul integral in partea sistemului de

operare,chiar daca NFS-ul nu este folosit.

Modern Operating Systems Tanenbaum 3Rd.Edition

Page 33: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

33

VI. Compresia si criptarea fisierelor NTFS

Criptarea fisierelor NTFS

a) Introducere Criptare Sistemul de cripatare a fiserelor (Encrypting File System - EFS)[1] in Windows este o caracterisitica introdusa in versiunea 3.0 a fisierelor NTFS care pune la dispozitie filesystem-level encryption, adesea numit si criptarea fisierelor sau directoarelor. Este o forma de criptare unde fisiere sau directoare individuale sunt criptate de sistemul de fisiere. Avantajele criptarii filesistem-level include:

Un sistem flexibil de management al cheii fiecarui fisier, asa ca, fiecare fisier este criptat cu o cheie proprie

Management individual al fiecarui fisier criptat

Controlul de acces poate fi intarit prin flosirea cheii publice

Aceasta tehnologie permite ca fisierele sa fie criptate pentru a proteja date onfidentiale de catre atacatori cu acces fizic la computer.

EFS este implementat in toate versiuniile de Windows dezvoltate pentru mediile de

lucru business. Implicit nici un fisier nu este criptat, dar criptarea poate fi activata de catre useri.

Autentificarea userilor (user authentication) si access control list (ACL) pot proteja

fisierele de accesarea neautorizata in timp ce sistemul de operare functioneaza, dar sunt usor eludate daca un atacator are acces fizic la computer.Cea mai acceptata solutie este de a stoca fisiere criptate pe unitatile de stocare.

In familia de sisteme de operare Microsoft Windows EFS permite aceasta masura, chiar

daca numai pe partitiile NTFS, si pentru a realiza aceasta criptare foloseste o combinatie de o cheie publica criptata ( public key cryptography) si o alta cheie simetrica ( symmetric key cryptography) pentru a face decriptarea fisierelor foarte dificila fara cheia corecta.

Totusi cheile criptate pentru EFS sunt in practica protejate de un user cu parola, deci

sunt supceptibile la atacuri pentru aflarea parolei. In alti termeni, criptarea fisierelor este atat de puternica pe cat este parola de a deschide cheia de decriptare.

[1]http://en.wikipedia.org/wiki/Encrypting_File_System

Page 34: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

34

EFS[6] permite userilor sa cripteze fisiere si foldere, toate datele aflate pe o partitie formatata ca NTFS. NTFS iti permite sa setezi permisiuni pe fisiere si foldere aflate pe o partitie formatata ca NTFS care controleaza accesul la acele fisiere si foldere. EFS permite criptarea acestor foldere si fisiere pentru securizarea lor. Chiar daca o persoana neautorizata reuseste sa acceseze fisierele datorita unei configurati proaste a permisiunilor NTFS, fisierele vor ramane tot criptate. Doar detinatorul fisierelor, poate autoriza utilizatori sau diverse programe de recuperare sa poata decripta fisierele criptate. In acest mod, EFS protejaza date impotriva acesului neautorizat.

EFS utilizeaza algoritmi standard si criptografie bazata pe chei pentru a asigura o

criptare sigura. Fisierele care sunt criptate sunt, deci confidentiale. Chiar daca ca masura de siguranta avem autentificarea prin logon si sistemul de permisiuni al fisierelor NTFS, putem folosi EFS pentru a adauga inca un nivel de protectie fisierelor noastre. Acceasta ne asigura ca si atunci cand persoane neautorizate au acces total la datele stocate pe un pc, datele stocate in fisiere sunt in siguranta datorita criptarii EFS.

EFS in Windows server 2003 imbunatateste capacitatile criptarii EFS din Windows 2000.

Utilizatorii care folosesc EFS pot share –ui fisierele criptate cu alti utilizatori chiar si pe foldere WEB. Putem configura facilitatiile EFS prin Group Policy si utilitare de command-line. Functioneaza, de asemenea, pentru securizarea fisierelor si atunci cand calculatoarele sunt folosite de mai multi useri.

b) Functionare[3]

EFS este, de fapt, integrat cu NTFS, si procesele de criptare si decriptare ale fisierelor sunt transparente pentru utilizatori. Asta inseamna ca atunci cand utilizatorul salveaza un fisier, EFS cripteaza datele in timp ce datele sunt scrise pe disc (hdd), iar atunci cand utilizatorul deschide un fisier, datele sunt decriptate de EFS in timp ce sunt citite de pe disc. Utilizatorii nu sunt constienti de proces, si nu este nevoie de nici o actiune din partea lor pentru a initia criptarea sau decriptarea EFS.

EFS utilizeaza chei pentru a cripta si a decripta datele, si arhitectura ‘cryptography

application programming interface’ (CryptoAPI) pentru a furniza functiile de criptografiere. Cheile pe care EFS le foloseste pentru a cripta si decripta date sunt o pereche formata dintr-o cheie publica si una privata, si o cheie pentru fiecare fisier. EFS genereaza o cheie de criptare a fisierului (file encryption key EFK) care este o cheie de criptare simetrica pentru a cripta datele. Apoi FEK este criptata prin intermediul unei criptari asimetrice utilizand cheia publica a utilizatorului. Criptarea asimetrica utilizeaza, de fapt, o cheie publica si una privata pentru o securizare mai puternica. Cheia de criptare a fisierului (FEK)[3] este apoi stocate impreuna cu fisierul criptat. Atunci cand este nevoie ca fisierul sa fie decriptat, cheia de criptare a fisierului (FEK) trebuie decriptata. Cheia privata a userului este folosite pentru a decripta FEK, apoi FEK este folosit pentru a decripta datele din fisier.

Page 35: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

35

c) Caracteristiciile cheilor EFS[4]

EFS este activat implicit. Utilizatorii au nevoie de o cheie publica si una privata,si permisiunea de a folosi EFS

EFS are nevoie de un “certificat de agent de recuperare” (recovery agent certificate) pentru a putea lucra. Va genera “certificatul’ daca utilizatorul nu are unul

EFS poate cripta fisiere doar atunci cand este folosit sitemul de fisiere NTFS

Criptarea nu are nici une efect asupra permisiunilor fisierelor si folderelor

Putem autoriza utilizatori multiplii sa imparta (share) fisiere criptate

Cand utilzatorul muta fiserele EFS pe un alt sistem de fisere, criptarea este inlaturata

Cand utilizatorul muta fisere intr-un folder care este criptat, fiserele raman in forma originala. Raman criptate ori necriptate.

Cand utilizatorul copiaza un fiser intr-un folder criptat, fiserul va fi criptat

Cand un folder este criptat, toate fisierele temporare sunt de asemenea criptate

Criptarea este listata ca si un atribut al fisierului

EFS poate cripta si decripta fisiere pe un calculator aflat la distanta

Fisierele offline pot fi cripate

Fisierele criptate pot fi stocate in foldere Web

Se pot ceea copii de rezerva ale fiserelor criptate

Fisierele si folderele comprimate trebuiesc decomprimate pentru a putea ficriptate

Fiserele si folderele de sistem nu pot fi criptate

d) Procesul de criptare si decriptare[5] Dupa cum am mentionat mai sus EFS utilizeaza criptare prin cheie publica si cheie

simetrica pentru a asigura siguranta fisierelor si folderelor. Algoritmii in criptarea cu cheie publica utilizeaza chei asimetrice pentru criptare si decriptare. Inseamna ca cheile utilizare pentru a cripta si decripta datele sunt diferite deoarece se foloseste o cheie publica si una privata. Cheia privata este detinuta de catre proprietarul cheii iar cheia publica poate fi utilizata pe retea.

Cand datele sunt criptate, EFS genereaza un FEK unic pentru a cripta fisierele. Apoi

cripteaza FEK utilizand cheia publica iar decriptarea are loc folosind cheia privata.

Page 36: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

36

i) Procesul de criptare: 1. Fisierele sunt deschise de catre serviciul EFS 2. Stream-urile de date sunt copiate intr-un fisier text temporar localiza in

directorul temoprar al sistemului. 3. EFS genereaza o FEK unica 4. FEK este folosit pentru a cripta ptin DESX sau 3DES 5. Este creeat data decryption field (DDF). DDF contine FEK criptat cu ajutorul

cheii publice a userului 6. Data recovery fields (DRFs) este creeat cand se defineste un agent de

recuperare 7. Datele criptate, DDF, DRF sunt stocate in fisier 8. Fisierul text este sters.

ii) Pricesul de decriptare:

1. NTFS identifica fiserele ca fiind criptate, apoi trimite o cerere de decriptare prin driverul EFS

2. Driverul EFS obtine data decryption field (DDF) care il trimite la serviciul EFS 3. Serviciul EFS obtine cheia privata de la user. Foloseste cheia pentru a

decripta DDF 4. Dupa ce serviciul EFS decripteaza DDF si obtine FEF, trimite FEK la driverul

EFS. 5. Driverul EFS foloseste FEK pentru a decripta datele din fiser 6. Apoi driverul EFS trimite datele decriptate catre NTFS.

[3] http://technet.microsoft.com/en-us/library/cc962103.aspx [4]http://www.windowsnetworking.com/kbase/WindowsTips/Windows2000/AdminTips/Security/Windows2000EncryptingFileSystemEFS.html [5] http://technet.microsoft.com/en-us/library/cc781588(v=ws.10).aspx [6] http://www.elcomsoft.com/help/aefsdr/index.html?about_efs.html

Page 37: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

37

Compresia fisierelor NTFS[1] Comprimarea fisierelor, folderelor si a programelor scade marimea acestora si reduce

spatiului utilizat in volume sau in dispozitivele de stocare mobile. Comprimarea unui volum scade marimea spatiului utilizat de catre toate fisierele si folderele stocate in acel volum. Comprimarea unor fisiere pot duce la scaderi ale performantelor.

a) Compresia NTFS[1]

Compresia NTFS este disponibila pentru volume care utilizeaza sistemul de fisiere NTFS si are urmatoarele caracteristici si limitari:

Compresia NTFS se poate utiliza pentru comprimarea fisierelor si folderelor individuale, precum si a intregului volum NTFS.

Se poate comprima un folder fara a se comprima si continutul sau.

Se poate lucra cu fisiere comprimate NTFS fara a le decomprima, deoarece proceselede decomprimare si recomprimare lor au loc fara interventia utilizatorului.

Este posibil sa se afiseze numele de fisiere si foldere comprimate NTFS cu oculoare diferita, pentru a le face mai usor de identificat.

Este posibil sa se constate o scadere a performantelor cand se lucraza cu fisiere comprimate NTFS. Cand se deschide un fisier comprimat, Windows il decomprima automat si il comprima din nou atunci cand se inchide. Acest proces poate sa scada performantele computerului.

Fisierele si folderele comprimate NTFS raman comprimate numai atat timp cat sunt stocate in volume NTFS.

Fisierele comprimate NTFS nu pot fi criptate NFFS poate comprima fisiere folosind algoritmul LZNT1. Acesta este un algoritm de

compresie “fara perderi”, deoarece datele nu se pierd in timpul compresiei ca in cazul altor algoritmi de compresie “cu pierderi”.

Compresia datelor reprezinta identificarea unor elemente comune (a unui model, mod

de organizare) in modul de distribuire a datelor dintr-un fisier ce urmeaza sa fie comprimat si folosirea acelor elemente comune, folosind algoritmi matematici, pentru a elimina parte din date, fara a afecta infomatia. De exemplu in cazul unui fisier audio, se pot elimina parti ce sunt asociate unor frecvente care oricum nu sunt sesizabile de urechea umana.

Fisierele sunt comprimate in bucati de 16 grupuri. Cu grupuri de 4kB, fisierele sunt comprimate in bucati mai mari de 64kB. Daca compresia reduce 64kB de date la 60kB sau mai putin, NTFS trateaza cei 4kB de pagini nefolositori ca grupuri goale, ne fiind scrise. Fisierele de dimensiuni mari devin foarte fragmentate iar bucati de 64k devin fragmente mai mici.

Page 38: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

38

Microsoft nu recomanda compresia fisierelor care au o marimea mai mare de 30 MB datorita impactului asupra performantelor.

Cea mai buna utilizare a compresiei este pentru fisierele care sunt repetitive, scrise

rareori, de obicei accesate secvential, ele ne fiind comprimate. Fisierele “log” reprezinta un exemplu ideal. Comprimarea fisierelor care sunt mai mici de 4kB sau sunt deja comprimate le poate face mai mari in dimensiune si, de asemenea, mai incete. Se recomanda evitarea comprimarii executabileleor ca.exe si .dll. Comprimarea fisierelor de sistem folosite la bootup (cand are loc incarcarea sistemului de operare), cum ar fi drivere, NTLDS, winload.exe sau BOOTMGR pot duce la erori ce impiedica incarcarea corecta a sistemului.

Sistemele cu un singur utilizator care au o dimensiunea limitata a spatiului pe hard-disk,

pot beneficia de pe urma compresiei fiseirelor NTFS pentru fisiere mai mici, de la 4+kB pana la 64kB sau mai mult.

b) Starea compresiei[2] Fiecare fisier sau director dintr-o partitie care suporta compresie au o anumita stare. Pe cand atributul compresiei unui fisier sau director indica pur si simplu daca un fisier

sau director a fost comprimat sau nu,starea compresiei specifica formatul datelor de comprimat. Folosind codul de control FSCTL GET COMPRESSION se poate determina starea compresiei unui fisier sau director.Starea compresiei este o valoare pe 16 biti.Aceasta operatie seteaza atributul compresiei fisierului sau directorului. COMPRESSION_FORMAT_NONE arata ca fisierul nu este comprimat,iar valoarea COMPRESSION_FORMAT_DEFAULT arata ca fisierul a fost comprimat .

Folosind codul de control FSCTL SET COMPRESSION se seteaza starea compresiei a

fisierului sau directorului. Prin aceasta operatie se seteaza si atributul de compresie al fisierului sau directorului. Setand starea compresiei la o valoare diferita de zero,se face compresia fisierului,daca starea este setata pe zero are loc decompresia fisierului.Acestea sunt operatii sincrone.Fisierul este comprimat sau extins imediat ce se seteaza aceste stari. Setand starea de compresie a directorului aceasta nu implica imediat compresia sau extinderea imediata( ca in cazul fisierului).

c) Metode de comprimare[5] Cele mai bune metode de compresie folosesc modelele probabilistice, in care predictiile sunt dublate de un algoritm numit codarea aritmetica- inventat de Jorma Rissanen. Codarea aritmetica este folosita in compresia fisierelor de tip DJVu.

Page 39: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

39

Lempel-Ziv[4] este o metoda te compresie fara perderi. O varianta a acestei metode, denumita Deflate, optimizeaza compresia si este folosita pentru formatele pkzip,gzip si png.

Pentru fisierele gif se foloseste metoda Lempel-Ziv-Welch[3]. Fiserele zip folosesc metoda Lempel-Ziv-Reneau.

Codarea Huffman este azi folosita ca metoda complementara pentru alte metode de compresie. De exemplu algoritmul PKZIP, imaginile JPEG ori formatul audio mp3 folosesc codarea Huffman. [2]http://en.wikipedia.org/wiki/Data_compression [1]http://en.wikipedia.org/wiki/NTFS#File_compression [3] http://en.wikipedia.org/wiki/Lempel%E2%80%93Ziv%E2%80%93Welch [4] http://www.cs.cf.ac.uk/Dave/Multimedia/node214.html [5] http://en.wikipedia.org/wiki/NTFS

Page 40: Sistemul de fisiere - Ingineria Sistemelor de calculstst.elia.pub.ro/news/SO/SO_2012_pdf/2_IonAl_SulimanHu_VoicuEd... · Insa, aceste metode sunt foarte inconvenabile, in special

Sistemul de fisiere

Facultatea de Electronica, Telecomunicatii si Tehnologia Informatiei

40

VII. Bibliografie

1. http://en.wikipedia.org/wiki/Encrypting_File_System 2. http://www.tech-faq.com/encrypting-file-system-efs.html 3. http://msdn2.microsoft.com/en-us/library/aa363849(VS.85).aspx 4. Modern Operating Systems Tanenbaum 3Rd.Edition 5. http://www.ntfs.com/#ntfs optim 6. http://en.wikipedia.org/wiki/NTFS 7. htt p://en.wikipedia.org/wiki/Windows_API 8. https://www.linux.com/