Jak działa komputer

Komputery stacjonarne i laptopy to urządzenia o ogromnym stopniu złożoności. Jednak aby zrozumieć sposób działania podstawowych elementów i ich współpracy, wcale nie trzeba ukończyć studiów o profilu informatycznym. Objaśniamy w zwięzły sposób najważniejsze aspekty działania komputera.


Na temat funkcjonowania komputerów można byłoby napisać i przeczytać niejedną książkę. Na rynku wydawniczym są dostępne pozycje dla fachowców z różnych dziedzin i dla osób o różnych upodobaniach – dla historyków, informatyków, programistów czy choćby elektrotechników. Niektóre objaśniają nawet podstawy technologii półprzewodnikowych. Jednak w poniższym artykule nie znajdziesz takich treści, nie musisz się więc tego obawiać, ani nie nastawiaj się na dawkę tak specjalistycznej wiedzy. Zamiast tego przedstawiamy sposób działania i wzajemnej współpracy takich podzespołów jak procesor, pamięć RAM, BIOS i płyta główna. Każdy użytkownik komputera klasy PC, który ma wysokie aspiracje, prędzej czy później zostaje skonfrontowany w praktyce z tymi elementami.

Jednostka główna, pamięć RAM i urządzenia peryferyjne

Ściśle rzecz biorąc, sam komputer składa się tylko z dwóch podstawowych podzespołów sprzętowych – procesora (CPU, Central Processing Unit, a więc głównej jednostki przetwarzania) i pamięci RAM (Random Access Memory, pamięć o dostępie swobodnym), zwanej także pamięcią roboczą i operacyjną.

Procesor. Wszystkie dane, które znajdują się w komputerze, muszą dostać się do pamięci za pośrednictwem procesora. Zgromadzone w tym miejscu mogą być odczytywane, przetwarzane i modyfikowane przez jednostkę centralną. Przedstawiony opis jest to ogromne uproszczenie wszystkich procesów zachodzących wewnątrz komputera, bo nie uwzględnia bardzo wielu elementów takich jak oddzielny procesor graficzny (GPU, Graphics Processing Unit), który przygotowuje treści wyświetlane na ekranie monitora, czy technologia DMA (Direct Memory Access), która umożliwia bezpośredni dostęp do pamięci RAM bez pośrednictwa procesora. Aby jednostka centralna mogła wykonywać przydzielone jej zadania, muszą być przekazane jej w postaci precyzyjnych rozkazów. Chodzi o oprogramowanie w szerszym tego słowa znaczeniu. Zestaw rozkazów obsługiwanych przez procesor, a więc kod maszynowy, jest dość skromny mimo licznych rozszerzeń takich jak 3DNow!, SSE (Streaming SIMD Extensions), SSE2 – SSE5, MMX (MultiMedia eXtensions) czy AVX (Advanced Vector Extensions). Z łącznego zbioru sięgającego od dwustu do trzystu dostępnych rozkazów w powszechnym użyciu jest zaledwie ok. dwudziestu. Instrukcje, o których mowa, wykonują takie operacje jak np. przemieszczanie zawartości komórek pamięci z jednego adresu do innego, działania arytmetyczne (dodawanie, odejmowanie, mnożenie, dzielenie liczb), porównywanie liczb bądź zapisywanie na dysku twardym zmiennej na skutek żądania przerwania.

Gniazdo z ryglem – to tu wkłada się jednostkę centralną, która – zważając na jej doniosłą nazwę – ma dość niepozorny wygląd.

Gniazdo z ryglem – to tu wkłada się jednostkę centralną, która – zważając na jej doniosłą nazwę – ma dość niepozorny wygląd.

Język asemblera, który jest bardzo zbliżony do kodu maszynowego, okazuje się równie nieprzystępny dla programisty, a zaimplementowanie najdrobniejszych operacji wymaga setek wierszy kodu. Język ten znajduje zastosowanie praktycznie tylko tam gdzie jest wymagana maksymalna wydajność i efektywność. Jest używany m.in. przez producentów sprzętu w celu uniknięcia jakiegokolwiek zbędnego obciążenia w tworzeniu zoptymalizowanego kodu do wyspecjalizowanych procesorów. Każdy typ procesora wymaga odpowiedniej, dostosowanej do niego postaci języka asemblera. Dlatego powstało wiele różnych, choć podobnych do siebie odmian. Ze względu na to, że w językach asemblerowych poszczególne polecenia odpowiadają pojedynczym rozkazom procesora, zalicza się je do tzw. języków niskiego poziomu.

