[pso] [Tema5][Linux]Neclaritati bio + flush

Victor Jach victor_jach at yahoo.com
Sun Jun 24 11:49:27 EEST 2007


Salut,

2 intrebari:
- alocarea paginilor: nu ar fi normal sa alocam un numar de pagini care sa acopere dimensiunea de date de transferat ?
  vroiam sa spun ca pentru exemplul anterior in care pt prima citire de bloc logic avem nevoie de citirea a doua blocuri fizice 
 (512 si 4 ca dimensiuni de date citite  ) nu ar fi normal sa fie suficienta o pagina ? din raspunsul dat de tine eu am inteles ca fiecare sector am o pagina asociata. care este argumentul ?

- la scrierea unui sector logic a carui inceput se afla la un offset relativ la sectorul fizic este necesara o citire prealabila a celui din urma. 
 ma refer la faptul ca daca nu se face o citire prealabila se face o alterare de date in sectorul fizic si anume sectorul logic precedent celui curent de scris. E okay daca facem asta cu bread sau exista si alte variante ? 

victor jach

----- Original Message ----
From: Razvan Deaconescu <razvand at cs.pub.ro>
To: Proiectarea Sistemelor de Operare <pso at cursuri.cs.pub.ro>
Sent: Friday, June 22, 2007 12:12:07 PM
Subject: Re: [pso] [Tema5][Linux]Neclaritati bio + flush


sorin gsmcreation wrote:
> Salut,
> 
> Am citit ceva documentatie, insa am destule chestii
> neclare legate de tema 5.
> 
> Pentru o citire, de exemplu, din userspace, ssr 
> primeste cerere de citire a unui sector logic, sa 
> zicem sectorul 1.
> 
> Citirea acestui sector logic necesita citirea a doua 
> parti (in total: 512+4 bytes) care se afla in doua 
> sectoare fizice (in sectoarele 1 si 2 fizice in acest 
> caz). Aceste sectoare fizice trebuie citite de pe
> /dev/sdb1 (si similar pt /dev/sdb2). Trebuie
> construita
> deci o structura bio care trebuie trimisa catre
> driverul
> scsi, prin care sa-i precizam ca avem nevoie de 
> 512 bytes din sectorul 1 si 4 bytes din sectorul 2 de 
> pe /dev/sdb1.

De fapt trebuie sa construiesti doua structuri bio: una va fi transmisa 
driver-ului SCSI catre /dev/sdb1 si alta catre /dev/sdb2.

> Dupa ce am studiat ceva documentatie, tot nu-mi dau
> seama care campuri din bio trebuie completate astfel
> incat sa construiesc un bio catre scsi in care sa cer:
> - X bytes din sectorul i incepand de la un offset
> - Y bytes din sectorul i+1 incepand de la offset 0
> (unde X+Y = 516 bytes)
> - cei X+Y bytes sa fie copiati intr-un buffer pe care
> sa-l precizez eu, iar cu ajutorul acestui buffer sa
> construiesc raspunsul la cererea din userspace
> 
> M-am uitat si prin surse si pe lista de discutii, insa
> tot nu mi-am dat seama care e codul pe care il caut, 
> asa ca orice sugestie este binevenita.

Construiesti un bio in care precizezi:
* campul bi_bdev catre dispozitiv (obtinut cu open_bdev_excl)
* campul bi_sector cu primul sector fizic din care citesti informatiile

In cazul tau (exemplul dat de tine) bio-ul va contine 2 pagini si va 
trebui alocat corespunzator. De exemplu
         my_bio = bio_alloc (GFP_NOIO, 2);

In continuare folosesti bio_add_page pentru a adauga pagina cu 
informatiile utile la bio. Vei seta, in prealabil, campurile bi_vcnt si 
bi_idx ale bio-ului la 0.

> De asemenea, nu inteleg de ce avem nevoie de flush
> atata timp cat nu folosim un camp precum dev->data 
> ca in exemplu, ci fiecare operatie din userspace 
> genereaza doua bio-uri care asigura consistenta 
> datelor pe partitiile fizice.

Exista mai multe niveluri de caching intre transmiterea informatiei din 
user-space pana cand aceasta ajunge pe dispozitivul fizic.

O operatiei de write ajunge intai in page-cache apoi ajunge la modulul 
tau, acolo se formeaza bio-urile care sunt transmise catre dispozitivul 
fizic.

Exista de asemenea, un nivel de caching si la citire. Operatia de flush 
va invalida toate aceste cache-uri astfel incat informatia va fi citita 
_direct_ de pe dispozitiv, sau va fi scrisa _direct_ pe dispozitiv.

Razvan
_______________________________________________
pso mailing list
pso at cursuri.cs.pub.ro
http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/pso


       
____________________________________________________________________________________
Be a better Heartthrob. Get better relationship answers from someone who knows. Yahoo! Answers - Check it out. 
http://answers.yahoo.com/dir/?link=list&sid=396545433
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20070624/d756a0fb/attachment.html


More information about the pso mailing list