Hierarchia pamięci – jak ją zrozumieć?
Zdarza się, że w jakimś kompletnie losowym momencie człowiekowi przychodzą do głowy różne przemyślenia. I mnie dzisiaj najechało jedno z nich. Niczego nieświadomy oberwałem przemyśleniem na temat hierarchii pamięci i tego do czego można by ją porównać. Miał to być początkowo krótki post na Facebooku ale jak zaczął się rozrastać to przeniosłem go tutaj.
Poziomy pamięci
Przechodząc do meritum, zacząłem się zastanawiać jak wyjaśnić osobie nieobeznanej z tematem jaka jest różnica pomiędzy poszczególnym poziomami pamięci w komputerze.
Dla uproszczenia nie będę tutaj przytaczał całej piramidy hierarchii bo jest ona bardzo formalna. A my chcemy łatwo. Więc przyjmijmy uproszczony podział na trzy poziomy pamięci w komputerze:
– Cache i rejestry procesora
– Pamięć RAM
– Dysk twardy
Wyjaśnię Ci różnice pomiędzy nimi na przykładzie bardzo zbliżonym do działania komputera, a jednocześnie życiowym – liczenie czegoś.
Załóżmy, że masz do wykonania skomplikowane zadanie matematyczne na zajęcia. To z rodzimy zadań typu „Jasiu próbuje kupić odpowiednią ilość marchewki. Zauważył, że ilość potrzebnej marchewki na jeden talerz zupy to 2, a dla każdego następnego talerza tą ilość można opisać prostym rachunkiem różniczkowym „…”, gdzie n to ilość talerzy zupy”. Oblicz ile wyda na zakupy”.
Zastanówmy się teraz jak podchodzimy do takiego zadania.
Pamięć cache
Pierwszy poziom pamięci to ta, którą masz zawsze ze sobą. Robiąc takie zadanie możesz spokojnie wziąć sobie z zadania jego fragment i policzyć go w głowie. Robisz to często nieświadomie. Bo kiedy rozpiszesz wzór i podstawiasz dane to pojedyncze obliczenia wykonujesz w głowie. Dodanie dwóch liczb albo skrócenie jakiegoś fragmentu równania to żaden problem. I wtedy korzystamy z paru wartości, które pamiętamy w danej chwili.
To jest nasza pamięć podręczna, która odpowiada pamięci cache procesora.
Kiedy skończymy dane obliczenie to wyrzucamy z głowy dane wartości i sięgamy po kolejne żeby wykonać kolejne obliczenie. Dokładnie tak samo działa procesor. Wybiera sobie dane, które potrzebuje do aktualnych działań i zapisuje je w swojej pamięci. Tak jak my mając skomplikowany, długi wzór pod który podstawiamy dane bierzemy poszczególne jego fragmenty i to na nich działamy, a wynik zapisujemy w notatniku. I o notatniku za moment.
Oprócz tego czasami wiesz, że pewna wartość będzie też potrzebna za moment, w następnym fragmencie. Albo zapamiętujesz wynik pierwszego działania bo zaraz go użyjesz. I również ten element mają współczesne procesory. Próbują one przewidzieć co będzie zaraz robione i tak sobie układają dane żeby nie musieć ich za chwilę znowu szukać.
O czym to ja myślałem?
Jednak na pewno też miałeś nieraz taką sytuację, że wykonujesz jakieś działanie w pamięci i nagle ktoś Ci wrzucił do głowy coś innego, np. powiedział „umyj naczynia”. W ten sposób podmienił Twoją pamięć podręczną. I straciłeś te dane więc znowu musisz zajrzeć do notatek żeby je sobie przypomnieć. I taka sytuacja też jest obecna w procesorach. Kiedy za często zmieniamy kontekst i ciągle musi on sobie przypominać co robił to tracimy wydajność przez to, że non stop sięga on do „notatek”.
Więc pamięć cache można porównać do krótkotrwałej pamięci w naszej głowie. Jest bardzo łatwo dostępna i szybko można z niej skorzystać. Ale ma małą pojemność i łatwo podmienić w niej dane przez zmianę kontekstu.
Pamięć RAM
Przechodzimy teraz do naszego notatnika czy kartki, która przed nami leży. Bo rozwiązując takie zadanie poza tym co mamy w głowie mamy też przed sobą kawałek papieru, na którym zapisujemy dane, wyniki czy jakieś rzeczy, które nam się przydadzą. Możemy tutaj zmieścić więcej treści. W dodatku jak na chwilę pomyślimy o czymś innym to ta treść tam zostanie. Po prostu wrócimy do niej kiedy wrócimy do zadania.
No i mamy ten nasz kawałek papieru czy stronę w notatniku. Jest ona dedykowana temu jednemu zadaniu. Ale dużo bardziej pojemna niż to co możemy w głowie trzymać. Tylko jak coś potrzebujemy z niej to szukanie trwa dłużej. Już trzeba przejrzeć gdzie co jest. W dodatku może się okazać, że zapisywaliśmy w losowych miejscach i teraz jedna dana jest w prawym górnym rogu, a druga na dole strony.
I właśnie taką kartką z notatkami jest pamięć RAM. Ma dużo większą pojemność. Trudniej z niej pozbyć się danych. Ale jak czegoś potrzebujemy to już poszukiwania trwają dłużej. A jeśli nie dbamy o ułożenie tych danych to nawet dużo dłużej. Fragment notatnika, jego strona, którą wykorzystujemy do rozwiązania naszego zadania na zajęcia to to samo co obszar pamięci zarezerwowany dla aplikacji w systemie. Jest on dedykowany zadaniu i dopóki zadanie robimy to go trzymamy. Ale w końcu może się wyczerpać bo zbyt wiele informacji chcieliśmy zmieścić.
Do notatnika przerzucamy wyniki obliczeń, które wykonaliśmy w głowie. Po to żeby móc po nie sięgnąć za moment kiedy znowu będą potrzebne. Tak samo jeśli do rozwiązania zadania musimy mieć pod ręką jakiś wzór – wtedy też zapisujemy go sobie w notatkach. No i w końcu w takich notatkach często znajduje się przepisana treść zadania. Po to żeby była pod ręką i żebyśmy mogli na niej działać aktywnie bez szukania w książkach.
Dysk twardy
I w końcu przechodzimy do książek czy segregatorów. No bo do liczenia pojedynczych działań mamy potrzebne informacje w głowie. Żeby mieć wszystkie potrzebne informacje i wyniki działań pod ręką to zapisujemy je na kartce. Ale jak potrzebujemy znaleźć jakiś wzór albo przepisać treść zadania to sięgamy do książek. Im rzadziej to robimy tym lepiej bo szukanie czegoś w książce trwa. Jednak książki zawierają setki albo tysiące stron z informacjami. Nie zmieścimy tego wszystkiego na naszej kartce „w razie jakby było potrzebne”. Więc zazwyczaj wybieramy sobie od razu to co wiemy, że się przyda, a potem będziemy dopisywać.
Zdarza się też, że nasze notatki albo wyniki działań chcemy zachować na później. Wtedy wkładamy je do segregatora. Albo wciskamy luźne kartki pomiędzy strony w książce.
I te książki albo segregatory możemy porównać do dysku twardego w naszym komputerze. Szukanie w nich informacji jest dużo wolniejsze tak jak szukanie danych na dysku jest powolne w porównaniu do odczytu z pamięci RAM. Bo na kartkę wystarczy spojrzeć i już widzimy jaka to była wartość, której używamy. W książce szukając np. jakiegoś wzoru najpierw patrzymy w spis treści, potem otwieramy odpowiedni fragment, później w nim szukamy konkretnej linijki.
Powinniśmy jak najrzadziej musieć sięgać do tego źródła wiedzy jeżeli chcemy szybko wykonać zadanie. Ale nie zawsze jest to możliwe bo są sytuacje kiedy problem, który rozwiązujemy jest za duży. Wtedy staramy się optymalnie wykorzystać dostępne książki tak żeby nie przerzucać ich co kilka chwil. Raczej staramy się wyciągnąć z jednej pozycji tyle ile się da i dopiero wtedy zastanowić się czy musimy sięgnąć po kolejną.
Leave a Comment