Prelegeri despre software open source - fișier Lectures System software.doc. Biblioteca deschisă - bibliotecă deschisă de informații educaționale

Sarcina practică nr. 9.

Subiect: „Lucrul cu structura fișierelor”

Informații teoretice

Scopul lucrării: studiați structura unui sistem de fișiere, caracteristicile fișierelor, funcțiile sistemului de fișiere, regulile pentru crearea unui nume de fișier.

Dosar (din limba engleză fișier - dosar, set de documente)- aceasta este o anumită cantitate de informații (programe sau date) cu un nume, stocate în memoria de lungă durată a computerului.

Fișierele pot fi localizate fie direct pe disc, fie în zone speciale numite directoare, cataloage sau foldere.

Fişier este o zonă numită de pe disc. Fiecare fișier are următoarea denumire:

Numele fișierului este împărțit în două părți printr-un punct: numele propriu de fișier (prefix) și extensia (sufix), care determină tipul acestuia (program, date etc.). Numele real al fișierului este dat de utilizator, iar tipul acestuia este de obicei setat automat de program.

Numele complet al fișierului este construit după cum urmează: [nume unitate:] [cale\] nume fișier. Discurile pot avea denumiri A:, B: – pentru dischete (dischete); C:, D:, E: etc. până la Z: – pentru hard disk-uri și partițiile lor logice, discuri electronice (virtuale), pentru discuri laser CD-ROM și unități flash.

Tabelul 1. Extensii de nume de fișier

Atribute

Caracteristicile fișierului care conferă fișierului anumite proprietăți. Pentru cele mai comune sisteme de fișiere FAT16, FAT32 și NTFS în prezent, pot fi distinse următoarele atribute de fișiere:

„Numai citire”- înseamnă că fișierul este doar în citire de către sistemul de operare, adică nu i se pot face corecții. În cele mai multe cazuri, acest lucru nu înseamnă că este imposibil să faci deloc corecții, doar că dacă se încearcă modificarea unui fișier cu acest atribut, utilizatorului i se va afișa un avertisment corespunzător.



"Ascuns"- se presupune că un fișier cu acest atribut nu este afișat la afișarea anumitor liste de fișiere. Majoritatea programelor pot personaliza modul în care este gestionat acest atribut. De exemplu, Windows Explorer standard vă permite să ascundeți și să afișați fișiere cu atributul „ascuns”. În al doilea caz, pictograma fișierului apare translucidă.

"Sistem"- fișierele cu atributul „sistem” se referă cel mai adesea la fișiere critice ale sistemului de operare care nu pot fi șterse sau modificate. În general, atributul „sistem” este o versiune „ponderată” a atributului „numai citire” combinată cu atributul „ascuns”. În Windows Explorer standard, atributul „sistem” este procesat în mod similar cu atributul „ascuns” - astfel de fișiere sunt ascunse de utilizator în mod implicit, dar puteți permite afișarea lor.

"Arhiva"- în prezent, acest atribut de fișier FAT nu este practic utilizat în scopul propus. Acest atribut a fost inițial menit să indice programelor de arhivare fișierele de care trebuie să facă backup. Cu alte cuvinte, un program care face o copie de rezervă a unui fișier de pe un hard disk a trebuit să resetați atributul „arhivă”, iar programele care au făcut ulterior modificări acestui fișier, dimpotrivă, au trebuit să-l seteze din nou. Astfel, programul de backup ar putea determina cu ușurință prin verificarea unui anumit atribut de fișier dacă un anumit fișier de pe hard disk s-a modificat de la backup-ul precedent.

În sistemul de fișiere NTFS, utilizat în versiunile moderne de Windows, pe lângă atributele deja date, atributele fișierelor stochează numele fișierelor, conținutul fișierelor în sine, precum și o mulțime de alte informații. Mai mult decât atât, pe lângă un set de atribute standard de fișiere, sistemul de fișiere NTFS permite dezvoltatorilor de aplicații să-și creeze propriile atribute cu care aplicația lor poate lucra apoi.

Sistemul de fișiere- aceasta este o parte funcțională a sistemului de operare care efectuează operațiuni asupra fișierelor. Sistemul de fișiere vă permite să lucrați cu fișiere și directoare (directoare) indiferent de conținutul, dimensiunea, tipul acestora etc.

Sistemul de fișiere definește structura generală pentru denumirea, stocarea și organizarea fișierelor în sistemul de operare.

Funcții ale sistemului de fișiere:

1. Salvarea informațiilor pe medii externe.

2. Citirea informațiilor din fișiere.

3. Ștergerea fișierelor, directoarelor.

4. Redenumirea fișierelor.

5. Copierea fișierelor etc.

Fiecare disc este împărțit în două zone: o zonă de stocare a fișierelor și un director. Directorul conține numele fișierului și o indicație de unde începe pe disc.

Sistem de fișiere cu un singur nivel

Tabelul 2. Structura înregistrărilor în catalog

Sistem de fișiere ierarhic

Pe fișiere pot fi efectuate diferite operații:

  • Copiere (o copie a fișierului este plasată dintr-un director în altul)
  • Mutare (fișierul în sine este mutat într-un alt director)
  • Ștergeți (întrarea fișierului este eliminată din director)
  • Redenumire (schimbarea numelui fișierului), etc.

Reguli pentru crearea unui nume de fișier:

Următoarele caractere, care sunt rezervate pentru funcții speciale, nu pot fi utilizate:

? : * / \ “ > < |

Extensia indică tipul de informații stocate în fișier (tip de fișier):

· txt, doc, rtf - documente text

bmp, jpg, gif - fișiere grafice

Pe lângă nume și extensie, parametrii fișierului includ și: dimensiunea fișierului, data și ora creării, pictograma.

mărime fișier indică câte informații conține și, în consecință, cât spațiu ocupă pe disc. Mărimea fișierului este exprimată în unități de volum de informații: octet, KB, MB.

Data și ora la care a fost creat fișierul. Acești parametri caracterizează și fișierul și sunt scriși după anumite reguli. De exemplu, intrarea 03/05/97 15:30 înseamnă că fișierul a fost creat pe 5 martie 1997, iar timpul în care a fost creat este de 15 ore și 30 de minute. Data și ora sunt înregistrate automat de sistemul de operare.

Pictogramă- un obiect grafic elementar. Prin pictogramă puteți afla în ce mediu a fost creat fișierul sau ce tip este.

Folderele sunt folosite pentru a organiza fișierele. Pliant- un obiect de mediu Windows conceput pentru a combina alte foldere și fișiere în grupuri. Numele folderului urmează aceleași reguli ca și numele fișierelor, dar nu au extensii.

Acțiuni cu fișiere și foldere:

· închide;

· deschis;

· redenumiți;

· șterge;

· mișcare;

· copie (creează o copie).

Progres

Exercitiul 1

Specificați calea completă către fișiere:

Sarcina 2

Sarcina 3

Este dat un arbore al structurii ierarhice a fișierelor de pe disc. Literele majuscule indică numele directoarelor, literele mici indică numele fișierelor:

Găsiți erori în structura fișierului.

Sarcina 4

Este dat un arbore al structurii ierarhice a fișierelor de pe disc. Literele majuscule indică numele directoarelor, literele mici indică numele fișierelor:

Listează directoarele de nivel 1, 2, 3, dacă există. Specificați căile de la directorul rădăcină către fiecare fișier.

Sarcina 5

C:\Desene\Natura\Sky.bmp

