[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