Cursul 10 - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/4so2/cursuri2009/10.Gestiunea...

39

Transcript of Cursul 10 - andrei.clubcisco.roandrei.clubcisco.ro/cursuri/4so2/cursuri2009/10.Gestiunea...

Cursul 10

10Gestiunea fisierelor7 mai 2009

26.02.2009 2

Test Curs 9

� Pe un sistem Linux cu split 3G/1G, la ce adres fizic este � �mapat adresa virtual 0xC0001000? Dar 0xF8001000?� �

� Care este complexitatea (e.g. O(1), O(n), etc.) aloc rii unei �pagini? Dar a unei structuri task_struct?

� Pentru folosirea unei zone de memorie dinamic alocat , în �context întrerupere, ce primitive de alocare pot fi folosite în Linux? Dar în Windows?

Gestiunea fi ierelor�

� Gestiunea fi ierelor � no iuni generale� �� Gestiunea fi ierelor în Linux�

� VFS� Inode cache, dcache, page cache� Buffer cache

� Gestiunea sistemelor de fi iere în Windows�� Cache manager� Fast I/O

Bibliografie

� LKD: capitolele 12, 15� WI: capitolele 11, 12

Entit ti fundamentale�

� Superblock � con ine informa ii despre sistemul de fi iere � � �(dimensiunea blocului, inode-ul r d cin ); exist atât pe disc � � � �cât i în memorie�

� File � structura intern SO ce descrie un fi ier deschis; � �exist doar în memorie�

� Inode (FCB - file control block) � entitatea ce identific un �fi ier în mod unic; exist atât pe disc cât i în memorie� � �

� Dentry- asociaz un nume cu un fi ier; exist atât pe disc � � �cât i în memorie�

Entit i fundamentale � în memorie��

FILE

file descriptor

File descriptor table

FILE

DENTRY INODE

DENTRY

TipPermisiuni

....

LinkFile descriptorduplicat

Date

Date

DateDate

Entit i fundamentale � pe disk��

INODEDENTRY

Date

SUPERBLOCK

DENTRY

DENTRY

Block management

Exemplu: PITIX

Superblock IMAP DMAP IZONE DZONE

Gestiunea sistemelor de fi iere în sistemul de operare�

Filesystemdriver

Block I/O layer

Filesystemdriver

stat open read

Generic filesystem layer

Opera ii fundamentale�

� Montarea � Deschiderea unui fi ier�� Determinarea atributelor fi ierului�� Citirea de date din fi ier�� Scrierea de date în fi ier�� Închiderea unui fi ier�� Crearea unui fi ier�� tergerea unui fi ier� �

Montarea sistemului de fi iere�

� (sau înregistrarea lui în cadrul sistemului)� Intrare: un disk (parti ie)�� Ie ire: un DENTRY c tre directorul r d cin� � � � �� Opera ii: verificare parti ie, determinare diver i parametri, � � �

determinare inode-ului r d cin� � �� Exemplu PITIX:

� Se verific MAGIC-ul�� Se determin dimensiunea blocului�� Se cite te inode-ul r d cin i se creaz dentry-ul asociat� � � � � �

Deschiderea unui fi ier�

� Intrare: o cale� Ie iere: un file descriptor�� Opera ii:�

� Determinarea sistemului de fi iere�� Pentru fiecare nume din cale, determinarea inode-ului asociat cu

numele� Odat g sit inode-ul ultimului nume din cale se creaz structura FILE � � �

i se aloc o intrare în tabela de descriptori de fi ier � � �

Determinarea atributelor fi ierului�

� Intrare: file descriptor� Ie iere: atributele fi ierului� �� Opera ii:�

� Se acceseaz inode-ul (file->dentry->inode)�� Se citesc atributele din inode

Citirea de date din fi ier�

� Intrare: file descriptor, offset, length� Ie ire: date�� Opera ii:�

� Se acceseaz inode-ul (file->dentry->inode)�� Se determin blocurile de date�� Se copieaz datele de pe disk în memorie i sunt apoi trimise � �

utilizatorului

Scrierea de date în fi ier�

� Intrare: file descriptor, offset, length, date� Ie ire:�� Opera ii:�

� Se acceaz inode-ul�� Se aloca unul sau mai multe noi blocuri pe disc � se caut blocuri �

libere, se marcheaz ca fiind ocupate�� Se adaug blocurile alocate la inode�� Se copieaza datele de la user in bufere interne i apoi se scriu pe �

disk

Închiderea unui fi ier�

