գլխավոր Տեխնո Ինչու՞ է պարտադիր պարբերաբար լիցքավորել USB կրիչը

Ինչու՞ է պարտադիր պարբերաբար լիցքավորել USB կրիչը

Եթե կարճ, որպխեսզի այն երկար ծառայի ու սկսի ավելի արագ աշխատել։

Վերջերս ինտերնետում մի հետաքրքիր քննարկման հանդիպեցի։ Մարդիկ փորձում էին հասկանալ, թե ի՞նչ կարիք կա USB կրիչը լիցքավորել (заряжать флешку)։ Բայց հավատացեք, այս հոդվածը կարդալուց հետո բոլորդ սկսելու եք լիցքավորել ձեր կրիչները։ Թվում է, թե առաջին հայացքից ցանկացած, քիչ թե շատ տեխնոգիտելիքներ ունեցող մարդ էլ գիտի, որ USB կրիչը լիցքավորելու իմաստ չկա, քանի, որ էներգիայի փոխանցումից բացի ուրիշ ոչինչ չի լինում, հետևաբար ջերմազատումից բացի որևէ այլ բան տեղի չի ունենա։ Բայց դա այնքան էլ այդպես չէ։ Ու հասկանալու համար, թե ինչու՞ է պետք լիցքավորել USB կրիչները, պետք է նախ հասկանանք, թե ինչից են դրանք բաղկացած ու ինչպե՞ս են աշխատում։

USB սարքավորումը տվյալների պահպանման բլոկային սարքավորում է։ Հասցեական ամբողջ տարածոթւյունը մասնատված է փոքր սեկտորների, յուրաքանչյուրը 512 բայթ։ Օպերացիոն համակարգը կարող է դիմել կոնկրետ սեկտորի հասցեին (LBA) ու կարդալ այն, կամ վերաձայնագրել։ Ամեն ինչ շատ պարզ է։

Իսկ հիմա եկեք նայենք մեր հարազատ կրիչի «կապոտի» տակ․․․

Կրիչի բաղադրության մեջ մտնում են բազմաթիվ միկրոսխեմաներ․

․ Վերահսկիչ (контроллер)
․ NAND- Ֆլեշ հիշողություն

Հիշողությունների միկրոսխեմաները, հասցեագրման, ձայնագրման ու տվյալների պահպանման տեսանկյունից, բավականին սպեցիֆիկ կառուցվածք ունեն։ Դա, խոշոր հաշվով թելադրված է նրա ճարտարապետությամբ (ու մենք պետք է սիրենք նրան այնպիսին, ինչպիսին կա)։ NAND-flash-ի համար առանձնացված են հետևյալ աշխատանքային կանոնները․



․ Հիշողությունը բաժանված է բլոկների, յուրաքանչյուրը մեկական մեգաբայթ

․ Հիշողության բլոկում ձայնագրումից առաջ անհրաժեշտ է այն մաքրել։ Մաքրելու ընթացքում բլոկում տվյալների բոլոր բայթերը դասավորվում են 0xFF նշանի տակ
․ Բլոկը բաղկացած է էջերից, որոնցից յուրաքանչյուրը մի քանի տասնյակ կիլոբայթ է

․ Բլոկում տվյալների ձայնագրումը տեղի է ունենում էջերով, ու կարող է միաժամանակ ձայանգրվել բլոկի բոլոր էջերում։

․ Մեկ բլոկում տվյալների էջերը պետք է ձայնագրվեն բացառապես իրենց համարների աճման կարգով

․ Ջնջելուց հետո բլոկի յուրաքանչյուր էջ կարող է ձայնագրվել միայն մեկ անգամ, մինչև հաջորդ ջնջելը

Ահա, կանոնների ու գործողությունների հավաքածում նման հասարակ գործողությունը (օգտագործողի տեսանկյունից), ինչպիսին մեկ սեկտորի ձայնագրություն է, USB-ն ստեղծող ծրագրավորողի կյանքը վերածում է իսկական դժոխքի։ Փորձեք պատկերացնել, թե ինչպես դուք կլուծեիք այս խնդիրը ու կհասկանաք, որ ահագին նմանություններ կան Հաննոյական աշտարակ կոչվող խաղի հետ։

Ու որպեսզի ընկերացնեն կրիչի user-friendly բլոկային հասցեագրումը NAND-flash հիշողության sadist-friendly հասցեագրման հետ, կրիչի կարգավորիչի ներսում պրոցեսոր է աշխատում, որն իրացնում է հասցների ալգորիթմների հեռարձակումը։ Դա կոչվում է FTL (Flash Translation Layer)։ FTL-ի ալգորիթմը կատարում է հետևյալ գործողությունները․

․  Հասցեների հեռարձակումների աղյուսակի ստեղծում և սպասարկում (page mapping)

․ «Աղբահավաքություն» (garbage collection)

․ NAND-flash հիշողության բլոկերի հավասարեցում (wear leveling)։

 
Գործից հասկացող մարդիկ կասեն, որ կան նաև այլ գործողություններ, ինչպես օրինակ NAND-flash հիշողության խփած բլոկերի հայտնաբերումն ու կառավարումը (bad block management), բայց դրա մասին հիմա չարժի խոսել։

Հիմա մի փոքր լիքբեզ նշված կետերով․

Page mapping


Դե այստեղ կարծես թե ամեն ինչ հասկանալի է․․․ Տեղափոխող հասցեների հասցեական տարածությունը հեռարձակվում է բլոկների հասցեների ու NAND-flash հիշողության վրա, այն էլ հսկայական զանգվածի միջոցով, որի ինդեքսը նշվում է որպես LBA, իսկ էլեմենտի նշագրումը՝ ֆիզիկական հասցե։

