Scurgerea resurselor - Resource leak

În informatică , o scurgere de resurse este un anumit tip de consum de resurse de către un program de calculator în care programul nu eliberează resursele pe care le-a achiziționat. Această condiție este în mod normal rezultatul unei erori într-un program. Scurgerile tipice de resurse includ scurgeri de memorie și scurgeri de gestiune , în special scurgeri de gestiune de fișiere, deși memoria este adesea considerată separat de alte resurse.

Exemple de resurse disponibile în număr limitat pentru sistemul de operare includ socket-uri de internet , mânere de fișiere , intrări în tabelele de proces și identificatori de proces (PID). Scurgerile de resurse sunt adesea o problemă minoră, provocând cel puțin o încetinire minoră și fiind recuperate după terminarea proceselor. În alte cazuri, scurgerile de resurse pot fi o problemă majoră, provocând foamete de resurse și încetinirea sau instabilitatea severă a sistemului, prăbușind procesul de scurgere, alte procese sau chiar sistemul. Scurgerile de resurse trec adesea neobservate sub sarcină ușoară și durate scurte de funcționare, iar aceste probleme se manifestă numai sub sarcină grea a sistemului sau sisteme care rămân în funcțiune perioade lungi de timp.

Scurgerile de resurse sunt în special o problemă pentru resursele disponibile în cantități foarte mici. Scurgerea unei resurse unice, cum ar fi o blocare , este deosebit de gravă, deoarece aceasta provoacă foamete imediată a resurselor (împiedică alte procese să o achiziționeze) și provoacă blocaj . Resursele care se scurg intenționat pot fi folosite într-un atac de refuz de serviciu , cum ar fi o bombă furcă , și astfel scurgerile de resurse prezintă un bug de securitate .

Cauze

Scurgerile de resurse se datorează, în general, unor erori de programare: resursele care au fost achiziționate trebuie eliberate, dar, de vreme ce eliberarea se întâmplă substanțial după achiziție, iar multe lucruri pot apărea între timp (de exemplu, o excepție este aruncată sau încetarea anormală a programului) este ușor pentru ca eliberarea să fie ratată.

Un exemplu foarte obișnuit este eșecul de a închide fișierele care au fost deschise, ceea ce scurge un mâner de fișier; acest lucru se întâmplă și în cazul conductelor . Un alt exemplu obișnuit este un proces părinte care nu reușește să apeleze așteptarea unui proces copil , care lasă procesul copil finalizat ca un proces zombie , scurgând o intrare în tabelul de proces .

Prevenire și atenuare

Scurgerile de resurse pot fi prevenite sau remediate prin gestionarea resurselor : tehnicile de programare sau construcțiile de limbaj pot preveni scurgerile prin eliberarea promptă a resurselor, în timp ce un proces separat poate recupera resursele care au fost scurs. Multe scurgeri de resurse sunt remediate prin recuperarea resurselor de către sistemul de operare după terminarea procesului și efectuarea unui exit apel de sistem .

Scurgerile de resurse sunt, prin urmare, în primul rând o problemă pentru procesele de lungă durată, deoarece resursele scurse deținute de procesele aflate încă în desfășurare nu sunt adesea recuperate; și pentru procesele care dobândesc rapid și scurg multe resurse.

Vezi si

Referințe