Béton brut

Niepamięć

2011-08-07



Punkt widzenia / punkt siedzenia

Perspektywa to ciekawa sprawa. Czasem zdroworozsądkowa obserwacja otaczającego nas świata daje zupełnie błędny obraz rzeczywistości.

Kiedy ludzie – w czasach przed Galileuszem i Kopernikiem – patrzyli na niebo i podziwiali pędzące przez sklepienie słońce, wiedzieli, że to ono się porusza względem ziemi. Ruch było widać gołym okiem, ziemia się nie poruszała. W tej obserwacji nie było nic złego; zły był punkt widzenia z którego przyszło nam doświadczać tej astronomicznej gonitwy.

Zostawmy jednak kosmos i przenieśmy się przed nasze biurko. Hurra, będzie znów o komputerach! Dokładniej: o pamięci.

Memento memory

„Memory is RAM.” – Moss, IT Crowd

W czasach komputerów ośmio- i szesnastobitowych ilość pamięci była zapisywana złotymi literami w reklamach. Co więcej – rozmiar dostępnej pamięci był często częścią nazwy komputera, że wspomnę tylko Commodore 64 (65536 bajtów) czy Atari 1024ST (1024 kiB).

W dalszych przykładach komputer-archeologii będę się posługiwał C64 – głównie dlatego, że mam jakieś tam kompetencje by mówić o jego budowie, a na dodatek jego prymitywny BASIC (wiele mogę odpuścić Microsoftowi, ale nie to) zmuszał każdego domorosłego programistę do zapoznania się z arkanami czarnej magii związanymi z zapisywaniem danych do pamięci celem wyduszenia z pudła choćby jednego pisku czy koloru.

Nie wchodząc w szczegóły możemy wyobrazić sobie pamięć Commodore jako serię 65536 pudełek, w które możemy wsadzić wartości od 0 do 255. Część tej pamięci była przeznaczona dla Ciebie, twórcy: mogłeś tam składać swoje dane, programy czy co tam akurat chciałeś. Część pamięci spełniała jednak specjalne zadanie i zapisywanie do niej informacji mogło modyfikować stan komputera oraz specjalizowanych układów scalonych. Najłatwiej będzie mi zademonstrować (tylko to pamiętam) jak działało bezpośrednie zapisywanie do pamięci odpowiedzialnej za tryb tekstowy.

Pamięć ekranu mieściła się pod adresem 1024 i zajmowała jeden kilobajt. Umieszczenie w niej wartości powodowało wyświetlenie znaku. Gdybym chciał napisać EMIL w górnym rogu ekranu i był samobójcą, musiałbym wydać cztery polecenia POKE (zapis wartości w komórce pamięci).

Koszmarne? Oczywiście. Demonstruje jednak sposób, w jaki dawaliśmy sobie radę z pamięcią: pamięć była lub jej nie było. Nie było współczesnych problemów wielozadaniowości – jeżeli pamięć się skończyła byłeś najczęściej w kanale analnym. System nie zajmował się „zarządzaniem pamięcią” tak jak ma to miejsce teraz.

Przewińmy do komputerów 16-bitowych, przy których można już mówić o „prawdziwych systemach operacyjnych”. Znaczyło to tyle, że chodzenie po pamięci i wkładanie tam swoich brudnych bajtów uznawano za faux pas – ale jak ze wszystkimi przewinieniami w etykiecie, tak i tu nie powstrzymało to nikogo przed pchaniem paluchów gdzie nie wypada.

Załóżmy jednak, że wszyscy byliśmy mądrzy i robiliśmy dobrze.

Sytuacja z przykładu o C64, gdzie pamięć pomiędzy X a Y była Twoja, nie mogła mieć już miejsca. Komputery miały różne konfiguracje, aplikacje chodzące w tle mogły już zająć kawałek pamięci. Gdybyś po prostu zapisywał dane na łapu-capu, mógłbyś trafić na jakąś witalną część i powiesić system. 1 Przyszedł czas żebrania: „Drogi komputerze kochany, potrzebuję z dwieście kilobajtów w jednym ciągu; chciałbym tam zapisywać informacje. Bardzo ładnie proszę!” System operacyjny rozważał Twoją prośbę i odpowiadał false, co oznaczało konieczność poinformowania użytkownika, że pamięci nie ma, lub dawał Ci wskaźnik do zarezerwowanej dla Ciebie pamięci, w której mogłeś sobie bezpiecznie buszować.

System teoretycznie wiedział, co się dzieje z pamięcią. Teoretycznie, gdyż nagminną sytuacją było obchodzenie żmudnego procesu przydzielania pamięci poprzez przekazywanie danych o zajętej pamięci między aplikacjami – bez informowania o tym systemu. Gdy program wyżebrał już pamięć, nie informował najczęściej systemu co z nią robi. Jeżeli inna część programu (a czasem inny program) miały mieć dostęp do tych samych danych, program po prostu podawał dalej adres pamięci, którą przydzielił mu system operacyjny.

Zilustruję to kiepską analogią: Wynajmujesz pokój hotelowy. Dostajesz klucze. Aby zaoszczędzić przekazujesz je innym znajomym i tak pakujecie się w kilka osób na krzywy ryj. Możesz spać spokojnie dopóki któryś z Twoich podchmielonych kompanów nie podpali firanek. Nie będziesz wiedział kto je podpalił, nie będziesz mógł się wyspać, a na dodatek wszystko jest na Twoje nazwisko.

