Budowa i działanie pamięci flash

Pamięć flash jest rodzajem pamięci trwałej, powszechnie obecnie używanej w kartach, pendrive’ach, dyskach SSD oraz będącej na wyposażeniu smartfonów, tabletów, odbiorników GPS i wielu innych urządzeń projektowanych z przeznaczeniem do przechowywania danych i programów. Na jej popularność i powszechność wpłynęły zalety w postaci niewielkich gabarytów (postępująca miniaturyzacja urządzeń) oraz braku elementów mechanicznych (zwiększona odporność na wstrząsy i wszelkie uszkodzenia mechaniczne).

Pamięć flash jest odmianą pamięci EEPROM (Electonically Erasable Programmable Read Only Memory) – rodzajem pamięci tylko do odczytu (ROM) z możliwością elektronicznego wymazywania i zapisu danych. Kasowanie danych odbywa się tutaj za pomocą prądu elektrycznego, w przeciwieństwie do pamięci EPROM, kasowanej ultrafioletowym światłem. Ponieważ flash jest odmianą pamięci ROM, zapisane dane pamiętane są nawet po odłączeniu zasilania.

Historia

Pamięci tego typu pojawiły się w roku 1980. Za ideę i pierwsze konstrukcje odpowiadał zespół pod kierownictwem doktora Fujio Masuoka pracujący dla koncernu Toshiba. Był on odpowiedzialny za konstrukcje zarówno pierwszych pamięci typu NAND, jak i NOR, o których szerzej za chwilę. W roku 1988 pamięci tego typu przestały być traktowane jako ciekawostka i rozpoczęła się ich masowa produkcja (typ NOR), za którą odpowiedzialna była firma INTEL. Rok później powszechnie dostępne stały się pamięci typu NAND, które na rynek zaczęły wprowadzać Toshiba i Samsung.

Działanie, budowa i klasyfikacja

Fizycznie pamięci tego typu zbudowane są z tranzystorów polowych MOSFET. Tranzystory stanowią komórki – to one wykorzystywane są do przechowywania danych. Każda komórka zbudowana jest z dwóch bramek: pływającej i sterującej. Bramka pływająca gromadzi ładunek, sterująca odczytuje jego logiczną wartość (0 lub 1), a także kasuje i zapisuje ładunek bramki pływającej. Dokonując pomiaru napięcia progowego bramki można odróżnić naładowaną komórkę pamięci od nienaładowanej. Komórki pamięci ułożone są w kolumnach i wierszach.

NOR vs NAND

Ze względu na rodzaj bramki logicznej realizowany przez komórkę, pamięć flash dzieli się na dwa rodzaje: NOR, w którym komórki pamięci łączone są równolegle i NAND, posiadająca szeregowo łączone komórki. Konsekwencją tego jest brak komunikacji z pojedynczymi komórkami pamięci NAND – w tym przypadku komórki mogą być odczytywane porcjami (tzw. stronami), co czyni ten rodzaj pamięci znacznie szybszym. W przepadku pamięci typu NOR zagwarantowany jest bezpośredni dostęp do każdej komórki, co jest przydatne w zastosowaniach z wymaganym swobodnym dostępem do pamięci – biorąc pod uwagę także to, iż w pamięciach typu NOR proces zapisu i kasowania danych w komórkach przebiega znacznie wolniej niż w NAND – pamięć stosowana może być we wszelkich realizacjach gdzie oprócz wymaganego swobodnego dostęp do każdej komórki pamięci, dane zapisywane są rzadko lub wcale, czyli np. do przechowywania firmware’u lub BIOSu płyty głównej.

Pamięć NAND oferuje krótsze czasy dostępu, większą gęstość (posiada około 60% mniejsze komórki), trwałość (10. krotnie większa liczba cykli kasowania niż w przypadku NOR) oraz niższy koszt produkcji w przeliczeniu na jednostkę pojemności nośnika. Z tych właśnie powodów większość pamięci spotykanych na rynku jest rodzaju NAND, i to głównie z nimi przychodzi pracować w przypadku odzysku danych czy procesów informatyki śledczej (karty pamięci, pendrive’y, dyski SSD). Jest to jednak pamięć o dostępie sekwencyjnym, co powoduje, że nie sprawdza się w innych zastosowaniach poza pamięcią masową.