C:\Desene\Nature\Snow.bmp

C:\Pictures\Computer\Monitor.bmp

C:\Documentele mele\Raport.doc

Sarcina 6

Sunt indicate căile de la directorul rădăcină către unele fișiere stocate pe disc.

Afișați structura fișierului ca arbore.

C:\Rezumate\Fizică\Fenomene optice.doc

C:\Rezumate\Informatică\Internet.doc

C:\Abstracts\Informatics\Computer viruses.doc

C:\Desene\Sunset.jpg

C:\Desene\ Winter.jpg

1. Ce sistem de fișiere folosește Windows?

2. Ce este un fișier?

3. Cum sunt stocate fișierele pe disc?

4. Cum se formează numele fișierului?

5. De ce aveți nevoie de o extensie de nume de fișier?

6. Ce extensii standard de nume de fișiere cunoașteți și ce înseamnă acestea?

7. Care este calea fișierului?

8. Ce nume logice ale dispozitivelor de disc cunoașteți?

9. Explicați termenii: director, folder, fișier, scurtătură, pictogramă, meniu?

10. Copierea și mutarea fișierelor. Cum este implementat acest lucru pe Windows?

11. Cum să redenumiți un fișier sau un director?

12. Cum se creează un nou fișier sau director?

13. Cum se șterge un fișier sau un director de pe un disc?

14. Cum să vizualizați conținutul unui fișier?

15. Cum se rulează un fișier pentru execuție?


^ Sistem de fișiere ierarhic.

Toate fișierele din structura fișierelor sunt construite într-un arbore. Rădăcina arborelui este așa-numita rădăcină a sistemului de fișiere. Dacă un nod de arbore este o frunză, atunci este un fișier care poate conține fie date, fie poate fi un director. Alte noduri decât frunzele sunt directoare. În consecință, denumirea într-un astfel de sistem poate avea loc în moduri diferite. Prima este denumirea fișierului în raport cu cel mai apropiat director. Dacă ne uităm la fișierele care sunt cel mai apropiate de directorul F0, acestea sunt fișierul F1 (care este și un director) și fișierul F2. Adică, dacă implicăm cumva (în mod sistemic) că lucrăm în directorul F0, atunci putem accesa fișierele din acest director numai după numele lor (F1 și F2). În consecință, la un nivel, numele trebuie să fie unice (într-un singur director). Deoarece avem o structură arborescentă, putem vorbi despre numele complet al fișierului, care este calea de la rădăcina arborelui la fișier. De exemplu, calea către fișierul F3 va arăta ca „/F0/F1/F3”. În același timp, putem lucra atât cu numele complet cât și cu numele scurt al fișierului. Și întrucât, în funcție de proprietatea copacului, calea către fiecare frunză este fără ambiguitate, rezolvăm imediat problema unificării numelor.

Prima astfel de organizație a apărut în sistemul de operare Multics, care a fost dezvoltat la Universitatea Berkeley la sfârșitul anilor '60. A fost cu mult timp în urmă, dar o soluție atât de bună și frumoasă a început să apară de atunci în multe sisteme de operare.

În consecință, cu ierarhia, fiecărui fișier i se pot atribui anumite atribute asociate cu drepturi de acces; atât fișierele, cât și directoarele pot avea aceste atribute. Adică, organizarea structurală a unui astfel de sistem de fișiere este bună pentru un sistem multi-utilizator. Pentru că, pe de o parte, nu există nicio problemă de denumire, iar pe de altă parte, un astfel de sistem poate fi extins foarte mult și bine.

Protecția datelor SO

^ Identificarea este capacitatea sistemului de operare de a recunoaște un anumit utilizator și, în funcție de definiție, de a efectua acțiunile necesare pentru protejarea datelor etc. De exemplu, MS DOS este un sistem de operare cu un singur utilizator. Există sisteme care vă permit să înregistrați utilizatori, dar acești utilizatori nu sunt legați între ei în niciun fel (un exemplu este un sistem de operare IBM pentru mainframe), ceea ce înseamnă că nu pot fi organizați în grupuri. Dar ar fi convenabil să se separe un laborator, un departament, o grupă de studiu de studenți etc. într-un grup separat.

Într-o organizare ierarhică a utilizatorilor, există conceptul de grup. Și există utilizatori reali în grup.

Când înregistrați un anumit utilizator, acesta ar trebui să fie alocat unui grup.