� Intrare: file descriptor� Ie iere:�� Opera ii:�

� Se decrementeaz reference counter-ul structurii FILE�� Dac referecen counter-ului structurii FILE ajunge la 0, se terge � �

structura� Se seteaz pe NULL intrarea din tabela de descriptori de fi ier� �

Directoare

Directoarele sun fi iere ce con in o � �în iruire (vector, câteodat arbore) de � �

DENTRY-uri.

Crearea unui fi ier�

� Intrare: o cale� Ie ire:�� Opera ii:�

� Se determin inode-ul directorului în care trebuie ad ugat fi ierul� � �� Se citesc blocurile de date� Se insereaz un nou dentry�� Se scriu pe disc blocurile de date modificate

tergerea unui fi ier� �

� Intrare: o cale� Ie ire:�� Opera ii:�

� Se determin inode-ul directorului în care trebuie ad ugat fi ierul� � �� Se citesc blocurile de date� Se caut i se sterge DENTRY-ul cu numele fi ierului (caz special: � � �

link-uri)� Se scriu pe disc blocurile de date modificate

Gestiunea sistemelor de fi iere în Linux�

VFS

Filesystemdriver

Block I/O layer

Inode cache Dentry cache Page cache

file

Filesystemdriver

inode Superblock

stat open read

inode

dentry

dentry filefile Superblock

file

Opera ii superblock�

� fill_super� put_super� write_super� read_inode� write_inode

� delete_inode� clear_inode� Statfs� remount_fs

Opera ii inode�

� Create� Lookup� Link� Unlink� Symlink� Mkdir� rmdir

� Rename� Readlink� follow_link� put_link� Truncate� ...

Inode cache

� Opera iile de citire a inode-urilor de pe disc sunt costisitoare�� Un inode citit se va men ine în memorie (pân când apar � �

condi ii de low memory)�� C utarea inode-ului se face cu ajutorul unei tabele hash�� Func ia de hash (sb, inode_number)�

Dentry

� St ri: �� Used � d_inode este valid i obiectul dentry este folosit�� Unused � d_inode este valid dar obiectul dentry nu este folosit� Negative � d_inode nu este valid (NULL); fie inode-ul nu a fost înc �

înc rcat fie a fost ters� �

� Dentry cache� Lista de dentry-uri folosite (dentry->d_state == used)� Lista celor mai recent folosite dentry-uri (sortat dup timpul de � �

access)� Un hash table pentru a elimina parcurgerea arborelui

Page cache

� Men ine în memorie datele citite de pe disc�� Se folose te pentru:�

� read/write� Mmap

� Cache-ul se face la nivel de fi ier i nu de block device -> � �este nevoie de o infrastructur pentru translatarea offset-�urilor din fi iere în blocuri pe disc�

� Cache-ul se bazeaz pe un radix tree�

address_space

� Structura care este folosit de page-cache pentru a �translata adrese

� Datorit acestei abord ri se poate face caching nu doar pe � �map ri de fi iere� �

� Opera ii address_space:�� write_page, read_page� Bmap� direct_IO� ...

Citirea de date din fi ier�

� generic_file_read � implementare generic�� Se verific dac pagina nu exist în page cache� � �� Daca exist se copiaz datele din pache cache în buffer-ul � �

utilizatorului� Dac nu exist se apelaz a_ops->readpage()� � �

� block_read_full_page � implementare generic , folose te � �a_ops->bmap()

� De la versiunea 2.4 nu mai exist un buffer cache separat�� S-a eliminat problema double buffering� S-au eliminat problemele de sincronizare

� buffer_head-urile � structurile care fac maparea dintre un buffer în memorie i un block pe disc folosesc memorie �alocat de page cache�

Buffer cache

Gestiunea sistemelor de fi iere în Windows�

Entit i fundamentale��

Analogie UNIX- Windows

� Superblock � Volume Parameter Block� Inode � File Control Block� File � File Object� Dentry -

Interac iune FSD � MM � Cache manager�

Tratarea IRP-urilor de scriere / citire în FSD

� Dac FILE_FLAG_NO_BUFFERING nu a fost setat:�� se copieaz datele în buferul utilizatorul cu ajutorul cache �

managerului: CcCopyRead

� Altfel:� Se creaz noi IRP-uri ce vor fi pasate storage device-ului�

System cache address space

Maparea fi ierelor în system cache�

Maparea fi ierelor în system cache (2)�

Fast I/O

26.02.2009 39

Intreb ri�

?