CATEGORII DOCUMENTE |
Driverele de disc - UNIX
Unitatile de disc pe sistemele UNIX au fost configurate in sectiuni ce contin sisteme de fisiere individuale. Daca un disc contine 4 sisteme de fisiere , un administrator poate lasa unul nemontat, poate monta altul cu optiunea "doar pentru citire "si poate monta ultimele doua cu optiunea "citire-scriere" . Chiar daca toate sistemele de fisiere coexista pe o unitate fizica, utilizatorii nu pot accesa fisierele din sistemul de fisiere nemontat folosind metodele de acces descrise in capitolele 4 si 5 si nici nu pot scrie fisiere in sistemul de fisiere marcat doar pentru citire. In plus, intrucat fiecare sectiune ( si din acest motiv sistemul de fisiere ) ocupa piste si cilindrii alaturati pe disc, este mai usor sa se copieze intregul sistem de fisiere decat daca ar fi dispersat pe intregul volum al discului.
Driverul de disc translateaza adresa sistemului de fisiere, constand intr-un numar de dispozitiv logic si numarul blocului, intr-un sector particular de pe disc. Driverul obtine adresa intr-unul din cele doua moduri: fiecare procedura de strategy foloseste un buffer din sistemul de buffere si antetul buffer-ului contine numarul dispozitivului si al blocului, sau procedurile read si write folosesc numarul dispozitivului logic (numarul minor ) ca un parametru; convertesc deplasamentul salvat in uArea la adresa de bloc potrivita. Driverul de disc foloseste numarul dispozitivului pentru a identifica driverul fizic si sectiunea particulara ce va fi folosita, mentinand tabelele interne pentru a gasi sectorul care marcheaza inceputul unei sectiuni de disc. In final, adauga numarul blocului din sistemul de fisiere la numarul sectorului de start pentru a identifica sectorul folosit pentru transmisia I/O.
Figura 6.7. Sectiunile de disc pentru discul RP07
Marimea si lungimea sectiunilor de disc au fost fixate in concordanta cu tipul discului. De exemplu, discul DEC RP07 este partitionat in sectiunile aratate in figura 6.7. Presupunem ca fisierele "/dev/dsk0", "/dev/dsk1", "/dev/dsk2" si "/dev/dsk3" corespund sectiunilor de la 0 la 3 ale unui disc RP07 si au numerele minore de la 0 la 3. Presupunem ca marimea unui bloc logic al sistemului de fisiere este aceeasi cu a unui bloc disc. Daca nucleul incearca sa acceseze blocul 940 din sistemul de fisiere continut in "/dev/dsk3", driverul de disc acceseaza blocul 336940 (sectiunea 3 incepe la blocul 336000; 336000+940=336940 ) de pe disc.
Marimea sectiunilor discului variaza si administratorii configureaza sectiunile sistemului de fisiere la marimea corespunzatoare. Sectiunile se pot suprapune pe disc. De exemplu, sectiunile 0 si 1 in RP07 sunt disjuncte, dar impreuna ele pot acoperi blocurile de la 0 la 1008000, intregul disc. Suprapunerea sectiunilor nu conteaza, sistemele de fisiere continute in sectiuni fiind configurate asa incat sa nu se suprapuna. Este avantajos sa avem o sectiune care sa includa intregul disc, pentru ca intregul volum sa poata fi copiat rapid.
Folosirea unor sectiuni fixe restrictioneaza flexibilitatea configurarii discului. Cunostintele codificate hardware despre sectiunile de disc nu pot fi pastrate in driverul de disc dar pot fi pastrate pe disc intr-o tabela configurabila. Oricum, este dificil de gasit o pozitie generica pe toate discurile pentru tabela de cuprins a volumului si care sa pastreze compatibilitatea cu versiunile anterioare ale sistemului. In implementarea curenta a System V se asteapta ca blocul de boot al primului sistem de fisiere de pe un disc sa ocupe primul sector al volumului. Cu toate acestea, driverul de disc poate contine informatii codificate hardware acolo unde tabela de cuprins a volumului este memorata pentru acest disc particular, permitand sectiuni de disc de dimensiuni variabile.
Din cauza traficului inalt la nivelul discului tipic sistemelor UNIX, driverul de disc trebuie sa maximizeze cantitatea de date transferate pentru a obtine cele mai bune performante ale sistemului. Cel mai moderne controllere de disc realizeaza planificarea sarcinilor discului, pozitionand bratul discului si transferand datele intre disc si CPU; altfel driverul de disc trebuie sa indeplineasca aceste sarcini.
Programele utilitare pot folosi fiecare o interfata bloc sau caracter pentru a accesa datele de pe disc direct, ocolind metodele de acces de la fisierele obisnuite investigate in capitolele 4 si 5. Doua programe importante care lucreaza direct cu discul sunt mkfs si fsck. Mkfs formateaza o sectiune de disc pentru un sistem de fisiere UNIX, creand un superbloc, lista de inoduri, lista blocurilor disc libere si un director radacina al noului sistem de fisiere. Fsck verifica consistenta unui sistem de fisiere existent si corecteaza erorile.
Consideram programul din figura 6.8 si fisierele "/dev/dsk15" si "/dev/rdsk15", si presupunem ca comanda ls tipareste urmatoarele informatii:
ls -l /dev/dsk15 /dev/rdsk15
br - - - - - - - - 2 root root 0,21 Feb 12 15:40 /dev/dsk15
crw- rw - - - - 2 root root 7,21 Mar 7 09:29 /dev/rdsk15
Programul arata ca "/dev/dsk15"este un dispozitiv de tip bloc apartinand radacinii si numai radacina poate sa-l citeasca direct. Numarul sau major este 0 si numarul minor este 21. Fisierul "/dev/rdsk15" este de tip caracter apartinand radacinii, dar permite citirea si scrierea pentru proprietar si grup . Numarul major este 7 si numarul minor este 21.
#include <fcntl.h> main() lseek (fd1, 8192L, 0); |
|||||
lseek (fd2, 8192L, 0); if ((read(fd1,buf1,sizeof(buf1))==-1) || (read (fd2,buf2,sizeof(buf2))==-1 for (i=0; i < sizeof(buf1); i++) if (buf1[i] != buf2[i] printf ( "ambele siruri (buf1 si buf2) contin aceleasi informatiin"); } |
|
||||
Figura 6.8. Citirea datelor de pe disc folosind interfata caracter si
interfata bloc
Un proces deschizand fisierele castiga accesul la dispozitiv prin tabela de comutare a dispozitivelor de tip caracter si, respectiv, prin tabela de comutare a dispozitivelor de tip bloc si numarul minor 21 informeaza driverul care sectiune de disc este accesata - de exemplu, driverul fizic 2, sectiunea 1. Deoarece numerele minore sunt identice pentru cele doua fisiere, amandoua refera aceeasi sectiune de disc, presupunand ca este un singur dispozitiv. Deci un proces care executa programul deschide acelasi driver de doua ori ( prin interfete diferite ), se pozitioneaza la deplasamentul 8192 in dispozitiv si citeste datele de la acea pozitie. Rezultatele apelurilor read trebuie sa fie identice , presupunand ca nici o alta operatie a sistemului nu este in curs de desfasurare.
Programele care citesc si scriu direct pe disc sunt periculoase deoarece ele pot citi si scrie date nesigure, primejduind securitatea sistemului. Administratorii pot proteja interfetele prin setarea permisiunilor corespunzatoare. De exemplu, fisierele "/dev/dsk15" si "/dev/rdsk15" trebuie sa aiba acelasi proprietar ca cel al radacinii si permisiunile lor trebuie sa permita acestuia sa citeasca fisierele dar nu trebuie sa permita nici unui alt utilizator sa citeasca sau sa scrie.
Programele care citesc si scriu direct pe disc pot de asemenea sa distruga consistenta datelor sistemului de fisiere. Algoritmii sistemului de fisiere explicati in capitolele 3,4 si 5 coordoneaza operatiunile de I/ O cu discul pentru a pastra o imagine consistenta a structurilor de date ale acestuia, incluzand listele blocurilor disc libere si pointeri de la inoduri la blocurile de date directe sau indirecte. Procesele care acceseaza discul direct ocolesc acesti algoritmi. Chiar daca sunt configurate cu atentie, exista inca problema consistentei daca ruleaza in timp ce activitatea altor sisteme de fisiere continua. Pentru aceste motive, fsck nu trebuie sa se execute pe un sistem de fisiere activ.
Diferenta intre cele doua interfete de disc consta in modul de lucru cu buffer-ul cache. Cand acceseaza interfata dispozitivului de tip bloc, nucleul urmareste acelasi algoritm ca si pentru fisierele obisnuite, exceptand faptul ca dupa convertirea deplasamentului logic intr-un deplasament de bloc logic, el il trateaza ca un numar de bloc fizic in sistemul de fisiere. Apoi acceseaza datele prin buffer-ul cache si interfata de strategy a driverului. Totusi, cand acceseaza discul prin interfata de tip caracter, nucleul nu converteste deplasamentul in fisier , dar il transmite imediat la driver prin uArea. Rutina read sau write a driverului converteste deplasamentul la o adresa de bloc si copiaza datele direct in spatiul de adrese utilizator, ocolind buffer-le nucleului.
Deci, daca un proces scrie un dispozitiv de tip bloc si un al doilea proces citeste apoi un dispozitiv de tip caracter de la aceeasi adresa, al doilea proces nu poate citi datele pe care primul proces le-a scris, deoarece datele pot fi inca in buffer-ul cache si nu pe disc.
Folosirea unei interfete de tip caracter poate de asemenea introduce o comportare ciudata. Daca un proces citeste sau scrie un dispozitiv brut in unitati mai mici decat lungimea blocului, de exemplu, rezultatele sunt dependente de driver. Cand un octet este scris pe o banda, fiecare octet poate aparea in diferite blocuri ale benzii.
Avantajul folosirii interfetei brute este viteza, presupunand ca nu exista avantaje la pastrarea datelor pentru accesul anterior. Procesele care acceseaza dispozitive de tip bloc, transfera blocuri de date a caror marime este constransa de marimea blocului logic al sistemului de fisiere. De exemplu, daca un sistem de fisiere are o marime a blocului logic de 1ko, cel mult 1 ko se transfera la o singura operatiune I/O. Totusi, procesele care acceseaza discul ca pe un dispozitiv de tip caracter pot transfera mai multe blocuri disc in timpul unei operatiuni cu discul. Functional, procesul vede acelasi rezultat, dar interfata de tip caracter poate fi mult mai rapida. In figura 6.8. cand un proces citeste 4096 de octeti folosind interfata bloc pentru un sistem de fisiere cu blocuri de 1ko, nucleul executa un ciclu intern de 4 ori si acceseaza discul in timpul fiecarei iteratii inainte de revenirea din apelul sistem, dar cand citeste interfata de tip caracter, driverul poate satisface citirea printr-o singura operatiune cu discul. In plus, folosirea interfetei bloc determina o extracopie intre spatiul de adrese utilizator si buffere-le nucleului, operatiune care este evitata de interfata de tip caracter.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1169
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved