Arhitectura von Neumann

Arhitectura von Neumann, propusa de John von Neumann in 1945, e baza aproape tuturor calculatoarelor moderne. Descrie un sistem cu o singura memorie comuna pentru date si instructiuni, o unitate de control si o unitate aritmetico-logica.

Ce este arhitectura von Neumann?

In 1945, John von Neumann a publicat "First Draft of a Report on the EDVAC", care descria o arhitectura revolutionara pentru calculatoare. Majoritatea procesoarelor moderne inca se bazeaza pe acest model.

Cele 5 componente principale

┌─────────────────────────────────────────────────┐
│                UNITATEA DE MEMORIE               │
│        (date + instructiuni, acelasi spatiu)     │
└─────────────────────────────────────────────────┘
         ▲                    ▲
         │                    │
┌────────┴────────┐   ┌──────┴──────┐
│  UNITATEA DE    │   │  UNITATEA   │
│   CONTROL (UC)  │◄──►  ARITMETIC ├──► I/E
│                 │   │  LOGICA(UAL)│
└─────────────────┘   └─────────────┘
  1. Memoria — stocheaza atat date cat si instructiuni
  2. Unitatea de Control (UC) — decodifica si executa instructiuni
  3. Unitatea Aritmetico-Logica (UAL) — efectueaza calcule
  4. Intrare (Input) — citeste date din exterior
  5. Iesire (Output) — trimite rezultate

Bottleneck-ul von Neumann

Limitarea fundamentala: busul dintre CPU si memorie e unic. Procesorul nu poate citi o instructiune si accesa datele in acelasi ciclu.

"The von Neumann bottleneck" — John Backus, 1977

Asta a dus la:

  • Arhitectura Harvard (memorii separate pentru date si instructiuni)
  • Cache-uri pe mai multe niveluri (L1, L2, L3)
  • Predictia de salturi si pipeline pentru a masca latenta

vs Arhitectura Harvard

| Caracteristica | von Neumann | Harvard | |---|---|---| | Memorie date + instructiuni | Unica | Separata | | Bus | Unul | Doua | | Performanta | Limitata de bottleneck | Mai rapida | | Complexitate | Simpla | Mai complexa | | Folosita in | PC-uri, servere | Microcontrolere, DSP-uri |

Majoritatea procesoarelor moderne sunt hibride: au cache L1 Harvard (date si instructiuni separate) dar arhitectura von Neumann la nivelul memoriei principale.

Tehnici de depășire a bottleneck-ului von Neumann

1. Pipeline

În loc ca fiecare instrucțiune să treacă secvențial prin fetch → decode → execute → memory → writeback, procesoarele moderne pipelinează etapele:

Fără pipeline:
[IF1][ID1][EX1][MEM1][WB1][IF2][ID2]...

Cu pipeline:
[IF1][IF2][IF3][IF4]...
[ID1][ID2][ID3]...
[EX1][EX2]...

În teorie, un pipeline pe N etape dă un speedup de N×. În practică, hazard-urile (de date, de control, structurale) reduc câștigul.

2. Superscalar și out-of-order execution

Procesoarele moderne decodează mai multe instrucțiuni per ciclu și le execută în afara ordinii (out-of-order) cât timp dependențele o permit.

Tehnici cheie:

  • Register renaming — elimină false dependențe (WAR, WAW)
  • Reorder buffer (ROB) — menține iluzia execuției în ordine la commit
  • Speculative execution — execută instrucțiuni în avans, pe bază de predicții, și anulează rezultatul dacă predicția a fost greșită

3. Memoria cache

Cache-ul e soluția directă la bottleneck: pune o memorie mică și rapidă între CPU și RAM. Vezi Memory Wall pentru detalii.

4. Modificări arhitecturale profunde

VLIW (Very Long Instruction Word) — compilatorul decide care instrucțiuni se execută în paralel, nu hardware-ul (Intel Itanium, DSP-uri).

Vector processing — o singură instrucțiune operează pe un întreg vector de date (SIMD: SSE, AVX, NEON).

Dataflow architecture — instrucțiunile sunt declanșate de disponibilitatea datelor, nu de un program counter.

Atacuri bazate pe bottleneck

Paradoxal, chiar încercările de a depăși bottleneck-ul au creat vulnerabilități de securitate:

  • Spectre (2018) — speculative execution lasă urme în cache care pot fi citite de procese neprivilegiate
  • Meltdown (2018) — out-of-order execution permite citirea memoriei kernel din user space
  • Ambele exploatează efecte colaterale ale optimizărilor arhitecturale

Aceste atacuri sunt imposibile pe o arhitectură von Neumann pură (fără pipeline, fără speculative execution) — dar și mult mai lentă.