Hét vraag- en antwoordplatform van Nederland

Wanneer doet een USB-staaf zijn interne administratie?

Een USB-staaf schijnt, na het schrijven of wissen van informatie, op de achtergrond wat "interne administratie" te doen. Bijvoorbeeld het verplaatsen van informatie naar andere geheugenblokken (zonder dat de gebruiker er iets van merkt), het verwisselen van actieve geheugenblokken en reservegeheugenblokken, enzovoort.

Wanneer worden deze handelingen uitgevoerd?
--  Alleen zolang de USB-staaf nog als schijfletter benaderbaar is?
--  Pas *nadat* je "hardware veilig verwijderen" hebt gedaan maar de USB-staaf nog wel in de computer zit?
--  Allebei (zolang hij maar stroom heeft)?

Toegevoegd na 1 uur:
 
Een voorbeeld van de "interne administratie" die ik bedoel staat op deze site - lees bijvoorbeeld het stukje over Garbage Collection.

http://www.thezonemanager.com/2010/02/flash-memory-basics.html

Het idee is:
--  Een geheugenblok moet eerst fysiek worden gewist voordat het kan worden beschreven.
--  Als op filesysteemniveau iets wordt gewist, wordt het in de USB-staaf alleen *gemarkeerd* als zijnde gewist, maar niet fysiek gewist.
--  Zolang de USB-staaf actief wordt gebruikt, wordt pas fysiek gewist wanneer dat absoluut nodig is. Dat vertraagt wel het schrijven.
--  Als de staaf "idle" is, worden op de achtergrond de geheugenblokken die slechts *gemarkeerd* zijn als gewist, daadwerkelijk *fysiek* gewist. Toekomstige schrijfoperaties gaan daardoor sneller, omdat het wissen al is gebeurd.

De vraag is dus: in welke van de drie genoemde mogelijkheden is de USB-staaf "idle"?

Cryofiel
11 jaar geleden
in: Hardware
724
Cryofiel
11 jaar geleden
Ook met dergelijke operaties kun je de USB-staaf er op elk moment uittrekken. Voorbeeld: een blok is logisch gewist maar fysiek niet. Je gaat dat blok dan alvast fysiek wissen, opdat een toekomstige schrijfoperatie sneller gaat. De controller start dus het wisproces. Pas als dat is voltooid, wordt het blok in de administratie als 'fysiek gewist' beschouwd. Wordt voordien de stroom onderbroken, dan is het blok misschien wel, misschien niet fysiek gewist. Of het blok in dat geval wel of niet gewist is: in de administratie staat het nog steeds als wel logisch gewist, maar niet fysiek gewist. Geen probleem dus - steek je de USB-staaf de volgende keer weer in de computer, dan wordt het blok opnieuw fysiek gewist - wellicht voor de tweede keer, wellicht voor de eerste keer, maar dat maakt niet uit.

Heb je meer informatie nodig om de vraag te beantwoorden? Reageer dan hier.

Het beste antwoord

Deze akties worden alleen gedaan bij het schrijven van data, dus wanneer de USB stick nog een drive letter heeft. Waarom dit zo is ? Flash memory bestaat uit blokken (dit zijn niet de blokken zoals een filesysteem die heeft), en alleen per heel blok kan er data beschreven worden. Dit komt dan weer omdat een blok eerst gewist moet worden (alle bitjes op 1), en dat kan alleen op blokniveau. Daarna kunnen selectief de juiste bitjes op 0 gezet worden.

Een schrijfactie (en als je een file delete is dat ook een schrijfactie, de directory informatie wordt bijgewerkt en opnieuw geschreven) bestaat dus uit het wissen van een ongebruikt flash blok, en dan het schrijven van de data van het "oude" blok plus de wijzigingen die aangebracht moesten worden. De adressering van zo'n blok aan de buitenkant van de flash chip verandert niet, dus de interne administratie moet bijgewerkt worden. Er is een tabel die elk "logisch" blok vertaalt naar het eigenlijke "fysieke" blok.

