Hirgelintayda giraanta kaydinta NOOR flash

prehistory

Waxaa jira mashiinno wax lagu iibiyo oo nakhshadeenna ah. Gudaha Raspberry Pi iyo fiilooyinka qaar ee sabuurad gaar ah. Aqbalaha lacagta qadaadiicda ah, biilka aqbalaha, terminalka bangiga ayaa ku xiran... Wax kasta waxaa maamula barnaamij iskiis u qoran. Taariikhda shaqada oo dhan waxay ku qoran tahay log on flash drive (MicroSD), ka dibna waxaa lagu kala qaadaa internetka iyada oo la isticmaalayo modem USB ah, halkaas oo lagu kaydiyaa database ah. Macluumaadka iibka waxaa lagu shubaa 1c, waxaa sidoo kale jira shabakad shabakad fudud oo la socodka, iwm.

Taasi waa, joornaalku waa muhiim - xisaabinta (dakhliga, iibka, iwm.), la socodka (dhammaan noocyada guul-darrooyinka iyo duruufaha kale ee xoogga leh); Tani, mid ayaa odhan karta, waa dhammaan macluumaadka aan ka hayno mashiinkan.

dhibaato

Flash Drive-yadu waxay muujinayaan inay yihiin qalab aan la isku halayn karin. Waxay ku fashilmaan si joogto ah oo xaasid ah. Tani waxay keenaysaa labadaba wakhtiga mashiinka iyo (haddii sabab qaar ka mid ah aan log lagu wareejin karin internetka) luminta xogta.

Tani maaha waayo-aragnimadii ugu horreysay ee isticmaalka flash-ka, ka hor waxaa jiray mashruuc kale oo leh in ka badan boqol qalab, halkaas oo majaladda lagu kaydiyay USB-ga, waxaa sidoo kale jiray dhibaatooyin la isku halleyn karo, mararka qaarkood tirada kuwa ku guuldareystay. bil waxay ahayd daraasiin. Waxaan isku daynay flash drives kala duwan, oo ay ku jiraan kuwa summadaha leh oo leh xusuusta SLC, moodooyinka qaarna waa kuwo la isku halleyn karo marka loo eego kuwa kale, laakiin beddelidda flash-yada ayaan si qotodheer u xallin dhibaatada.

Digniin Akhris dheer! Haddii aadan xiiseyneynin "sababta", laakiin kaliya "sida", waxaad u bixi kartaa si toos ah Dhamaadka qodobbada.

go'aanka

Waxa ugu horreeya ee maskaxda ku soo dhacaa waa: ka tag MicroSD, ku rakib, tusaale ahaan, SSD, oo ka bilow. Aragti ahaan suurtogal ah, malaha, laakiin qaali ah, oo aan la isku halayn karin ( adabtarada USB-SATA ayaa lagu daray; tirakoobka guuldarada ee miisaaniyada SSD-yada sidoo kale maaha kuwo dhiirigelinaya).

USB HDD sidoo kale uma eka xal gaar ah oo soo jiidasho leh.

Sidaa darteed, waxaan u nimid doorashadan: ka tag booting ka MicroSD, laakiin u isticmaal in hab reading-kaliya, iyo kaydi log hawlgalka (iyo macluumaad kale oo gaar ah in qayb gaar ah oo hardware - lambarka serial, calibrations dareenka, iwm) meel kale. .

Mawduuca akhrinta-kaliya FS ee raspberries ayaa horeyba loo bartay gudaha iyo dibaddaba, ma sii joogi doono faahfaahinta fulinta ee maqaalkan. (laakin haddii ay jirto xiiso, waxaa laga yaabaa in aan maqaal yar ku qoro mawduucan). Qodobka kaliya ee aan jeclaan lahaa in aan xuso waa in labadaba khibrad shakhsiyeed iyo dib u eegista kuwii hore u hirgeliyay, waxaa jira faa'iido isku-kalsooni. Haa, waa wax aan suurtagal ahayn in si buuxda looga takhaluso burburka, laakiin si weyn u yaraynta soo noqnoqoshadoodu waa suurtogal. Kaararkuna waxa ay noqonayaan kuwo midaysan, taas oo beddelka ka dhigaysa mid aad ugu fudud shaqaalaha adeegga.

Qalabka

Shaki gaar ah kama jirin doorashada nooca xusuusta - AMA Flash.
Doodaha:

  • isku xirka fudud (inta badan baska SPI, kaas oo aad horeba khibrad u leedahay isticmaalka, markaa wax dhibaato hardware ah lama saadaalin);
  • qiimo qosol leh;
  • Nidaamka hawlgalka caadiga ah (fulintu waxay horeyba ugu jirtaa kernel Linux, haddii aad rabto, waxaad qaadan kartaa mid saddexaad, kaas oo sidoo kale jira, ama xitaa qor adiga, nasiib wanaag wax walba waa sahlan yihiin);
  • isku halaynta iyo kheyraadka:
    laga bilaabo xaashida xogta caadiga ah: xogta waxaa lagu kaydiyaa 20 sano, 100000 wareegyada tirtirka ee block kasta;
    laga soo xigtay ilo dhinac saddexaad: BER aad u hooseeya, waxay soo dhejisaa baahi loo qabo codes sixitaanka (Shaqooyinka qaarkood waxay u tixgeliyaan ECC NOR, laakiin badanaa waxay weli ka dhigan yihiin MLC NOR; tani sidoo kale way dhacdaa).

Aynu qiyaasno shuruudaha mugga iyo kheyraadka.

Waxaan jeclaan lahaa in xogta la damaanad qaado in la keydiyo dhowr maalmood. Tani waa lagama maarmaan si haddii ay dhacdo dhibaato kasta oo isgaarsiineed, taariikhda iibka lama lumin. Waxaan diiradda saari doonaa 5 maalmood, inta lagu jiro muddadan (xitaa iyada oo la tixgelinayo maalmaha fasaxa ah iyo fasaxyada) dhibaatada waa la xalin karaa.

Waxaan hadda aruurinay qiyaastii 100kb ee lo'da maalintii (3-4 kun oo galmood), laakiin si tartiib tartiib ah tiradani way sii kordheysaa - faahfaahinta ayaa sii kordheysa, dhacdooyin cusub ayaa lagu darayaa. Waxaa dheer, mararka qaarkood waxaa jira dilaacyo (dareemaha qaar ayaa ku bilaaba spaming leh waxyaabo been abuur ah, tusaale ahaan). Waxaan xisaabin doonaa 10 kun oo diiwaan 100 kiiba - megabyte maalintii.

Wadar ahaan, 5MB ee xogta nadiifka ah (si fiican loo cufay) ayaa soo baxda. Wax badan iyaga (qiyaasta qallafsan) 1MB ee xogta adeegga.

Taasi waa, waxaan u baahanahay chip 8MB haddii aynaan isticmaalin cadaadis, ama 4MB haddii aan isticmaalno. Tirooyinka dhabta ah ee nooca xusuusta ah.

Dhanka kheyraadka: haddii aan qorsheyno in xusuusta oo dhan dib loo qori doono wax ka badan hal mar 5tii maalmoodba mar, ka dib 10 sano oo adeeg ah waxaan helnaa wax ka yar kun wareegyada dib u qorista.
Aan ku xasuusiyo in soo saaraha uu ballanqaaday boqol kun.

Wax yar oo ku saabsan NOR vs NAND

Maanta, dabcan, xusuusta NAND aad ayey caan u tahay, laakiin uma isticmaali doono mashruucan: NAND, oo ka duwan NOR, waxay u baahan tahay isticmaalka codes sixitaanka, miis of blocks xun, iwm, iyo sidoo kale lugaha chips NAND inta badan aad u badan.

Dhibaatooyinka NOOR waxaa ka mid ah:

  • mugga yar (iyo, si waafaqsan, qiimaha sare halkii megabyte);
  • Xawaaraha isgaarsiineed oo hooseeya (badanaa sababtuna tahay xaqiiqda ah in is-dhexgal taxane ah la isticmaalo, badanaa SPI ama I2C);
  • tirtirid tartiib tartiib ah (waxay kuxirantahay cabbirka xannibaadda, waxay ka qaadataa jajab ilbiriqsi ilaa dhowr ilbiriqsi).

Waxay u muuqataa in aysan jirin wax noo muhiim ah, markaa waan sii wadnaa.

Haddii faahfaahintu ay xiiso leedahay, microcircuit ayaa la doortay at25df321a (si kastaba ha ahaatee, tani waa mid aan muhiim ahayn, waxaa jira waxyaabo badan oo analogues ah oo suuqa ku jira oo ku habboon nidaamka pinout iyo nidaamka; xitaa haddii aan rabno inaan ku rakibno microcircuit ka soo saaraha kala duwan iyo / ama cabbir ka duwan, wax walbaa way shaqeyn doonaan iyada oo aan la beddelin code).