Deoarece utilizatorii sunt împărțiți într-un grup, atunci, prin analogie cu împărțirea între anumiți utilizatori, este posibilă partajarea resurselor cu grupul (adică utilizatorul își poate pune fișierele la dispoziția tuturor membrilor unui grup.

Și o astfel de împărțire în grupuri poate fi, de asemenea, pe mai multe niveluri, cu o distribuție corespunzătoare a drepturilor și oportunităților.

O mică notă - acum există sisteme de operare în care drepturile de acces pot fi nu numai ierarhice, ci și mai complexe - de exemplu, ruperea ierarhiei (un fișier poate fi accesibil unui anumit utilizator dintr-un grup de pe o altă ramură a arborelui) .

Acesta este probabil tot ce ar trebui spus despre proprietățile și funcțiile sistemului de operare. Desigur, nu am luat în considerare toate funcțiile sistemului de operare. Ceva a fost omis în mod deliberat, deoarece luăm în considerare sistemul de operare într-un model simplificat. Pentru că scopul nostru nu este să studiem un anumit sistem de operare, ci să învățăm cum să clasificăm un sistem de operare, din ce puncte de vedere ar trebui să îl privim și să comparăm diferite tipuri de sisteme de operare.

Cursul 7

OS Unix

Astăzi trecem la începutul luării în considerare a sistemului de operare Unix, deoarece vom lua în considerare multe decizii care sunt luate în sistemul de operare folosind acest sistem de operare ca exemplu.

La mijlocul anilor '60, Laboratorul Bell de la AT&T a efectuat cercetarea și dezvoltarea unuia dintre primele sisteme de operare în sensul său modern - sistemul de operare Multics. Acesta este un sistem de operare cu time-sharing, multi-utilizator, iar în acest sistem au fost propuse soluții reale pentru organizarea sistemelor de fișiere. În special, a fost propus un sistem de fișiere arbore ierarhic. Este aproximativ 1965. După ceva timp, această dezvoltare a dat naștere sistemului de operare Unix. Una dintre poveștile din spate spune că compania avea un computer PDP8 inutil cu software foarte subdezvoltat. Ceea ce era nevoie era o mașină care să facă posibilă organizarea unei lucrări convenabile pentru utilizator, în special, introducerea convenabilă a informațiilor. Și un grup binecunoscut de oameni - Thompson și Ritchie - a început să dezvolte un nou sistem de operare pe această mașină. O altă opțiune era că implementau un nou joc, iar instrumentele disponibile erau inaccesibile sau incomode și au decis să se joace cu această mașină. Rezultatul a fost apariția sistemului de operare Unix. Particularitatea acestui sistem a fost că a fost primul program de sistem scris într-un alt limbaj decât limbajul de asamblare. În scopul scrierii acestui software de sistem, în special a sistemului de operare Unix, s-a lucrat și în paralel, care a început cu limbajul BCPL, din care s-a format limbajul B, care a funcționat cu cuvinte-mașină, apoi cu abstracția cuvintelor-mașină. - BN și, în sfârșit, limba „C”” Și după 1973, sistemul de operare Unix a fost în sfârșit rescris în limbajul C. Ca urmare, a apărut un sistem de operare, al cărui cod 90% a fost scris într-un limbaj de nivel înalt, un limbaj independent de arhitectura mașinii și de sistemul de instrucțiuni, iar 10% a fost scris în limbaj de asamblare, aceste 10% incluzând cele mai multe părți critice de timp ale nucleului OS.

Mulți programatori la acea vreme au fost puțin șocați; puțini credeau că un astfel de sistem de operare ar putea trăi, deoarece un limbaj de nivel înalt a fost întotdeauna asociat cu o mare ineficiență. Dar limbajul C a fost totuși proiectat în așa fel încât a făcut posibilă scrierea de programe eficiente și traducerea lor în cod de mașină destul de eficient.

Dintre aceste proprietăți de proiectare, trebuie remarcat faptul că „C” este construit în mare măsură pe lucrul cu pointeri. Când scriem un program în limbaj de asamblare, de foarte multe ori trebuie să manipulăm adrese pentru a obține rezultatul dorit. Abilitatea de a opera cu pointeri este prima proprietate a lui „C”, care vă permite să traduceți eficient un program în această limbă în codul mașinii.

Dacă ne uităm la un program normal în asamblator, vom observa următoarele - atunci când programăm unele blocuri, folosim adesea un efect secundar (de exemplu, în timp ce calculăm o expresie, putem primi și amâna rezultate intermediare undeva), același lucru poate fi realizat în limba „CU”. Astfel, conceptul de expresie în „C” era mult mai larg decât în ​​alte limbi ale vremii. Și în expresii, pe lângă operațiuni noi, cum ar fi lucrul cu un pointer, decalaje, deplasări etc., a apărut o operație fundamental nouă - operația de atribuire. De ce este nou? Deoarece în multe limbi înainte de „C”, precum și după acesta, nu a existat nicio operațiune de atribuire - a existat un operator de atribuire. Diferența este un lucru - dacă avem un operator de atribuire, în primul rând, este necesar să nu existe o astfel de operație în partea dreaptă (nu putem folosi un efect secundar) și, în al doilea rând, partea stângă a operatorului de atribuire este o referință. la o singură zonă de memorie. Introducerea unui operator de atribuire în interiorul unei expresii ne-a permis să rezolvăm problema efectelor secundare (valori ale subexpresiilor care pot fi folosite în exterior - și acestea, la rândul lor, reduc numărul de schimburi cu RAM), iar acesta este un mijloc de eficiență .

Acestea și, probabil, numai aceste proprietăți ale limbajului au determinat supraviețuirea acestuia, adecvarea pentru programarea componentelor sistemului și posibilitatea traducerii optime a codului diferitelor mașini. Din punct de vedere profesional, C este un limbaj teribil. Principala cerință pentru limbajele de programare de astăzi este securitatea programării. Adică, instrumentele lingvistice ar trebui să minimizeze numărul de erori posibile.

Și proprietățile unor astfel de limbi includ următoarele:


    1. Verificare strictă a tipului. Adică, dacă încercăm să înmulțim o variabilă întreagă cu una flotantă, limbajul va arunca o eroare. Toate tipurile de conversie sunt nevalide în mod prestabilit.

    2. Asigurarea controlului asupra accesului la memoria programului. Aceasta înseamnă că dacă un număr a fost scris în memoria noastră ca număr întreg, atunci îl putem citi de acolo doar ca număr întreg, și nu ca virgulă mobilă sau simbol. În „C” și în alte limbaje, accesul necontrolat la memorie este asigurat de un pointer; în plus, printr-un pointer, pe de o parte, pierdem orice informație despre tip, iar pe de altă parte, putem înșela funcțiile în ceea ce privește parametrii actuali si formali.

    3. Control asupra interacțiunii modulelor. Esența acestei proprietăți este că apar multe erori dacă o funcție a declarat un set de parametri și este accesată cu un alt set, iar diferența poate fi atât în ​​cantitate, cât și în tipuri. Limbajul „C”, în ciuda versiunii ANSI C, care a încercat să rezolve parțial această problemă - există întotdeauna posibilitatea de a păcăli o funcție și de a-i transmite un parametru de alt tip; în loc de șase parametri, puteți trece un parametru.
Din aceste trei motive, limba „C” este o limbă proastă. Dar, cu toate acestea, aceasta este „mentalitatea” programatorilor, care constă în faptul că, din anumite motive, cele mai durabile limbaje sunt limbaje proaste din punct de vedere conceptual; la astfel de limbaje, pe lângă „C”, puteți adăuga și Fortran.

Deci, 1973. Apariția sistemului de operare Unix și a fost deja scris în limbajul C. Ce proprietăți de bază avea deja acest sistem de operare? Prima proprietate este conceptul de fișiere, obiectul principal pe care operează sistemul de operare este un fișier. Un fișier este o colecție de date, un fișier din punct de vedere Unix este un dispozitiv extern, un fișier este un director care conține informații despre fișierele cărora le aparține etc. Astăzi, strategia de fișiere a fost extinsă la aproape orice în Unix. A doua proprietate, care este o continuare sau o consecință a primei, este că sistemul de operare este construit într-un mod foarte interesant. Spre deosebire de sistemele de operare anterioare, în care fiecare comandă era conectată în interior, iar această comandă nu putea fi modificată, eliminată din sistem sau creată o nouă comandă - în Unix, problemele comenzilor utilizatorului au fost rezolvate foarte elegant datorită a două puncte. Primul este că Unix declară o interfață standard pentru transmiterea parametrilor din exterior în interiorul procesului. În al doilea rând, toate comenzile sunt implementate sub formă de fișiere, ceea ce înseamnă că puteți adăuga liber noi comenzi în sistem, care vor fi disponibile fie pentru mine, fie pentru un grup de utilizatori, fie pentru toată lumea și puteți șterge comenzi.

Să începem să ne uităm la caracteristicile specifice ale sistemului de operare Unix. Primul lucru pe care îl vom lua în considerare este sistemul de fișiere, organizarea lucrului cu fișierele.

Sistem de fișiere Unix

Sistemul de fișiere Unix este un sistem de fișiere ierarhic, multi-utilizator. Poate fi reprezentat ca un arbore:

La rădăcina arborelui există un „director rădăcină”; alte noduri decât frunzele arborelui sunt directoare. Frunzele pot fi: fișiere (în sensul tradițional - seturi de date numite), directoare goale (directoare cu care nu sunt asociate fișiere). Sistemul definește conceptul de nume de fișier - acesta este numele care este asociat cu un set de date din directorul căruia îi aparține acest fișier. De exemplu, directorul D1 deține fișierele: N1, N2, N3; directorul D0 conține: N4, N5 și D1, acesta din urmă este tot un fișier, dar unul special. Deci, un nume este un nume care este asociat cu un set de date în contextul apartenenței la director. În plus, există și conceptul de nume complet. Numele complet este o cale unică de la rădăcina sistemului de fișiere la un anumit fișier. Primul caracter al numelui este directorul rădăcină „/”, iar apoi toate directoarele sunt listate printr-o bară oblică până când se ajunge la fișierul dorit. De exemplu, fișierul N3 are numele complet „/D0/D1/N3”. Datorită faptului că o astfel de cale pentru fiecare fișier din orice director este unică, putem numi fișiere din directoare diferite cu aceleași nume. De exemplu, numele N4 este prezent în directoarele D0 și D4, dar acestea sunt fișiere diferite, deoarece căile complete către ele sunt diferite (/D4/N4, /D0/N4).

Cometariu. De fapt, sistemul de fișiere Unix nu este bazat pe arbore. Tot ce s-a spus mai sus este corect, dar sistemul are posibilitatea de a încălca ierarhia frumoasă și convenabilă sub formă de arbore, deoarece este posibil să se asocieze mai multe nume cu același conținut de fișier. Și pot apărea situații când, de exemplu, „/D4/N3” și „/D0/D1/N1” sunt, de fapt, un fișier cu două nume.

Încă o notă. Sistemul de operare Unix folosește o ierarhie de utilizatori pe trei niveluri:

Primul nivel este al tuturor utilizatorilor. Acestea sunt împărțite în grupuri și, în consecință, grupurile sunt formate din utilizatori reali. Datorită acestei organizări pe trei niveluri a utilizatorilor, fiecare fișier are trei atribute:

1) Proprietarul dosarului. Acest atribut este asociat cu un anumit utilizator, care este atribuit automat de către sistem ca proprietar al fișierului. Puteți deveni proprietarul implicit prin crearea unui fișier și există, de asemenea, o comandă care vă permite să schimbați proprietarul unui fișier.