Logicznie pamięci tego typu składają się ze stron i bloków – strony maja określona liczbę bajtów (512, 2048, 4096) i łączą się w bloki (32, 64 lub 128 stron). O wielkości tych parametrów decydują producenci.

Pamięci NAND zapisują jedynie zera i tylko na poziomie całej strony. Modyfikacja danych polega na dodaniu nowego zera, a jeśli nie jest to możliwe, nowej strony, w nowym miejscu – poprzednia strona zostaje zaś odznaczona do wykasowania. Kasowanie przebiega na poziomie bloku. Jeśli wszystkie strony bloku zostaną przeznaczone do kasowania, cały blok zostanie zapisany jedynkami. Strony takie mogą być jednak grupowane w bloki specjalne, z przeznaczeniem do usunięcia, bez konieczności czekania na wyczerpanie zapasu stron w danym bloku (garbage collection), co znacznie usprawnia proces obsługi komórek pamięci.

SLC i MLC

Pamięci dzielą się także pod względem rodzajów komórek, a konkretnie liczby bitów, które można zapisać w jednej komórce pamięci. Rozróżnia się zatem pamięci typu SLC (Single-Level Cell) i MLC (Multi-Level Cell). W SLC można zapisać tylko jeden bit informacji, w MLC dwa, a nawet więcej. W przypadku pamięci SLC istnieje konieczność określenia tylko jednego poziomu napięcia dla stanów 0 i 1. Aby zapisać dwa bity w komórce pamięci typu MLC potrzebne jest określenie aż czterech poziomów napięć progowych (dla stanów 00, 01, 10, 11) – pamięci takie są znacznie bardziej pojemne, a dzięki możliwości upakowania większej liczby danych są one znacznie tańsze, niestety konieczność zastosowania złożonych algorytmów odczytu/zapisu sprawia, iż są także znacznie wolniejsze. Ponieważ rozróżnienie poziomów napięć w MLC wymaga większej precyzji, łatwiej jest w przypadku tego typu pamięci o różne błędy powstałe w procesie użytkowania. Pamięci tego typu są także znacznie mniej trwałe – czas przechowywania informacji w komórkach typu MLC nie przekracza kilku lat, w komórkach SLC sięga kilkudziesięciu.

Życie komórki

Żywotność pamięci związana jest ze sposobem jej funkcjonowania: każdą czynność zapisu danych poprzedza konieczność skasowania dotychczasowej zawartości komórki. To wpływa na ich stopniowe zużycie – w cienkiej warstwie izolatora między bramkami pływająca i sterującą gromadzić się mogą ładunki i powstawać defekty. Każda zatem komóra pamięci ma przypisany pewien limit cykli zapisu/kasowania a po jego osiągnięciu bezbłędny zapis danych nie jest już gwarantowany. Przeciętna żywotność pamięci SLC to 100 000 cykli, MLC jedynie 10 000.

Równoważenie zużycia komórek

Aby usunąć mankament przedwczesnego zużycia stosuje się specjalne oprogramowanie równoważące wykorzystanie komórek – zapis nie rozpoczyna się od pierwszej komórki i nie posuwa systematycznie do kolejnych, ale jest rozłożony na wszystkie komórki. Zabieg ten (wear levelling), zapewniający równomierne i optymalne zużycie wszystkich komórek, wydłuża żywotności pamięci. System ten daje także pewną szanse na odzyskanie utraconych danych – nigdy nie ma pewności, że dane pliki zostały bezpowrotnie nadpisane.

Ze względu na nietrwałość komórek i ich zużycie, pamięć flash posiada pewną dodatkową pulę stron (overprovisioning), która może zostać uruchomiona gdy firmware stwierdzi, iż dla danej strony limit cykli wymazywania się zakończył. Gdy wyczerpaniu ulegnie również owa pula, zapis nośnika przestaje być możliwy – poszczególne komórki nadają się już ewentualnie tylko do odczytu.

Pavel Kroupka

Galeria