Fișierele speciale ca o interfață universală
Conceptul de „fișier special“, a apărut în sistemul de operare UNIX. Un fișier special, numit, de asemenea, un fișier virtuale asociat cu un anumit dispozitiv de intrare-ieșire și îl prezintă pentru restul sistemului de operare și a proceselor de aplicare sub forma o colecție nestructurate de octeți, adică sub forma unui fișier obișnuit. Cu toate acestea, spre deosebire de fișierul de obicei un fișier special nu stochează date statice, precum și o interfață la una dintre sistemul de operare drivere de hardware.
Folosind fișiere speciale, în multe cazuri, simplifică semnificativ operațiunile de programare cu dispozitive externe. Un fișier special poate lucra în același mod ca și cu convenționale, adică deschis, citit de la ea, sau scrie la un anumit număr de octeți, iar după operația de închidere. În acest scop, familiar multor programatori la apelurile sistem pentru lucrul cu fișiere regulate: deschis, de a crea, citi, scrie și închide. În plus, există unele apeluri de sistem, utilizate numai atunci când se lucrează cu fișiere specifice, cum ar fi loctl de apel, prin care dispozitivul poate transmite o comandă de la controler. Pentru a afișa terminalul alfanumeric este asociat cu un fișier / dev / tty3 speciale, mesajul «Bună ziua, friendsl», pur și simplu deschideți fișierul cu ajutorul apelului sistem deschis:
fd = open (7dev / tty3“, 2)
Puteți afișa apoi un mesaj folosind apelul sistem de scriere:
scrie (fd, "Bună ziua, prieteni!", 15)
Pentru dispozitivele de acces direct are sens ca un pointer la poziția curentă în fișier, care poate fi controlat cu ajutorul lseek apel de sistem.
Evident, reprezentarea dispozitivului ca un fișier și utilizarea dispozitivului pentru a controla apelurile sistem de fișiere permite să efectueze numai operații de gestionare simple, care sunt reduse la dispozitivul de transfer în secvența de octeți. Pentru unele dispozitive, astfel de operațiuni sunt destul de adecvate, în principal, sunt dispozitive care afișează un șir de caractere (terminale alfanumerice imprimante alfanumerice) sau primirea de la utilizator un șir de caractere (cheie). Formatarea dispozitivelor IO în această clasă de serviciu se efectuează cu ajutorul unei liste de coduri începe simboluri și secvențe ale acestora, de exemplu, linefeed și transport readuce imprimanta sau terminalul suficient pentru a adăuga o secvență de caractere de text coduri octal <12> <15>.
Pentru dispozitivele cu informații despre organizație mai complexe, cum ar fi display-uri grafice, pe interfața de control trebuie să sprijine operațiuni mai complexe, cum ar fi completarea culoarea zona sau afișa primitivelor grafice de bază și driverele de dispozitive hardware, cum își desfășoară activitatea într-adevăr. Cu toate acestea, interfață bazată pe fișier, care funcționează doar cu un flux de octeți nestructurat, și este util pentru dispozitive cu organizare complexă a datelor. O astfel de interfață datorită simplității și versatilitatea sa face posibilă pentru a construi pe ea o interfață diferită și mai complexă, cu orice organizație.
Interfață de fișiere disponibile pentru utilizator, astfel încât programatorul aplicație poate folosi pentru a crea propria interfață pentru orice dispozitiv, ocolind driverul hardware-ul de bază pe straturile de dispozitiv de drivere de nivel înalt. De exemplu, în cazul în care programatorul cerere pentru un motiv oarecare nu sunt mulțumiți cu sistemele de fișiere acceptate de unele sisteme de operare, se poate referi la discul ca unitate cu o interfață a unui fișier special, care va determina driverul de hard disk, care sprijină modelul de disc sub forma unei secvențe de octeți ( Fig. 8.1). Cu un astfel de hardware aplicație driver de programator poate aranja datele în orice secțiune a modului original, disc adecvat nevoilor sale. În acest caz, nu este necesar să se dezvolte un driver de nivel înalt pentru propriul sistem de fișiere, care este mai dificil în comparație cu dezvoltarea aplicației.
Fig. 8.1. Lucrul cu discul ca un fișier cu o specială
Pe UNIX fișiere speciale sunt de obicei plasate în directorul / dev, deși nimic nu împiedică crearea oricărui director sistem de fișiere. Atunci când un nou dispozitiv și, prin urmare, un nou administrator de sistem driver poate crea un cont nou, folosind comanda mknod. De exemplu, următoarea comandă creează un fișier special orientat către bloc pentru depunerea la a treia partiție de pe al doilea disc al patrulea, controlerul SCSI:
mknod / dev / dsk / scs1 b 32 33
Comunica fișier special cu driver-ul este stabilit de informații stocate într-un fișier special inode.
În primul rând, în inode stochează o indicație că fișierul este special, iar această caracteristică face posibilă pentru a distinge clasa driverele de dispozitiv corespunzătoare, care este, ea determină dacă conducătorul auto este byte sau de catre bloc.
- numărul de conducător auto - majore;
- minor - numărul dispozitivului.
Înțeles (număr de conducător auto) majore determină driverul de selecție care păstrează fișierul special, și o valoare de minor (număr de dispozitiv) este transmis către conducătorul auto ca parametru de apel și subliniază unul dintre mai multe dispozitive similare, care pot conduce conducătorului auto. De exemplu, numărul de drivere pentru dispozitiv de disc specifică nu doar unitate, ci, de asemenea, o secțiune de pe disc.
In exemplul de mai sus, comenzi pentru a crea un argument fișier / dev / dsk / scsi speciale b determină crearea unui fișier special pentru o orientată spre bloc drivere, argumentul 32 definește un număr de conducător auto, care va fi apelat atunci când dispozitivul de deschidere / dev / dsk / scsi, iar argumentul 33 este decodificat de conducător auto (în care datele codificate care trebuie să fie gestionate în a treia secțiune a patra SCSI-controler al doilea disc).
Sistemul de operare UNIX utilizează pentru a stoca informații despre drivere hardware instalate, două tabele de sistem:
- bdevsw - tabel drivere Block-orientate;
- cdevsw - drivere de masă orientate spre octet.
Numărul de conducător auto (major) este un indice care corespunde tabelului. Când deschideți un anumit fișier sistemul de operare detectează că acesta se face cu un fișier special numai după ce a fost citit de pe disc sau în sistem va tampon inod acestuia. Cu toate acestea, ea constată dacă este sau nu cauzată de blocul șoferului sau octet orientate, atunci conducătorul auto utilizează numărul pentru a se referi la o linie specifică a unuia dintre cele două tabele: (. Figura 8.2) bdevsw sau cdevsw.
Conceptul UNIX de fișiere speciale, a fost implementat în mai multe sisteme de operare, dar pentru a comunica cu drivere în ele sunt adesea folosite mehanyzmy diferită de cea descrisă mai sus. Astfel, în OG Windows NT pentru a conecta dispozitive virtuale (analogi de fișiere speciale) obiecte mecanism este utilizat cu driverele. În obiectul dispozitiv are legături cu drivere de obiecte, prin care, atunci când deschide un dispozitiv virtual, sistemul găsește driverul potrivit.