Fragmentare (informatică)

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

În tehnologia informației și telecomunicații , fragmentarea indică procesul de împărțire a unei secvențe de date în mai multe părți, pentru a le stoca pe un mediu de stocare special sau pentru a le transmite prin rețea .

În stocarea datelor

Fenomenul apare atunci când procesele sunt inserate și eliminate din memoria principală (RAM) sau fișiere dintr-o memorie de masă (de exemplu, un hard disk ). Deoarece memoria este, la nivel logic, o secvență contiguă de spații (celule sau sectoare) potrivite pentru a conține unități elementare de date și că în mod normal un obiect care trebuie stocat (un program sau un fișier ) este alcătuit din numeroase unități elementare contigue , organizarea acestor secvențe în memorie trebuie să respecte o regulă care permite adăugarea și eliminarea acestor obiecte cu acces aleatoriu .

De fapt, adăugarea sau eliminarea repetată a secvențelor de date de dimensiuni eterogene implică o „fragmentare” a spațiului liber disponibil, care, prin urmare, nu mai pare a fi contiguu. În acest caz, în memoriile secundare, cum ar fi discurile, reconstrucția secvenței originale a datelor stocate se face într-un mod ineficient, cu scăderi de performanță; orice hard disk, de fapt, funcționează la performanțe maxime numai dacă trebuie să scrie sau să citească date stocate în poziții contigue: „saltul” fizic al capului de citire a discului dintr-un sector în alt loc în cilindri diferiți introduce încetiniri care, în cazuri poate atinge niveluri critice.

Acest lucru nu este de obicei cazul amintirilor primare , deoarece diferența dintre fragmentare în memoria primară și secundară constă în modul diferit în care datele trebuie stocate. De fapt, în memoria primară un program este încărcat într-o zonă de memorie liberă având o dimensiune cel puțin egală cu dimensiunea programului în sine sau ( memorie virtuală ) într-un anumit număr de zone de memorie cu lungime fixă ​​( pagini ) în care memoria este împărțit. Cu toate acestea, în ambele cazuri, datele sunt menționate cu acces direct și nu există niciun avantaj de timp în accesarea a două pagini consecutive sau a două pagini cu adrese de memorie îndepărtate.

Pentru simplitate, de acum înainte ne referim întotdeauna la memoria secundară și la fișierele de date, deoarece raționamentul poate fi ușor extins și la memoria primară. În general sunt identificate două tipuri de fragmentare, dintre care doar unul afectează performanța sistemului:

  • Fragmentarea internă : memoria este împărțită în blocuri de dimensiuni egale B (de exemplu, un sector al unui disc). Când urmează să fie stocat un fișier de dimensiunea D, -1 blocuri de memorie sunt completate complet (D div B) și unul care va conține D mod B. Fragmentarea internă constă din spațiul de memorie care rămâne liber și neutilizat în ultimul bloc. Acest tip de fragmentare nu afectează performanța sistemului, ci este o pierdere de memorie . Ca un caz special, dacă D mod B == 0 , atunci exact blocurile de memorie D div B sunt ocupate, iar deșeurile devin zero. Evident, aceste deșeuri au un procent foarte mic dacă D »B , în timp ce este foarte mare în cazul dosarelor de dimensiuni comparabile cu B. De exemplu, dacă un fișier de 1.637.257 octeți urmează să fie stocat pe un disc cu sectoare de 4096 octeți, atunci 399 sectoare vor fi complet ocupate, în timp ce unul va fi ocupat pentru 2953 octeți (de fapt 4096x399 + 2953 = 1637257). În acest caz, spațiul irosit este de aproximativ 0,18%. Dacă, pe de altă parte, trebuie stocat un fișier de 1000 de octeți, atunci deșeurile sunt 3096 octeți, sau 75,59%.
  • Fragmentare externă : în general, controlerul de hard disk încearcă să minimizeze timpul de acces pe disc, încercând să stocheze un fișier în sectoare adiacente și să minimizeze mișcarea capetelor (o acțiune care introduce încetiniri semnificative în accesul la date). Cu toate acestea, în urma stocării și ștergerii repetate a fișierelor de dimensiuni eterogene efectuate într-un mod dezordonat, există o reducere a spațiului maxim adiacent disponibil. În acest caz, un fișier nou de mărime suficientă pentru a fi stocat va fi probabil scris în sectoare și cilindri neadiacenți. Acest lucru poate duce la o creștere semnificativă a timpilor de citire și scriere, introducând o scădere notabilă a performanței sistemului [1] .