Omdat er zo'n tabel bestaat kan de flash chip ook nog slim zijn en zorgen dat elk blok ongeveer even vaak gewist/geschreven wordt om de levensduur van de hele chip te verlengen. Als er ook nog eens meer fysieke blokken zijn dan logische, dan kun je ook bijhouden welke blokken kapot zijn, en dan een nieuw, vers blok inschakelen.
(Lees meer...)
gvrox
11 jaar geleden
Cryofiel
11 jaar geleden
Ik heb mijn vraag zojuist uitgebreid, in de hoop wat meer duidelijkheid te geven. Het wissen dat je noemt, kan namelijk al vooraf worden gedaan - zeg maar: "preventief". Neem als voorbeeld een geheugenblok dat nog slechts gewiste gegevens bevat. Dit zijn dan gegevens die op filesysteemniveau zijn gewist, maar die op fysiek niveau nog niet zijn gewist. Het geheugenblok is dus beschikbaar om te schrijven. Maar voordat je kunt gaan schrijven, moet je het eerst ook *fysiek* wissen. Dat kost tijd. Doe je niets, dan bestaat een (logische) schrijf-aktie uit twee delen:
1.  Fysiek wissen van het blok.
2.  Nieuwe gegevens naar het blok schrijven. Leuk, en het werkt, maar het is traag. Gebruik je de "idle" tijd om al zulke blokken preventief fysiek te wissen, dan is bij de eerstvolgende schrijf-aktie nog slechts stap 2 nodig. Het schrijven gaat dan een stuk sneller. Het fysiek wissen kan worden voorafgegaan door het her-alloceren van geschreven gegevens. Dit kan nuttig zijn om niet twee geheugenblokken te hebben die half gevuld zijn, maar daarvan één geheugenblok te maken dat (bijna) helemaal gevuld is met nuttige data, en één geheugenblok dat geheel beschikbaar is. Dat geheel beschikbare geheugenblok kan dan preventief worden gewist (fysiek wissen). De taken die de controller uitvoert zijn dus:
a)  Herallocatie van nog in gebruik zijnde gegevens over de fysieke geheugenblokken.
b)  Preventief wissen van logisch lege geheugenblokken. Mijn vraag is: worden deze twee taken alleen uitgevoerd wanneer de USB-staaf een schijfletter heeft (maar verder niets aan het doen is), of alleen wanneer de staaf géén schijfletter heeft, of in beide gevallen?
gvrox
11 jaar geleden
De vragen worden nu wel zo specifiek dat ik nu alleen op "boerenverstand" uitspraken kan doen: - idle is wanneer er geen schrijf- (of lees-) acties gedaan worden
- dit kan dus zowel voorkomen terwijl er een schijfletter is toegewezen als wanneer "veilig verwijderen" al gebruikt is
- op zich is het het veiligst om alleen wisacties te doen wanneer "veilig verwijderen" nog niet is uitgevoerd, omdat de USB stick dan waarschijnlijk niet ineens eruit getrokken zal worden.
- aangezien het nog steeds mogelijk is om de stick eruit te trekken op elk moment (en ook de stroom uit zou kunnen vallen) zal de controller elke actie pas registreren als die helemaal correct is uitgevoerd. Een wisactie die onderbroken wordt is dan niet geregistreerd en zal opnieuw gestart worden zodra de stick opnieuw in de computer gestoken is.

Andere antwoorden (2)

Het indelen van die "geheugenblokken" zoals u die noemt worden aangemaakt bij het formateren.
Waar hij wat plaatst gebeurt als u er iets op schrijft.
Als u de data wist zijn die enkel onleesbaar gemaakt maar staat die er onzichtbaar nog op, wel is het zo dat die vrijgegeven is om te overschrijven.
Hij zal dus onder geen enkele van de 3 mogelijkheden "administratie uitvoeren".
(Lees meer...)
Verwijderde gebruiker
11 jaar geleden
gvrox
11 jaar geleden
Je zit een niveautje te hoog, Roger, je hebt het over hoe de zaken gebeuren binnen een filesystem. Wat flash-geheugens doen zit op een lager niveau, en werkt ook met blokken, maar dat zijn *niet* de blokken van je filesystem.
Verwijderde gebruiker
11 jaar geleden
@gvrox, ok ik had het moeten weten toen Cryofiel over "geheugenblokken" schreef.
U geeft trouwens een glasheldere beschrijving, vandaar mijn +je.
Dat lijkt zo. Voor elk randapparaat heb je een driver die het data verkeer regelt. Meestal gaat dat in een blok van bv 4096 bytes per keer. De driver houdt die 4096 bytes in het geheugen van je PC. Zo'n geheugenblok komt overeen met een blok op je USB staaf. De driver is zo gemaakt dat hij niet eerder leest/schrijft voordat het blok vol is of info uit een ander blok nodig is. Dan kun jij verder zonder op de schrijfactie te wachten. Daarom moet je ook altijd een USB stick via de taakbalk veilig verwijderen zodat gegevens die nog ingeheugen staan "geflushed" worden.
(Lees meer...)
Verwijderde gebruiker
11 jaar geleden
Cryofiel
11 jaar geleden
Dit is niet wat ik bedoel. Wat jij beschrijft gebeurt op logisch niveau, dus zichtbaar voor het besturingssysteem (plus drivers). Wat ik bedoel gebeurt op fysiek niveau, *binnen* de USB-staaf. Het wordt uitgevoerd door de controller die in de USB-staaf zit, en het is (op de snelheid na) volkomen onzichtbaar voor de buitenwereld, inclusief OS en drivers.
Verwijderde gebruiker
11 jaar geleden
Nee, je ziet het lampje nog oplichten als jij denkt dat alles al op de stick staat. Maar omdat er geen reden is om alles direct op de stick te zetten zie je dat. En dat is geen boekhouding zoals jij denkt, maar na-ijlen van de schrijfopdracht zoals door mij beschreven.
Cryofiel
11 jaar geleden
Dat effect treedt inderdaad óók op. Maar het is een effect op (en zelfs boven) filesysteem-niveau. Gewone buffering. Het effect waar ik het over heb, treedt alléén intern binnen de USB-staaf op. De buitenwereld merkt er niets van. Dus ook de driver merkt er niets van - die kán er zelfs niets van merken.

Weet jij het beter..?

Het is niet mogelijk om je eigen vraag te beantwoorden Je mag slechts 1 keer antwoord geven op een vraag Je hebt vandaag al antwoorden gegeven. Morgen mag je opnieuw maximaal antwoorden geven.

0 / 2500
Gekozen afbeelding