Mea exsecutio quiddam anuli in NEC mico

erectus

Sunt machinae vendendae nostri consilii. Intus RUBUS IDAEUS Pi et nonnulli in tabula separata wiring. Nummus acceptor, rogatio acceptor, argentaria terminatio connexa sunt... Omnia per programmata auto-scripta gubernantur. Totum opus historicum scriptum est stipes in ictu cinematographico (MicroSD), quae dein per Internet (usB modem utens) servo transmittitur, ubi in database conditur. Venditio notitia in 1c oneratur, additur etiam simplex interface ad vigilantiam, etc.

Id est, ephemeride vitalis est - ad rationem (vectigal, venditiones, etc.), vigilantia (omnium defectionum et aliarum vis maioris circumstantiarum); Hoc, si quis dicere posset, omnes informationes habemus de hac machina.

quaestio

Flash ejicit se demonstrant machinas valde leves esse. Deficiunt invidiosa constantia. Hoc ducit ad machinae downtime et (si causa aliqua de causa stipes online transferri non potuit) ad damna data.

Haec prima experientia mico usui non est, antequam hoc consilium aliud cum plus quam centum machinis fuit, ubi emporium repositum in mico USB agitando, etiam problemata cum constantia fuerunt, interdum numerus eorum quae in defecerunt. mensis in justo erat. Conati sumus varia fulgura pellere, inter quae SLC memoria notantur, et quaedam exemplaria aliis certiora sunt, sed reponens mico agitando quaestionem non funditus solvendam.

Cautus esto Longread! Si non curo "quare", sed tantum "quomodo", recta ire potes In termino articulus.

arbitrium

Primum illud quod in mentem venit est: MicroSD desere, institue, exempli gratia, SSD, et ex ea tabernus. Cogitatione fieri potest, probabiliter, sed relative pretiosa, et non tam certa (additur adaptor USB-SATA; defectus statisticae pro budget SSDs etiam non hortatur).

USB HDD etiam non tamquam solutio speciosa.

Ideo ad hanc optionem venimus: tabernus e MicroSD relinque, sed ea utere modo in lectu tantum modo, et repone operandi stipes (et aliae informationes unicae particulari ferrariae - Vide numerum, calibrationes sensores, etc.) alibi. .

Thema lecti solum FS in raspberries iam intus et extra investigatus est, in singulis articulis exsequendis non moror. (sed si interest, fortasse mini-articulum de hoc loco scribam). Hoc unum notare velim, tam ex experientia propria quam ex recensionibus eorum qui iam perfecerunt, quaestum esse in fide. Imo, impossibile est prorsus naufragia removere, sed signanter frequentiam eorum minuere satis possibilis est. Et schedulae coalescunt, quae reponendam multo facilius ad personas usus facit.

In parte hardware

Dubium particulare non fuit de electione memoriae generis - NO Flash.
Argumenta:

  • simplex connexio (plerumque in SPI bus, quos iam expertus es utens, nulla ferramenta problemata praevidentur);
  • ridiculum pretium;
  • norma operativa protocollo (exsecutio iam est in nucleo Linux, si vis, potes accipere tertiam partem unam, quae etiam praesens est, vel etiam tua scribes, feliciter omnia simplicia sunt);
  • commendatio et resource:
    e data scriptione typica: data reponitur per 20 annos, cyclos 100000 dele pro quolibet clauso;
    e tertia partium fontibus: perquam humilis BER, nullum opus correctionis codicibus erratum postulat ECC pro NOR considerant, sed plerumque MLC NOR adhuc significant; hoc quoque accidit..

Aestimare requisita voluminis et subsidii.

Velim notitias praestari per aliquot dies servatos esse. Hoc necessarium est ut in casu cuiuslibet quaestionum communicationis, historia venditionis non amittatur. Nos focus in V diebus, hoc tempore (Etiam attentis weekends et feriae) quaestio solvi potest.

Hodie circiter 100kb lignorum per dies (3-4 milia viscus) colligimus, sed paulatim haec figura crescit - detail increscit, novae eventus augentur. Plus, interdum erumpit (aliquot sensores incipit spamming cum falsis positivis, exempli gratia). Pro 10 milibus monumentorum 100 bytes singulorum megabytarum per diem computabimus.

In summa, 5MB notitia munda (bene compressa) exeat. Plures ad eos (Aestimatio aspera) 1MB muneris data.

Hoc est, 8MB scalpello opus est si compressione non utimur, vel 4MB si eo utimur. Numeri admodum reales ad hoc genus memoriae.

Quod ad rem attinet: si cogitamus totam memoriam renovari non plus quam semel in quinto quoque die, tum per 5 annos servitii minores quam mille cyclos RESCRIBO.
Admoneam me ut fabrica centum milia promittat.

Pauca de NAND

Hodie, sane, NAND memoria multo magis vulgaris est, sed nolui uti ad hoc consilium: NAND, dissimilis NOR, necessario requirit usum errorum in correctionibus codicibus, men- suris malis, nec non cruribus etc. NAND xxxiii plerumque multo magis.

NEQUE INCOMMODA RECIPIANT;

  • parvum volumen (ac proinde magno pretio per megabyte);
  • humilis celeritas communicationis (plerumq; ob hoc quod interfacei serial adhibetur, plerumque SPI vel I2C);
  • slow erase (depending on the block size, it takes from a fraction of the second to several seconds).

Nihil criticum nobis videtur sic permanemus.

Si singula sunt interesting, microcircuitus electus est at25df321a (tamen hoc leve est, multum analoga in foro, quae in pinout et imperandi ratio componi possunt; etiamsi velimus microcirculum ex alio fabrica et/vel alia magnitudine instituere, omnia inmutata operabuntur. codice).

