Jak działa komputer? Jak działają poszczególne elementy komputera?

Jak działa pamięć? karta graficzna? procesor? Czym jest wątek? rdzeń? Jak to wszystko jest ze sobą powiązane?

Co omówimy?

Czym jest RAM (Random-Access-Memory)? 
  • przechowuje aplikacje, które są obecnie w użyciu.
Czym jest procesor, CPU (Central-Processing-Unit)?
  • pobiera aplikacje, jakie znajdują się na RAM’ie i wykonuje je.
Czym jest karta graficzna? Czym jest GPU (Graphics-Processing-Unit)?
  • karta graficzna generuje obraz do monitora. Zawiera GPU, które w działaniu jest podobne do CPU.
Kojarzysz temat? Przejdź od razu do §2. Krok dalej od podstaw »

1. Wstęp – Podstawy

Nasze urządzenia posiadają niezliczoną ilość zautomatyzowanych zadań. W codziennym użytkowaniu nie zastanawiamy się nawet jak działają. Jedyny czas, kiedy przychodzi chwila refleksji to moment, gdy zastępujemy stary sprzęt nowym. Wiedza na temat działania poszczególnych komponentów komputera nie przyda się w praktyce większości z nas, ale nie oznacza to, że nie warto zgłębić tych tematów. Warto choćby intuicyjnie widzieć jak to ze sobą koegzystuje, gdyż ułatwi nam to rozwiązywanie problemów w przyszłości, także pozwoli nauczyć się czegoś ciekawego o otaczającym nas wirtualnym świecie.

kod doskonały - książka

Świetna książka o programowaniu, ale również o zagadnieniach jakie omawiamy. Kod Doskonały. Naprawdę polecam każdemu kto jest zainteresowany Computer Science!

Co robi RAM? Czy więcej znaczy lepiej? 

Tak jak było wspomniane powyżej RAM przechowuje wszystko co aktualnie używasz. Prawdopodobnie słyszałeś stwierdzenie, że im więcej RAM’u tym lepiej. Ale dlaczego? Jak się domyślasz pozwoli ci to uruchomić więcej aplikacji jednocześnie. Grając w Wiedźmina 3 możesz sobie zrobić przerwę na najnowszy odcinek Gry o tron nie obawiając się, że komputer odmówi współpracy. Tylko ile tak naprawdę potrzebujemy? Jeśli nie otwieramy kilkunastu aplikacji jednocześnie i nie mamy 1000 zakładek w chromie 8GB prawdopodobnie nam wystarczy. Dla spokoju ducha można zainwestować w 16GB pamięci i nie przejmować się większą ilością otwartych aplikacji. Jeśli jednak jesteśmy zwolennikami dosłownie masowej ilości otworzonych aplikacji można się skusić na 32GB pamięci RAM. Jeśli chodzi o większe ilości prawdopodobnie nie ma to sensu w obecnym momencie. Więcej w poniższym filmiku.

Mamy dwie kategorie pamięci:

  • trzymającą dane gdy nie ma napięcia (dysk SSD)
  • tracącą dane gdy nie ma napięcia (pamięć RAM)

Czyli przed samym uruchomieniem naszego laptopa pamięć RAM jest pusta, zaś na dysku są zapisane wszystkie nasze dane (aplikacje, system).

Co gdy zabraknie RAM’u na twoją apkę?

Aby zrobić miejsce na kolejną aplikację, dla której nie ma miejsca twoje urządzenie musi przenieść proces znajdujący się w RAM’ie z powrotem na dysk. Może to powodować wiele problemów i często aplikacja się zawiesza. Sam sposób przerzucania z RAM’u na dysk nazywa się stronicowaniem. W dawnych czasach mogliśmy być świadkami słynnego blue screen’a. Powodów, przez które się pojawiał mogło być naprawdę wiele, ale było to chwilami powiązane z pamięcią RAM i tym jak system nią zarządzał, więcej o tym w dalszej części wpisu : )

blue screen - RAM memory dump

Co robi procesor?

Procesor jest często określany mianem mózgu komputera. Zajmuje się wykonywaniem zadań znajdujących się w RAM’ie. Nie ma on zbyt wyrafinowanych funkcji. Posiada zestaw operacji matematycznych, które implementuje co pozwala mu wykonywać proste obliczenia z bardzo dużą prędkością sięgającą miliardów operacji na sekundę. Czyli w ciągu tylko jednej sekundy potrafi wykonać działanie 2+2, aż miliard razy! Jest jeden wyjątek od działania procesora. Podczas uruchamiania urządzenia procesor bierze z dysku system operacyjny i wrzuca go do RAM’u.

>>TIP: Aplikacje dodawane do pamięci są nazywane procesami.

Co jest w środku?

Wiemy już, że procesor przetwarza wszystko co znajduje się w RAM’ie. Jeśli patrzymy na parametry podczas kupowania sprzętu często porównujemy ile ma rdzeni, wątków, jakie jest taktowanie, czy to ile pamięci podręcznej posiada. Wiadomo im więcej rdzeni i większa cyferka przed GHz’ami tym lepiej. Cóż nie do końca jest to istotne. Ale dlaczego? Aby odpowiedzieć na to pytanie musimy zrozumieć kilka prostych pojęć.