Waxaan isticmaalaa darawalka lagu dhex dhisay kernel Linux; Raspberry, Thanks to qalabka geedka dulsaarka, wax walba waa mid aad u fudud - waxaad u baahan tahay inaad geliso dusha la isku daray ee /boot/overlays oo wax yar ka beddel /boot/config.txt.

Tusaale dts faylka

Run ahaantii, ma hubo in ay ku qoran tahay khaladaad la'aan, laakiin way shaqeysaa.

/*
 * Device tree overlay for at25 at spi0.1
 */

/dts-v1/;
/plugin/;

/ {
    compatible = "brcm,bcm2835", "brcm,bcm2836", "brcm,bcm2708", "brcm,bcm2709"; 

    /* disable spi-dev for spi0.1 */
    fragment@0 {
        target = <&spi0>;
        __overlay__ {
            status = "okay";
            spidev@1{
                status = "disabled";
            };
        };
    };

    /* the spi config of the at25 */
    fragment@1 {
        target = <&spi0>;
        __overlay__ {
            #address-cells = <1>;
            #size-cells = <0>;
            flash: m25p80@1 {
                    compatible = "atmel,at25df321a";
                    reg = <1>;
                    spi-max-frequency = <50000000>;

                    /* default to false:
                    m25p,fast-read ;
                    */
            };
        };
    };

    __overrides__ {
        spimaxfrequency = <&flash>,"spi-max-frequency:0";
        fastread = <&flash>,"m25p,fast-read?";
    };
};

Iyo xariiq kale oo ku jira config.txt

dtoverlay=at25:spimaxfrequency=50000000

Waxaan ka tagi doonaa sharraxaadda ku xidhida chip-ka Raspberry Pi. Dhinaca kale, anigu ma ihi khabiir ku takhasusay qalabka elektiroonigga ah, dhanka kale, wax kasta oo halkan waa banal xitaa aniga: microcircuit wuxuu leeyahay 8 lugood oo keliya, kuwaas oo aan u baahanahay dhul, awood, SPI (CS, SI, SO, SCK). ; Heerarku waxay la mid yihiin kuwa Raspberry Pi, looma baahna fiilo dheeri ah - kaliya ku xidh 6 biin ee la tilmaamay.

Abuurista dhibaatada

Sida caadiga ah, odhaahda dhibaatadu waxay soo martaa dhawr soo noqnoqosho, waxayna iila muuqataa in la gaadhay waqtigii kan xiga. Haddaba aynu joojino, wixii hore loo qorayna aynu isla meel dhigno, oo aan caddeeyo tafaasiisha hadhsan.

Markaa, waxaanu go'aansanay in loggu lagu kaydin doono SPI AMA Flash.

Waa maxay AMA Flash kuwa aan garanayn?

Tani waa xusuusta aan xasilloonayn oo aad ku samayn karto saddex hawlgal:

  1. Akhrinta:
    Akhriska ugu badan: waxaanu gudbinaa ciwaanka oo akhrinaaya inta aan u baahanahay;
  2. Diiwangal:
    U qorista NO flash waxay u egtahay mid caadi ah, laakiin waxay leedahay hal sir: kaliya waxaad bedeli kartaa 1 ilaa 0, laakiin ma aha caksigeeda. Tusaale ahaan, haddii aan ku haysanay 0x55 unugga xusuusta, ka dib markaan u qorno 0x0f, 0x05 ayaa mar hore lagu kaydin doonaa halkaas. (eeg shaxda hoose);
  3. Tirtir:
    Dabcan, waxaan u baahanahay inaan awoodno inaan sameyno hawlgalka ka soo horjeeda - u beddel 0 ilaa 1, tani waa dhab ahaan waxa hawlgalka tirtirka loogu talagalay. Si ka duwan labada hore, kuma shaqeeyo bytes, laakiin leh blocks (xeerka tirtiridda ugu yar ee chip la doortay waa 4kb). Tirtirku wuxuu baabi'iyaa dhammaan xannibaadda waana habka kaliya ee lagu beddeli karo 0 ilaa 1. Sidaa darteed, markaad la shaqaynayso xusuusta flash-ka, inta badan waa inaad isku hagaajisaa qaab-dhismeedka xogta illaa xadka xannibaadda.
    Ku duubista NO Flash:

Xogta binary

Ahaa
01010101

La duubay
00001111

Ayaa noqotay
00000101

Logu laftiisa waa isku xigxiga diiwaanada dhererka doorsooma. Dhererka caadiga ah ee rikoodhku waa ilaa 30 bytes (inkasta oo diiwaannada dhererkoodu yahay dhawr kiiloobytes ay mararka qaarkood dhacaan). Xaaladdan oo kale, waxaan ula shaqeynaa iyaga si fudud oo ah qaab-bytes ah, laakiin, haddii aad xiisaynayso, CBOR waxaa lagu isticmaalaa gudaha diiwaannada

Marka lagu daro log-ga, waxaan u baahanahay inaan kaydinno qaar ka mid ah macluumaadka "dejinta", labadaba la cusboonaysiiyay iyo kuwa aan ahayn: qalab gaar ah oo aqoonsiga, cabbirka dareemayaasha, "qalabka si ku-meel-gaar ah u naafo ah" calanka, iwm.
Macluumaadkani waa kaydka kaydka-qiimaha muhiimka ah, oo sidoo kale lagu kaydiyo CBOR.Ma hayno macluumaad badan (dhowr kilobytes ugu badnaan), waana la cusboonaysiiyaa si aan badnayn.
Waxa soo socda waxaan ugu yeeri doonaa macnaha guud.

Haddii aan xasuusanno halka maqaalkani ka bilaabmay, aad bay muhiim u tahay in la hubiyo kaydinta xogta la isku halleyn karo iyo, haddii ay suurtagal tahay, hawlgal joogto ah xitaa haddii ay dhacdo cillado hardware / musuqmaasuqa xogta.

Ilaha dhibaatooyinka ayaa la tixgelin karaa?

  • Dami inta lagu jiro hawlgallada qorista/tirtirka. Tani waxay ka timid qaybta "ma jirto wax khiyaano ah oo ka dhan ah crowbar."
    Xogta laga helay doodaha on stackexchange: marka korantada la dami marka la shaqaynayo flash, labaduba waxay tirtiraan (ku dhig 1) oo u qoraan (ku dhig ilaa 0) waxay keenaan dabeecad aan la qeexin: xogta waa la qori karaa, qayb ahaan qoran ( dheh, waxaan wareejinay 10 bytes / 80 bits , laakiin aan weli la qori karin 45-bits), sidoo kale waxaa suurtogal ah in qaar ka mid ah jajabku ay ku jiraan xaalad "dhexdhexaad ah" (akhrisku wuxuu soo saari karaa labadaba 0 iyo 1);
  • Khaladaadka ku jira xusuusta flash lafteeda.
    BER, inkasta oo aad u hooseeya, ma noqon karto eber;
  • Khaladaadka baska
    Xogta lagu gudbiyo SPI sina looma ilaaliyo, labadaba khaladaad yar oo keliya iyo khaladaadka wada shaqaynta labadaba way dhici karaan - luminta ama gelinta qashin-qubka (taasoo horseedaysa khalkhal badan oo xog ah);
  • Khaladaadka/khaladaadka kale
    Khaladaadka ku jira koodka, Cilladaha Raspberry, faragelinta shisheeyaha...

Waxaan dejiyey shuruudaha, kuwaas oo buuxinta, fikradayda, waa lagama maarmaan si loo xaqiijiyo isku halaynta:

  • Diiwaanada waa inay isla markiiba galaan xusuusta flash-ka, qorista dib-u-dhaca lama tixgalinayo; - haddii khalad dhaco, waa in la ogaadaa oo laga baaraandegaa sida ugu dhaqsaha badan; - Nidaamku waa, haddii ay suurtagal tahay, inuu ka soo kabsado khaladaadka.
    (tusaale ka mid ah nolosha "sida ay tahay inaysan noqon", taas oo aan u maleynayo in qof walba uu la kulmay: dib u soo kabashada degdegga ah ka dib, nidaamka faylka "jabiyey" iyo nidaamka qalliinka ma bootin)

Fikradaha, hababka, milicsiga

Markii aan bilaabay in aan ka fekero dhibaatadan, fikrado badan ayaa madaxayga ka soo baxay, tusaale ahaan:

  • isticmaal isku-buufinta xogta;
  • Isticmaal qaab-dhismeedka xogta xariif ah, tusaale ahaan, kaydinta madax-diiwaanka si gooni gooni ah diiwaanada laftooda, si haddii uu khalad ka jiro diiwaan kasta, waxaad akhrin kartaa inta soo hartay iyada oo aan wax dhibaato ah;
  • isticmaal meelaha yar yar si aad u xakamayso dhamaystirka duubista marka korontada la damiyo;
  • dukaanka jeegaga wax walba;
  • isticmaal nooc ka mid ah kood u adkeysiga sanqadha.

