Sistemi Operativi

Appunti Esami Esercizi Q&A

Sito del Corso

Professore:
Maurizio Pizzonia
Email: pizzonia@dia.uniroma3.it

Obiettivi del Corso
  • competenze sulla struttura di un generico sistema operativo
    moderno
  • competenze sulla struttura di un sistema operativo Unix con
    particolare riferimento al sistema Linux
  • conoscenza
    delle metodologie usate per risolvere le problematiche tipiche della
    gestione delle risorse in un sistema operativo moderno
  • abilità nel uso di una piattaforma Unix a livello utente e
    amministratore
  • abilità nello scripting Unix
  • abilità di base nella programmazione di sistema

 

Programma del Corso
  • Introduzione al corso
  • architettura di un elaboratore, CPU, registri, esecuzione di una istruzione, interrupt, gerarchie di memoria, localita’, I/O, chiamate
    di procedura
  • Panoramica sui sistemi operativi moderni: definizione di sistema
    operativo, scopi, architettura a strati, kernel/user mode,
    caratteristiche salienti
  • processi:
    dispatching, stati, descrizione e controllo, modelli tipici di sistemi operativi e di uso della memoria nei processi
  • introduzione a linux
    • documentazione in linea (man, info, less), organizzazione del
      filesystem, primi comandi (ls, pwd, cd, cat).
    • la shell: bash, prompt, comandi interni ed esterni, help,
      variabili di abiente, env, $PATH, export;
    • comandi per la gestione di file e directory: touch, mv, rm,
      cp, mkdir, rmdir
    • editors e ambienti grafici: vi, emacs, X, window manager,
      gnome, kde, kwrite, gedit
  • Linux
    e shell: i processi, gli stati sleeping ready/running e stopped,
    terminali di controllo, ps, top, pstree, ^C, ^Z, processi in
    background, bg, fg, &, kill, kill -9, segnali

    • esercizi pratici sull’uso di GNU/Linux da fare in laboratorio: uso della
      documentazione on-line e primi comandi
  • tecniche di gestione
    della memoria centrale: allocatori di memoria, partitioning, best/first/next fit, buddy
    algorithm, paging, segmentation
  • introduzione a linux
    • I/O redirection: stdin/out/err, pipelining, filtri, sort,
      tee, less.
    • esercizi su processi e gestione della memoria
  • shell: sostituzioni ed espansioni (brace, tilde, variabili, command,
    pathname), word splitting, stderr redirection append, filtri (sort,
    uniq, tr).
  • grep, egrep e le espressioni regolari
  • filtri: wc, head
    tail awk (patterns, statements, costrutti per il controllo di flusso,
    variabili, $0..$n, FS, OFS, RS, NR, NF, esempi d’uso).

    • esercizi pratici sull’uso di GNU/Linux da fare in laboratorio: filtri,
      grep e awk
  • Memoria virtuale.

    Generalità:
    process address space, page fault, trashing, policies: fetch cleaning
    eviction placement, page buffering, load control, disk caching, memory
    mapped files.
    Hw support: paginazione, page
    tables a più livelli, inverted page tables, TLB, considerazioni sulla
    grandezza delle pagine, segmentazione, segmentazione paginata
    Resident set management: OPT, LRU, FIFO, CLOCK,
    aging.
    Working set: PFF, cleaning policy, load control,
    process suspension.

    • esercizi su memoria
      virtuale
  • Scheduling a
    breve medio e lungo termine, algoritmi per cpu scheduling:
    FCFS, RR, VRR, SPN, SRT, FB, comparazioni, linux 2.6 
  • c: intro, struttura, preprocessore, compilatore, linker. File
    oggetto.
    Compilazione con librerie statiche e dinamiche. Comandi cc, gcc, file, ldd,
    objdump
  • shell: strace, ltrace, time.
  • Debugger: gdb stepping, breakpoints, watching, backtrace.
    Comandi gdb: r, quit, b, info br, help, l, n, s, dis, del, bt, frame,
    c, ignore, cond, p, display.
  • Disk Scheduling, RAID
  • shell: tar, gzip, strip, permessi dei files.
  • linux filesystem: stat, ln
  • linux filesystem: fdisk -l, mount, stat, ln
  • UNIX File Management, inode, Linux VFS, ext2