Czym jest ISA (Instruction Set Architecture)?

Jest to lista instrukcji zrozumiałych dla procesora. Zawiera wszystkie umiejętności, które może posiadać procesor. Często słyszymy, że mamy system 32-bitowy lub 64-bitowy. To właśnie jest wynik tego jaki ISA implementuje procesor. Obecnie większość urządzeń działa na standardzie x64. Z kolei większość smartfonów działa na architekturze ARM. Z roku na rok przybywa lista nowych procesorów, ale nie różnią się one pod względem architektury, która obecnie pozostaje taka sama (64-bitowa).

CPU (64-bit vs 32-bit) vs Aplikacja (64-bit vs 32-bit)?

Procesor jak i nasza aplikacja może mieć różną architekturę. Jest to dość intuicyjne, ale warto dodać, że na procesorze 32-bitowym nie uruchomimy aplikacji napisanej w architekturze 64-bitowej. Z drugiej strony procesor 64-bitowy uruchomi aplikację 32-bitową. W czym w takim razie jest lepsza architektura 64-bitowa? Jest to po prostu miara, dzięki której procesor może przetrzymywać dane. Większa liczba bitów daje większe możliwości pod względem robienia obliczeń. Czyli daje nam to możliwość dodania większych liczb ze sobą.

>>TIP: System: 32-bit – może korzystać z maksymalnie 4GB RAM’u

>>TIP: System: 64-bit – może korzystać z maksymalnie 16 miliardów GB RAM’u (teoretycznie)

Czym jest GHz?

  • Hz (Herce) – jest to sposób w jaki definiujemy prędkość procesora. Jest to częstotliwość z jaką wykonuje się cykl (operacja) na sekundę. Czyli jeden cykl to wykonanie działania 2+2.
  • G (Giga) – jest to przedrostek miary 10
  • 1GHz – jest to miliard cykli na sekundę. Jak wcześniej wspomnieliśmy jest to miara ilości rzeczy jakie wykona procesor w ciągu sekundy.

Software vs Hardware?

Zacznijmy od programu komputerowego. Jest to po prostu zlepek zrozumiałych instrukcji dla procesora. Software może być napisany na wiele sposobów – wszystko zależy od pomysłu i narzędzi użytych przez piszącego. Z drugiej strony jest hardware, czyli chociażby znany nam już procesor. Nie może ‘myśleć’ za ciebie i nie może podejmować decyzji. Jedyną jego funkcją jest ślepe wykonywanie wszystkiego co dostanie. Procesor nie może dostać uaktualnienia. Można jedynie wymienić go na nowy. Z kolei oprogramowanie często zmienia się na nowe. Jeśli hardware nie działa jak powinien… cóż jedyne co możesz zrobić to wyrzucić procesor za okno. Z kolei jeśli software nie działa można po prostu pobrać ‘update’. Jeśli to wiedziałeś pewnie zastanawiasz się po co cały ten wywód? A no po to, żeby zrozumieć bardziej zaawansowane rzeczy. Chciałem upewnić się, że znane nam są podstawowe pojęcia.

 

2. Krok dalej od podstaw

Aby ułatwić zrozumienie gdzieniegdzie użyję angielskich nazw (Thread – wątek & Core – rdzeń)

Software-Thread vs Hardware-Thread

  • Hardware-Thread – są to wątki, które są zarządzane bezpośrednio przez procesor . Pozwala to na lepsze wykorzystanie zasobów procesora. Hardware-Thread może obsługiwać wiele Software-Threads. System operacyjny zarządza wątkami dzięki temu mamy zjawisko, że wszystko działa jednocześnie. Każdemu wątkowi jest przydzielane kilka milisekund na wykonanie swojego działania po czym wykonanie przeskakuje na kolejny bez względu na to, czy wykonał całkowicie dany wątek czy też nie. Inna fajna nazwa na Hardware-Thread to SMT (Simultaneous multithreading). Czyli SMT jest to sposób w jaki procesor zarządza wykonywaniem wątków w celu lepszego wykorzystania dostępnych zasobów. Jest to w końcu powiązane z multithreading gdzie dzięki temu procesor wykonuje wiele procesów i wątków jednocześnie.
  • Software-Thread – są to wątki zarządzane bezpośrednio przez system. Zgodnie z powyższymi stwierdzeniami wątków tych może być dużo. Jest to sposób w jaki programista dzieli swoją aplikację na kawałki, żeby była wykonana bardziej wydajnie.

    Żywy przykład poniżej:

    software threads example - activity monitor mac

Aplikacje wielowątkowe

Aplikacje są napisane na różne sposoby. Przykładowy program może używać tylko jednego wątku i wykonywać jedną rzecz na raz z kolei inny może robić równocześnie kilka rzeczy na raz, czyli używać kilka wątków na raz.  Aplikacje te są nazwane wielowątkowymi. Jest to przydatne chociażby przy tworzeniu skalowalnych aplikacji gdzie w momencie wzrostu obciążenie można dodać kolejne wątki.

