Temat Jak komputer przetwarza dane – od bitów po aplikacje obejmuje całościowy proces przemiany sygnałów elektrycznych w funkcjonalne programy dostępne dla użytkownika.

Reprezentacja danych na poziomie bitów i bajtów

Zrozumienie bitów i kodowania

Pojedynczy bit to najmniejsza jednostka informacji w systemie cyfrowym. Jego wartość może być zerem lub jedynką, co pozwala na implementację logiki dwójkowej. Grupy ośmiu bitów tworzą bajt, który stanowi podstawę kodowania znaków i liczb. Współczesne systemy wykorzystują standardy takie jak ASCII i Unicode, aby każdy symbol tekstowy miał unikalną reprezentację. Liczby całkowite i zmiennoprzecinkowe zapisuje się w formacie binarnym z uwzględnieniem znaku oraz precyzji, co wpływa na zakres i dokładność obliczeń.

Architektura logiczna układów cyfrowych

  • Bramek logicznych (AND, OR, NOT) używa się do budowy bardziej złożonych bloków, jak ALU czy multipleksery.
  • Układy kombinacyjne bez pamięci wykonują operacje na bieżących sygnałach, podczas gdy układy sekwencyjne używają przerzutników do zapamiętywania stanów.
  • Projektowanie układów wymaga poszanowania późnień propagacyjnych i synchronizacji sygnałów z użyciem zegara.

Wykonywanie instrukcji – rola procesora

Cykl maszynowy

Procesor przetwarza instrukcje w powtarzalnym schemacie zwanym cyklem maszynowym. Składa się on z kolejnych faz:

  • Pobranie instrukcji (fetch) z pamięci operacyjnej.
  • Odszyfrowanie instrukcji (decode) przez jednostkę sterującą.
  • Wykonanie instrukcji (execute) przez ALU lub inne jednostki funkcyjne.
  • Dostęp do pamięci (memory access) w razie potrzeby odczytu lub zapisu danych.
  • Zapisywanie wyniku (write back) do rejestrów lub pamięci.

Każda faza może wymagać różnych zasobów, co prowadzi do projektowania potoków (pipeline) i mechanizmów przewidywania skoków.

Rejestry i jednostki funkcyjne

Rejestry to ultraszybkie obszary pamięci wewnątrz procesora, przechowujące operandy podczas obliczeń. Zazwyczaj wyróżnia się:

  • Rejestry ogólnego przeznaczenia – do operacji arytmetycznych i logicznych.
  • Rejestry specjalne – licznik rozkazów, rejestr stanu czy wskaźnik stosu.
  • Jednostki arytmetyczno-logiczne (ALU) realizujące operacje bitowe i liczbowe.
  • Jednostki zmiennoprzecinkowe (FPU) do obliczeń wymagających większej precyzji.

Koncepcja superskalarności pozwala na równoczesne wykonywanie wielu instrukcji, jeśli dostępne są wolne jednostki funkcyjne.

Pamięć i hierarchia pamięci

Pamięć podręczna i RAM

Aby zminimalizować opóźnienia przy odczycie i zapisie danych, stosuje się hierarchię pamięci:

  • Cache L1 – najmniejsza pojemność, najniższe czasy dostępu, najbliżej rdzenia procesora.
  • Cache L2 i L3 – większe pojemności, dłuższe opóźnienia, nadal szybkości rzędu nanosekund.
  • RAM – pamięć dynamiczna (DRAM) o większej pojemności, lecz wyższym czasie dostępu.

Optymalizacja oprogramowania polega na zwiększeniu lokalności odwołań, aby częściej korzystać z cache niż bezpośrednio z RAM.

Magazyn masowy

Do trwałego przechowywania danych służą:

  • HDD – talerzowe dyski magnetyczne, niższe ceny za gigabajt, ale wyższe opóźnienia i niższa przepustowość.
  • SSD – pamięci flash NAND o znacznie lepszych parametrach losowego dostępu.
  • Nośniki NVMe – wykorzystujące magistralę PCIe, oferują bardzo wysokie transfery sekwencyjne.
  • Chmura obliczeniowa – zdalne serwery udostępniające zasoby elastycznie skalowane.

Różnorodność warstw magazynowania wymusza strategię buforowania i przenoszenia danych między nimi.

Od kodu źródłowego po aplikacje użytkowe

Rola systemu operacyjnego

Kernel systemu operacyjnego to most między sprzętem a oprogramowaniem. Odpowiada za:

  • Zarządzanie procesami – przydział czasu procesora i obsługa wielozadaniowości.
  • Kontrolę dostępu do pamięci – przydzielanie i ochrona przestrzeni adresowej.
  • Sterowanie wejściem/wyjściem – komunikację z urządzeniami peryferyjnymi.
  • Zarządzanie plikami – struktury katalogów i system plików.

Dzięki abstrakcji sprzętu procesy użytkownika nie muszą znać szczegółów fizycznych interfejsów, co przyspiesza rozwój oprogramowania.

Warstwy kompilacji i wykonania

Proces tworzenia aplikacji przebiega przez kilka etapów:

  • Kod źródłowy – zapis w języku wysokiego poziomu.
  • Kompilator – tłumaczy kod na język pośredni lub bezpośrednio na kod maszynowy.
  • Linkowanie – łączenie modułów i bibliotek w jeden plik wykonywalny.
  • Ładowanie do pamięci – loader przenosi program do przestrzeni użytkownika.
  • Wykonanie – CPU wykonuje kolejne instrukcje zgodnie z harmonogramem jądra.

W przypadku języków interpretowanych (Python, JavaScript) kod jest analizowany i przetwarzany podczas działania, co wpływa na wydajność i elastyczność.

Architektury wielordzeniowe i równoległość

Współczesne procesory mają kilka, kilkanaście lub nawet kilkadziesiąt rdzeni. Programy wielowątkowe pozwalają na:

  • Wykorzystanie wielu rdzeni do przetwarzania zadań równolegle.
  • Optymalizację obliczeń naukowych i graficznych z użyciem GPGPU.
  • Zarządzanie wątkami i procesami przez system operacyjny w celu uzyskania maksymalnej wydajności.

Programowanie równoległe wymaga synchronizacji wątków i unikania konfliktów przy dostępie do wspólnych zasobów.