Utor auriga in nucleo Linux constructo, in Raspberry, ob fabricam ligni fulcimenti obductio, omnia valde simplicia sunt - necesse est ut deaurationem in /boot/osse compilata et modice /boot/config.txt mutare.

Exemplum des file

Honestum esse, sine erroribus scriptum non sum, sed facit.

/*
 * 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?";
    };
};

Et alia linea in config.txt

dtoverlay=at25:spimaxfrequency=50000000

Omitto descriptionem connectendi chip cum Raspberry Pi. Altera ex parte, electronicarum electronicarum peritus non sum, sed omnia hic etiam mihi vulgare sunt: ​​microcircuitus tantum 8 crura habet, quorum terram, vim, SPI (CS, SI, SO, SCK habet. ); Gradus eaedem sunt ac Raspberry Pi, nulla addito wiring desideratur - tantum 6 fibulae indicatae connectere.

DE PECCATO quaestio

Ut solet, quaestio enuntiatio per plures iterationes procedit, et tempus illud proximum mihi videtur. Desinamus igitur, ea quae iam scripta sunt, et singula quae in tenebris manent declaramus.

Ita constituimus ut stipes in SPI NOR Flash condietur.

Quid est nec Flash illis qui non sciunt?

Haec memoria non volatilis est, qua tres operationes facere potes;

  1. Lectio:
    Lectio frequentissima: inscriptione transmittimus, tot bytes legimus quot opus est;
  2. recordarentur:
    Scribens ad NOR mico similem rationem habet, sed unum habet proprietatem: mutare tantum potes 1 in 0, sed non e converso. Exempli gratia, si 0x55 in cella memoria haberemus, tunc scribendo 0x0f ad illam, iam 0x05 reponenda est. (Vide mensam sicut infra);
  3. Dele:
    Nempe oppositum opus est facere operationem - mutatio 0 ad 1, hoc prorsus est quod dele operatio est for. Dissimilis primis duobus, non bytes, sed caudices agit (minimum scandalum erasum in chip electo 4kb est). Erase totum scandalum destruit et solus modus est mutandi 0 ad 1. Ergo, cum memoria mico laborat, saepe datas structuras figere ad terminum scandali exterminare.
    NOR Flash recording in:

Data binarii

erat
01010101

Exposita
00001111

Factum est
00000101

Ipse sextarius seriem monumentorum longitudinis variae repraesentat. Typicalis longitudo recordi est circiter 30 bytes (quamvis monumenta plura chiliobyta in longitudine interdum occurrunt). Hoc in casu, cum illis tantum ut bytes statuto laboramus, sed, si interest, CBOR intra tabulas adhibetur.

Praeter stipes, necesse est informationes quasdam "ponere" condere, tam renovatas quam non: certam machinam ID, calibrationem sensorem, "machinam temporaliter debilem" vexillum, etc.
Haec informationes est copia monumentorum key-evangelii, etiam in CBOR conditur. Huius informationis multam non habemus (paucis kilobytis plurimum), et raro renovatur.
In iis quae sequuntur, contextum appellabimus.

Si meminimus ubi hic articulus incepit, magni momenti est ut certa notitia repono et, si fieri potest, continua operatio etiam in casu defectiosorum odiorum/datae corruptionis sit.

Quos fontes problematum considerari possunt?

  • In scribe vim off / res extermina. Hoc e genere "non est dolus contra coronatum".
    Information from disputationibus in Stackexchange: cum vis in mico operando avertit, et dele (pone ad 1) et scribe (pone ad 0) et ad mores indefinitos ducunt: data scribi possunt, partim scripta (dic, transtulimus 10 bytes/80 frena. attamen nondum tantum 45 minuta scribi possunt), fieri etiam potest ut in statu "medio" aliqua iunctarum fiant (lectio utrumque 0 et 1) producere potest;
  • Errores in ipsa memoria fulgent.
    BER, quamvis nimis humilis, nihilo aequalis esse non potest;
  • Bus erroribus
    Data per SPI transmissa nullo modo servatur, sive singulus errorum sive synchronisationum errores occurrere possunt - detrimentum vel insertionem frenorum (quae ad malam datam corruptelam ducit);
  • Alii errores / glitches
    Errores in codice, Raspberry glitches, aliena impedimenta...

Requisita exposui, quae adimpletio, mea quidem sententia, ad fidem faciendam necessaria est;

  • monumenta eunt in memoriam statim, morae scribentis non considerantur: - si error incidit, primo quoque modo deprehendi debet et discursum est - ratio, si fieri potest, ab erroribus convalescat.
    (exemplum vitae "quomodo non sit", quod omnes puto obvium: post casum reboot, tabella "fractum" est et ratio operativa non prodest)

Ideae, aditus, reflexiones

Cum de hoc problemate cogitare coepi, multae ideae per caput meum emicuerunt, exempli gratia:

  • utere compressione data;
  • utere sollertia notarum structurarum, verbi gratia, capita ex ipsis monumentis seorsim reponenda, ut si in aliquo errore sit, reliquas sine ullis quaestionibus legere possis;
  • uti frenum agri ad regendum complementum, cum potestas aversa est;
  • copia checksums in omnia;
  • aliqua ratione uti coding sonitus repugnans.

Quarum aliae opiniones adhibebantur, aliae relinquendae erant iudicatae. Ut eamus.

Data compressionem

Eventus ipsa, quas in ephemeride commemoramus, satis similes et iterabiles sunt ("nummum 5 rubli "iniecit", "prima pyga ad mutandum danda", ...). Ergo compressio debet esse satis efficax.

Compressio supra caput exigua est (processus noster admodum potens est, etiam primus Pi unum nucleum habuit cum frequentia 700 MHz, exempla currenti plures nuclei cum frequentia super gigahertz habent), commercium cum repositorio humile (plures. megabytae secundae), magnitudo monumentorum parva est. In genere, si compressio impulsum in effectu habet, positiva tantum erit. (absolute uncritical, modo enuntians). Plus, non habemus realem embedded, sed regularem Linux - ita exsecutio non multum laboris eget (satis est ut bibliothecam modo ligaveris et ex ea pluribus officiis utatur).

Frustum stipes ex artificio laboranti (1.7 MB, 70 millium viscusrum sumptum est) et primum compressibilitatem utens gzip, lz4, lzop, bzip2, xz, zstd in computatorio praesto est.

  • gzip, xz, zstd similes eventus ostendit (40Kb).
    Miratus sum quod modum xz hic se ostenderit in plano gzip seu zstd;
  • lzip cum occasus defectus levius peioris dedit eventum;
  • lz4 et lzop non multum boni eventus ostendit (150Kb);
  • bzip2 mirum bonum exitum ostendit (18Kb).

Itaque notitia optime comprimitur.
Itaque (si vitia fatalia non invenimus) compressio erit! Simpliciter quia plures notitiae possunt aptare in eodem mico coegi.

De incommodis cogitemus.

Quaestio prima: iam constat omne testimonium debere statim ire ut splendeat. Typice scrinium notitias colligit ex initus fluminis donec tempus volutpat scribendae esse censeat. Opus est ut stipitem compressum notitiarum statim recipiat et in memoria non volatili reponat.

Tribus modis video:

  1. Comprime unumquodque notarium utens compressione dictionarii loco algorithmorum de quibus supra.
    Optionem omnino laborat, sed non placet. Dictionarium ut plus minusve honestum compressionis gradum ad certas notitias "formari" debet, quaelibet mutatio ad compressionem gradum cadens catastrophice ducet. Ita problema solvi potest novam versionem dictionarii creando, sed hoc capitis est - omnes versiones dictionarii reponere debebimus; in unoquoque introitu indicari debebimus qua dictionarii versio compressa est.
  2. Singulas tabulas comprimunt algorithmos "classicos" utentes, sed independenter ab aliis.
    Compressio algorithmorum sub consideratione disposita non sunt ad operandum cum monumentis huius quantitatis (decem bytes), ratio compressionis clarius erit minor quam 1 (id est, crescens volumen notitiae loco compressionis);
  3. Do annoD post singulas notationes.
    Multae compressionis bibliothecae subsidium habent COMINUS. Hoc mandatum est (vel modulus ad modum procedendi comprimendi), acceptis quod archivum rivum compressum efformat ut restitui possit. omnes uncompressed notitia quae iam recepta est. Tale analogum sync in file systemata seu commit in sql.
    Quid interest, quod operationes compressiones subsequentes glossario coacervatae et proportio compressionis tantum ac in versione priore uti poterunt.

Puto esse manifestum quod tertiam optionem elegi, eam planius inspiciamus.

found articulus magnam de eo annoD in zlib.

Genu testam egi secundum articulum, 70 mille tabularum viscus ex reali fabrica cepi, cum magnitudo paginae 60Kb (Venimus ad pagina magnitudo postea) accepit;

initial notitia
Cogo gzip -9 (non COMINUS)
zlib cum Z_PARTIAL_FLUSH
zlib cum Z_SYNC_FLUSH

Volume, KB
1692
40
352
604

Primo aspectu, pretium quod a COMINUS collatum est nimis altum est, re vera autem parvam electionem habemus - vel omnino non comprimere, vel comprimere (et efficacissime) cum annoD. Obliviscendum non est nos habere LXX milia monumentorum, nugatio a Z_PARTIAL_FLUSH introducta tantum 70-4 bytes per recordum est. Et pressio proportio evasit fere 5:5, quod plus quam optimum evenit.

Mirum evenire potest, sed Z_SYNC_FLUSH actualiter efficacior est ad FLO

Cum Z_SYNC_FLUSH utens, postrema 4 bytes cuiusque introitus semper erunt 0x00, 0x00, 0xff, 0xff. Et si cognoscimus eas, tunc non habemus eas condituras, ergo magnitudo finalis tantum est 324Kb.

Articulus coniunctus rationem habet:

Novum genus 0 scandalum cum contentis inanibus appenditur.

A 0 genus obstructionum contentis inanibus constat:

  • the three-bit block header;
  • 0 ad 7 frusta nullae aequalia, ad alignment byte consequendam;
  • quattuor byte sequence 00 00 FF FF.

Ut facile perspicias, in ultimo claustro ante hos 4 bytes exstant ab 3 ad 10 nulla minuta. Attamen praxis demonstravit actu saltem 10 nulla minuta esse.

Evenit ut tam breves notitiarum caudices soleant (semper?) truncum typum 1 (truncum fixum) uti, quod necessario cum 7 ullis frenis terminatur, summam 10-17 nullas particulas in tuto collocare (et reliquae voluntates. nulla cum probabilitate circiter L%).

Itaque, in notitia testium, in C% casuum una nulla byte ante 100x0, 00x0, 00xff, 0xff est, et in plusquam tertia casuum duae nullae bytes sunt. (fortasse est binarium CBOR uti, et cum textus JSON utens, impedimenta generis 2 - impedimentum dynamicum magis commune esset, respective cuneos sine additis ullis bytes antequam 0x00, 0x00, 0xff, 0xff occurreretur).

In summa, utens notitias probativae opportunas, in minus quam 250Kb notitiarum compressarum quadrare potest.

Paulo plus potes servare praestigiae faciendo: nunc ignorare praesentiam paucorum nullarum frenorum in fine clausulae, paucas minutas in principio clausulae etiam non mutantur...
Sed tunc consilium constitui vehemens desistere, alioquin in hoc certe archivo meo elaborare possem.

In summa, ex data probatione 3-4 bytes per scribens accepi, ratio compressionis plus evasit quam 6:1. Honestus ero: talem exitum non exspectavi, mea sententia, quid melius quam 2:1 iam est effectus qui compressionis usum iustificat.

Omnia denique sunt, sed zlib (deflate) pervetusta adhuc est, bene merita et algorithmus compressionis antiquae leviter. Hoc ipsum, quod postremum 32Kb notitiarum incompressorum amnis adhibetur, ut dictionarium hodie alienum spectat (id est, si stipes aliquae datae simillimae sunt iis quae in input riuum 40Kb abhinc erant, tunc iterum scrinium incipiet; neque ad praecedentem). In tabulariis modernis celeberrimis, magnitudo dictionarii saepe mensuratur in megabytis potius quam in kilobytis.

Sicque mini- strarium archivi nostri continuamus.

Deinde probavimus bzip2 (memini, sine COMODO illam compressionem phantasticam rationem fere 100:1) ostendit. Dolendum est, quod pessime cum COMINUS confectus est, magnitudo notitiarum compressarum maior evasit quam notitia incompressa.

Meis positis de causis defectus

Libbz2 unam tantum optionem ruborem praebet, quae dictionarium (analogum Z_FULL_FLUSH in zlib) purgare videtur, nulla post hanc compressionem efficax disputatio est.

Et ultima tentanda erat zstd. Pro parametris comprimit vel in gradu gzip, sed multo velocius, vel melius quam gzip.

Heu, cum COMINUS non bene perfecit: magnitudo data compressa circiter 700Kb erat.

Π― quaesivit quaestionem in pagina proiecti in github, responsum accepi te numerare in 10 bytes notitiarum servitii pro unoquoque stipite datarum compressarum, quae proxima proventus consecutus est, deflate comprehendere nullo modo est.

In experimentis meis cum archivo hoc loco consistere decrevi (me admoneam te xz, lzip, lzo, lz4 ne in probatione quidem se praebuisse sine COMINUS, et magis compressionem algorithmarum exoticam non consideravi).

Redeamus ad problemata archiv.

Alterum (ut aiunt ordine, non valore) problema est, data compressa unum esse rivum, in quo continenter ad sectiones superiores referuntur. Ita, si pars notitiarum compressarum laeditur, non solum clausus incompressus notitiarum iunctarum amittimus, sed etiam omnes subsequentes.

Accessus est ad solvendam hanc quaestionem:

  1. Prohibe problema ne fiat - nugationem addito notitiarum compressarum, quae cognoscere et corrigere permittet errores; de hoc postea dicemus;
  2. Magna consequat si quaestio occurs
    Iam antea diximus singulas notitias sine impedimento te comprimere posse, et quaestio per se evanescet (damnum dati unius scandali ducet ad iacturam notitiae tantum huius scandali). Sed hic casus extremus est, in quo notitia compressionis inefficax erit. Contrarium extremum: omnes 4MB nostri chip utere ut unum archivum, qui nobis optimam compressionem dabit, sed eventus funestos in casu corruptionis notitiarum.
    Ita transactio requiritur ad fidem. Sed meminisse debemus nos enucleare notitias formas repositionis ad memoriam non volatilem perquam humilem BER et indicata notitia repono periodi XX annorum.

Per experimenta deprehensa plus minus notabilis damna in gradu compressionis incipiunt in caudices notitiarum compressarum minorum quam 10 KB magnitudine.
Antea commemoratum est quod usus memoriae proditus est, nullam video causam cur "una pagina - unus stipes notitiarum compressarum" correspondentia adhibenda non sit.

Hoc est, minimum rationabilis paginae magnitudo 16Kb est (cum subsidiis ad informationem ministerii). Sed tam parva magnitudo paginae restrictiones significantes magnitudines maximi momenti imponit.

Etsi nondum paucas chiliobytas in forma compressa monumenta exspecto, 32Kb paginis uti decrevi (pro summa paginarum 128 paginarum per chip).

summary:

  • Data condimus compressa utens zlib (deflate);
  • Ad singulas introitus ponimus Z_SYNC_FLUSH;
  • Pro unoquoque compresso testimonium bytes retinacula stringeremus (eg 0x00, 0x00, 0xff, 0xff); in titulo indicamus quot bytes abscidimus;
  • Data in 32Kb paginas condimus; rivus unus in pagina intra data compressa est; In unaquaque pagina iterum compressionem incipimus.

Et, antequam pressionem finiam, animum intendere volumus eo quod tantum paucas notas per recordum notarum compressarum habemus, ideo magni momenti est ut informationes muneris non inflent, omnes hic computantur.

Data capitis thesaurizantes

Cum monumenta longitudinis variabilis habeamus, opus est aliquo modo positionem / limites monumentorum determinare.

Novi tres aditus;

  1. Omnia monumenta in continuo amne reposita sunt, primum est titulus capitis continens longitudinis, deinde ipsius recordationis.
    In hac forma, tam capitis quam notitiae longitudo variabilis esse potest.
    Singularem coniunctum album per se, quod omni tempore adhibetur;
  2. Capita et monumenta ipsa in fluminibus distinctis reponuntur.
    Per capitis constantis longitudinem utendo, cavemus ne damnum uni capitis aliis non afficiat.
    Similis accessus adhibetur, exempli gratia, in multis systematis fasciculis;
  3. Tabularia in continuo flumine reposita sunt, record terminus terminus certo determinatur (character/sequentium characterum intra notitias caudices prohibetur). Si titulus intra censum est, eam cum aliqua serie reponemus.
    Similis aditus adhibetur, exempli gratia, in protocollo PPP.

illustrabo.

1 optio:
Mea exsecutio quiddam anuli in NEC mico
Omnia hic simplicissima sunt: ​​longitudinis recordi scientes, oratio sequentis capitis computare possumus. Movemur igitur per capita, donec spatiam plenam 0xff (aream liberam) vel in fine paginae occurramus.

2 optio:
Mea exsecutio quiddam anuli in NEC mico
Ob longitudinis variae testimonium, praemittere non possumus quot monumenta (et ideo capitis) per paginam egere debebimus. Capitulos ac notas per varias paginas diffundere potes, sed ego alium aditum praefero: tum titulos tum notitias in una pagina ponimus, at capita (magnae magnitudinis) ab initio paginae proveniunt; notitia (variabilis) a fine. Simulac "congredi" (ad novum ingressum non est satis liberum spatium), hanc paginam integram pensamus.

3 optio:
Mea exsecutio quiddam anuli in NEC mico
Non opus est longitudinem vel alias informationes de situ notitiarum in titulo condere, satis notae indicantes limites historiarum. Nihilominus, notitia discursus est cum scripto/legendo.
Ut titulum uti 0xff (qui paginam post deletionem implet), sic liberum spatium definite non tractabitur sicut notitia.

Mensa comparatio:

optio 1
optio 2
optio 3

Error tolerantia
-
+
+

density
+
-
+

Complexionem exsequendam
*
**
**

Option 1 fatale vitium habet: si quid capitis laeditur, tota catena subsequens exstinguitur. Reliquae optiones te permittunt ut aliqua indicia etiam in eventu ingentis damni recipias.
Sed hic meminisse oportet nos datas in forma compressa condere decrevimus, et ideo omnes notitias in pagina post "fractas" notas amittimus, ut, etiamsi minus in tabula sit, non tamen. rationem accipe.

Compactness:

  • in prima optione, longitudinem tantum in capite condere oportet: si integris longitudine variabilibus utimur, frequentissime uno byte consequi possumus;
  • in secunda optione opus est initium sermonis et longitudinem condere; recordum constantem magnitudinem esse debet, 4 bytes per recordum (duo bytes pro cingulo, duo bytes pro longitudine);
  • tertia optio tantum uno charactere indiget ut initium recordationis indicet, plus ipsius recordationis augebit 1-2% propter protegendi. In communi proxime pari cum prima optione.

Initio secundam optionem principalem consideravi (et etiam exsecutionem scripsi). Id solum deserui cum tandem compressionem uti constitui.

Fortasse aliquando etiam simili optione utar. Exempli gratia, si de repositione notitiarum ad navem iter inter Terram et Martem pertractandam, prorsus alia requiruntur ad fidem, radiorum cosmicum, ...

De tertia optione: duas stellas ei dedi propter difficultatem exsecutionis simpliciter, quia non amo officere circum protegendo, mutando longitudinem in processu, etc. Imo fortasse cupidus sum, sed codicem scribere debeam - cur te cogas aliquid facere quod tibi non placet.

summary: Optionem repositam eligimus in vinculis "capitis longitudinis - datae longitudinis variae" propter efficientiam et facilitatem exsecutionis.

Usura Bit Agri ad Monitor Success of Write Operations

Nunc ubi ideam nactus non memini, sed tale aliquid spectat;
Pro unoquoque introitu, plura frusta ad vexilla reponendas collocamus.
Ut supra dictum est, post deleas omnes minutas implentur 1s, et potest mutare 1 ad 0, sed non e converso. Ita pro "vexillum non est" 1 utimur, nam "vexillum positum est" 0 utimur.

Hic est quod in ictu variabili longitudinis recordum ponens fortasse videri potest:

  1. Vexillum "longitudo memoria incepit";
  2. Longitudinem notare;
  3. Pone "notitia recordationem incepit" vexillum;
  4. Memoriae sumus notitiae;
  5. Constitue "recordationem finivit" vexillum.

Praeterea vexillum habebimus "errorem factum", pro totalem 4 frenum vexilla.

In hoc casu, duo status stabiles "1111" - recordatio non incepit et "1000" - recordatio felix fuit; in eventu ex inopinato intermissionis recordationis eventu, medias civitates recipiemus, quas tunc deprehendere ac processum possumus.

Accessus iucundus est, sed solum contra vim repentinae outages et similibus defectibus tutatur, quod, sane, interest, sed hoc tantum abest ut ratio possibilis peccandi.

summary: In solutionem bonam quaerendam transeamus.

Checksums

SCUTULATUM quoque efficit ut certo (rationabili probabilitate) legamus prorsus ea quae scripta sunt. Et, dissimiles agellum de quibus supra dictum est, semper operantur.

Si elenchum fontium potentialium problematum, de quibus supra disputavimus, consideremus, tum checksum errorem cuiuscumque originis cognoscere potest. (nisi forte pro alienigenis malignis - checksum etiam cudere possunt).

Si propositum nostrum est cognoscere notitias integras esse, magna idea sunt checks.

Electio algorithmi ad calculandum checksum quaestiones non movit - CRC. Altera ex parte, proprietates mathematicae efficiunt ut quaedam genera errorum 100 capiant, ex altera vero, in incertis notitiis, hoc algorithmus probabilitatem colliculorum non multo maiorem quam theoricam limitem ostendit. Mea exsecutio quiddam anuli in NEC mico. Algorithmus celerrimus non est, nec minimum semper est secundum numerum colliculorum, sed gravissimam habet qualitatem: in probationibus quas incidi, nulla erant exemplaria in quibus plane defecerunt. Stabilitas est praecipua qualitas in hoc casu.

Exemplum voluminis studii: pars 1, pars 2 (Nexus ad narod.ru, paenitet).

Attamen munus perscriptio deligendi non est completum: CRC tota familia checks sumendi est. Longitudinem definire debes, et integra eligere.

Eligens checksum longitudo non est simplex quaestio sicut prima fronte videtur.

Dimitte me illustratum;
Probabilitas erroris in singulis byte habeamus Mea exsecutio quiddam anuli in NEC mico et specimen checksum, computare mediocris numerus errorum per millions tabularum:

Data, byte
Checksum, byte
Errores quiverit
Falsus error detectiones
Totalis falsa positivis

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

Videtur quod omnia simplicia sint - secundum longi- tudinem notitiae tutae, elige longitudinem checksum cum minimum positivis perperam - et dolus in sacculo.

Attamen quaestio oritur cum brevibus checks: licet bonae sint ad detectionem singularum errorum, possunt tamen satis probabiliter accipere notitias temere omnino ut rectas. Iam erat articulus in describendo HabrΓ© quaestio in vita reali.

Ergo, ut temere checksum aequare paene impossibile sit, uti debes checksums quae sunt 32 frena vel longiora in longitudine. (Pro longitudinibus maior quam LXIV frena, munera cryptographic Nullam typice usus est).

Quamvis id quod antea scripsimus omnibus modis spatium conservare debeamus, tamen utendum est a 32-bitlis checksum (16 bits non satis est, probabilitas collisionis plus quam 0.01% est, et 24 frusta, ut sunt. dic, nec hic nec ibi sunt).

Obiectio hic oboriri potest: nunquid nos servavimus omnes byte comprimentes eligentes ut nunc 4 bytes simul damus? Annon satius sit non comprimere vel adjicere checksum? Donec non nulla does not meanut integritate iniecta non indigemus.

Cum polynomiale eligens, rotam non reinveniemus, sed nunc popularem CRC-32C capiemus.
Hic codex detegit 6 paulum errores in fasciculis usque ad 22 bytes (fortasse nobis frequentissimus), 4 paulum errores in fasciculis usque ad 655 bytes (etiam nobis communis casus), 2 vel quotvis impares modii errores in packets. cuiuslibet rationabilis longitudo.

Si quis est interested in details

Wikipedia article circiter CRC.

Codicem parametri crc-32c on Koopman website β€” fortasse primarius CRC artifex in planeta.

Π’ eius articulum est alius interesting codicequi paulo meliores parametros praebet ad longitudinum fasciculorum quae ad nos pertinent, sed differentiam significantium non consideravi, et satis mihi sufficiens sum ut codicem consuetum eligere pro vexillo et bene explorato.

Item, cum notitia nostra comprimatur, quaestio oritur: num computamus pressionum notitiarum compressarum vel incompressarum?

Argumenta in gratiam calculandum perscriptio incompressa data:

  • Ultimo opus est ad reprimendam salutem notitiarum repositionis - sic eam directe reprimimus (simulque errores possibilis in exsequendo compressionis/decompressione, damni a memoria fractae etc. sedatus erit);
  • Deflate algorithmus in zlib satis mature exsecutionem habet non debet cum "prava" notitia initus cadere, praeterea saepe deprehendi posse errores independenter in initus fluminis, reducendo ad altiorem probabilitatem errorem detegendi (examinando peractam cum uno frenum in brevi recordo invertendo, errorem deprehendit zlib. circa tertiam partem causarum).

Argumenta contra calculandum checksum de notitia incompressa:

  • CRC "formari" speciatim pro paucis erroribus qui propriae memoriae fulgoris sunt (aliquantulus error in rivo compresso magnam mutationem in output fluminis facere potest, in quibus, pure theoretice, collisionem "capere" possumus;
  • Non vere amo notionem decompressoris in potentia fractis datae transeundi; Quis scitquomodo agere.

In hoc incepto, ab usu recepto communi deviare decrevi sistendi checksum incompressorum notitiarum.

summary: Utimur CRC-32C, computamus checksum ex notitiis in forma qua scripta sunt ad fulgendum (post compressionem).

Dundantia

Usus coding redundantis non tollit, utique notitia detrimentum tollere, sed signanter (saepe multis ordinibus magnitudinum) verisimilitudinem reducere irrecuperabilis notitiae damni facit.

Ad emendandos errores varias redundantiae generibus uti possumus.
Hamming Codes unos frenum errores corrigere potest, characterum reed-Solomon codicibus, multiplex exemplaribus notarum cum checksums collatis, vel scriptiones sicut INCURSIO-6 notas recuperare potest etiam in eventu ingentis corruptionis.
Initio, mihi traditus sum in usu diffusa erroris repugnantis coding, sed tunc intellexi nos primum opus habere ideam eorum quos errores nos ipsos tueri velimus, et deinde coding eligere.

Supra diximus errores quam celerrime comprehendi oportere. Quibus in locis invenimus errores?

  1. Inperfecta notatione (alicuius temporis memorati potentia aversa est, Raspberry adligat, ...)
    Heu, in casu talis erroris, omnia quae supersunt, tabulas invalidas ignorare et notitias deperditas considerare;
  2. Errores scribunt (quidam, quae scripta sunt ad splendorem memoriae, non quid scriptum est)
    Hos errores statim deprehendere possumus, si probationem statim a memoria perlegerimus;
  3. Depravatio notitiarum in memoria durante repono;
  4. Legere errores
    Si checksum emendare non congruit, lectionem pluries repetere satis est.

Hoc est, soli errores tertii generis (spontanea corruptionis notitiarum in repositione) emendari non possunt sine errore repugnant coding. Videtur quod huiusmodi errores adhuc valde probabile sint.

summary: Superuacentem coding relinquere placuit, sed si operatio erroris huius decisionis ostendit, tunc ad considerationem quaestionis (cum iam cumulata statistica de defectibus, quae meliorem rationem coding eligendo permittit).

Other

Utique, forma articuli non sinit nos singulas particulas in formato iustificare (Et vires iam decurrunt)ut quaedam puncta antea non tacta breviter transgrediar.

  • Placuit omnes paginas "aequales" facere
    Hoc est, nullae paginae speciales metadatae, sequelae, etc., erunt, sed una stamina quae omnes paginas vicissim scribit.
    Hoc efficit ut vel in paginis induatur, nullum punctum deficiet, et mihi tantum placet;
  • De forma versionis providere necesse est.
    Forma sine numero versionis in titulo est malum!
    Satis est cum certo numero Magico (signatura) agrum addere in paginae indicis, quae versionem formae adhibitae indicabit. (In usu etiam duodecim eorum futuras esse non puto);
  • Utere capite variabili longitudinis monumentorum (quarum multae sunt), conatur eam 1 byte longam in pluribus reddere;
  • Ad encode longitudinem capitis et longitudinem ornatam partem instrumenti compressi, utere codicibus binariis variabilibus longitudinis.

Adiuvisti multum online generans codicibus Huffman. Paucis minutis modo debitam longitudinis variabiles codices eligere potuimus.

Description of notitia repono forma

Byte ut

Agri ampliores quam unus byte in forma magna-endiana condita (ordine network byte), hoc est, 0x1234 scripta sunt ut 0x12, 0x34.

Pagination

Omnia mico memoria in paginas aequales dividuntur.

Magnitudo paginae default 32Kb est, sed non plus quam 1/4 totius magnitudinis memoriae chips (pro 4MB chip, 128 paginas habebitur).

In unaquaque pagina reponit notitia extra alios (id est in una pagina data non refert notitias in aliam paginam).

Omnes paginae ordine naturali numerantur (in inscriptionum ordine ascendendo), numero incipientes 0 (pagina nulla incipit ab inscriptione 0, prima pagina incipit a 32Kb, secunda pagina incipit a 64Kb, etc.)

Memoria chippis adhibetur ut quiddam cyclicum (anulum quiddam), hoc est, prima scriptura ad numerum paginae 0 accedit, deinde numerus 1,..., cum paginam ultimam implemus, novus cyclus incipit ac memoria continuatur a pagina nulla. .

Intra paginam

Mea exsecutio quiddam anuli in NEC mico
In principio paginae, pagina 4-byte caput reponitur, deinde caput checksum (CRC-32C), deinde monumenta in forma "caput, data, checksum" reponuntur.

Titulus pagina (sordida viridis in diagrammate) constat:

  • duos byte Magia Number agri (etiam signum forma version)
    ad emendationem forma computatur ut 0xed00 βŠ• Π½ΠΎΠΌΠ΅Ρ€ страницы;
  • two-byte counter "Page version" (rescribe numerum exolvuntur).

Entries in pagina reponuntur in forma compressa (algorithmus deflatus adhibetur). All records in one page are comprimuntur in uno filo (dictionario communi adhibetur), et in unaquaque pagina nova pressio incipit de novo. Hoc est, ut omnem scriptionem deformatam, omnes priores monumenti ex hac pagina (et hac una tantum) requiruntur.

Singulae notae comprimentur cum vexillo Z_SYNC_FLUSH, et in fine fluminis compressi erunt 4 bytes 0x00, 0x00, 0xff, 0xff, fortasse ab uno vel altero zephyri praecedunt.
Hanc sequentiam (4, 5 vel 6 longam) abiiciamus, cum memoriam scripturae fulgeat.

Recordum capitis est 1, 2 vel 3 bytes actarum;

  • unam particulam (T) indicans genus record: 0 - contextus, 1 - log;
  • campus varius longitudinis (S) ab 1 ad 7 lamellis, definiens longitudinem capitis et "cauda" quae addita sunt in censu decompressione;
  • longitudo (L.).

Pretio mensae S;

S
Header longitudo, bytes
Scribere abiecta, 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)

illustrare conatus sum, nescio quam clare evenit;
Mea exsecutio quiddam anuli in NEC mico
Flavus hic indicat agrum T, album campum S, viridis L (longitudinis datae in bytes compressae), data caerulea compressa, rubra ultima bytes notitiae compressae quae memoriae non scriptae sunt.

Ita scribere possumus titulos maxime communes longitudinis (usque ad 63+5 bytes in forma compressa) in uno byte.

Post singulas tabulas reponitur CRC-32C checksum, in quo inversa valor checksum prioris adhibetur pro valore initiali (init).

CRC proprietatem "durationis" habet, sequenti formula opera (inversio plus vel minus in processu); Mea exsecutio quiddam anuli in NEC mico.
Hoc est, revera, omnium priorum bytenuum capitis et notitiarum in hac pagina CRC computamus.

Directe sequens checksum est caput sequentis record.

Header ita designatus est ut primus eius byte semper ab 0x00 et 0xff differat (si pro primo byte capitis 0xff offendimus, tunc id significat quod insueta area est, errorem 0x00 significat).

Exemplum Algorithmi

Lectio ex Flash Memoria

Quaelibet lectio venit cum checksum reprehendo.
Si checksum non congruit, lectio aliquoties repetitur spe rectae notitiae legendi.

(Hoc sensu facit, Linux non legit cache ab NOR Mico probatum)

Scribere ad fulgendum memoria

Notitiam memoramus.
Legamus eos.

Si data lecta notitia scripta non congruit, aream cyphris implemus et errorem significamus.

Praeparans novam microcircuit operationem

Ad initializationem, caput cum versione 1 scribitur ad primam (vel potius nulla) paginam.
Deinde, contextus initialis huic paginae scriptus est (UUID machinae et uncinis defectus continet).

Hoc est, splendor memoriae in promptu est.

Onerantium machina

Cum onerant, primi 8 bytes cuiusque paginae (capitis + CRC) leguntur, paginae cum Numero Magio ignoto aut incor- rato CRC neglectae sunt.
Ex paginis "recte", paginae cum versione maxima selectae sunt, et pagina summa cum iis detrahitur.
Primum testimonium legitur, rectitudo CRC et praesentia vexillum "contextum" retunditur. Si omnia bene sunt, haec pagina currenti consideratur. Sin minus, ad priorem revertimus donec paginam "vivere" invenimus.
et in pagina inventa legimus omnia monumenta, quibus vexillum "contextum" utimur.
Serva thesaurus zlib (opportebit ad hanc paginam addere).

Hoc est, receptaculum completum est, contextus restituitur, operari potes.

Addens Journal Entry

Recordum comprimimus cum recto dictionario denotando Z_SYNC_FLUSH. Videmus an recordum compressum in pagina pagina vicium comprimamus.
Si non convenit (vel errores CRC in pagina fuerunt), novam paginam incipiet (vide infra).
Scribimus censu et CRC. Si error incidit, novam paginam incipe.

Nova pagina

Liberam paginam cum minimo numero eligimus (liberam paginam censemus esse paginam cum falsa checksum in titulo vel cum versione minore quam hodierna). Si tales paginae non sunt, eligite paginam cum minimo numero ex iis qui habent versionem aequalem huic currenti.
Delectam paginam delemus. Reprehendimus contenta cum 0xff. Si quid perperam, proximam paginam accipe, etc.
Caput in pagina erasa scribimus, primus introitus est status praesentis contextus, proximus inscriptus est inscriptus (si adsit).

Forma applicability

Opinor, evenit ut forma bona quamlibet notitiarum rivorum compressibilem (plain text, JSON, MessagePack, CBOR, fortasse protobuf) in NOR Flash.

Scilicet, forma "formatam" pro SLC NEC Flash est.

Non utendum est instrumentis altis BER ut NAND vel MLC NOR (estne talis memoria venalis vel prompta? Tantum eam vidi in libris de correctione memoratam).

Praeterea uti non debet cum machinis quae proprias habent FTL: USB mico, SD, MicroSD, etc (nam talem memoriam formavi cum paginae mensurae 512 bytes, obsignatio in initio cuiusque paginae et numeri singularis recordationis β€” interdum omnia notitias ex "glitched" mico coegi per lectionem simplicem sequentem recuperare potuisse..

Secundum munerum forma adhiberi potest sine mutationibus mico fugat ab 128Kbit (16Kb) ad 1Gbit (128MB). Si placet, ea in maioribus astularum uti potes, sed tu probabiliter opus est ut magnitudinem paginae accommodes (Sed hic quaestio de facundia oeconomica iam oritur; pretium pro magno volumine NEC Flash non hortatur).

Si quis in forma iucunda invenit et in aperto incepto uti volet, scribe, experiar tempus invenire, codicem expolire et in github mittere.

conclusio,

Ut videre potes, in fine forma simplex evasit et odiosis.

Difficilis est evolutionem meam in articulo considerare, sed crede mihi: initio aliquid sophisticum, incorruptibile, vel nuclei in propinquo superstitum creare volui. Attamen ratio (ut spero) vicit adhuc et gradatim potiora in simplicitatem ac firmitatem mutata est.

An forte me fefellit? Ita. Bene evenire potest, exempli gratia, massam microcircuitum ignobilium emimus. Vel alia de causa apparatum non dignum expectatione firmitatis.

Habeo consilium hoc? Puto te legisse perlectis non dubito quin consilium sit. Etiam ac nisi neque.

In notatione paulo graviori, forma evoluta est sive ut optio operativa et ut "testamentum Balloon".

In momento omnia in mensa bene laborat, ad litteram altera die solutio explicabitur (circa) in centum machinis, videamus quid in operatione "pugnae" acciderit (Fortune, ut spero, forma permittit ut defectiones certo deprehendas; sic plenam statisticam colligere potes). Paucis mensibus concludere poterit (et si infortunatus es, etiam ante).

Si, ex usu exitu, problemata gravia deteguntur et melioramenta requiruntur, tum definite de eo scribemus.

litterae

Longum longum indicem usuum operum facere nolui, cum omnia Google quisque habeat.

Hic censum deserere inventarum inventionum quae mihi maxime placuerunt visae sunt, sed paulatim in textum articuli directe migrarunt, et unum supererat in indice:

  1. utilitas infgen ex Auctore zlib. Potest clare ostendere contenta archivi deflate/zlib/gzip. Si de forma deflate (vel gzip) interna agitur, eam tractet.

Source: www.habr.com