[pso] [tema3] dimensiune pitix_dir_entry

omar Chouydary chouydary at yahoo.com
Sun Apr 29 17:59:49 EEST 2007


Ok, dar cum ramane atunci cu problema inode-urilor pe mai multe blocuri?
   
  Un ex este urmatorul:
   
  Avem raportul block_size / inode_size = 3.5
  Avem de citit un inode cu indicele 6
  Sunt de acord ca in kernel nu e bine sa folosim float.
  Dar, daca folosim acea functie pitix_inodes_per_block care intoarce un int, vom avea ca rezultat al raportului block_size / inode_size valoarea (int) (3.5) = 3.
  Deci la selectarea blocului in care se afla inode-ul 6, se va selecta blocul (6 / 3) = 2
  In schimb daca foloseam valoarea 3.5, se va selecta blocul 
  (int ) ( 6 / 3.5 ) = (int) ( 1. ....) = 1 => ca in cele 2 cazuri mi se va selecta un alt bloc.
  Din cate am inteles dintr-un mail dat de dvs un inode se poate afla si intre 2 blocuri din IZONE => varianta corecta este a 2-a.
  Cum facem ca sa folosim acea valoare de tip float?
  Am facut un mic test, si la un apel de genul "ino / pitix_inodes_per_block()" NU se inlocuieste  prin "ino / block_size / inode_size => (ino * inode_size ) / block_size " ( ceea ce ar fi cat de cat ok) ci se face impartirea din functia pitix_inodes_per_block si apoi ino / pitix_inode.....
  De asta intreb cam cum facem din moment ce float este inaccesibil.
  Am vazut ca in MINIX se foloseste acea impartire intreaga, dar nu ma prind cum de functioneaza. 
   
  Omar.

Octavian Purdila <tavi at cs.pub.ro> wrote:
  On Sunday 29 April 2007 13:17, omar Chouydary wrote:
> O problema asemanatoare cu cate inode-uri sunt pe superbloc este asta:
> 
> Avand in vedere ca structura pitix_dir_entry are 20 de octeti, iar dimensiunea unui bloc este de 512, 1024, etc... inseamna ca intr-un bloc nu incape un numar fix de astfel de structuri.
> Atunci ce facem in cazul directoarelor:
> 
> a) scriem in fiecare bloc de date (al inode-ului respectiv corespunzator directorului) cate structuri pitix_dir_entry incap, si daca urmatoarea nu incape in totalitate, o scriem de la inceput intr-un nou bloc de date
> 
> b) scriem in fiecare bloc de date cate incap, si in plus scriem in ce a ramas ce putem dintr-o noua structura pitix_dir_entry astfel incat o structura s-ar putea imparti intre 2 blocuri consecutive de date 
> 
> Mi se pare mai usor de implementat varianta a, dar risipeste niste octeti la fiecare bloc de date.
> Daca trebuie aleasa varianta b, atunci de ce in pitix.h avem functia asta :
> 
> static inline int pitix_dir_entries_per_block(struct super_block *sb)
> {
> return sb->s_blocksize/pitix_dir_entry_size(sb);
> }
> 
> Nu ar fi trebuit sa intoarca un float pentru a sti exact cate structuri (cu tot cu virgula) incap astfel incat sa pot sa verific in ce bloc exact este o anumita structura?
> 

Directoarele au asociate un _singur_ bloc de date, astfel incat nu exista problema pe care o descriu tu. 

tavi


       
---------------------------------
Ahhh...imagining that irresistible "new car" smell?
 Check outnew cars at Yahoo! Autos.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20070429/439cf0f7/attachment.htm


More information about the pso mailing list