2) Protecția accesului la fișiere. Accesul la fiecare fișier (de la fișierul kernel de sistem la un fișier text obișnuit) este limitat în trei categorii:

Drepturile proprietarului (ce poate face proprietarul cu acest dosar, în general -  nu neapărat totul);

Drepturile grupului care deține fișierul. Proprietarul nu este inclus aici (de exemplu, un fișier poate fi închis pentru citire de către proprietar, iar toți ceilalți membri ai grupului pot citi liber din acest fișier;

Toți ceilalți utilizatori ai sistemului; 

Pentru aceste trei categorii sunt reglementate trei acțiuni: citirea dintr-un fișier, scrierea într-un fișier și executarea unui fișier (în mnemonicii sistemului R, W, X, respectiv). Fiecare fișier din aceste trei categorii definește ce utilizator poate citi, care poate scrie și cine îl poate rula ca proces.

Acestea sunt câteva date preliminare despre sistemul de fișiere. Acum să ne uităm la structura sistemului de fișiere de pe disc.

Mai întâi să definim câteva concepte:

Pentru orice sistem de calcul, este definit conceptul de dispozitiv de stocare extern al sistemului (SSD). Acesta este dispozitivul care este accesat de bootloaderul hardware al sistemului în scopul pornirii sistemului de operare.. Concluzia este aceasta - aproape orice sistem de calcul are o gamă de spațiu de adrese RAM situat în ROM. ROM-ul conține un program mic (deși conceptul de dimensiune este relativ, este într-adevăr mic), care, atunci când computerul este pornit, accesează un bloc fix al ROM-ului, îl citește în memorie și transferă controlul către o adresă fixă ​​aferentă la blocul de date citit.

Se crede că blocul de date citit este un program de încărcare software, iar bootloader-ul software pornește pornirea sistemului de operare. Trebuie remarcat faptul că, dacă bootloader-ul hardware din marea majoritate a mașinilor este independent de sistem (adică nu știe ce sistem de operare va fi încărcat), atunci bootloader-ul software este deja o componentă a sistemului de operare, știe că o anumită OS va fi încărcat, știe unde este necesar să descărcați datele.

În orice sistem, se obișnuiește să se împartă spațiul memoriei în anumite zone de date, care se numesc blocuri. Mărimea blocului (blocul logic în sistemul de operare) este un atribut fix. În sistemul de operare Unix, în diferitele sale variante, dimensiunea blocului era un parametru care varia în funcție de versiunea sistemului de operare. Pentru simplitate și uniformitate, vom presupune că blocul logic al VRAM-ului este de 512 octeți.

Deci, să ne uităm la structura sistemului de fișiere. Să ne imaginăm spațiul de adrese al sistemului VRAM ca o secvență de blocuri.

Vom presupune că există N+M-1 din aceste blocuri.

Primul bloc este blocul bootstrap. Amplasarea acestui bloc în blocul zero al dispozitivului de sistem este determinată de hardware, deoarece încărcătorul hardware accesează întotdeauna un anumit bloc al dispozitivului de sistem (blocul zero). Aceasta este ultima componentă a sistemului de fișiere care este dependentă de hardware.

Următorul bloc este superblocul sistemului de fișiere. Conține informații operaționale despre starea sistemului de fișiere, precum și date despre setările sistemului de fișiere. În special, superblocul are informații despre


    • numărul de inoduri (ID-uri) din sistemul de fișiere;

    • dimensiunea sistemului de fișiere;

    • blocuri gratuite de fișiere;

    • acte de identitate gratuite;

    • Există, de asemenea, o serie de date pe care nu le vom enumera din cauza unicității scopului lor.
Al treilea bloc este zona inodului. Un ID este o structură specială de date a sistemului de fișiere care corespunde unu la unu cu un fișier. Fiecare conținut de fișier are un singur ID asociat. ID-urile sunt organizate nu printr-un bloc, ci printr-un spațiu de blocuri, a căror dimensiune este determinată de parametrul de generare a sistemului de fișiere (determinat de numărul de ID-uri specificat în superbloc). În consecință, fiecare registru index conține următoarele informații:


    • cod de privilegiu/securitate;


    • lungimea fișierului;


Urmează blocurile de fișiere. Acesta este spațiul VZU, care găzduiește toate informațiile aflate în fișiere și despre fișierele care nu se încadrează în blocurile deja enumerate.

Ultima zonă de date (este localizată diferit în diferite sisteme), dar pentru simplitatea prezentării vom presupune că această zonă este situată imediat după blocurile de fișiere - aceasta este zona de salvare.

Aceasta este o diagramă conceptuală a structurii sistemului de fișiere. Acum să ne întoarcem și să ne uităm la unele părți din ea mai detaliat.

În primul rând, sunt de interes zonele de blocuri de fișiere gratuite și ID-uri gratuite. În Unix, influența a doi factori este vizibilă: primul este că sistemul de fișiere a fost dezvoltat atunci când un VSD de 5-10 MB era considerat foarte mare, iar eforturile autorului de a optimiza acest proces sunt vizibile în implementarea algoritmilor de lucru cu sistem; iar cel de-al doilea este proprietățile sistemului de fișiere pentru optimizarea accesului, al cărui criteriu este numărul de schimburi pe care sistemul de fișiere le face pentru nevoile sale, fără a avea legătură cu citirea sau scrierea informațiilor despre fișiere.

Superblocul conține o listă de blocuri de fișiere gratuite; este format din 50 de elemente. Esența lucrului cu această listă este următoarea - într-un buffer format din 50 de elemente (cu condiția ca un bloc să aibă 512 octeți, 1 bloc este un cuvânt de 16 biți), acestea conțin numărul de blocuri libere de spațiu de bloc de fișiere de la 2 la 49. În Elementul 0 conține un pointer către continuarea matricei, iar ultimul element conține un pointer către un element liber din matrice.

Dacă un proces are nevoie de un bloc liber pentru a extinde un fișier, atunci sistemul selectează un element de matrice folosind indicatorul N/B (numărul blocului), iar acest bloc este furnizat fișierului. Dacă un fișier este redus, numerele eliberate sunt adăugate la matricea de blocuri libere și indicatorul N/B este ajustat.

Deoarece dimensiunea matricei este de 50 de elemente, sunt posibile două situații critice:


    1. Când eliberăm blocuri de fișiere, dar ele nu pot încadra în această matrice. În acest caz, un bloc liber este selectat din sistemul de fișiere și matricea complet completată de blocuri libere este copiată în acest bloc, după care valoarea indicatorului N/B este resetată și numărul blocului pentru care am selectat-o. copierea este scrisă în elementul zero al matricei, care se află în conținutul matricei superbloc. Astfel, dacă eliberăm constant blocuri, se formează o listă în care vor fi localizate toate blocurile libere ale sistemului de fișiere.

    2. Când am selectat toate blocurile libere și conținutul elementelor matricei blocuri libere a fost epuizat. Dacă elementul zero al matricei este zero, atunci aceasta înseamnă că tot spațiul sistemului de fișiere a fost epuizat. Dacă acest element nu este egal cu zero, atunci aceasta înseamnă că există o continuare a matricei. Această continuare este citită într-o copie a superblocului din RAM.
În cele mai multe cazuri, nu este necesar niciun schimb suplimentar pentru a obține un bloc gratuit și a-l elibera. Un schimb suplimentar este necesar atunci când conținutul a 49 de blocuri este epuizat. Obținem un buffering bun, care reduce supraîncărcarea sistemului de operare.

Lista de ID-uri gratuite. Acesta este un buffer format din 100 de elemente. Conține informații despre 100 de numere de identificare care sunt în prezent gratuite. În consecință, atunci când este nevoie de un nou ID, numărul acestuia este luat din lista de ID-uri gratuite; dacă numărul este eliberat, acesta este introdus în această matrice. Dacă matricea este plină și 101 elemente sunt eliberate, atunci acest lucru nu este scris nicăieri. Dacă lista de ID-uri este plină, sistemul „parcurge” lista și regenerează conținutul acestui buffer.

Într-o situație în care trebuie să creați un fișier și aveți nevoie de un nou ID, dar nu există un singur element în matrice, procesul de căutare a unui nou ID este lansat și nu găsește nimic. Atunci sunt posibile două situații:


    1. Nu mai există blocuri gratuite pentru fișiere;

    2. Nu mai există ID-uri noi.
Iată informații despre superbloc. Ce concluzii și comentarii se pot face?

    • superblocul este întotdeauna în RAM;

    • toate operațiunile de a elibera blocuri, de a ocupa blocuri de fișiere și de a ocupa și de a elibera ID-uri au loc în RAM (minimând schimburile cu discul). Dacă conținutul superblocului nu este scris pe disc și alimentarea este oprită, atunci vor apărea probleme (o discrepanță între starea reală a sistemului de fișiere și conținutul superblocului). Dar aceasta este deja o cerință pentru fiabilitatea echipamentului sistemului.

Cursul 8

Descriptori de index

Să aruncăm o privire mai atentă la Descriptorii de index. ^ Un ID este un obiect Unix care este pus într-o corespondență unu-la-unu cu conținutul fișierului. Adică pentru fiecare ID există un singur conținut și invers, cu excepția situației în care fișierul este asociat cu un dispozitiv extern. Să ne amintim conținutul ID-ului:


    • un câmp care definește tipul fișierului (directoare și toate celelalte fișiere);

    • cod de privilegiu/securitate;

    • numărul de link-uri către un anumit ID din diferite directoare din sistemul de fișiere;

    • (valoarea zero înseamnă libertatea ID)

    • lungimea fișierului în octeți;

    • date și ore (ora ultimei intrări, data creării etc.);

    • câmpul de adresare a blocurilor de fișiere.
După cum puteți vedea, nu există un nume de fișier în ID. Să vedem cum este organizată adresarea blocurilor în care se află fișierul.

Câmpul de adresare conține numerele primelor zece blocuri ale fișierului, adică dacă fișierul este mic, atunci toate informațiile despre locația datelor fișierului se află direct în ID. Dacă fișierul depășește zece blocuri, atunci începe să funcționeze o anumită structură de listă, și anume, al 11-lea element al câmpului de adresare conține numărul blocului din spațiul blocurilor de fișiere în care se află 128 de link-uri către blocuri ale acestui fișier. Dacă fișierul este și mai mare, atunci se folosește al 12-lea element al câmpului de adresare. Linia de jos este aceasta - conține un număr de bloc, care conține 128 de înregistrări de numere de bloc, în care fiecare bloc conține 128 de numere de bloc ale sistemului de fișiere. Și dacă fișierul este și mai mare, atunci se folosește al 13-lea element - unde adâncimea de imbricare a listei este mărită cu alta.

Astfel putem obține un fișier de dimensiune (10+128+128 2 +128 3)*512.

Dacă punem întrebarea - de ce este nevoie de toate acestea (tabele cu blocuri libere, ID-uri etc.), atunci ne amintim că luăm în considerare relația dintre hardware-ul și software-ul unui sistem informatic și, în acest caz, un astfel de fișier dispozitivul de sistem ne permite să reducem foarte mult numărul de schimburi reale cu VRAM, iar tamponarea stratificată în sistemul de operare Unix face numărul acestor schimburi și mai mic.

Să luăm în considerare următoarea zonă - zona de salvare. În diagramă este afișat imediat după blocurile fișierelor. De fapt, poate fi plasat în diferite moduri: în fața blocurilor de fișiere, într-un fișier sau altundeva, de exemplu, pe o altă memorie. Toate acestea depind de implementarea specifică a sistemului.

Procesele sunt pompate în zona de stocare și este, de asemenea, folosit pentru a optimiza lansarea proceselor lansate cel mai frecvent (folosind așa-numitul T-bit al fișierului).

Am analizat structura sistemului de fișiere și organizarea acestuia pe dispozitivul de sistem. Această structură și algoritmii de lucru cu ea sunt destul de simpli; acest lucru se face astfel încât costurile generale asociate cu funcționarea sistemului să nu depășească limitele rezonabile.

Elemente ale sistemului de fișiere:

Cataloagele

Am spus că toate informațiile din Unix sunt localizate în fișiere. Nu există tabele speciale care se află în afara sistemului de fișiere și sunt utilizate de sistem, cu excepția acelor tabele pe care sistemul de operare le creează în timp ce lucrează în spațiul RAM.

^ Din punctul de vedere al sistemului de operare, un director este un fișier, un fișier obișnuit care conține date despre toate fișierele care aparțin directorului.

Spunem că directorul „A” conține fișierele „B”, „C” și „D” - dintre care „B” și „C” pot fi atât fișiere, cât și directoare, iar „D” este cu siguranță un director.

Directorul are următoarea structură. Este format din elemente care combină două câmpuri - numărul ID și numele fișierului:

Director = ( (ID, Nume), (ID, Nume), ..., (ID, Nume))

Ce este un număr de identificare? este numărul ordinal al elementului din lista de inoduri. Deci, primul element al acestei liste - ID#1 aparține directorului rădăcină „.”.

În general, într-un director pot exista mai multe intrări care se referă la același ID, dar nu pot exista intrări cu același nume într-un director. Adică, un număr arbitrar de nume poate fi asociat cu conținutul fișierului. Când creați un director, în el sunt întotdeauna create două intrări:

(directory_ID, „.”) și (parent_directory_ID, „..”)

Deci, în imagine, fișierul „A” are ID#7, „D” are ID#5, „F” are ID#10, „G” are ID#101. În acest caz, fișierul director D va avea următorul conținut:

{{ 5, “.” },

(Pentru directorul rădăcină, părintele se referă la același director.)

Care este diferența dintre un fișier director și un fișier obișnuit? Se distinge prin câmpul de tip din inod.

Să vedem cum pot fi folosite schematic numele complet calificate și legăturile de directoare. În sistem, directorul curent este determinat pentru utilizator în orice moment dat. Adică, un director al cărui nume complet este înlocuit pentru toate fișierele ale căror nume nu încep cu caracterul „/”. Dacă directorul curent este „D”, atunci putem vorbi pur și simplu despre fișierul „F” sau fișierul „G”, dar dacă directorul curent este „D”, și trebuie să ajungeți la fișierul „B”, atunci nu puteți pur și simplu operați cu numele „B”, deci, deoarece nu aparține directorului „D”, fișierul „B” poate fi obținut prin specificarea numelui complet de la rădăcină sau puteți utiliza un fișier special „..”, în care dosarul „B” va avea numele: „../B”. Dacă la deschidere ne referim la „..”

Pentru a deschide fișierul „B” în acest caz, va trebui să efectuați o serie de operații indirecte - luați ID-ul părintelui și utilizați-l pentru a selecta conținutul fișierului director „A”; în „A” selectăm rând cu numele „B” și definiți-l ID. Această procedură necesită destul de multă muncă, dar deoarece deschiderea și închiderea fișierelor au loc destul de rar, nu există nicio „crimă” în aceasta.

Datorită acestei organizări a directoarelor, conținutul fișierului este separat de numele acestuia. Numele poate fi ambiguu.

Întrucât unui fișier pot fi asociate mai multe nume, putem spune că acest fișier poate fi deschis simultan prin mai multe procese (în general, având un singur nume, putem deschide acest fișier și din mai multe procese, esența problemei nu se schimbă de la această precizare) . Cum este organizată sincronizarea în acest caz? După cum vom vedea mai târziu, totul este rezolvat corect aici.

Fișierele dispozitivului

Acest tip de fișier se caracterizează prin tipul său și este interpretat după cum urmează. În principiu, fișierele dispozitivului nu au conținut, adică sunt doar un ID și un nume care îi este asociat. ID-ul indică informații despre ce tip de dispozitiv este asociat cu acest fișier; în consecință, sistemul Unix împarte toate dispozitivele în două tipuri: orientate pe octeți și orientate către blocuri. Dispozitivele orientate pe octeți sunt acele dispozitive cu care schimbul are loc pe octeți (de exemplu, o tastatură), dispozitivele orientate pe blocuri sunt acele dispozitive cu care schimbul are loc în blocuri. ID-ul are un câmp care indică această caracteristică și există și un câmp care identifică numărul șoferului asociat cu acest dispozitiv. Într-un sistem, fiecare driver este asociat cu un anumit dispozitiv, dar un dispozitiv poate avea mai multe drivere. Acest câmp, care definește numărul de driver, este de fapt numărul din tabelul de driver pentru clasa de dispozitiv corespunzătoare (există două tabele - pentru dispozitivele bloc și octeți). Tot în ID există un anumit parametru digital care poate fi transmis șoferului ca parametru care specifică informații despre funcționare.

Acesta este ceea ce se poate spune despre fișierele speciale asociate cu dispozitivele externe.

Partajarea datelor cu fișiere

Următorul lucru din organizarea sistemului de fișiere este organizarea schimbului de date cu fișierul. Să definim concepte legate de intrare/ieșire de nivel scăzut. Unix definește funcții speciale numite apeluri de sistem. Aceste apeluri accesează direct sistemul de operare și efectuează unele funcții de sistem. În ceea ce privește utilizarea, practic nu diferă de utilizarea funcțiilor bibliotecii, în timp ce în ceea ce privește implementarea și funcționarea, diferența lor este destul de semnificativă. Funcția de bibliotecă va fi încărcată în corpul procesului, iar apelul de sistem va transfera imediat controlul către sistemul de operare, iar acesta din urmă va efectua acțiunea ordonată. Unix oferă un set de aceste funcții pentru a furniza I/O de nivel scăzut (prin apeluri de sistem):

open(...) - pentru a lucra cu conținutul unui fișier, procesul trebuie să înregistreze acest fapt în sistem; parametrii acestei funcții sunt un șir care conține numele fișierului și atributele pentru modul de lucru cu fișierul (citește -numai, citire-scriere etc.), iar această funcție returnează un anumit număr, care se numește descriptor de fișier (FD). Corpul procesului utilizatorului, precum și datele asociate acestui proces, conțin unele informații de serviciu. În special, se află un tabel cu descriptori de fișiere. Acesta, ca toate tabelele din Unix, este pozițional, adică numărul rândului din tabel corespunde FD-ului cu acest număr. Numele fișierului și alte atribute sunt asociate cu FD. Numerotarea FD este prerogativa procesului, adică FD-urile sunt unice în cadrul unui proces.

Numărul de fișiere deschise simultan (mai precis, numărul maxim de FD-uri asociate fișierelor) pentru un proces este reglementat de sistem.

Deci, funcția open(...) este de a deschide un fișier existent.

creat(...) este o funcție pentru deschiderea unui fișier nou; parametrii săi sunt numele fișierului și unii parametri de deschidere, la fel ca open.

read(...)/write(...) - parametrii lor sunt numărul FD și unii parametri de acces. Aceste funcții sunt folosite pentru a citi/scrie din sau într-un fișier.

close(...) - terminați lucrul cu fișierul. După executarea acestei funcții, DF-ul acestui fișier este eliberat.

Acestea sunt toate apeluri de sistem. De asemenea, în Unix puteți efectua I/O prin funcții de bibliotecă (de exemplu, fopen, fread, fwrite, fclose, ...).

Să luăm în considerare organizarea schimbului din punct de vedere al sistemului în Unix.

Atunci când organizează schimbul, sistemul împarte toate datele în două categorii - prima este datele asociate cu procesul utilizatorului și datele asociate cu sistemul de operare.

Primul tabel de date legate de sistemul de operare este tabelul Open File Inode (OID), acest tabel conține intrări, fiecare dintre ele conține o copie a ID-ului pentru fiecare fișier deschis pe sistem. Printr-o copie a ID-ului accesăm blocurile dosarului. Fiecare dintre aceste înregistrări conține un câmp care caracterizează numărul de fișiere deschise în sistem care utilizează datele ID. Adică, dacă deschidem același fișier în numele a două procese, atunci se creează o intrare în TIDOF, dar fiecare deschidere a acestui ID mărește contorul cu unul.

Ca urmare a. Tabel de fișiere - acest tabel conține informații despre numele fișierului deschis și are un link către ID-ul acestui fișier în TIDOF.

Această schemă va fi discutată mai detaliat data viitoare.

Tipuri de fisiere. Structura ierarhică a sistemului de fișiere

Sistemele de fișiere acceptă mai multe tipuri de fișiere funcțional diferite, care includ de obicei fișiere obișnuite, fișiere directoare, fișiere speciale, conducte numite și fișiere mapate în memorie.

Fișiere obișnuite sau pur și simplu fisiere, conțin informații de natură arbitrară care sunt introduse în ele de către utilizator sau care sunt generate ca urmare a funcționării sistemului și a programelor utilizatorului. Majoritatea sistemelor de operare moderne (de exemplu, UNIX, Windows, OS/2) nu limitează sau controlează în niciun fel conținutul și structura unui fișier obișnuit. Conținutul unui fișier obișnuit este determinat de aplicația care funcționează cu acesta.

Cataloagele- acesta este un tip special de fișiere care conțin informații de referință de sistem despre un set de fișiere grupate de utilizatori în funcție de un criteriu informal (de exemplu, fișierele care conțin documente ale aceluiași contract sau fișierele care alcătuiesc un pachet software sunt combinate într-un singur pachet software). grup). Pe multe sisteme de operare, un director poate conține orice tip de fișier, inclusiv alte directoare, creând o structură arborescentă care este ușor de căutat. Directoarele stabilesc o mapare între numele fișierelor și caracteristicile fișierelor care sunt utilizate de sistemul de fișiere pentru a gestiona fișierele. Astfel de caracteristici includ, în special, informații (sau un indicator către o altă structură care conține aceste date) despre tipul de fișier și locația acestuia pe disc, drepturile de acces la fișier și datele creării și modificării acestuia. În toate celelalte privințe, directoarele sunt tratate de sistemul de fișiere ca fișiere obișnuite.

Fișiere speciale- Acestea sunt fișiere fictive asociate cu dispozitivele I/O, care sunt folosite pentru a unifica mecanismul de accesare a fișierelor și a dispozitivelor externe. Fișierele speciale permit utilizatorului să efectueze operațiuni I/O folosind comenzi normale pentru scrierea într-un fișier sau citirea dintr-un fișier. Aceste comenzi sunt procesate mai întâi de programele sistemului de fișiere, iar apoi, la o anumită etapă a executării cererii, sunt convertite de sistemul de operare în comenzi de control pentru dispozitivul corespunzător.

Utilizatorii accesează fișierele prin nume simbolice. Cu toate acestea, memoria umană limitează numărul de nume de obiecte la care un utilizator se poate referi după nume. Organizarea ierarhică a spațiului de nume ne permite să extindem semnificativ aceste limite. Acesta este motivul pentru care majoritatea sistemelor de fișiere au o structură ierarhică, în care nivelurile sunt create datorită faptului că un director de nivel inferior poate fi inclus într-un director de nivel superior (Figura 6.1).

Orez. 6. 1. Ierarhia sistemelor de fișiere

Graficul care descrie ierarhia directoarelor poate fi un arbore sau o rețea. Directoarele formează un arbore dacă un fișier este permis să fie într-un singur director (Fig. 6.1, b),și rețea - dacă fișierul poate fi inclus în mai multe directoare simultan (Fig. 6.1, V). De exemplu, în MS-DOS și Windows, directoarele formează o structură arborescentă, în timp ce în UNIX formează o structură de rețea. Într-o structură arborescentă, fiecare fișier este frunze. Directorul de nivel superior este numit directorul rădăcină sau rădăcină.

Sistemul de fișiere vă permite să organizați programe și date și să organizați gestionarea ordonată a acestor obiecte.

Conceptul de sistem de fișiere care stă la baza sistemului de operare Unix a lăsat o amprentă profundă asupra sistemelor de operare ale computerelor personale. În Unix, subsistemul I/O unifică modul în care sunt accesate atât fișierele, cât și dispozitivele periferice. Un fișier este înțeles ca un set de date de pe un disc, terminal sau alt dispozitiv.

Sistemul de fișiere este o parte funcțională a sistemului de operare care efectuează operațiuni asupra fișierelor. Sistemul de fișiere vă permite să lucrați cu fișiere și directoare (directoare) indiferent de conținutul, dimensiunea, tipul acestora etc.

Sistemul de fișiere este un sistem de management al datelor.

Un sistem de gestionare a datelor este un sistem în care utilizatorii sunt eliberați de majoritatea manipulărilor fizice ale fișierelor și se pot concentra în primul rând pe proprietățile logice ale datelor.

Sistemele de fișiere OS creează pentru utilizatori un fel de reprezentare virtuală a dispozitivelor de stocare externe, permițându-le să lucreze nu la un nivel scăzut de comenzi de control al dispozitivelor fizice, ci la un nivel ridicat de seturi de date și structuri.

Sistem de fișiere (scop):

  • ascunde imaginea locației reale a informațiilor în memoria externă;
  • asigură independența programelor față de configurația specifică a computerului (nivel logic de lucru cu fișierele);
  • oferă răspunsuri standard la erorile care apar în timpul schimbului de date.

Structura fișierului

Întreaga colecție de fișiere de pe disc și relațiile dintre ele se numește structură de fișiere. Sistemele de operare dezvoltate au o structură de fișiere ierarhică - pe mai multe niveluri, organizate sub formă de arbore.

Se folosește o structură de directoare arborescentă − arbore de directoare. Împrumutat de la Unix. Structura ierarhica – structura unui sistem ale cărui părți (componente) sunt legate prin relații de includere sau subordonare.

Structura ierarhică este reprezentată de un arbore orientat, în care vârfurile corespund componentelor, iar arcurile corespund conexiunilor.

Arborele directoarelor G drive

Un arbore direcționat este un grafic cu un vârf (rădăcină) selectat, în care există o cale unică între rădăcină și orice vârf. În acest caz, sunt posibile două opțiuni de orientare: fie toate căile sunt orientate de la rădăcină la frunze, fie toate căile sunt orientate de la frunze la rădăcină.

Arborii sunt folosiți pentru a descrie și proiecta structuri ierarhice.

Rădăcina este poziția de pornire, frunzele sunt poziția finală.

Secțiuni

În timpul procesului de formatare, orice disc dur sau magneto-optic poate fi împărțit în mai multe părți și tratat ca discuri separate (independente). Aceste părți sunt numite secțiuni sau unități logice. Partiționarea unui disc în mai multe unități logice poate fi necesară deoarece sistemul de operare nu poate gestiona discuri mai mari de o anumită dimensiune. Este foarte convenabil să stocați datele și programele utilizatorului separat de programele de sistem (OS), deoarece sistemul de operare poate „zbura de pe computer”.

Capitol– zona discului. Sub disc logic (partiție)într-un computer ne referim la orice mediu de stocare cu care sistemul de operare funcționează ca un singur obiect întreg.

Numele unității– desemnarea unității logice; intrare în directorul rădăcină.

Unitățile logice (partițiile) sunt desemnate cu litere latine A, B, C, D, E, ... (32 de litere de la A la Z).

Literele A, B sunt rezervate pentru dischete.

C este hard disk-ul de pe care este de obicei încărcat sistemul de operare.

Literele rămase sunt unități logice, CD-uri etc. Numărul maxim de unități logice pentru sistemul de operare Windows este infinit.

ÎN tabel de partiții indică locația începutului și sfârșitului acestei secțiuni și numărul de sectoare din această secțiune (locație și dimensiune).

Structura de fișiere a unei unități logice

Pentru a accesa informațiile de pe disc conținute într-un fișier, trebuie să cunoașteți adresa fizică a primului sector (numărul suprafeței + numărul piesei + numărul sectorului), numărul total de clustere ocupate de acest fișier, adresa următorului cluster dacă dimensiunea fișierului este mai mare decât dimensiunea unui cluster

Elementele structurii fișierului:

    sector de pornire (pornire inițială, sector Boot);

    masa plasarefișiere (FAT – Tabel de alocare a fișierelor);

    directorul rădăcină (Director rădăcină);

    zona de date (spațiul liber rămas pe disc).

Boot-sector

Boot-sector – primul sector (inițial) al discului. Situat pe 0-side, 0-track.

Sectorul de pornire conține informații de service:

    dimensiunea clusterului de discuri (clusterul este un bloc care combină mai multe sectoare într-un grup pentru a reduce dimensiunea tabelului FAT);

    locația tabelului FAT (în sectorul de boot există un pointer către locul în care se află tabelul FAT);

    Mărimea mesei FAT;

    numărul de tabele FAT (există întotdeauna cel puțin 2 copii ale tabelului pentru a asigura fiabilitatea și securitatea, deoarece distrugerea FAT duce la pierderea informațiilor și este dificil de recuperat);

    adresa de la începutul directorului rădăcină și dimensiunea maximă a acestuia.

Sectorul de boot conține blocul de pornire (bootloader) - înregistrarea de pornire.

Încărcătorul este un program de serviciu care plasează programul executabil în RAM și îl pregătește pentru execuție.

FAT (Tabelul de alocare a fișierelor)

FAT (File Allocation Table) – tabel de alocare a fișierelor. Acesta definește ce zone ale discului aparțin fiecărui fișier Zona de date a discului este reprezentată în sistemul de operare ca o secvență de clustere numerotate.

GRAS este o serie de elemente care se adresează clusterelor din zona de date a discului. Fiecare grup de zone de date corespunde unui element FAT. Elementele FAT servesc ca un lanț de referințe la grupurile de fișiere din zona de date.

Structura tabelului de alocare a fișierelor:

FAT constă din elemente de 16/32/64 de biți. În total, tabelul poate conține până la 65520 de astfel de elemente, fiecare dintre ele (cu excepția primelor două) corespunde unui cluster de discuri. Un cluster este o unitate care alocă spațiu într-o zonă de date de pe un disc pentru fișiere și directoare. Primele două elemente de tabel (numerotate 0 și 1) sunt rezervate, iar fiecare dintre elementele de tabel rămase descrie starea clusterului de discuri cu același număr. Elementul poate indica faptul că clusterul este liber, că clusterul este defect, că clusterul aparține fișierului și este ultimul cluster din fișier. Dacă un cluster aparține unui fișier și nu este ultimul său cluster, atunci elementul tabelului conține numărul următorului cluster din acest fișier.

GRAS– un element extrem de important al structurii fișierului. Încălcările în FAT pot duce la pierderea completă sau parțială a informațiilor pe întreaga unitate logică. De aceea, pe disc sunt stocate două copii ale FAT. Există programe speciale care monitorizează starea FAT și corectează încălcările.

Diferite sisteme de operare necesită versiuni diferite de FAT

Windows 95 FAT 16, FAT 32

Windows NT (XP) NTFS

Novell Netware TurboFAT

UNIX NFS, ReiserFS

Structura logică a mediului de stocare

Sistemele de fișiere acceptă mai multe tipuri de fișiere funcțional diferite, care includ de obicei fișiere obișnuite, fișiere directoare, fișiere speciale, conducte numite, fișiere mapate în memorie și altele.

Fișierele obișnuite, sau pur și simplu fișierele, conțin informații de natură arbitrară, care sunt introduse în ele de către utilizator sau care sunt generate ca urmare a funcționării sistemului și a programelor utilizatorului. Majoritatea sistemelor de operare moderne (de exemplu, UNIX, Windows, OS/2) nu limitează sau controlează în niciun fel conținutul și structura unui fișier obișnuit. Conținutul unui fișier obișnuit este determinat de aplicația care funcționează cu acesta. De exemplu, un editor de text creează fișiere text constând din șiruri de caractere reprezentate într-un anumit cod. Acestea pot fi documente, coduri sursă de programe etc. Fișierele text pot fi citite pe ecran și tipărite pe o imprimantă. Fișierele binare nu folosesc coduri de caractere și au adesea structuri interne complexe, cum ar fi codul de program executabil sau un fișier de arhivă. Toate sistemele de operare trebuie să fie capabile să recunoască cel puțin un tip de fișier - propriile fișiere executabile.

Directoarele sunt un tip special de fișiere care conțin informații de referință de sistem despre un set de fișiere grupate de utilizatori în funcție de anumite criterii informale (de exemplu, fișierele care conțin documente ale aceluiași contract sau fișierele care alcătuiesc un pachet software sunt combinate într-un singur grup). ). Pe multe sisteme de operare, un director poate conține orice tip de fișier, inclusiv alte directoare, creând o structură arborescentă care este ușor de căutat. Directoarele stabilesc o mapare între numele fișierelor și caracteristicile fișierelor care sunt utilizate de sistemul de fișiere pentru a gestiona fișierele. Astfel de caracteristici includ, în special, informații (sau un indicator către o altă structură care conține aceste date) despre tipul de fișier și locația acestuia pe disc, drepturile de acces la fișier și datele creării și modificării acestuia. În toate celelalte privințe, directoarele sunt tratate de sistemul de fișiere ca fișiere obișnuite.

