Arhitectura Harvard

Arhitectura Harvard separa memoria pentru date de memoria pentru instructiuni, spre deosebire de arhitectura von Neumann care le combina. Asta permite acces simultan si elimină bottleneck-ul von Neumann, fiind folosita in microcontrolere si procesoare moderne.

Ce este Arhitectura Harvard?

Arhitectura Harvard foloseste memorii separate pentru date si instructiuni, fiecare cu propriul bus. Asta permite procesorului sa citeasca o instructiune si sa acceseze date in acelasi ciclu de ceas.

vs Arhitectura von Neumann

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

Avantaje

  • Acces paralel — CPU poate citi o instructiune si scrie date simultan
  • Securitate — instructiunile nu pot fi modificate accidental ca date
  • Predictibilitate — timpii de acces sunt mai deterministi

Implementari hibride

Procesoarele moderne sunt hibride:

  • Cache L1: Harvard (date si instructiuni separate) pentru viteza maxima
  • Cache L2/L3 si RAM: von Neumann (unificate) pentru simplitate

Exemple: ARM Cortex, Intel Core, RISC-V — toate folosesc cache L1 Harvard.

Arhitectura Harvard modificată (modernă)

Procesoarele moderne nu sunt nici pur Harvard, nici pur von Neumann. Folosesc o arhitectură Harvard modificată:

                    ┌──────────────────┐
                    │     CPU Core     │
                    └──┬───────┬───────┘
                       │       │
                 ┌─────┘       └─────┐
                 ▼                   ▼
          ┌──────────┐       ┌──────────┐
          │  L1 Data │       │L1 Instruc│
          │  Cache   │       │  Cache   │
          └────┬─────┘       └────┬─────┘
               │                  │
               └──────┬──────────┘
                      ▼
               ┌──────────────┐
               │  L2 Cache    │  ← Unificat (von Neumann)
               │  (date+inst) │
               └──────┬───────┘
                      ▼
               ┌──────────────┐
               │     RAM      │  ← Unificat (von Neumann)
               └──────────────┘

De ce această abordare?

  • L1 separat → procesorul poate citi instrucțiuni și accesa date simultan, eliminând bottleneck-ul
  • L2/L3 unificat → flexibilitate: memoria nefolosită pentru date poate fi folosită pentru instrucțiuni și viceversa
  • Separarea e doar la nivel de cache, nu și la nivel de memorie principală

Implicații pentru performanță

Mărimea cache-urilor L1 influențează direct performanța:

| Arhitectură | L1 Data | L1 Instrucții | Impact | |---|---|---|---| | Intel Core (modern) | 32KB | 32KB | Echilibrat, general purpose | | ARM Cortex-A78 | 64KB | 64KB | Aplicații mobile, eficiență | | RISC-V (BOOM) | 16KB | 16KB | Cercetare, configurabil | | AMD Zen 4 | 32KB | 32KB | Similar Intel |

Securitatea în arhitectura Harvard

Un avantaj mai puțin discutat: separarea datelor de instrucțiuni la nivel hardware previne clase întregi de atacuri:

  • Code injection — nu poți executa date ca și cod (executabile moderne au NX bits, dar Harvard e mai strict)
  • Self-modifying code — imposibil în formă pură (deși în forma modificată, poți scrie în L1 data și invalida L1 instrucții)

Microcontrolerele (ARM Cortex-M, PIC, AVR) folosesc Harvard pur exact din acest motiv: predictibilitate și securitate.