Soluțiile posibile pentru îmbunătățirea performanței sistemului au făcut obiectul unui studiu aprofundat în domeniul IT. În cazul unui disc, este vorba de rearanjarea fragmentelor fișierelor astfel încât să fie adiacente una cu cealaltă, reducând astfel timpul de acces. În cazul memoriei, trebuie să maximizați memoria contiguă disponibilă. Ambele probleme, cu toate acestea, pot fi urmărite înapoi la problema rucsacului și, prin urmare, au timp de soluție pseudo-polinomială . În primul caz, se utilizează programe speciale, numite defragmentatoare ; în al doilea caz este posibil ca sistemul de operare să aibă grijă de această problemă, la fel cum este posibil să se utilizeze în mod explicit colectarea gunoiului .

În transmiterea datelor

În rețelele de transmisie a datelor de pachete , cum ar fi în IPv4 , este introdusă o cantitate, numită Unitatea de transmisie maximă (MTU), care indică cantitatea maximă de date care poate fi transmisă prin rețea, cu un singur pachet . De exemplu, pe o rețea Ethernet, dimensiunea MTU standard este de 1500 octeți , în timp ce pe o rețea Token Ring este de 4096 octeți . Fragmentarea are loc atunci când un pachet mai mare decât MTU este plasat în rețea și trebuie transmis.

Exemplu

De exemplu, să presupunem că un pachet IP de 2396 octeți urmează să fie transmis printr-o rețea Ethernet (cu MTU = 1500). Apoi, acest pachet va trebui fragmentat în două pachete.

Primul pachet
Va avea 1500 de octeți în total, egal cu MTU-ul rețelei Ethernet. Dintre acestea, 20 vor fi utilizate pentru antetul IP , 24 octeți vor fi pentruantetul TCP , iar 1456 vor fi pentru date. Mai mult, acest pachet va avea, în antetul IP, bitul DF setat la 0 pentru a indica „posibila fragmentare”, semnalizatorul MF setat la 1 pentru a indica „alte fragmente prezente” și câmpul „Fragmentare Offset”. Setat la 0 Acest ultim câmp este măsurat în termeni de unități de 8 octeți (64 de biți).
Al doilea pachet
va avea în total 940 de octeți. La fel ca înainte, 20 sunt antet IP, 24 sunt antet TCP și 896 sunt date. În antetul IP va exista deci bitul DF întotdeauna egal cu 0, dar bitul MF setat la 0 pentru a indica „ultimul fragment”. „Decalajul de fragmentare” va avea acum valoarea 182 (adică 1456/8).

Rețineți că 2396 se obține prin adăugarea dimensiunilor antetelor în plus față de cele din date: prin urmare 2396 = 24 + 20 + 1456 + 896.

Fragmentarea este deosebit de bine cunoscută pe Internet , deoarece routerele plasate de-a lungul căii folosesc adesea mijloace fizice diferite pentru conexiune și, prin urmare, protocoale diferite la nivelul legăturii de date , fiecare cu propriul MTU.

În cazul protocoalelor care acceptă o limită minimă de date care urmează să fie transmise, se va face contrariul, adică prin asamblarea pachetelor sau zero padding pentru a atinge limita minimă necesară de biți.

În orice caz, la recepție, fluxul continuu de date va fi restabilit prin intermediul unei reasamblări ordonate a tuturor pachetelor legate de aceeași transmisie.

Notă

  1. ^ Fragmentare: Cum se înrăutățește performanța - FortyZone , pe FortyZone . Adus la 23 octombrie 2015 (arhivat din original la 8 noiembrie 2015) .

Elemente conexe

Telematică Portal telematic : accesați intrări Wikipedia care vorbesc despre rețele, telecomunicații și protocoale de rețea