Fișierele speciale sunt fișiere fictive asociate cu dispozitivele I/O care sunt utilizate pentru a unifica mecanismul de accesare a fișierelor și a dispozitivelor externe. Fișierele speciale permit utilizatorului să efectueze operațiuni I/O folosind comenzi normale pentru scrierea într-un fișier sau citirea dintr-un fișier. Aceste comenzi sunt procesate mai întâi de programele sistemului de fișiere, iar apoi, la o anumită etapă a executării cererii, sunt convertite de sistemul de operare în comenzi de control pentru dispozitivul corespunzător.

Sistemele de fișiere moderne acceptă alte tipuri de fișiere, cum ar fi legăturile simbolice, conductele numite și fișierele mapate în memorie. Acestea vor fi discutate mai târziu.

Structura ierarhică a sistemului de fișiere

Utilizatorii accesează fișierele prin nume simbolice. Cu toate acestea, memoria umană limitează numărul de nume de obiecte la care un utilizator se poate referi după nume. Organizarea ierarhică a spațiului de nume ne permite să extindem semnificativ aceste limite. Acesta este motivul pentru care majoritatea sistemelor de fișiere au o structură ierarhică, în care nivelurile sunt create permițând ca un director de nivel inferior să fie conținut într-un director de nivel superior (Figura 1).

Orez. 1. Ierarhia sistemelor de fișiere

Graficul care descrie ierarhia directoarelor poate fi un arbore sau o rețea. Directoarele formează un arbore dacă un fișier este permis să fie inclus într-un singur director (Fig. 1, b) și o rețea - dacă fișierul poate fi inclus în mai multe directoare simultan (Fig. 1, c). De exemplu, în MS-DOS și Windows, directoarele formează o structură arborescentă, în timp ce în UNIX formează o structură de rețea. Într-o structură arborescentă, fiecare fișier este o frunză. Directorul de nivel superior se numește director rădăcină sau rădăcină.

Cu această organizare, utilizatorul este eliberat de a-și aminti numele tuturor fișierelor; trebuie doar să aibă o idee aproximativă despre ce grup poate fi atribuit un anumit fișier pentru a-l găsi prin răsfoirea secvenţială în directoare. Structura ierarhică este convenabilă pentru lucrul cu mai mulți utilizatori: fiecare utilizator cu fișierele sale este localizat în propriul director sau subarbore de directoare și, în același timp, toate fișierele din sistem sunt conectate logic.

Un caz special al unei structuri ierarhice este o organizare cu un singur nivel, când toate fișierele sunt incluse într-un singur director (Fig. 1, a).