Այդ դեպքում, եթե անհրաժեշտ է վերաձայնագրել մեկ էջ, ապա այդ էջի տվյալները գրվում են ազատ բլոկներում, հերթականությամբ։ Իսկ հետո զանգվածում էջի համարը փոխվում է նորից ձայնագրած համարին։ Երբ մենք գնում ենք, օրինակ 32 ԳԲ ծավալով հիշողության կրիչ, բայց նկատում եք, որ նրա մեջ միայն 29 ԳԲ ծավալ կա։ Բայց դուք չգիտեք, որ պակասող հատվածը ոչ թե չինացիներն են գողացել արտադրելու ժամանակ, այլ FTL ալգորիթմի մշակողները։ Դա արվում է նրա համար, որպեսզի կարողանան կրիչի վրա տվյալներ գրել։

Garbage Collection

 

Իսկ ի՞նչ կլինի այն էջի հետ, որը կորցրել է իր ակտուալությունը։ Նրա մեջ ներդրված տվյալներն իրականում մեզ պետք չեն, սակայն մենք չեն էլ կարող ջնջել դրանք, քանի որ հնարավոր է ջնջել միայն բլոկներով, իսկ այդ բլոկում դեռ կարող են լինել ակտուալ էջեր։ Վաղ թե ուշ ստեղծվելու է այնպիսի մի իրավիճակ, երբ մենք ազատ բլոկներ էլ չենք ունենալու, որտեղ կարող ենք էջեր գրել։ Սակայն մյուս բլոկներում, այստեղ, այնտեղ լինելու են էջեր, որոնք այլևս ակտուալ չեն։ Որպեսզի նման բան տեղի չունենա կրիչի մեջ մշտապես պտտվում է այսպես ասած աղբահավաք մի ծրագիր։

Նա զբաղվում է միայն նրանով, որ փնտրում է փչացած բլոկներ, որտեղ ամենաքիչ ակտուալ էջերը կան և դրանք տեղափոխում է նոր բլոկ։ Այդպիսով փչացած բլոկն ամբողջությամբ ազատվում է ակտուալ էջերից ու այն հնարավոր է դառնում ջնջել։ Իսկ նոր բլոկում արդեն բոլոր էջերն էլ ակտուալ են։ Մի տեսակ ֆրագմենտացիա է հիշեցնում։

 

Wear Leveling


Իրականում ոչինչ հավերժ չէ այս արևի տակ, հատկապես NAND-flash-ը։ Այնպես է ստացվել, որ NAND-flash հիշողությունն ունի սահմանափակ ռեսուրս, որն արտահայտվում է բլոկների մաքրման ցիկլերի սահմանափակ քանակով։ Այն բլոկները, որոնք ամենահաճախն են մաքրվել, համարվում են հին բլոկներ և կարող են շատ արագ շարքից դուրս գալ։

Բանն այն է, որ երիտասարդ բլոկները փոխվում են հին բլոկների հետ իրենց տեղերով, որպեսզի բոլոր բլոկների հեռացումը հավասարաչափ լինի։ Այդպես կրիչն ավելի երկար ապրելու հնարավորություն է ստանում, քանի դեռ, ինչ-որ մի օր բոլոր բլոկները չեն մահացել։



Իսկ հիմա ամենակարևորը՝ ինչու՞ է պետք, նույիսկ պարտադիր լիցքավորել հիշողության կրիչը

Բոլորի հետ էլ եղել է, որ ցանկացել եք երեկոյան գուլպաները լվանալ, սակայն ամեն երեկո դրա համար ժամանակ չի մնացել։ Իսկ հետո գալիս է մի պահ, երբ մաքուր գուլպա էլ չեք ունենում։ Ու այդ ժամանակ Ձեր քնի հաշվին ստիպված լվանում եք Ձեր գուլպաները։



Այ մոտավորապես նույն բանն էլ տեղի է ունենում FTL-ում աղբահավաք ալգորիթմի հետ։ Սպառողները հաճախ հիշողության կրիչն օգտագործում են մի համակարգչից մյուսը տվյալներ տեղափոխելու համար։ Իսկ գործողությունների սցենարը հետևյալն է՝ կրիչը մտցնել համակարչի մեջ-արագ ներբեռնել որևէ ֆայլ-հանել կրիչը-վազել մյուս համակարգչի մոտ-մտցնել կրիչը-տեղափոխել տվյալները-հանել կրիչը։ Ու մի որոշ ժամանակ անց մարդիկ սկսում են նկատել, որ իրենց կրիչը սկսել է դանդաղ աշխատել։ Դուք սկսում եք մտածել, որ այն փչացել է, ու նորը կգնեք, որպեսզի այն աշխատի լույսի արագությամբ։ Սկզբնական ժամանակ գուցե, սակայն որոշ ժամանակ այն նույնպես կսկսի դանդաղել։

Բայց ինչու՞։ Բանն այն է, որը վերը նշածս սցենարի ժամանակ garbage collection աղբահավաք ալգորիթմը չի հասցնում տեղ ազատել բլոկներում, նոր ձայնագրման համար։ Ու հանգեցնում է նրան, որ վաղ թե ուշ ազատ բլոկներ այլևս չեն լինում կրիչի վրա։ Ու այդ ժամանակ կարգավորիչը սկզբում ստիպված է լինում զբաղվել տեղ ազատելով։ Որպեսզի Կրիչը պատրաստ լինի ամբողջ արագությամբ ընդունել ձեր տվյալները, կարգավորիչին ժամանակ է պետք, որպեսզի հասցնի գուլպաները լվանալ։ Ինչպես հասկացաք, լիցքավորումը լուծում է այդ խնդիրը ու կարգավորիչին տալիս է բավականաչափ ժամանակ, տվյալներում կարգ ու կանոն հաստատելու համար։