Qaar ka mid ah fikradahaas ayaa la isticmaalay, halka qaar kalena la go'aamiyay in laga tago. Aan u kala hormarno.

Cadaadiska xogta

Dhacdooyinka laftooda aan ku diiwaan gashano joornaalka waa kuwo la mid ah oo la soo celin karo ("waxay tuureen 5 ruble qadaadiic", "badhanka riix si aad wax u bedesho", ...). Sidaa darteed, cadaadisku waa inuu noqdaa mid waxtar leh.

Dusha sare ee cadaadisku waa mid aan micno lahayn (processor-kayadu aad buu u xoog badan yahay, xitaa Pi-gii ugu horreeyay wuxuu lahaa hal xudun oo leh soo noqnoqoshada 700 MHz, moodooyinka hadda jira waxay leeyihiin dhowr koofiyadood oo leh inta jeer ee gigahertz), heerka sarrifka kaydinta ayaa hooseeya (dhowr megabytes halkii ilbiriqsi), cabbirka diiwaanadu waa yar yahay. Guud ahaan, haddii cadaadisku uu saameyn ku yeesho waxqabadka, kaliya waxay noqon doontaa mid wanaagsan. (Gabi ahaanba aan dhaliil lahayn, kaliya sheegaya). Intaa waxaa dheer, ma lihin wax dhab ah oo ku dhejisan, laakiin Linux-ka caadiga ah - markaa hirgelintu waa inaysan u baahnayn dadaal badan (waa ku filan in la isku xiro maktabadda oo laga isticmaalo dhowr hawlood).

Qayb ka mid ah log-ka ayaa laga soo qaatay aaladda shaqaynaysa (1.7 MB, 70 kun oo wax gal ah) oo marka hore la hubiyay in la isku cadaadi karo iyadoo la isticmaalayo gzip, lz4, lzop, bzip2, xz, zstd oo laga heli karo kombayutarka.

  • gzip, xz, zstd waxay muujiyeen natiijooyin isku mid ah (40Kb).
    Waxaan la yaabay in xz moodada ah uu halkan isku muujiyay heerka gzip ama zstd;
  • lzip oo leh jaangooyooyin aan caadi ahayn ayaa bixiyay natiijooyin waxyar ka xun;
  • lz4 iyo lzop ma muujin natiijooyin aad u wanaagsan (150Kb);
  • bzip2 waxa ay muujisay natiijo aad u fiican oo la yaab leh (18Kb).

Sidaa darteed, xogta si fiican ayaa loo cufan.
Markaa (haddii aynaan helin cillado dilaa ah) waxaa jiri doona cadaadis! Si fudud sababtoo ah xog badan ayaa ku haboon kara isla flash drive.

Aynu ka fikirno khasaaraha.

Dhibka koowaad: waxaan mar hore ku heshiinnay in rikoodh kastaa uu isla markiiba aado. Caadi ahaan, kaydiyuhu waxa uu xogta ka ururiyaa qulqulka gelinta ilaa ay ka go'aansato in ay tahay wakhtigii wax la qori lahaa sabtida iyo axada. Waxaan u baahanahay inaan isla markaaba helno xogta isku xidhan oo aan ku kaydinno xusuusta aan kacsanayn.

Waxaan arkaa saddex siyaabood:

  1. Ku cadaadi rikoodh kasta adigoo isticmaalaya isku-buufinta qaamuuska halkii aad ka isticmaali lahayd algorithms-yada kor looga hadlay.
    Waa doorasho gebi ahaanba la shaqayn karo, laakiin ma jecli. Si loo xaqiijiyo heer ka wanaagsan ama ka yar oo cadaadis ah, qaamuusku waa in lagu "la habeeyaa" xog gaar ah; isbeddel kastaa wuxuu u horseedi doonaa heerka cadaadisku inuu si musiibo ah hoos ugu dhaco. Haa, dhibaatada waxaa lagu xallin karaa iyada oo la abuurayo nooc cusub oo qaamuuska ah, laakiin tani waa madax xanuun - waxaan u baahan doonaa inaan kaydino dhammaan noocyada qaamuuska; Gelitaan kasta waxaan u baahan doonaa inaan ku muujino nooca qaamuuska lagu cufay...
  2. Ku cadaadi rikoodh kasta adigoo isticmaalaya algorithms "classical", laakiin si ka madax bannaan kuwa kale.
    Algorithms-ka cadaadiska ee la tixgelinayo looma qorsheynin inay ku shaqeeyaan diiwaannada cabbirkan (tobanaan bytes), saamiga isku-duubni wuxuu si cad u noqon doonaa wax ka yar 1 (taas oo ah, kordhinta mugga xogta halkii la isku dhejin lahaa);
  3. Samee FLUSH duubis kasta ka dib.
    Maktabado badan oo cadaadisku waxay taageero u leeyihiin FLUSH. Kani waa amar (ama halbeeg u ah habka isku-buufinta), marka la helo kaas oo kaydiyuhu uu sameeyo qulqul la cufan si loo isticmaalo soo celinta oo dhan xogta aan la isku dhejin ee hore loo helay. Analoogga noocaas ah sync nidaamka faylalka ama commit ee sql.
    Waxa muhiimka ah ayaa ah in hawlgallada isku-buufinta ee xiga ay awood u yeelan doonaan inay adeegsadaan qaamuuska la ururiyey oo saamiga cadaadisku aanu u dhibtoon doonin sida nuqulkii hore.

Waxaan u maleynayaa inay iska caddahay inaan doortay ikhtiyaarka saddexaad, aan si faahfaahsan u eegno.

La helay maqaal weyn ku saabsan FLUSH gudaha zlib.

Waxaan sameeyay tijaabo jilibka ah oo ku salaysan maqaalka, waxaan ka qaatay 70 kun oo qoraallo ah oo laga soo galiyay qalab dhab ah, oo leh cabbirka bogga 60Kb (waxaan ku soo laaban doonaa cabbirka bogga dambe) helay:

Xogta ugu horeysa
Cadaadis gzip -9 ( FLUSH ma jiro)
zlib wata Z_PARTIAL_FLUSH
zlib wata Z_SYNC_FLUSH

Mugga, KB
1692
40
352
604

Jaleecada hore, qiimaha ay ku darto FLUSH aad buu u sarreeyaa, laakiin dhab ahaantii waxaan haysanaa doorasho yar - ama inaan la cadaadin gabi ahaanba, ama inaan ku cadaadin (oo si wax ku ool ah) leh FLUSH. Waa in aynaan iloobin in aan haysano 70 kun oo diiwaan, dib u celinta ay soo bandhigtay Z_PARTIAL_FLUSH waa kaliya 4-5 bytes rikoodhkiiba. Oo saamiga cadaadisku wuxuu noqday ku dhawaad ​​5: 1, taas oo ka badan natiijo aad u fiican.

Waxaa laga yaabaa inay la yaabto, laakiin Z_SYNC_FLUSH runtii waa hab ka hufan oo lagu sameeyo FLUSH

Markaad isticmaalayso Z_SYNC_FLUSH, 4ta bytes ee u dambeeya gelista kasta waxay had iyo jeer ahaan doontaa 0x00, 0x00, 0xff, 0xff. Oo haddaynu naqaanno, markaa maaha inaan kaydinno, markaa cabbirka ugu dambeeya waa 324Kb oo keliya.

Maqaalka aan ku xidhay waxa uu leeyahay sharraxaad:

Nooc cusub oo 0 ah oo ay ku jiraan waxyaabo madhan ayaa lagu lifaaqay.

Nooca 0 block oo ay ku jiraan waxyaabo madhan ayaa ka kooban:

  • madaxa saddex-bit;
  • 0 ilaa 7 bits oo la mid ah eber, si loo gaaro toosinta byte;
  • isku xigxiga afar-byte 00 00 FF FF.

Sida aad si fudud u arki karto, baloogga ugu dambeeya ee ka horreeya 4tan bytes waxaa jira 3 ilaa 10 eber. Si kastaba ha ahaatee, dhaqanka ayaa muujiyay in ay jiraan ugu yaraan 10 eber.

