💻 Capitolo 3.5 – Processi, Scheduling e Memoria

📌 1. Programma vs Processo

  • Programma → insieme di istruzioni (statico, come una ricetta).
  • Processo → programma in esecuzione (dinamico, come il cuoco che prepara).

👉 Il sistema operativo gestisce processi, non programmi.

Ogni processo è rappresentato dal PCB (Process Control Block), che contiene:

  • PID (identificatore)
  • Memoria assegnata
  • Registri e program counter
  • File aperti
  • Priorità, sicurezza, ecc.

🔹 Il kernel controlla i processi (può fermarli, riattivarli, sospenderli).


📌 2. Monotasking

  • Nei primi sistemi → la CPU eseguiva una sola cosa alla volta.
  • Problema → CPU velocissima, ma spesso inattiva in attesa di I/O.

💾 Esempi → MS-DOS, Apple II, Commodore 64.

💡 Batch processing → lavori eseguiti a lotti, uno dopo l’altro.

💡 Spooling → buffer per gestire dispositivi lenti (es. stampante).


📌 3. Interruzioni

  • Polling → la CPU chiede sempre ai dispositivi → lento.
  • Interrupt → i dispositivi avvisano la CPU → efficiente.

➡️ Le interruzioni rendono possibile multitasking ed eventi.


📌 4. Multiprogrammazione (Multitasking cooperativo)

  • Più programmi in memoria → la CPU passa da uno all’altro.
  • Non è vero multitasking, ma l’utente lo percepisce.

Richiede: scheduler, cambio di contesto, gestione memoria.

Stati di un processo

  • New → creato
  • Ready → pronto, attende la CPU
  • Execute → in esecuzione
  • Wait/Blocked → in attesa di I/O
  • Terminate → concluso

📌 5. Multitasking preemptive

Il kernel può interrompere un processo. Ogni processo ha un quantum (tempo massimo).

✅ Vantaggi

  • CPU condivisa tra più utenti
  • Meno blocchi
  • Esperienza fluida

🔹 Tutti i moderni OS (Windows, Linux, macOS, Android, iOS) usano questo metodo.


📌 6. Algoritmi di Scheduling

  • FCFS → First Come, First Served
  • SJF → Shortest Job First
  • Round Robin → ogni processo ha un quantum
  • MLQ → code multiple con priorità (rischio starvation)
  • SRT → versione preemptive di SJF
  • MLF → priorità dinamiche + quantum diversi

📌 7. Thread

I processi sono “pesanti”, mentre i thread sono più leggeri e condividono risorse del processo.

✅ Vantaggi

Meno overhead, più velocità, parallelismo.

Esempio

Processo browser → thread per scaricare pagina, immagini, aggiornare schermo.

Relazioni

  • 1:1 → un processo, un thread (MS-DOS)
  • P:1 → più processi, un thread ciascuno (vecchio UNIX)
  • 1:T → un processo, tanti thread (alcune app Java)
  • P:T → molti processi, ognuno con più thread (Windows, Linux, macOS moderni)

📌 Riassunto Capitolo 3.5 – La Memoria

🏗 Gerarchia

  • Piccole → veloci e costose
  • Grandi → lente ed economiche

➡️ Uso di più livelli insieme.

3.5.1 Cache

  • CPU più veloce della RAM → serve cache.
  • Cache hit ✅ → dato trovato.
  • Cache miss ❌ → CPU va in RAM.
Te = Tc × h + (Tc + Tr) × (1 − h)

Tc = tempo cache
Tr = tempo RAM
h = hit ratio

Tipi di cache

  • Associativa → veloce ma costosa
  • Mappa diretta → più semplice

Scrittura:

  • Write-through (sicura, lenta)
  • Write-back (veloce, rischiosa)

➡️ Cache anche per disco, browser, TLB.


3.5.2 Memoria Centrale

Gestita da MMU. Metodi:

Paginazione

  • Memoria divisa in pagine e frame.
  • Page table → traduzione logico-fisico.
  • ✅ Niente frammentazione esterna.
  • ⚠️ Overhead per PMMU.

Segmentazione

  • Memoria in segmenti (codice, dati, stack).
  • Più flessibile ma più complessa.

Segmentazione paginata

Mix dei due sistemi.


3.5.3 Memoria Virtuale

  • Parte del disco usata come RAM.
  • Tecnica → demand paging.
  • Page fault → caricamento da disco.
  • Thrashing → troppi swap.

💡 Soluzioni: TLB, resident set, partizioni/file di swap.


3.5.4 Riassunto

  • Cache → veloce, piccola
  • RAM → media
  • Disco (memoria virtuale) → grande, lenta

Gestione multitasking:

  • Paginazione → blocchi fissi
  • Segmentazione → blocchi variabili
  • Segmentazione paginata → combinazione

📌 Gestione logica dei volumi e RAID

🔹 Volumi logici

Partizioni rigide → difficile cambiarle.
Con LVM/JBOD → più partizioni unite in uno spazio unico.

✅ Espandibile, gestibile come un solo disco.

🔹 RAID

Più dischi come uno solo. Può essere software o hardware.

Tipi base

  • RAID-0 (Striping) → veloce, zero sicurezza.
  • RAID-1 (Mirroring) → dati duplicati, affidabile.
  • RAID-5 → striping + parità → compromesso tra velocità e sicurezza.

📌 Capitolo 1.1.1 – Processi: competizione e cooperazione

Processo = programma in esecuzione. Info nel PCB: memoria, file, priorità, registri.

🔹 Processi indipendenti vs interagenti

  • Indipendenti → risultato deterministico.
  • Interagenti → influenzano altri processi.

Due forme:

  • Competizione → risorse contese
  • Cooperazione → collaborazione tra processi

🔹 Concorrenza vs Parallelismo

  • Concorrenza → processi si alternano sulla stessa CPU.
  • Parallelismo → processi su più core contemporaneamente.

🔹 Tassonomia di Flynn

  • SISD → 1 istruzione, 1 dato (Von Neumann)
  • SIMD → 1 istruzione, più dati (MMX, PS2)
  • MIMD → più istruzioni, più dati (multicore moderni)