Przekazywanie adresów było niezmiernie efektywne (stąd wydajność takich systemów jak AmigaOS) i tylko trochę bardziej niebezpieczne niż żonglowanie piłami spalinowymi.

Po raz pierwszy pamięć zaczyna być zasobem, z którym należy się liczyć. Czym więcej pamięci zostawało Ci po włączeniu komputera tym większy był Twój e-penis. 2 Czasem trzeba było wybierać: podkład z „Czarodziejek z Księżyca” 3 czy dodatkowy usprawniacz? Obserwowanie „belki” na której znajdował się stan pamięci stało się czymś naturalnym. Czym więcej pamięci było zajętej, tym więcej programów zostało uruchomionych. Proste.

Część w której Ziemia biegnie dookoła Słońca

Teraz dochodzę do momentu, który zrodził ten tekst: do czasów współczesnych.

Piotr zaktualizował system Wielki Śnieżny Kot na komputery z Cupertino. Zgodnie z przewidywaniami szybko zaczął marudzić w socjalsieci jak to Jobs znów go zrobił w męski narząd. Ponieważ nie znam się na współczesnych komputerach (jestem biednym posiadaczem PIII, który chodzi pod kontrolą darmowego systemu dla brudnych hipisów z łojotokiem) próbowałem podtrzymać go na duchu.

Próbowałem póki nie wyjawił mi powodu narzekania – jego system zajmuje bardzo dużo pamięci.

Powiedzmy sobie od razu: współczesne systemy operacyjne zajmują och-tak-wiele miejsca. Workbench 3.1 + dodatki + cukierki spokojnie mieścił się w 20 MiB. Teraz? DVD. Kiedyś system odpalał się na 128 kiB pamięci; teraz dranie chcą gigabajta żeby chociaż pełzał. Do tego kiedyś okna otwierały się szybciej, niż teraz.

(Trawa zieleńsza, kobiety piękniejsze i człowiek nie musiał się golić tak często.)

Mógłbym tu przytoczyć wiele argumentów tłumaczących, czemu tak się dzieje: że rozdzielczość niebotyczna, że protokoły sieciowe, że siedem tysięcy drukarek, że usługi, że komfort. To jednak rzecz na inną notkę.

„Dlaczego tyle pamięci zajęte‽”

Kiepska analogia numer dwa: Po latach ciężkiej pracy dorobiłeś się basenu. Basen ma cztery gigabajty 4, a Ty nalewasz wody tylko do kostek, żeby się górne partie nie zniszczyły.

W 2011 pamięć nieużyta jest pamięcią zmarnowaną. W przeciwieństwie do lat dziewięćdziesiątych większość komputerów ma dość pamięci, aby wczytać system operacyjny i kilka programów bez obciążania nawet połowy dostępnych zasobów. Co z resztą?

Resztą zajmuje się system operacyjny. Czasy, gdy byłeś panem swojej maszyny, skończyły się dawno temu. Przesiadłeś się z roweru do promu kosmicznego i płaczesz, że nie ma gdzie dobrze przykręcić dzwonka. Wolna pamięć jest używana jako pamięć podręczna 5, co znacząco przyspiesza działanie komputera.

Najgorsze, co można zrobić – i co zrobił Piotr – to zaufać wszelkiej maści ekspertom, którzy piszą w Internecie o pamięci! 6 Piotr zainstalował program, który „odzyskuje” pamięć od systemu operacyjnego.

Analogia numer trzy, kiepska jak poprzednie: Twoja willa ma własnego kucharza, który przygotowuje Ci obiad. Masz pięć garnków. Kucharz używa pięciu, dzięki czemu praca idzie mu wartko. Zatrudniasz więc gościa, który stoi nad kucharzem i co chwila zabiera mu dwa z nich, rzucając przez zęby „pańskie!”. Tak, masz przez większość czasu dwa puste garnki, ale kucharz nie robi dobrej roboty, a Ty płacisz jakiemuś idiocie, żeby go terroryzował.

Pomiędzy Commodore 64 i Twoim latopem z aluminium jest ogromna różnica. Pomysł, że mógłbyś ręcznie zarządzać wszystkimi aspektami systemu (w tym pamięcią) jest bzdurny. Obecnie Twój system zajmuje się nie tylko alokacją pamięci, ale także jej ochroną (program, który nie prosił o konkretny kawałek pamięci nie może do niego pisać), odpowiada za jej stronicowanie, losuje adresy tak, aby źli królewicze z Afryki nie zgadli, gdzie w pamięci uruchomi się następny program, śledzi zasoby tak, aby pamięć zajętą przez martwe programy dało się odzyskać. Tak, masz „mniej pamięci” niż kiedyś, ale nie musisz pływać w wodzie po kostki.

  1. Guru Meditation, BSoD
  2. e-penis jest aseksualny
  3. Team Amy Mizuno
  4. mówiłem, że kiepska?
  5. dlatego powinieneś „bezpiecznie usuwać” urządzenia USB przed wyjęciem: część danych może być nadal w pamięci, a nie na nośniku
  6. Busted