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 [2018/04/24 22:32] (current)
anda.nicolae [Operații asupra spațiului de adresă]
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: 2018/04/24 22:32 by anda.nicolae
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