To wszystko, o czym pisaliśmy w części pierwszej powoduje, że dysk SSD musi mieć pewnego rodzaju „pośrednika” pomiędzy dwoma mechanizmami zapisu i odczytu danych – adresacją logiczną LBA (którą posługuje się system operacyjny) z jednej strony a scalakiem pamięci NAND z drugiej. Ten ostatni, jak już Państwo wiecie z poprzedniego wpisu, może wykonywać tylko trzy rodzaje operacji – read, write oraz erase. Zauważmy, że nie ma wśród nich operacji rewrite, czyli nadpisywania – wynika to z fizycznych ograniczeń tego typu pamięci. Ale tak się składa, że jest to operacja istotna dla funkcjonowania mechanizmu LBA, który bezwarunkowo umożliwia systemowi operacyjnemu zapisywanie/odczytywanie/modyfikację danych w każdym bloku logicznym (de facto sektorze z danymi), który tą adresacją jest objęty – czyli posiada wyrażony liczbą (od 0 do iluś bilionów) adres LBA.
Czytaj dalejTag: budowa SSD
Budowa SSD. Część 1: budowa fizyczna, LBA i NAND.
Dyski typu SSD coraz częściej wykorzystuje się jako podstawowy nośnik danych zarówno w urządzeniach klasy konsumenckiej, jak i specjalistycznej (np. w serwerach). Zgodnie z prognozami, w 2021 r. sprzedaż dysków SSD przewyższy sprzedaż dysków twardych typu HDD. Dzisiaj istnieje ponad 80 firm, które produkują dyski SSD (warto zwrócić uwagę na to, że dyski HDD w 1985 roku, tj. na początku ich istnienia, były produkowane przez 75 firm, z których obecnie funkcjonuje tylko 3).
Kilka lat temu dyski SSD wyprzedziły dyski typu HDD pod względem pojemności maksymalnej. Obecny „rekordzista” wśród dysków typu HDD ma pojemność 20 terabajt – znacznie mniej niż 100 terabajtowy konkurent z rodziny SSD firmy Nimbus.
Czytaj dalejCo ciekawe, użytkownik, kiedy ma do czynienia z dyskiem półprzewodnikowym (SSD), może o tym nawet nie wiedzieć. Na poziomie użytkownika, korzystanie z dysku SSD niczym się nie różni od korzystania ze zwykłego dysku twardego. System operacyjny rozpoznaje taki dysk jako tzw. urządzenie blokowe (ang. block device) – ciąg adresów LBA (ang. Logical Block Adres) od 0 do kilku miliardów. Każdy taki block logiczny w zależności od zastosowanej w nośniku technologii zawiera od 512 bajt do 4 KB danych. Zwracając się do każdego z nich system operacyjny odczytuje/zapisuje znajdujące się pod tym adresem dane zupełnie nie przyjmując się tym, w jaki sposób (fizycznie) dane te są zapisywane/przechowywane – troszczy o to kontroler dysku. Tak samo nic się nie zmienia dla użytkownika – posługuje się on (użytkownik) środkami systemu operacyjnego, tj. tworzy, modyfikuje lub przegląda zawartość bloków logicznych (plików). Jedyna zauważalną różnicą w przypadku dysków SSD będzie znaczący wzrost prędkości zapisu/odczytu danych oraz skrócenie czasu wyszukiwania, czyli seek time. O tym, jakie to ma znaczenie pisaliśmy w blogu o budowie dysków twardych HDD.
W celu zapewnienia kompatybilności, dyski SSD są również bardzo podobne do dysków HDD, jeśli chodzi o wymiary fizyczne, wygląd zewnętrzny czy też umiejscowienie wewnątrz komputera.
W odróżnieniu od dysków twardych HDD (ang. Hard Disk Drive – napęd z dyskiem twardym), dyski SSD (ang. Solid State Drive – napęd o stanie stałym) nie mają ruchomych elementów- talerzy, głowicy i ich ramion. W przypadku dysku SSD można bez obaw zdjąć górną pokrywę i zajrzeć do wnętrza- nie spowoduje to awarii dysku czy modyfikacji/uszkodzenia danych. SSD będzie dalej funkcjonował – jest to skutek zupełnie innej zasady działania. Dane urządzenie składa się tylko z dwóch elementów: układy scalone NAND Flash oraz kontroler pamięci.
Pamięć typu NAND Flash pełni rolę nośnika danych. Pierwsza cześć tej nazwy jest wskazaniem na zasadę logiczną (tzw. bramkę logiczną), na podstawie której działa NAND – jest to zasada „NOT AND”. Druga zaś cześć (flash) w tłumaczeniu z angielskiego oznacza „błyskawicę” i zobrazuje fizyczną stronę jej działania. Warto zwrócić jednak uwagę na to, że nazwa ta nawiązuje nie do szybkości działania – jest ona tak naprawdę niewielka, jeśli chodzi o pojedyncze kostki pamięci. Stosunkowo większa szybkość operacji (odczytu-zapisu) osiąga się dzięki połączeniu tych scalaków w jedną „macierz”, co umożliwia zapisywanie/odczyt danych w kilku z nich na raz, a więc ich prędkości się sumują. Pojedyncze komórki działają natomiast stosunkowo wolno. To są tranzystory, którzy dzięki dodatkowej „bramki pływającej” (ang. „floating gate”), zachowują ładunek elektryczny po odcięciu zasilania.
W pamięciach starego typu „NAND SLC” (ang. Single Level Cell) obecność ładunku w tranzystorze interpretowana była jako 0 w kodzie binarnym, a jego brak jako 1. Powodem jest najprawdopodobniej to, że kod binarny z reguły ma więcej jedynek niż zer. Odwrócenie sposobu reprezentacji licz binarnych (obecność ładunku symbolizuje zero, a jego brak symbolizuje jedynkę) obniża zużycie się komórek. We współczesnych pamięciach typu MLC (ang. Multi Level Cell), TLC (ang. Triple Level Cell) czy QLC (ang. Quad Level Cell) liczby binarne są kodowane przy pomocy zmiany poziomu, stopnia naładowania komórek. Dzięki temu można w nich przechowywać większe ilości danych.
W celu obniżenia kosztów produkcji, pamięci Flash projektowane są w taki sposób, że z ich komórkami można wykonać tylko 3 rodzaje operacji:
- Programować (ang. „program”) – czyli ładować do nich ładunek elektryczny;
- Odczytywać (ang. „read”) – czyli sprawdzać, czy jest w komórce ładunek elektryczny czy nie;
- Kasować (ang. „erase”) – czyli rozładowywać komórkę pozbawiając ją ładunku elektrycznego.
Kolejnym ograniczeniem jest to, że nie wszystkie te operacje można wykonać na poszczególnych tranzystorach. Programować (program) i odczytywać (read) można tylko z tzw. „stron” (ang. page) – jednostek pamięci, które w przypadku pamięci typu SLC mogą się składać nawet z 16 tysięcy pojedynczych tranzystorów! Więc aby odczytać stan naładowania poszczególnych tranzystorów (czyli „bit”) musimy odczytać całą „stronę”. “Gorzej” wygląda operacja rozładowywania (erase). Fizyczne ograniczenia przyczyniają się do tego, że skasować (erase) można tylko tzw. blok – jednostkę rozmiarową pamięci zawierającą w pamięciach SLC około 2 000 000 pojedynczych tranzystorów = bit. We współczesnych pamięciach typu TLC, rozmiar bloku wynosi od 1.5 do 3 megabajtów, co daje w sumie od 13 do 25 mln tranzystorów!
Oznacza to, że w pamięciach typu Flash nie ma możliwości zmiany zawartości pojedynczego tranzystora (indywidualnie) ze stanu naładowanego (w kodzie binarnym „0”) do stanu rozładowanego („1”).
Jednoczesne rozładowywanie takiej ilości komórek powoduje powstanie dużego przepływu prądu. Stąd i nazwa flash, czyli błyskawica. Wyzwolony ładunek po drodze uszkadza bramki pływające wraz z pozostałymi elementami, przez to operacja rozładowywania jest najbardziej szkodliwą, jeśli chodzi o żywotność pamięci. Właśnie w liczbie cykli programowania/kasowania mierzy się żywotność pamięci NAND. Jest to też najwolniejsza operacja z trzech możliwych. Dlatego wykonuje się ją z reguły w tle, kiedy mózg dysku SSD, tj. jego kontroler, ma wolną chwilę.
Z czasem wypracowane, zmęczone komórki przestają się programować lub pojawiają się problemy z ich rozładowywaniem. Podobne komórki zostają wpisane na listę „uszkodzonych”, i więcej oprogramowanie SSD z nich nie korzysta. Przy czym, im dłużej dane pozostają w tym samym miejscu fizycznym pamięci, tym trudniej jest rozładować zajęte tymi danymi komórki (operacja erase). Dane te w pewnym sensie utrwalają się na stale w komórkach pamięci podobnie do tego, jak dawno temu pozostawały na ekranach monitorów kineskopowych (CRT) obrazki statyczne – zjawisko te otrzymało nazwę „data retention”. Dlatego też potrzebne jest ciągłe przemieszczanie danych z jednego fizycznego obszaru do drugiego w ramach tzw. Równoważenia Zużycia (ang. Wear Leveling). Operacja Wear leveling służy również innym celom, ale o tym w następnych blogach 🙂