Waxaa soo baxday in xogtaas gaagaaban ee sida caadiga ah (had iyo jeer?) lagu dhejiyo iyada oo la adeegsanayo block ka mid ah nooca 1 (block go'an), kaas oo daruuri ku dhamaanaya 7 eber, taasoo siinaysa wadar ahaan 10-17 dammaanad eber ah (inta soo hartayna waxay noqon doontaa). eber noqo oo ay suurtogal tahay ilaa 50%).

Marka, xogta tijaabada, 100% kiisaska waxaa jira hal eber ka hor 0x00, 0x00, 0xff, 0xff, iyo in ka badan seddex meelood meel kiisaska waxaa jira laba eber (laga yaabee xaqiiqadu inay tahay inaan isticmaalo CBOR binary, iyo marka la isticmaalayo qoraalka JSON, baloogyada nooca 2 - block firfircoon ayaa noqon doona mid aad u badan, siday u kala horreeyaan, blocks aan lahayn eber eber dheeraad ah ka hor 0x00, 0x00, 0xff, 0xff waa la kulmi doonaa).

Wadar ahaan, iyadoo la adeegsanayo xogta tijaabada ah ee la heli karo, waxaa suurtogal ah in lagu dhejiyo wax ka yar 250Kb oo ah xogta la cufan.

Wax yar ayaad badbaadin kartaa adigoo samaynaya jugling yar: hadda waxaan iska indhatiraynaa joogitaanka dhowr eber ee dhamaadka baloogga, xoogaa yar ee bilowga block sidoo kale isbedeli maayaan...
Laakiin markaas waxaan qaatay go'aan xoog leh oo aan ku joojinayo, haddii kale heerkan waxaan ku dambayn karaa horumarinta kaydkayga.

Wadar ahaan, xogtayda tijaabada ah waxaan ka helay 3-4 bytes qoraalkiiba, saamiga isku xidhka ayaa noqday in ka badan 6:1. Daacad baan noqon doonaa: Ma aanan filaynin natiijadan oo kale; fikradayda, wax kasta oo ka fiican 2: 1 ayaa horeyba u ah natiijo caddaynaysa isticmaalka cadaadiska.

Wax walba waa fiican yihiin, laakiin zlib (deflate) wali waa qadiimi ah, si fiican loo qalmo oo xoogaa duug ah algorithm isku-buufinta. Xaqiiqda ah in 32Kb ee ugu dambeeya ee qulqulka xogta aan la daboolin loo isticmaalo qaamuus ahaan maanta waxay u egtahay mid la yaab leh (taasi waa, haddii xogta qaarkeed ay aad ula mid tahay waxa ku jiray qulqulka gelinta 40Kb ka hor, markaa waxay bilaabi doontaa in mar kale la kaydiyo, mana tixraaci doono dhacdo hore). Kaydka casriga ah ee moodada ah, cabbirka qaamuuska waxaa inta badan lagu cabbiraa megabyte halkii kiiloobytes.

Markaa waxaanu sii wadnaa daraasadayada yar ee kaydadka.

Marka xigta waxaan tijaabinay bzip2 (xusuusnow, FLUSH la'aanteed waxay muujisay saamiga cadaadis fantastik ah oo ku dhow 100: 1). Nasiib darro, si aad u liidata ayay ku samaysay FLUSH; cabbirka xogta la cufan ayaa isu rogtay inay ka weyn tahay xogta aan la ciriirin.

Malahayga ku saabsan sababaha fashilka

Libbz2 waxa ay bixisaa hal doorasho oo nadiif ah, kaas oo u muuqda in uu nadiifinayo qaamuuska (oo la mid ah Z_FULL_FLUSH gudaha zlib); ma jiro hadal ku saabsan cadaadis wax ku ool ah ka dib.

Kii ugu dambeeyay ee la tijaabiyayna wuxuu ahaa zstd. Iyada oo ku xidhan halbeegyada, waxay isku cadaadisaa mid ka mid ah heerka gzip, laakiin aad uga dhakhso badan, ama ka fiican gzip.

Hooggay, oo leh FLUSH si fiican uma ay qaban: cabbirka xogta la cufan waxay ahayd ilaa 700Kb.

Я ayaa la waydiiyay su'aal Bogga github ee mashruuca, waxaan helay jawaab ah inaad ku xisaabtanto ilaa 10 bytes ee xogta adeegga ee baloog kasta oo xogta la isku dhejiyay, taas oo u dhow natiijooyinka la helay; ma jirto hab aad ula qabsato deflate.

Waxaan go'aansaday inaan meeshan ku joojiyo tijaabooyinka aan ku sameeyay kaydiyeyaasha (aan ku xasuusiyo in xz, lzip, lzo, lz4 aysan is tusin xitaa marxaladda imtixaanka iyada oo aan lahayn FLUSH, mana tixgelineynin algorithms cadaadis badan).

Aan ku soo laabano dhibaatooyinka kaydinta

Midda labaad (sida ay u kala horreeyaan, maaha qiimaha) dhibka ayaa ah in xogta la isku dhejiyay ay tahay hal mar, kaas oo ay si joogto ah u tixraacayaan qaybo hore. Sidaa darteed, haddii qayb ka mid ah xogta la isku dhejiyay ay waxyeello soo gaarto, waxaan lumineynaa ma aha oo kaliya qaybta la xidhiidha xogta aan la isku dhejin, laakiin sidoo kale dhammaan kuwa xiga.

Waxaa jira hab lagu xalliyo dhibaatadan:

  1. Ka ilaali dhibaatada inay dhacdo - ku dar dib-u-celinta xogta la isku dhejiyay, taas oo kuu ogolaan doonta inaad aqoonsato oo aad saxdo khaladaadka; tan dambe ayaan ka hadli doonaa;
  2. Yaree cawaaqibka haddii ay dhibaato dhacdo
    Waxaan horey u sheegnay in aad si madaxbanaan u cadaadin karto xogta block kasta, dhibaataduna lafteeda ayaa meesha ka bixi doonta (waxyeelada xogta hal baloog waxay horseedi doontaa luminta xogta oo keliya bartan). Si kastaba ha ahaatee, tani waa kiis aad u daran kaas oo xogta xogta ay noqon doonto mid aan waxtar lahayn. Xagga ka soo horjeeda: u isticmaal dhammaan 4MB ee chip-keena sidii hal kayd, kaas oo na siin doona cadaadis aad u fiican, laakiin cawaaqib xun haddii ay dhacdo musuqmaasuqa xogta.
    Haa, tanaasul ayaa loo baahan yahay marka la eego isku halaynta. Laakiin waa in aan xasuusannaa in aan horumarinayno qaab kaydinta xogta ee xusuusta aan kacsanayn oo leh BER aadka u hooseeya iyo muddada kaydinta xogta ee lagu dhawaaqay 20 sano.

Intii lagu guda jiray tijaabooyinka, waxaan ogaaday in khasaare badan ama ka yar oo la dareemi karo ee heerka cadaadisku uu ka bilaabmayo baloogyada xogta la cufan ee ka yar 10 KB cabbir ahaan.
Horey waxaa loo sheegay in xusuusta la isticmaalay ay bogsan tahay; Ma arko sabab aan loo isticmaali karin waraaqaha "hal bog - hal baloog oo xogta la isku koobay".

Taasi waa, cabbirka bogga ugu yar ee macquulka ah waa 16Kb (oo leh kayd macluumaadka adeegga). Si kastaba ha noqotee, cabbirka bogga yar ee noocan oo kale ah wuxuu ku soo rogayaa xaddidaadyo weyn cabbirka rikoorka ugu sarreeya.

In kasta oo aanan weli filaynin in diiwaanno ka weyn dhawr kilobytes oo qaab cufan ah, waxaan go'aansaday in aan isticmaalo 32Kb bogag (guud ahaan 128 bog halkii chip).

Soo Koobid:

  • Waxaan kaydinnaa xogta la cufan iyadoo la isticmaalayo zlib (deflate);
  • Geli kasta waxaan dejinay Z_SYNC_FLUSH;
  • Rikoor kasta oo la cadaadiyo, waxaanu jarnaa bytes-ka daba socda (tusaale 0x00, 0x00, 0xff, 0xff); madaxa waxaan ku muujineynaa inta bytes ee aan ka jarnay;
  • Waxaan ku kaydin xogta 32Kb bogag; waxaa jira hal il oo xogta la isku cufiyey gudaha bogga; Bog kasta waxaan ku bilaabaynaa cadaadis mar kale.

Iyo, ka hor inta aan ku dhammayn cadaadis, waxaan jeclaan lahaa in aan ku soo jiitaan dareenkaaga xaqiiqda ah in aan haysano oo kaliya dhowr bytes ee xogta la cufan rikoor kasta, sidaas darteed aad bay muhiim u tahay in aan la faafin macluumaadka adeegga, byte kasta halkan ayaa tiriyaa.

Kaydinta Madax-madaxeedyada Xogta

Maadaama aan haysano diiwaanada dhererka doorsooma, waxaan u baahanahay inaan si uun u go'aamino meelaynta/xuduudaha diiwaanada.

Waxaan aqaan saddex hab:

  1. Dhammaan diiwaanada waxa lagu kaydiyaa si joogto ah, marka hore waxa jira rikoodhka madax ka kooban dhererka, ka dibna diiwaanka laftiisa.
    Qaabkan, labada madax iyo xogtuba waxay noqon karaan dherer is bedbeddela.
    Asal ahaan, waxaan helnaa liis isku xiran oo la isticmaalo mar walba;
  2. Madaxyada iyo diiwaanada laftooda waxa lagu kaydiyaa durdurro kala duwan.
    Isticmaalka madaxyada dhererka joogtada ah, waxaan hubineynaa in dhaawaca hal madax uusan saameyn ku yeelan kuwa kale.
    Hab la mid ah ayaa loo adeegsadaa, tusaale ahaan, nidaamyo faylal badan;
  3. Diiwaanada waxaa lagu kaydiyaa qulqul joogto ah, soohdinta rikoorka waxaa go'aamiya calaamad gaar ah (jilaa/jilayaal isku xigxiga oo ka mamnuuc ah xogta blocks). Haddii ay jirto calaamad muujinaysa gudaha diiwaanka, ka dibna waxaan ku beddelnaa qaar ka mid ah taxanaha (ka baxso).
    Hab la mid ah ayaa lagu isticmaalaa, tusaale ahaan, nidaamka PPP.

Waxaan ku tusi doonaa

Kala xulashada 1:
Hirgelintayda giraanta kaydinta NOOR flash
Wax walba waa mid aad u fudud halkan: ogaanshaha dhererka rikoorka, waxaan xisaabin karnaa cinwaanka madaxa xiga. Markaa waxaan u gudubnaa cinwaannada ilaa aan la kulanno aag ay ka buuxaan 0xff (goob bilaash ah) ama dhammaadka bogga.

Kala xulashada 2:
Hirgelintayda giraanta kaydinta NOOR flash
Dhererka diiwaanka doorsoomiyaha awgeed, horay uma sheegi karno inta diiwaanno (iyo sidaas darteed madax) waxaan u baahan doonaa bog kasta. Waxaad ku faafi kartaa madaxyada iyo xogta laftooda bogag kala duwan, laakiin waxaan doorbidayaa hab kale: waxaan ku dhejineynaa labada madax iyo xogta hal bog, laakiin madaxyada (xajmiga joogtada ah) waxay ka yimaadaan bilowga bogga, iyo xogta (dhererka doorsooma) waxay ka timaadaa dhamaadka. Isla marka ay "kulan" (ma jirto meel banaan oo ku filan gelitaan cusub), waxaan u aragnaa in boggan uu yahay mid dhamaystiran.

Kala xulashada 3:
Hirgelintayda giraanta kaydinta NOOR flash
Looma baahna in lagu kaydiyo dhererka ama macluumaadka kale ee ku saabsan goobta xogta ee madaxa; calamadaha tilmaamaya xuduudaha diiwaanada ayaa ku filan. Si kastaba ha ahaatee, xogta waa in la habeeyaa marka wax la qorayo/akhrinta.
Waxaan u isticmaali lahaa 0xff calaamad ahaan (kaas oo buuxiya bogga ka dib tirtiridda), markaa aagga xorta ah hubaal ahaan looma daaweyn doono xog ahaan.

Shaxda isbarbardhigga:

Doorashada 1
Doorashada 2
Doorashada 3

Dulqaadka cilad
-
+
+

Isdhexgalka
+
-
+

Kakanaanta fulinta
*
**
**

Xulashada 1 waxay leedahay cilad dilaa ah: haddii mid ka mid ah madaxyada ay dhaawacmaan, dhammaan silsiladda xigta waa la burburiyay. Fursadaha soo haray waxay kuu oggolaanayaan inaad dib u soo ceshato xogta qaar xitaa haddii ay dhacdo dhaawac weyn.
Laakiin halkan waxaa ku habboon in la xasuusto in aan go'aansanay in aan ku kaydino xogta qaab isku dhafan, sidaas darteed waxaan luminaa dhammaan xogta bogga ka dib rikoodhka "jabiyey", sidaas darteed inkasta oo ay jirto wax laga jaray miiska, ma samayno. xisaabta ku darso.

Is haysta:

  • Doorashada ugu horeysa, waxaan u baahanahay inaan ku kaydinno kaliya dhererka madaxa, haddii aan isticmaalno isugeynta dhererka doorsoomayaasha, markaa inta badan kiisaska waxaan ku heli karnaa hal byte;
  • ikhtiyaarka labaad waxaan u baahanahay inaan kaydino cinwaanka bilawga iyo dhererka; Diiwaanku waa inuu ahaadaa cabbir joogto ah, waxaan qiyaasayaa 4 bytes rikoodhkiiba (laba bytes ee ka-goynta, iyo laba bytes ee dhererka);
  • Doorashada saddexaad waxay u baahan tahay hal xaraf oo kaliya si ay u muujiso bilawga duubista, oo lagu daray duubista lafteeda ayaa kordhin doonta 1-2% gaashaanka awgeed. Guud ahaan, ku dhawaad ​​sinnaanta ikhtiyaarka koowaad.

Markii hore, waxaan u tixgeliyey ikhtiyaarka labaad inuu yahay midka ugu weyn (iyo xitaa qorey hirgelinta). Waxaan ka tagay kaliya markii aan ugu dambeyntii go'aansaday inaan isticmaalo cadaadis.

Waxaa laga yaabaa in maalin aan wali isticmaali doono doorasho la mid ah. Tusaale ahaan, haddii ay noqoto inaan wax ka qabto kaydinta xogta markabka u safraya Dhulka iyo Mars, waxaa jiri doona gebi ahaanba shuruudo kala duwan oo lagu kalsoonaan karo, shucaaca koofiyadaha, ...

Sida ikhtiyaarka saddexaad: Waxaan siiyay laba xiddigood oo ku adag fulinta si fudud sababtoo ah ma jecli in aan ku dhex milmo gaashaanka, beddelka dhererka habka, iwm. Haa, laga yaabee inaan eex ahay, laakiin waa inaan qoraa koodka - maxaad naftaada ugu dirtaa inaad sameyso wax aadan jeclayn.

Soo Koobid: Waxaan dooranaa ikhtiyaarka kaydinta qaabka silsiladaha "madaxa leh dhererka - xogta dhererka doorsooma" sababtoo ah hufnaanta iyo fududaynta fulinta.

Isticmaalka Goobaha Bit si ay ula socdaan Guusha Hawlgallada Qorista

Ma xasuusto hadda meesha aan ka helay fikradda, laakiin waxay u egtahay sidan:
Geli kasta, waxaanu u qoondaynnaa dhawr qaybood oo lagu kaydiyo calanka.
Sida aan horay u sheegnay, ka dib markii la tirtiro dhammaan jajabyada waxaa lagu buuxiyaa 1s, waxaanan u bedeli karnaa 1 ilaa 0, laakiin ma aha liddi ku ah. Markaa “calanka lama dejiyo” waxaanu isticmaalnaa 1, “calanka waa la dhigay” waxaanu isticmaalnaa 0.

Waa kuwan waxa gelinta rikoodhka dhererka doorsoomayaasha ee flash u ekaan karo:

  1. Deji calanka "duubista dhererka ayaa bilaabatay";
  2. Qor dhererka;
  3. Deji calanka "duubista xogta ayaa bilaabatay";
  4. Waxaan duubnaa xogta;
  5. Deji calanka "duubitaanku dhammaaday".

Intaa waxaa dheer, waxaan yeelan doonaa "khalad dhacay" calanka, wadar ahaan 4 calammo ah.

Xaaladdan oo kale, waxaan leenahay laba gobol oo xasilloon "1111" - duubitaanku ma bilaaban iyo "1000" - duubista ayaa lagu guuleystay; Haddii ay dhacdo in si lama filaan ah ay u dhacdo habka duubista, waxaan heli doonaa dowlado dhexdhexaad ah, oo aan ogaan karno oo aan ka shaqeyn karno.

Habkani waa mid xiiso leh, laakiin kaliya wuxuu ka ilaaliyaa koronto degdeg ah oo degdeg ah iyo fashilaad la mid ah, taas oo, dabcan, waa muhiim, laakiin tani waa mid ka fog sababta kaliya ee (ama xitaa ugu weyn) sababta fashilka suurtagalka ah.

Soo Koobid: Aan ku dhaqaaqno raadinta xal wanaagsan.

Hubinta

Jeegaggu waxa kale oo uu suurtogal ka dhigayaa in la hubiyo (iyada oo ay jirto ixtimaalka macquulka ah) in aanu akhrineyno sida saxda ah waxa ay ahayd in la qoro. Iyo, si ka duwan beeraha yar ee kor looga hadlay, had iyo jeer way shaqeeyaan.

Haddii aan tixgelinno liiska ilaha suurtagalka ah ee dhibaatooyinka ee aan kor kaga soo hadalnay, markaa jeeggu wuxuu awood u leeyahay inuu aqoonsado khaladka iyada oo aan loo eegin asalkiisa (marka laga reebo, laga yaabee, shisheeyaha xaasidnimada leh - waxay sidoo kale samayn karaan jeegagga jeegga).

Markaa haddii hadafkayagu yahay inaanu xaqiijino in xogtu ay sax tahay, jeegaggu waa fikrad fiican.

Doorashada algorithm ee xisaabinta jeegga ma aysan dhalin wax su'aalo ah - CRC. Dhinaca kale, hantida xisaabtu waxay suurtogal ka dhigtaa in la qabto noocyada khaladaadka qaarkood 100%; Dhanka kale, xogta aan tooska ahayn algorithmisku waxay inta badan muujisaa suurtagalnimada isku dhaca aan ka badnayn xadka aragtida Hirgelintayda giraanta kaydinta NOOR flash. Waxaa laga yaabaa inaysan ahayn algorithm-ka ugu dhaqsaha badan, mana aha had iyo jeer ugu yar marka loo eego tirada shilalka, laakiin waxay leedahay tayo aad u muhiim ah: imtixaannada aan la kulmay, ma jiraan qaabab ay si cad u fashilmeen. Xasilooni waa tayada ugu weyn ee kiiskan.

Tusaale daraasad mug leh: qaybta 1, qaybta 2 (isku xidhka narod.ru, waan ka xumahay).

Si kastaba ha ahaatee, hawsha doorashada jeegaggu ma dhamaystirna; CRC waa qoys dhan oo jeegag ah. Waxaad u baahan tahay inaad go'aansato dhererka, ka dibna dooro polynomial.

Doorashada dhererka jeegga ma aha su'aal fudud sida ay u muuqato jaleecada hore.

Aan tusaaleeyo:
Aynu yeelano suurtagalnimada khaladka byte kasta Hirgelintayda giraanta kaydinta NOOR flash iyo xisaab hubin ku habboon, aynu xisaabino celceliska tirada khaladaadka malaayiinkii diiwaan:

Xogta, byte
Checksum, byte
Khaladaadka aan la ogaan
Daahfurka khaladka beenta ah
Wadarta wanaagga beenta ah

1
0
1000
0
1000

1
1
4
999
1003

1
2
≈0
1997
1997

1
4
≈0
3990
3990

10
0
9955
0
9955

10
1
39
990
1029

10
2
≈0
1979
1979

10
4
≈0
3954
3954

1000
0
632305
0
632305

1000
1
2470
368
2838

1000
2
10
735
745

1000
4
≈0
1469
1469

Waxay u egtahay in wax walba ay fudud yihiin - iyadoo ku xiran dhererka xogta la ilaalinayo, dooro dhererka jeegga oo leh ugu yaraan wanaag khaldan - iyo khiyaanada ayaa ku jirta boorsada.

Si kastaba ha ahaatee, dhibaato ayaa ka dhalata jeegag gaaban: in kasta oo ay ku fiican yihiin in la ogaado hal khalad oo keliya, waxay si macquul ah u aqbali karaan xogta aan tooska ahayn sida saxda ah. Waxaa hore u jiray maqaal ku saabsan Habré oo qeexaya dhibaatada nolosha dhabta ah.

Sidaa darteed, si aad u samayso ciyaar hubinta bakhtiyaanasiibka ah oo aan suurtogal ahayn, waxaad u baahan tahay inaad isticmaasho jeegagyo dhererkoodu yahay 32 bits ama ka dheer. (dhererrada ka weyn 64 bits, hawlaha xashiishka cryptographic waxaa badanaa la isticmaalaa).

In kasta oo xaqiiqda ah in aan hore u qoray in aan u baahanahay inaan badbaadino meel kasta si kasta, waxaan wali isticmaali doonaa jeeg 32-bit ah (16-bits kuma filna, suurtogalnimada shilku waa in ka badan 0.01%; iyo 24 bits, sida ay iyagu yihiin. ku dheh, halkan iyo meesha ma joogaan).

Diidmo ayaa laga yaabaa inay halkan ka soo baxdo: miyaynu kaydinay byte kasta marka aanu dooranay cadaadis si hadda loo bixiyo 4 bytes hal mar? Miyaanay ka fiicneyn in aan la isku cadaadin ama aan lagu darin jeegaga? Dabcan maya, cadaadis ma jiro macneheedu maaha, in aynaan u baahnayn hubinta daacadnimada.

Marka aad dooranayso tiro badan, ma soo celin doono giraangiraha, laakiin qaado CRC-32C caanka ah.
Koodhkani waxa uu ogaanayaa 6 khaladaad yar oo ku jira xidhmooyin ilaa 22 bytes ah (laga yaabee kiis kii ugu badnaa anaga), 4 khaladaad baakada ku jira ilaa 655 bytes (sidoo kale kiis caadi inoo ah), 2 ama tiro kasta oo khalad ah oo khaladaad yar ah dherer kasta oo macquul ah.

Haddii qof uu xiiseynayo faahfaahinta

Maqaal Wikipedia ku saabsan CRC.

Halbeegyada code crc-32c on Website-ka Koopman - laga yaabee hogaamiyaha CRC ee ku takhasusay meeraha.

В maqaalkiisa waa code kale oo xiiso leh, kaas oo bixiya qiyaaso yar oo ka fiican dhererka baakidhka ee nagu habboon, laakiin ma tixgelinin farqiga u dhexeeya mid muhiim ah, waxaanan lahaa karti ku filan oo aan ku dooran karo koodka gaarka ah halkii aan ka heli lahaa mid caadi ah oo si fiican loo baaray.

Sidoo kale, maadaama xogtayada la cufan yahay, su'aashu waxay soo baxaysaa: miyaynu xisaabin karnaa jeegaga xogta la cufan ama aan la cufan?

Doodaha taageeraya xisaabinta xisaabinta xogta aan la cufan:

  • Waxaan ugu dambeyntii u baahannahay inaan hubinno badbaadada kaydinta xogta - markaa waxaan si toos ah u hubineynaa (isla mar ahaantaana, khaladaadka suurtagalka ah ee hirgelinta cadaadiska / hoos u dhigista, dhaawaca uu keeno xusuusta jaban, iwm. waa la hubin doonaa);
  • Algorithm-ka deflate ee zlib waxa uu leeyahay hirgelin cadaalad ah oo bislaaday iyo ma aha ku dhici xogta gelinta "qalloocan"; waxaa intaa dheer, waxay inta badan awood u leedahay in ay si madax-bannaan u ogaato khaladaadka ku jira qulqulka gelinta, yaraynta suurtogalnimada guud ee aan la ogaanin qaladka (lagu sameeyay tijaabo iyada oo la rogayo hal waxoogaa rikoodh gaaban, zlib wuxuu ogaaday qalad qiyaastii saddex meelood meel kiisaska).

Doodaha ka dhanka ah xisaabinta xisaabinta xogta aan la adkeyn:

  • CRC waxa ay “ku habaysan tahay” gaar ahaan khaladaadka yar yar ee lagu garto xusuusta flash-ka (qalad yar oo ku jirta qulqulka qulqulka ah waxa ay sababi kartaa isbeddel weyn oo ku yimaadda qulqulka wax soo saarka, kaas oo, aragti ahaan, aan “qabsan karno” isku dhac);
  • Runtii ma jecli fikradda ah u gudbinta xogta suurtagalka ah ee jabsan qalabka-fure, Yaa garanayasida uu uga falcelin doono.

Mashruucan, waxaan go'aansaday in aan ka weecdo dhaqanka guud ee la aqbalay ee kaydinta xisaabaadka xogta aan la adkeyn.

Soo Koobid: Waxaan isticmaalnaa CRC-32C, waxaan ka xisaabineynaa jeegagga xogta qaabka ay ugu qoran yihiin inay iftiimaan (ka dib marka la isku koobo).

Ku-noqoshada

Isticmaalka koodhka aan la soo koobi karin, dabcan, ma baabi'iyo luminta xogta, si kastaba ha ahaatee, waxay si weyn u yareyn kartaa (inta badan amarada baaxadda leh) waxay yareyn kartaa suurtogalnimada luminta xogta aan la soo kaban karin.

Waxaan isticmaali karnaa noocyo kala duwan oo dib-u-celin ah si aan u saxno khaladaadka.
Koodhadhka haminta waxay sixi karaan khaladaadka hal mar ah, koodka dabeecada Reed-Solomon, nuqullo badan oo xog ah oo lagu daray jeegaga, ama codaynta sida RAID-6 waxay gacan ka geysan kartaa soo kabashada xogta xitaa haddii ay dhacdo musuqmaasuq weyn.
Markii hore, waxaa iga go'an isticmaalka baahsan ee codeing u adkaysta, laakiin markaas waxaan ogaaday in aan marka hore u baahan nahay fikradda ah khaladaadka aan rabno in aan nafteena ka ilaalinno, ka dibna dooran codeing.

Waxaan horey u sheegnay in loo baahan yahay in qaladaadka lagu qabto sida ugu dhaqsaha badan. Meelkee ayaan la kulmi karnaa khaladaadka?

  1. Duubista aan dhammayn (sababta qaar wakhtiga duubista korontada waa la damiyay, Raspberry-ku wuu barafoobay, ...)
    Hoog, haddii ay dhacdo qalad noocaas ah, waxa hadhay oo dhan waa in la iska indho tiro diiwaannada aan sax ahayn oo la tixgeliyo xogta luntay;
  2. Qaladaad qor (sabab qaar ka mid ah, waxa lagu qoray xusuusta flash-ka ma ahayn waxa la qoray)
    Waxaan isla markiiba ogaan karnaa khaladaadka noocaas ah haddii aan samayno imtixaan akhri isla markiiba ka dib duubista;
  3. Qallooca xogta ku jirta xusuusta inta lagu jiro kaydinta;
  4. Qaladaadka akhriska
    Si loo saxo, haddii jeeggu aanu ku habboonayn, waa ku filan inaad ku celiso akhrinta dhawr jeer.

Taasi waa, kaliya khaladaadka nooca saddexaad (musuqmaasuqa kediska ah ee xogta inta lagu jiro kaydinta) lama sixi karo iyada oo aan lahayn kood u adkaysta. Waxay u muuqataa in khaladaadkan oo kale ay weli yihiin kuwo aan aad u suurtagal ahayn.

Soo Koobid: waxaa la go'aamiyay in la iska dhaafo koodka aan caadiga ahayn, laakiin haddii hawlgalku muujiyo qaladka go'aankan, ka dibna ku noqo inaad tixgeliso arrinta (oo leh tirokoobyo horay loo ururiyay oo ku saabsan guuldarrooyinka, taas oo kuu ogolaan doonta inaad doorato nooca ugu fiican ee koodka).

Kale

Dabcan, qaabka maqaalku inooma ogola in aan caddeeyo wax kasta oo qaabka ah (Awooddayduna mar hore way dhammaatay), haddaba waxaan si kooban u dulmarayaa qodobbo aan hore loo taaban.

  • Waxaa la go'aamiyay in dhammaan boggaga laga dhigo "siman"
    Taasi waa, ma jiri doonaan bogag gaar ah oo leh xog badan, dunta kala duwan, iwm., laakiin taa beddelkeeda hal dun oo bogag dhan markeeda dib u qorta.
    Tani waxay hubineysaa xitaa xirashada boggaga, ma jirto hal dhibic oo guul darro ah, waxaanan jeclahay;
  • Waa lama huraan in la bixiyo qaabaynta qaabka.
    Qaab aan lahayn nambarka qaybta madaxa waa shar!
    Way ku filan tahay in lagu daro goob leh nambarka sixirka gaar ah (saxiixa) madaxa bogga, kaas oo tilmaamaya nooca qaabka la isticmaalay. (Uma maleynayo in ficil ahaan ay jiri doonaan xitaa daraasiin iyaga ka mid ah);
  • Isticmaal madaxa dhererka doorsoomiyaha diiwaanada (kuwaas oo ay jiraan wax badan), isku day inaad ka dhigto 1 byte inta badan kiisaska;
  • Si loo codeeyo dhererka madaxa iyo dhererka qaybta la jarjaray ee diiwaanka la cufan, isticmaal koodka binary-ga dhererka doorsooma.

Wax badan ayaa caawiyay matoor online Codsiyada Huffman Dhowr daqiiqo gudaheed waxaan awoodnay inaan doorano koodka dhererka doorsoomaha ee loo baahnaa.

Sharaxaada qaabka kaydinta xogta

Dalabka Byte

Goobaha ka weyn hal byte waxa lagu kaydiyaa qaab-weyn-endian (habka isku xidhka byte), taas oo ah, 0x1234 waxa loo qoraa 0x12, 0x34.

Pagination

Dhammaan xusuusta flash-ka waxay u qaybsantaa bogag cabbir siman.

Cabbirka bogga caadiga ah waa 32Kb, laakiin aan ka badnayn 1/4 ee cabbirka guud ee chip-ka xusuusta (4MB chip, 128 bog ayaa la helay).

Bog kastaa wuxuu kaydiyaa xogta si ka madaxbanaan kuwa kale (taasi waa, xogta hal bog kuma tixraacayso xogta bog kale).

Dhammaan boggaga waxaa loo tiriyey hab dabiici ah (sida ciwaannada u korayaan), laga bilaabo lambarka 0 (bogga eber wuxuu ka bilaabmaa ciwaanka 0, bogga koowaad wuxuu ka bilaabmaa 32Kb, bogga labaad wuxuu ka bilaabmaa 64Kb, iwm.)

Chip-ka xusuusta waxa loo istcimaalaa sidii bakhtiiye meerto ah (ring buffer), yacni, qoraalka ugu horeeya waxa uu tagayaa bogga lambarka 0, ka dibna nambarka 1, ... .

Gudaha bogga

Hirgelintayda giraanta kaydinta NOOR flash
Bilawga bogga, madax ka kooban 4-byte ayaa la kaydiyaa, ka dib jeegaga madaxa (CRC-32C), ka dibna diiwaanada waxaa lagu kaydiyaa qaabka "header, data, checksum".

Magaca bogga (cagaar wasakh ah ee jaantuska) wuxuu ka kooban yahay:

  • Goobta Nambarka Magic-ka laba-byte ah (sidoo kale calaamada qaabka qaabka)
    nooca hadda ee qaabka waxaa loo xisaabiyaa sida 0xed00 ⊕ номер страницы;
  • laba-byte counter "nooca bogga" (lambarka wareegga xusuusta dib u qor).

Galitaanka bogga waxa lagu kaydiyaa qaab cufan (algorithmiyaha deflate ayaa la isticmaalay). Dhammaan diiwaannada ku yaal hal bog waxa lagu miiray hal dun (qaamuus caadi ah ayaa la isticmaalaa), oo bog kasta oo cusub ayaa cadaadisku ku bilaabmayaa mar kale. Taasi waa, si loo kala saaro rikoor kasta, dhammaan diiwaanadii hore ee boggan (iyo kan kaliya) ayaa loo baahan yahay.

Rikoor kasta waxa lagu cufan doonaa calanka Z_SYNC_FLUSH, iyo dhamaadka qulqulka la cufan waxa jiri doona 4 bytes 0x00, 0x00, 0xff, 0xff, laga yaaba in uu ka horeeyo hal ama laba bytes kale oo eber ah.
Waxaan tuurnaa taxanahan (4, 5 ama 6 bytes dheer) marka wax loo qorayo xusuusta.

Madaxa diiwaanka waa 1, 2 ama 3 bytes kaydinta:

  • hal xoogaa (T) oo tilmaamaya nooca diiwaanka: 0 - macnaha guud, 1 - log;
  • bed dhererka doorsoomayaasha ah (S) laga bilaabo 1 ilaa 7 bits, qeexaya dhererka madaxa iyo "dabada" oo ay tahay in lagu daro diiwaanka depression;
  • dhererka rikoorka (L).

S shaxda qiimaha:

S
Dhererka madaxa, bytes
Lagu tuuray qoraal, byte

0
1
5 (00 00 00 ff ff)

10
1
6 (00 00 00 00 ff ff)

110
2
4 (00 00 ff ff)

1110
2
5 (00 00 00 ff ff)

11110
2
6 (00 00 00 00 ff ff)

1111100
3
4 (00 00 ff ff)

1111101
3
5 (00 00 00 ff ff)

1111110
3
6 (00 00 00 00 ff ff)

Waxaan isku dayay inaan tusaaleeyo, ma garanayo sida cad ee ay u noqotay:
Hirgelintayda giraanta kaydinta NOOR flash
Jaallaha halkan ayaa tilmaamaya goobta T, caddaan S field, cagaar L (dhererka xogta la cufan ee bytes), buluug xogta la cufan, casaan bytes ugu dambeeya ee xogta la cufan oo aan loo qorin si ay u flash memory.

Markaa, waxaan ku qori karnaa madax-madaxeedyo dhererka ugu caansan (ilaa 63+5 bytes oo qaab cufan) hal byte ah.

Diiwaan kasta ka dib, jeegagga CRC-32C ayaa la kaydiyaa, kaas oo qiimaha rogan ee jeeggii hore loo isticmaalay sidii qiimaha hore (init).

CRC waxay leedahay hantida “muddada”, qaacidada soo socotaa way shaqeysaa (oo lagu daray ama laga jaray xoogaa rogaal celis ah ee habka): Hirgelintayda giraanta kaydinta NOOR flash.
Taasi waa, dhab ahaantii, waxaan xisaabineynaa CRC-da dhammaan baytyada madaxyada hore iyo xogta boggan.

Si toos ah u raacaya xisaabaadka hubinta waa madaxa diiwaanka xiga.

Madaxa waxaa loo qaabeeyey si uu byte-kiisa ugu horreeya had iyo jeer ka duwan yahay 0x00 iyo 0xff (haddii halkii byte-ka koowaad ee madaxa aan la kulanno 0xff, markaa tani waxay ka dhigan tahay in tani ay tahay meel aan la isticmaalin; 0x00 waxay tilmaamaysaa qalad).

Tusaale Algorithms

Akhriska Flash Memory

Wax akhris kastaa waxa uu la socdaa jeegaga jeegaga.
Haddi jeeggu iswaafajiyo, akhrinta dhawr jeer ayaa lagu soo celiyaa iyadoo la rajeynayo in la akhriyo xogta saxda ah.

(tani macno ayay samaynaysaa, Linux wax kayd ah kama akhriyo NOR Flash, oo la tijaabiyay)

Ku qor xusuusta flash-ka

Waxaan duubnaa xogta.
Aan akhrino iyaga.

Haddii xogta akhrisku aanay ku habboonayn xogta qoran, waxaan ku buuxinaynaa eber waxaanan calaamadeynaa qalad.

Diyaarinta microcircuit cusub ee hawlgalka

Bilawga, madax leh nooca 1 ayaa loo qoraa bogga kowaad (ama halkii eber).
Taas ka dib, macnaha bilowga ah ayaa loo qoraa boggan (wuxuu ka kooban yahay UUID ee mashiinka iyo goobaha caadiga ah).

Taasi waa, xusuusta flash-ka ayaa diyaar u ah isticmaalka.

Soo dejinta mishiinka

Marka la soo shubayo, 8da bytes ee ugu horreeya bog kasta (madaxa + CRC) waa la akhriyaa, bogag leh Lambarka Sixirka aan la garanayn ama CRC-da khaldan waa la iska indhatiray.
Laga soo bilaabo bogga "sax ah", boggaga leh nooca ugu badan ayaa la doortay, bogga lambarka ugu sarreeya ayaa laga soo qaatay iyaga.
Diiwaanka koowaad waa la akhriyaa, saxnaanta CRC iyo joogitaanka calanka "context" waa la hubiyaa. Haddii wax walba ay fiican yihiin, boggan waxaa loo tixgeliyaa hadda. Haddii kale, waxaan dib ugu laabanaa kii hore ilaa aan ka helno bog "nool".
Bogga la helayna waxaan ku akhrinay dhammaan diiwaannada, kuwa aan isticmaalno oo wata calanka "context".
Keydi qaamuuska zlib (waxa loo baahan doonaa in lagu daro boggan).

Taasi waa, soo dejintu waa dhammaatay, macnaha guud waa la soo celiyay, waad shaqeyn kartaa.

Ku darida Gelitaanka Joornaalka

Waxaan ku cadaadineynaa diiwaanka qaamuuska saxda ah, anagoo cadeyneynaa Z_SYNC_FLUSH
Haddii aysan ku habboonayn (ama ay jiraan khaladaad CRC ah bogga), bilow bog cusub (hoos eeg).
Waxaan qoreynaa diiwaanka iyo CRC. Haddii cilad dhacdo, bilow bog cusub.

Bog cusub

Waxaan dooranaa bog bilaash ah oo leh lambarka ugu yar (waxaanu u aragnaa bogga bilaashka ah inuu yahay bog leh jeegag khaldan oo madaxa ah ama leh nooc ka yar kan hadda jira). Haddii aysan jirin bogag noocaas ah, ka dooro bogga leh lambarka ugu yar kuwa haysta nuqul la mid ah kan hadda.
Waxaan tirtirnaa bogga la doortay. Waxaan ku hubineynaa waxa ku jira 0xff. Haddii ay wax khaldan yihiin, qaado bogga xiga ee bilaashka ah, iwm.
Waxaan ku qornaa madax bogga la tirtiray, gelitaanka ugu horreeya waa xaaladda hadda jirta ee macnaha guud, ku xiga waa galitaanka log aan qornayn (haddii uu jiro mid).

Qaabka lagu dabaqi karo

Fikradayda, waxay u noqotay qaab wanaagsan oo lagu kaydiyo xog kasta oo badan ama ka yar oo la isku dhejin karo (qoraal cad, JSON, MessagePack, CBOR, malaha protobuf) ee NOR Flash.

Dabcan, qaabku waxa uu “ku habaysan yahay” SLC NOR Flash.

Waa inaan loo isticmaalin warbaahinta sare ee BER sida NAND ama MLC NOR (Xusuusta noocaas ah xitaa iib ma loo heli karaa? Waxaan kaliya ku arkay iyada oo lagu xusay shaqooyinka codes sixitaanka).

Intaa waxaa dheer, waa in aan lagu isticmaalin qalabka leh FTL iyaga u gaar ah: USB flash, SD, MicroSD, iwm (Xusuusta noocan oo kale ah waxaan u sameeyay qaab leh cabbir cabbirkiisu yahay 512 bytes, saxeexa bilowga bog kasta iyo lambarrada rikoodhada gaarka ah - mararka qaarkood waxaa suurtagal ah inaan ka soo kabsado dhammaan xogta 'flash drive'' iyadoo la akhriyo si fudud oo isdaba-joog ah).

Iyadoo ku xiran hawlaha, qaabka waxaa loo isticmaali karaa iyada oo aan isbeddelin flash drives ka 128Kbit (16Kb) ilaa 1Gbit (128MB). Haddii la rabo, waxaad ku isticmaali kartaa jajabyo waaweyn, laakiin waxaad u baahan tahay inaad hagaajiso cabbirka bogga (Laakin halkan su'aasha ku saabsan suurtagalnimada dhaqaale ayaa horayba u soo baxday; qiimaha mugga weyn ee NOR Flash maaha mid dhiirigelinaya).

Haddii qof helo qaabka xiisaha leh oo uu rabo inuu u isticmaalo mashruuc furan, qor, waxaan isku dayi doonaa inaan helo wakhtiga, nadiifiyo koodka oo ku dheji github.

gunaanad

Sida aad arki karto, ugu dambeyntii qaabku wuxuu noqday mid fudud iyo xataa caajis.

Way adag tahay in aan ka tarjumo horumarka aragtidayda maqaal, laakiin i rumayso: markii hore waxaan rabay in aan abuuro wax casri ah, aan la dumin karin, oo awood u leh inuu ka badbaado xitaa qarax nukliyeer ah oo u dhow. Si kastaba ha ahaatee, sababtu (waxaan rajaynayaa) in ay wali guulaysato oo si tartiib tartiib ah muhiimadu u rogmatay fudayd iyo isafgarad.

Ma laga yaabaa inaan qaldanahay? Haa, hubaal. Waxaa laga yaabaa inay si fiican u soo baxdo, tusaale ahaan, inaan soo iibsanay qayb yar oo microcircuits ah. Ama sabab kale awgeed qalabku ma buuxin doono rajada la isku halleyn karo.

Qorshe ma u leeyahay kan? Waxaan u maleynayaa in ka dib markaad akhrido maqaalka shaki kuma jiro in uu jiro qorshe. Oo xataa keligaa maaha.

Xusuus yar oo ka sii daran, qaabka waxaa loo soo saaray labadaba ikhtiyaar shaqo iyo sidii "buufin tijaabo ah".

Waqtigan xaadirka ah wax kasta oo miiska saaran ayaa si fiican u shaqeynaya, macno ahaan maalinta kale xalka ayaa la geyn doonaa (qiyaastii) boqollaal qalab, aynu aragno waxa ku dhacaya hawlgalka "dagaalka" (nasiib wanaag, waxaan rajeynayaa in qaabku kuu ogolaanayo inaad si kalsooni leh u ogaatid guuldarrooyinka; si aad u ururiso tirakoob buuxa). Dhawr bilood gudahood ayaa suurtagal noqon doonta in la soo gunaanado (iyo haddii aadan nasiib lahayn, xitaa ka hor).

Haddii, iyada oo ku saleysan natiijooyinka isticmaalka, dhibaatooyin halis ah ayaa la helay oo loo baahan yahay hagaajin, markaa hubaal waan qori doonaa.

Suugaanta

Ma aanan rabin inaan sameeyo liis dheer oo caajis ah oo shaqo la isticmaalay; ka dib, qof kastaa wuxuu leeyahay Google.

Halkan waxaan ku go'aansaday inaan kaga tago liiska natiijooyinka ii muuqday mid xiiso gaar ah ii leh, laakiin si tartiib tartiib ah ayey si toos ah ugu guureen qoraalka maqaalka, hal shay ayaa ku haray liiska:

  1. Faa'iidada infgen ka qoraaga zlib. Wuxuu si cad u soo bandhigi karaa waxa ku jira kaydka deflate/zlib/gzip. Haddii ay tahay inaad wax ka qabato qaab dhismeedka gudaha ee qaabka deflate (ama gzip), aad ayaan ugu talinayaa.

Source: www.habr.com

Add a comment