Differences

This shows you the differences between two versions of the page.

Link to this comparison view

so2:laboratoare:lab09 [2018/04/24 22:14]
anda.nicolae [Operații asupra inode-urilor de tip fișier]
so2:laboratoare:lab09 [2021/05/03 11:06] (current)
teodor_stefan.dutu [Operații pentru inode - inode_operations]
Line 121: Line 121:
 Operațiile pentru inode sunt descrise de structura [[http://​lxr.free-electrons.com/​source/​include/​linux/​fs.h?​v=4.9#​L604 | struct inode_operations]]. Operațiile pentru inode sunt descrise de structura [[http://​lxr.free-electrons.com/​source/​include/​linux/​fs.h?​v=4.9#​L604 | struct inode_operations]].
  
-Inode-urile sunt de mai multe tipuri: fișier, director, fișier special (pipe, fifo), dispozitiv de tip bloc, dispozitiv de tip caracter, link etc. Din acest motiv, operațiile pe care trebuie un inode să le implementeze sunt diferite pentru fiecare tip de inode. Mai jos vor fi prezentate în detaliu operațiile implementate pentru un [[#Inode-urile_de_tip_fi.C8.99ier|inode de tip fișier]] și un [[#Opera.C8.9Bii_asupra_inode-urilor_de_tip_director|inode de tip director]].+Inode-urile sunt de mai multe tipuri: fișier, director, fișier special (pipe, fifo), dispozitiv de tip bloc, dispozitiv de tip caracter, link etc. Din acest motiv, operațiile pe care trebuie un inode să le implementeze sunt diferite pentru fiecare tip de inode. Mai jos vor fi prezentate în detaliu operațiile implementate pentru un [[#inode-urile_de_tip_fisier|inode de tip fișier]] și un [[#operatii_asupra_inode-urilor_de_tip_director|inode de tip director]].
  
 Operațiile unui inode sunt inițializate și accesate folosind câmpul ''​i_op''​ al structurii [[http://​lxr.free-electrons.com/​source/​include/​linux/​fs.h?​v=4.9#​L604 | struct inode]]. Operațiile unui inode sunt inițializate și accesate folosind câmpul ''​i_op''​ al structurii [[http://​lxr.free-electrons.com/​source/​include/​linux/​fs.h?​v=4.9#​L604 | struct inode]].
Line 211: Line 211:
 Între spațiul de adrese al unui proces și fișiere există o strânsă legătură: execuția programelor se face aproape exclusiv prin maparea fișierului în spațiul de adresă al procesului. Întrucât această abordare funcționează foarte bine și este destul de generală, poate fi folosită și în cazul apelurilor de sistem obișnuite cum ar fi ''​read''​ și ''​write''​. Între spațiul de adrese al unui proces și fișiere există o strânsă legătură: execuția programelor se face aproape exclusiv prin maparea fișierului în spațiul de adresă al procesului. Întrucât această abordare funcționează foarte bine și este destul de generală, poate fi folosită și în cazul apelurilor de sistem obișnuite cum ar fi ''​read''​ și ''​write''​.
  
-Structura care descrie spațiul de adresă este [[http://lxr.free-electrons.com/​source/​include/​linux/​fs.h?v=4.9#L431 | struct address_space]] , iar operațiile cu aceasta sunt descrise de structura [[http://lxr.free-electrons.com/​source/​include/​linux/​fs.h?v=4.9#L371 | struct address_space_operations]]. Pentru inițializarea operațiilor asupra spațiului de adresă, se completează câmpul ''​%%inode->​i_mapping->​a_ops%%''​ al inode-ului de tip fișier.+Structura care descrie spațiul de adresă este [[https://elixir.bootlin.com/​linux/​v4.15/​source/​include/​linux/​fs.h#​L391 | struct address_space]],​ iar operațiile cu aceasta sunt descrise de structura [[https://elixir.bootlin.com/​linux/​v4.15/​source/​include/​linux/​fs.h#​L331 | struct address_space_operations]]. Pentru inițializarea operațiilor asupra spațiului de adresă, se completează câmpul ''​%%inode->​i_mapping->​a_ops%%''​ al inode-ului de tip fișier.
  
-Un exemplu este structura [[http://lxr.free-electrons.com/​source/​fs/​minix/​inode.c?v=4.9#L428 | minix_aops]] din sistemul de fișiere [[http://lxr.free-electrons.com/​source/​fs/​minix/​inode.c?v=4.9#L442| minix]]:+Un exemplu este structura [[https://elixir.bootlin.com/​linux/​v4.15/​source/​fs/​minix/​inode.c#​L428 | minix_aops]] din sistemul de fișiere [[https://elixir.bootlin.com/​linux/​v4.15/​source/​fs/​minix/​inode.c#​L441| minix]]:
  
 <code cpp> <code cpp>
Line 231: Line 231:
 </​code>​ </​code>​
   ​   ​
-Funcția [[http://lxr.free-electrons.com/​source/​fs/​buffer.c?v=4.9#L2145 | generic_write_end ]] este deja implementată. Majoritatea funcțiilor specifice sunt foarte ușor de implementat,​ după cum urmează:+Funcția [[https://elixir.bootlin.com/​linux/​v4.15/​source/​fs/​buffer.c#​L2144 | generic_write_end ]] este deja implementată. Majoritatea funcțiilor specifice sunt foarte ușor de implementat,​ după cum urmează:
  
 <code cpp> <code cpp>
Line 274: Line 274:
 </​code>​ </​code>​
  
-Tot ce mai trebuie făcut este să se implementeze [[http://lxr.free-electrons.com/​source/​fs/​minix/​inode.c?v=4.9#L375 | minix_get_block]],​ care trebuie să translateze un bloc al unui fișier într-un bloc de pe device. Dacă flag-ul ''​create''​ primit ca parametru este activat, trebuie alocat un nou bloc. În cazul în care se creează un bloc nou, trebuie marcată corespunzător harta de biți. Pentru a înștiința nucleul să nu mai citească blocul de pe disc, trebuie marcat ''​bh''​ cu [[http://lxr.free-electrons.com/​source/​fs/​minix/​itree_common.c#​L197|set_buffer_new]]. Trebuie asociat buffer-ul cu blocul cerut prin funcția [[http://lxr.free-electrons.com/​source/​include/​linux/​buffer_head.h?v=4.9#L335 | map_bh]].+Tot ce mai trebuie făcut este să se implementeze [[https://elixir.bootlin.com/​linux/​v4.15/​source/​fs/​minix/​inode.c#​L375 | minix_get_block]],​ care trebuie să translateze un bloc al unui fișier într-un bloc de pe device. Dacă flag-ul ''​create''​ primit ca parametru este activat, trebuie alocat un nou bloc. În cazul în care se creează un bloc nou, trebuie marcată corespunzător harta de biți. Pentru a înștiința nucleul să nu mai citească blocul de pe disc, trebuie marcat ''​bh''​ cu [[https://elixir.bootlin.com/​linux/​v4.15/​source/​fs/​minix/​itree_common.c#​L198|set_buffer_new]]. Trebuie asociat buffer-ul cu blocul cerut prin funcția [[https://elixir.bootlin.com/​linux/​v4.15/​source/​include/​linux/​buffer_head.h#​L341 | map_bh]].
  
 ===== Structura dentry ===== ===== Structura dentry =====
so2/laboratoare/lab09.txt · Last modified: 2021/05/03 11:06 by teodor_stefan.dutu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0