Wątki wewnątrz wirtualnej maszyny Javy

JVM (Java-Virtual-Machine) – zarządzanie wątkami jest realizowane wewnątrz wirtualnej maszyny. Jest to swego rodzaju system, który mapuje swoje wątki do wątków systemu operacyjnego, który potem przenosi to do procesora jeśli są wolne zasoby. Więcej o JVM w innym wpisie : )

Czym jest Karta Graficzna, a czym jest GPU?

W końcu to co dla każdego gracza najważniejsze GPU, a raczej karta graficzna. Jakiś czas temu bardzo dużo czasu poświęcałem na gry i bez wątpienie posiadanie dobrej karty graficznej determinowało czy zagram sobie w wiedźmina 3 czy też nie. W tym temacie przyda się to co omówiliśmy wcześniej na temat CPU. Zobaczmy czym różni się CPU od GPU:

GPU, czyli procesor graficzny jest praktycznie tym samym co zwykły procesor. Implementuje tak samo jak procesor Instruction Set Architecture, czyli zestaw umiejętności. W odróżnieniu od procesora implementuje on tylko te rzeczy, które są mocno powiązane z grafiką. W momencie gdy procesor oblicza proste działanie matematyczne jak 2+2, GPU dodaje, mnoży kilkadziesiąt liczb na raz i wszystko to dzieje się równolegle, czyli w tym samym czasie. Podczas gdy procesor robi proste zadania, GPU zajmuje się przetwarzaniem gigantycznych ilości danych i robieniem złożonych działań na tym co dostaje. Poniżej kolejne porównanie:

CPU vs GPU (Cores)

GPU to nie to samo co karta graficzna. GPU to jest specjalny rodzaj procesora podczas gdy karta graficzna jest to układ scalony z dodatkami, a jednym z tych dodatków jest GPU. Zatem podzielmy karty graficzne na dwie kategorie:

  • zintegrowana – jest wbudowana w płytę główną. Plusem zintegrowanej karty jest to, że pobiera dużo mniej energii oraz jest zauważalnie tańsza. Jeśli pamiętamy wcześniejszy opis rdzeni to wiemy, że teoretycznie CPU może mieć dostęp do jednego zasobu w danym czasie. To samo ograniczenie tyczy się oczywiście zintegrowanej karty przez co jest ona zauważalnie mniej wydajna niż dedykowana.
  • dedykowana – różnica między powyższą jest taka, że ta karta posiada swoje własne zasoby, czyli nie korzysta z zasobów urządzenia. Posiada swój własny radiator, pamięć RAM, procesor graficzny, pamięć podręczną,  a także szereg innych układów scalonych, które są przeznaczone do przetwarzania obrazu. Niewiele różni ją od całego komputera. Jest to praktycznie komputer w komputerze : )

Zapraszam również na inne wpisy:

Oraz na grupę facebookową.

 

Co jeszcze warto wiedzieć? #Ciekawostki

Typy przechowywania pamięci:

  • Primary Storage –  jest to po chociażby pamięć RAM. Jest to jedyna rzecz dostępna bezpośrednio dla CPU.
  • Secondary Storage – są to pamięci trwałe, czyli takie, które trzymają dane mimo braku zasilania. Procesor nie ma bezpośredniego dostępu do tych danych.

Czy więcej rdzeni znaczy lepiej?

To zależy. Tylko jeden rdzeń w danym czasie może mieć dostęp do jednego zasobu (np. RAM). Hipotetycznie jeśli 4-rdzenie chciałyby w tym samym czasie dotrzeć do tego samego miejsca, byłoby to fizycznie niewykonalne. Także więcej rdzeni mogłoby być nieskuteczne. Inna rzecz, że nie potrzebujemy aż takiej mocy obliczeniowej do codziennego używania komputera.

Czy więcej GHz znaczy lepiej? Czy warto mieć nowszy procesor? 

Niekoniecznie. Nie wszystkie procesory są budowane na równi. Różnią się od siebie i jeden z nich może wykonać zadanie w 100 cykli inny zrobi to samo w 10 cykli. Także większa prędkość wykonywania zadań nie przekłada się na szybsze wykonywanie tych zadań. Można dać przykład samochodu gdzie większe obroty silnika niekoniecznie przekładają się na lepszą wydajność pojazdu. Dodatkową rzeczą jest, że podczas codziennego korzystania z urządzeń nie wykorzystujemy całego potencjału jaki w nich drzemie. Nie warto kupować choćby co roku coraz to nowszego i lepszego procesora. Jest to element, który jest wydajny przez dość długi okres czasu.

  • Hyper-Threading – jest to implementacja SMT przez intela.

Po przeczytaniu tego wpisu będzie ci łatwiej zrozumieć co jest na wikipedi : )

Materiały uzupełniające: 

Po aktualności zapraszam na facebooka

6 Udostępnień