W inżynierii komputerowej architektura komputerowa jest projektem koncepcyjnym i podstawową strukturą operacyjną systemu komputerowego. Obejmuje rysunki techniczne i opis funkcjonalny wszystkich wymagań projektowych (zwłaszcza prędkości, pamięci i połączeń). To sposób projektowania i realizacji różnych części komputera — skupiając się głównie na sposobie, w jaki jednostka centralna (CPU) działa wewnętrznie i jak uzyskuje dostęp do adresów w pamięci. Architektura określa również punkt widzenia programisty względem sprzętu: które zasoby są dostępne, jak się do nich odwoływać i jakie zachowania można przewidywać.
Można ją zdefiniować jako naukę i sztukę wyboru i łączenia komponentów sprzętowych w celu stworzenia komputerów spełniających cele funkcjonalne, wydajnościowe i kosztowe. Projektanci balansują tu wiele wymiarów: szybkość (latencja i przepustowość), zużycie energii, koszt produkcji, fizyczne wymiary układów oraz zgodność wsteczna z istniejącym oprogramowaniem.
Kluczowe miary i kompromisy: do oceny architektur używa się metryk takich jak IPC (instrukcje na cykl), CPI (cykle na instrukcję), częstotliwość zegara, przepustowość magistrali, pojemność i opóźnienia pamięci podręcznej, zużycie mocy oraz koszt powierzchni krzemu. Optymalizacje pod jedną z tych miar często pogarszają inne — np. wyższe taktowanie może zwiększać zużycie energii i wydzielanie ciepła.
Architektura komputerowa obejmuje co najmniej trzy główne podkategorie:
- Architektura zestawu instrukcji, czyli ISA, to abstrakcyjny model systemu obliczeniowego widziany przez programistę języka maszyny (lub języka zespołu), obejmujący zestaw instrukcji, tryby adresów pamięci, rejestry procesora oraz formaty adresów i danych.
ISA definiuje: zestaw operacji dostępnych dla programisty (np. operacje arytmetyczne, logiczne, sterujące), sposób kodowania instrukcji (długość i format), konwencje wywołań, mechanizmy przerwań i wyjątków, a także model pamięci (porządek pamięci). Wyróżnia się ISA o stałej długości instrukcji (łatwiejsze dekodowanie) i o zmiennej długości (większa gęstość kodu).
Przykłady popularnych ISA to x86 (bardzo rozbudowane, zazwyczaj klasyfikowane jako CISC) i ARM (zwykle RISC). ISA wpływa na kompilatory, narzędzia programistyczne oraz zgodność oprogramowania — dlatego zmiany w ISA są rzadkie i zwykle zachowują zgodność wsteczną.
- Mikroarchitektura, znana również jako Organizacja Komputerowa jest niższym poziomem, szczegółowy opis systemu, który jest wystarczający do pełnego opisania działania wszystkich części systemu komputerowego, oraz sposobu, w jaki są one połączone i współdziałają w celu wdrożenia ISA. Rozmiar pamięci podręcznej komputera, na przykład, jest kwestią organizacyjną, która generalnie nie ma nic wspólnego z ISA.
Mikroarchitektura dotyczy szczegółów implementacyjnych takich jak:
- projekt rurociągu instrukcji (pipelining), liczba i funkcja etapów (fetch, decode, execute, memory, writeback), oraz techniki skracania ścieżek krytycznych;
- równoległość instrukcji: superskalarność (wiele jednostek wykonawczych), VLIW, wykonywanie poza kolejnością (out-of-order), renaming rejestrów i kolejkowanie instrukcji;
- predykcja skoków i mechanizmy spekulacyjne (branch prediction, speculative execution), które poprawiają efektywną wydajność, ale wprowadzają ryzyko nowych wektorów ataku (np. Spectre/Meltdown);
- hierarchia pamięci: poziomy cache (L1, L2, L3), polityki zastępowania, stopień skojarzenia, tryby write-back vs write-through oraz mechanizmy prefetchingu;
- sterowanie pamięcią i spójność (cache coherence) w systemach wieloprocesorowych, protokoły takie jak MESI oraz architektury NUMA vs UMA;
- obsługa wejścia/wyjścia: kontrolery, przerwania, DMA, interfejsy takie jak PCIe oraz współpraca z systemem operacyjnym;
- aspekty energetyczne: zarządzanie częstotliwością i napięciem (DVFS), tryby uśpienia oraz projekt dla niskiego poboru mocy (ważne w urządzeniach mobilnych i centrów danych).
Mikroarchitektura decyduje o tym, jak efektywnie i szybko dana ISA jest wykonywana i jest głównym obszarem innowacji w projektowaniu procesorów.
- Projektowanie systemu, które obejmuje wszystkie inne komponenty sprzętowe w ramach systemu komputerowego, np:
Połączenia systemowe, takie jak magistrale komputerowe i przełączniki, topologie interkonektów (szyna, crossbar, ring, mesh) oraz protokoły komunikacyjne.
Kontrolery pamięci i hierarchie — zarządzanie pamięcią główną, pamięcią nieulotną, pamięciami podręcznymi oraz mechanizmy dostępu do pamięci (np. kontrolery DDR, kanały pamięci, numery portów).
Mechanizmy odciążające procesor, takie jak bezpośredni dostęp do pamięci, układy akcelerujące obliczenia (GPU, ASIC, FPGA), kontrolery I/O i urządzenia peryferyjne.
Kwestie takie jak wieloprocesowość (SMP), wielordzeniowość, skalowanie w systemach rozproszonych oraz zarządzanie współdzieleniem zasobów.
Po określeniu zarówno ISA, jak i mikroarchitektury, rzeczywisty system obliczeniowy musi być zaprojektowany jako sprzęt. Ten proces projektowania nazywany jest implementacją. Implementacja jest zazwyczaj procesem projektowania w zakresie inżynierii sprzętowej i obejmuje wiele etapów od specyfikacji do testów produkcyjnych.
Realizacja może być dalej podzielona na trzy, ale nie do końca odrębne części:
- Logiczna realizacja: Projektowanie bloków zdefiniowanych w mikroarchitekturze, głównie na poziomie rejestru-transferu i bramki. Na tym etapie tworzy się modele RTL (Register Transfer Level) opisane w językach HDL (np. Verilog, VHDL, SystemVerilog), definiuje się ścieżki danych, jednostki wykonawcze, sterowanie i interfejsy.
- Wdrożenie obwodu: Projektowanie na poziomie tranzystora podstawowych elementów (bramki, multipleksery, klapki, itp.), jak również niektórych większych bloków (ALU, cache, itp.), które mogą być zaimplementowane na tym poziomie, a nawet na niższym poziomie fizycznym, ze względów wydajnościowych. Etap ten obejmuje syntezę logiczną, optymalizację czasową i przygotowanie do umieszczenia elementów (place-and-route).
- Realizacja fizyczna: Obwody fizyczne są wyciągane, różne elementy obwodu są umieszczane w układzie scalonym lub na płycie, a przewody łączące je są prowadzone. Obejmuje to projekt warstw metalicznych, analizę sygnałową (IR drop, EMI), przygotowanie maski fotolitograficznej, testy DFT (design-for-testability) oraz produkcję i pakowanie układów.
W fazie implementacji kluczowe są także:
- weryfikacja (symulacja funkcjonalna, symulacja czasowa, testy formalne),
- testowanie prototypów (na płytkach rozwojowych, FPGA) oraz iteracje optymalizacyjne,
- kontrola jakości i testy produkcyjne (testy funkcjonalne, BIST — built-in self-test),
- zabezpieczenia sprzętowe i programowe, w tym mechanizmy bezpiecznego uruchamiania, izolację pamięci i ochronę przed atakami kanałów bocznych.
W przypadku CPU cały proces wdrażania jest często nazywany projektowaniem procesora; może to być również rodzina powiązanych ze sobą konstrukcji procesorów, takich jak RISC i CISC. Projekt może przyjmować formę prototypu na FPGA, układu ASIC dla masowej produkcji lub implementacji w postaci System-on-Chip (SoC), łączącej CPU z pamięcią, kontrolerami I/O i akceleratorami na jednym krzemowym układzie.
Dodatkowe uwagi praktyczne:
- Kompatybilność wsteczna: wielu producentów zachowuje zgodność z wcześniejszymi ISA, aby zapewnić działanie istniejącego oprogramowania.
- Microcode: niektóre ISA (zwłaszcza złożone) używają warstwy mikroprogramowej do implementacji złożonych instrukcji, co ułatwia naprawy błędów i modyfikacje zachowania bez zmiany sprzętu.
- Wpływ oprogramowania: kompilatory, system operacyjny i biblioteki mają istotny wpływ na wykorzystanie możliwości architektury (np. optymalizacje pod kątem wektorowych instrukcji SIMD).
- Bezpieczeństwo i prywatność: decyzje architektoniczne (np. współdzielone cache, spekulacja) mogą prowadzić do ujawniania danych przez kanały boczne; projektanci muszą to uwzględniać.
Podsumowując, architektura komputerowa to wielowarstwowy zestaw decyzji projektowych obejmujących od abstrakcyjnego interfejsu programistycznego (ISA), przez szczegółowe rozwiązania mikroarchitektoniczne, aż po fizyczną implementację sprzętu. Każdy z tych poziomów wymaga kompromisów i ścisłej współpracy między inżynierami sprzętu, projektantami systemów i twórcami oprogramowania, aby uzyskać wydajny, niezawodny i opłacalny system komputerowy.