b.Alg namei

Сделай свою wap-шпаргалку =) попробуй конструктор сайтов http://www.panweb.com/


algoritm namei /* converteşte nume cale într-un inod */
intrare: nume cale
ieşire: inod blocat
{
if (numele căii începe din rădăcină)
inod de lucru = inodul rădăcină (algoritm iget );
else
inod de lucru = inodul directorului curent (algoritm iget );
while (mai sunt componente neparcurse)
{
citeşte următoarea componentă din nume cale;
verifică dacă inodul de lucru este al unui director, permisiunile de acces în regulă;
if (inodul în lucru este al rădăcinii şi componenta este "..")
continue;
citeşte directorul (inodul de lucru) prin folosirea repetată a algoritmilor
bmap, bread şi brelse;
if (componenta se potriveşte cu numele unei intrări în director (inodul de lucru))
{
citeşte numărul inodului din intrarea corespunzătoare componentei identificate;
eliberează inodul de lucru (algoritm iput );
inodul de lucru = inodul componentei din intrare (algoritm iget);
}
else /* componenta nu este în director */
return (nici un inod);
}
return (inodul de lucru);
}
|| Nucleul execută o căutare secvenţială în fişierului director asociat inodului de lucru, încercând să determine o potrivire între componenta curentă a numelui căii şi numele unei intrări în director. Pe baza offsetului (se începe cu offsetul 0) în fişierul director se determină blocul disc corespunzător (folosind algoritmul bmap) pe care-l citeşte (folosind algoritmul bread'). Tratând conţinutul blocului ca o secvenţă de intrări în director, nucleul caută o intrare care se potriveăte cu componenta curentă din numele căii. Dacă găseşte o potrivire, el înregistrează numărul inodului din intrarea respectivă, elibereazã blocul (algoritm brelse) şi vechiul inod de lucru (algoritm iput), şi alocă un inod pentru fişierul din director pentru care s-a realizat potrivirea (algoritm iget').