Do tworzenia aplikacji komputerowych używa się prawie bez wyjątku znacznie bardziej zrozumiałe dla człowieka języki takie jak C bądź Java znane pod pojęciem języków wysokiego poziomu. Aby uzyskać kod maszynowy z kodu źródłowego napisanego w jednym z tych języków, korzysta się z tzw. kompilatora. Jest to program, który automatycznie tłumaczy kod z jednego języka programowania na inny (w tym wypadku z języka wysokiego poziomu na język asemblera). Wprawdzie takie kompilatory nie są w stanie uzyskać takiej jakości kodu wynikowego, jaką ma kod pisany od podstaw, lecz mimo to osiągają bardzo wysoki stopień efektywności. Jest to możliwe m.in. dzięki mechanizmom optymalizowania kodu wynikowego. Nawet elementarny system komputerów klasy PC, BIOS (Basic Input Output System) od czasu przestawienia na EFI (Extensible Firmware Interface) nie musi już być pisany w języku asemblerowym.

Pamięć operacyjna. Wielkość obszaru adresowego (mówiąc w uproszczeniu: ilość) pamięci RAM, którą procesor może wykorzystać bezpośrednio, a więc bez zastosowania specjalnych rozszerzeń, zależy od architektury procesora. 32-bitowe jednostki centralne teoretycznie są w stanie zaadresować cztero-gigabajtową przestrzeń adresową pamięci RAM. 2 bajty do potęgi 32 dają w wyniku 4 294 967 296 bajtów (a więc 4 GiB). To cztero-gigabajtowe ograniczenie stało się z biegiem czasu coraz poważniejszą przeszkodą, bo większość płyt głównych stosowanych w komputerach stacjonarnych i laptopach nie tylko jest w stanie obsłużyć pamięć o większej pojemności, lecz wręcz są fabrycznie wyposażane w moduły RAM o pojemności rzędu 6 lub 8 GB. Z drugiej strony już od ponad dziesięciu lat są dostępne do nabycia 64-bitowe procesory. Teoretycznie mogą zaadresować obszar adresowy 2 bajtów do potęgi 64, a więc 16 eksabajtów (1 eksabajt to ponad miliard gigabajtów). Niemniej jednak w obecnych modelach jednostek CPU ogranicza się liczbę linii adresowych do 35 lub 36, co skutkuje zmniejszeniem adresowanego obszaru do 32 GB (przy 35 liniach) i 64 GB (przy 36 liniach). Liczba linii w obrębie danej szyny wyznacza tzw. szerokość szyny. Szyna adresowa to połączenie pomiędzy procesorem i pamięcią RAM. Za jej pomocą jednostka centralna powiadamia pamięć, w której komórce pamięci zamierza wykonać operację zapisu lub odczytu danych. Te nie są jednak przesyłane poprzez szyny adresowe, lecz oddzielne szyny przeznaczone specjalnie do tego celu. Noszą nazwę szyn danych. Kontrolę nad kierunkiem transmisji danych pełni tzw. szyna sterująca.

Jednak zastosowanie architektury 64-bitowej w procesorze i na płycie głównej to jeszcze nie wszystko. Aby uzyskać możliwość wykorzystywania pamięci RAM o większej pojemności niż 4 GB, trzeba zastosować także oprogramowanie obsługujące wspomnianą technologię. Adresowanie większej przestrzeni adresowej wymaga użycia 64-bitowej wersji systemu operacyjnego (Windows lub Linux). Obecnie nie stanowi to jednak większego problemu, bo właśnie te odmiany systemów stają się coraz powszechniej używane.

Giga czy gibi?

Podczas gdy Międzynarodowy Układ Jednostek Miar zwany w skrócie Układem SI przewiduje przedrostki w układzie dziesiętnym, w informatyce trzeba zastosować przedrostki w systemie dwójkowym, bo ma za podstawę binarny system liczbowy (podyktowany faktem, iż jeden bit może przybierać tylko dwie wartości – 0 lub 1). Choć powszechnie nadal stosuje się nazwy układu SI w odniesieniu do wartości odpowiadających potęgom dwójki (np. 1 KB = 1024 B, choć poprawnie jest 1 KB = 1000 B), ściśle rzecz biorąc, należałoby używać zaproponowanej przez organizację IEC u schyłku zeszłego wieku normy, w której nazwy przedrostków binarnych tworzy się przez zastąpienie drugiej sylaby sylabą bi (np. kibibajt zamiast kilobajt, mebibajt zamiast megabajt, gibibajt zamiast gigabajt i tebibajt zamiast terabajt), symbole zaś przez wstawienie małej litery i (np. KiB zamiast KB, a dalej MiB, GiB, TiB itd.). Aby nie dezorientować czytelników, zdecydowaliśmy się zastosować w tym artykule nie do końca poprawny, aczkolwiek powszechnie używany zapis, o którym mowa powyżej.