Laboratorio di Sistemi Operativi I

Anno Accademico 2005-2006

Francesco Pedullà

(Tecnologie Informatiche)

Massimo Verola

(Informatica)

Copyright © 2005 Francesco Pedullà, Massimo Verola

Copyright © 2001-2005 Renzo Davoli, Alberto Montresor (Universitá di Bologna)

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation;
with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the license can be found at: http://www.gnu.org/licenses/fdl.html#TOC1

fornire le nozioni necessarie per utilizzare un sistema Linux attraverso i principali comandi di base, interagendo con l'interfaccia utente basata sulla linea di comando (shell)

insegnare le basi per la programmazione in linguaggio script (bash)

illustrare l'interfaccia applicativa (Application Programming Interface - API) che il SO offre al programmatore e l'utilizzo delle chiamate al sistema

chiarire alcuni concetti duali fondamentali, quali ad esempio:

applicazione utente / kernel

libreria C standard / API del SO (system calls)

memoria di processo statica / dinamica

compilatore / interprete

libreria statica / dinamica

codice sorgente / modulo oggetto

programma / processo

Obiettivi del corso

linguaggio C (corso Programmazione 2)

concetti di sistemi operativi (corso Sistemi Operativi 1)

Considerazioni:

LSO1 prevede che gli studenti abbiano chiari i concetti fondamentali di SO1

SO1 prevede come prerequisiti Architettura 2 e Programmazione 2

LSO1 si focalizzerà sui servizi base del SO per programmi sequenziali che interagiscono tra loro mediante filesystem, in quanto LSO2 affronterà in dettaglio la comunicazione tra processi (IPC) e il multithreading

L'API di Windows (Win32 API) verrà trattata in modo esteso nel corso di SO2, quindi questo corso farà riferimento soltanto all'ambiente Linux

Prerequisiti

Testi per il corso

Nessun testo ufficiale adottato: in generale i lucidi e la documentazione in linea (comandi man, info) sono più che sufficienti.

Elenchiamo alcuni testi consigliati per una trattazione sistematica ed approfondita ed i manuali di riferimento per alcune importanti utility di sistema
Linguaggio C: The C Programming Language (2nd Edition) by Brian W. Kernighan, Dennis M. Ritchie, Prentice Hall
Linux: Linux in a Nutshell, Fourth Edition, by Ellen Siever, Aaron Weber, Stephen Figgins, O'Reilly
Bash scripting: Bash Programming – Introduction HOW-TO, by Mike G;	Advanced Bash-Scripting Guide, by Mendel Cooper
Executable programs: Program Library HOWTO, by David Wheeler;
ELF: from the Programmer’s Perspective, by Hongjiu Lu.
System programming: Advanced Linux Programming, by Mark Mitchell, Jeffrey Oldham, and Alex Samuel, published by New Riders Publishing. ISBN 0-7357-1043-0. First Edition, June 2001

Manuali di riferimento

Strumenti di ausilio alla programmazione:

Make:
GNU Make – A Program for Directing Recompilation, R. M. Stallman, R. McGrath, P. Smith

binutils:
The GNU Binary Utilities, R. H. Pesch, J. M. Osier, Cygnus Support

GCC:
Using the GNU Compiler Collection (GCC), R. Stallman, GCC Developer Community

GDB:
Debugging with GDB – The GNU Source-Level Debugger, Free Software Foundation

Nota: per ogni guida o manuale pubblicato sul Web, verificare di ottenere sempre la versione più recente.

Libri consigliati

Per ulteriori approfondimenti, i seguenti libri sono consigliati:

Sistemi Operativi:

A.S. Tanenbaum, “Operating Systems - Design and Implementation”, Prentice-Hall

Silberschatz, P.B. Gavin, “Operating System Conceps”, Addison-Wesley

W. Stallings, “Operating Systems: Internals and Design Principles”, Fifth Edition

H.M. Deitel, “Operating Systems”, Addison-Wesley

G. Nutt, ”Operating Systems: a Modern Perspective”, Addison-Wesley

Programmazione di Sistema:

Richard Stevens. Advanced Programming in UNIX. Addison-Wesley, 1st edition, 1992

Eric Steven Raymond. The Art of Unix Programming. Addison-Wesley , 1st edition, 2003.

Web Links

Siti Web per documentazione:

Guide su Linux:

Linux Documentation Project Guides: tldp.org/guides.html

HOWTOs: tldp.org/HOWTO/HOWTO-INDEX/howtos.html

Linux Italian Magazine: www.linuxzine.it/

GNU site: www.gnu.org

...

Sito Web

Il corso è dotato di un sito web:

http://twiki.dsi.uniroma1.it/twiki/view/Lab_so_1

Troverete (appena possibile):

Informazioni generali sul corso

Lucidi presentati a lezione

Esempi ed esercizi

Link alla documentazione

FAQ

Comunicheremo a lezione l'aggiornamento del sito all'anno accademico 2005-2006

Informatica:

Lunedì ore 18-19

Mercoledì ore 16-18

Periodo lezioni: dal 5 Ott 2005 al 21 Dic 2005

Date esami (provvisorie): 23 Gen, 6 Feb, 20 Feb, 12 Giu, 3 Lug, 25 Sett

Tecnologie Informatiche:

Martedì ore 18-19

Giovedì ore 17-19

Periodo lezioni: dal 4 Ott 2005 al 22 Dic 2005

Date esami (provvisorie): 26 Gen, 9 Feb, 6 Lug, 21 Sett

Orari e organizzazione delle lezioni

Ricevimento sincrono (di persona):

al termine delle lezioni

oppure

per appuntamento previa richiesta via e-mail o telefono

Ricevimento asincrono: via e-mail, sempre

Francesco Pedullà: fpedulla@it.ibm.com

Massimo Verola: massimo.verola@quadrics.it

Orari di ricevimento

Introduzione all'uso di Linux

Uso della Shell e di Vi

Programmazione in linguaggio script

Programmi eseguibili

Programmazione di sistema

Argomenti del corso

Introduzione all'uso di Linux

Interfaccia con l'utente

Comandi base

Filesystem

Gestione e monitoraggio di processi

Modulo 1

Shell

Tipi di shell

Comandi interni

Utility di sistema

Lancio di processi in background / foreground

Redirezione I/O e pipe

Modulo 2

Programmazione in linguaggio script

Editing del sorgente

Variabili ed espressioni

Strutture di controllo: cicli e branch

Funzioni e passaggio di parametri

Modulo 3

Programmi eseguibili

Programmi e processi

Ciclo di vita di un programma

Stati di un processo

Compilatore, linker e loader

Formato ELF e binutils

Librerie statiche e dinamiche

Debugger

Make

Modulo 4

Programmazione di sistema

Le system calls

I/O system calls

Allocazione della memoria

Creazione e controllo di processi

Tecniche di timing di processi e misura delle prestazioni

Modulo 5

L'esame puo' essere superato in due diversi modi:

Due prove di esonero (opzionali ma caldamente raccomandate) da svolgere a casa o in laboratorio nel periodo delle lezioni

Una prova (appello) che consiste di un progetto sulle system call ed un orale

Le regole per gli esoneri sono:

I progetti possono essere svolti in gruppo

I progetti vanno consegnati circa 15-20 giorni dopo la loro assegnazione e la loro correzione verrà discussa a lezione

Per superare l'esame e' necessaria la sufficienza in entrambi gli esoneri

Il voto finale e' la media pesata (script=1/3, syscall=2/3)

Modalità di esame - I

Le regole per chi non supera entrambi gli esoneri sono le seguenti:

Se si e' superato solo l'esonero su syscall, si puo' accedere direttamente all'orale

Se si e' superato solo l'esonero su script, si deve fare il progetto ma all'orale non sono previste domande sulla shell e sua programmazione

I progetti vanno consegnati circa 15-20 giorni dopo la loro assegnazione (via web e mailing list) e la loro correzione verrà discussa all'orale

Il voto finale e' la media pesata (script=1/3, syscall=2/3)

Per chi non si accontenta:

Su richiesta dello studente, il risultato di uno scritto (esonero o progetto) puo' sempre essere migliorato all'esame: altrimenti, si considera il voto dello scritto e l'esame verte solo sulla valutazione del compito; in questo caso la valutazione all'orale puo' diminuire il voto dello scritto.

Modalità di esame - II

Per poter sostenere le prove è necessario:

attendere la comunicazione del compito a lezione (esoneri) o sul sito web (progetto)

iscriversi individualmente o come gruppo (max 3 persone) via email al docente comunicando:

Matricole, nomi e cognomi delle persone componenti il gruppo

il docente assegna un identificativo ad ogni gruppo

consegnare i progetti entro le scadenze fissate

prenotarsi tramite l'apposita pagina web almeno 5 giorni prima dell'esame, per permettere di valutare la durata di ogni sessione

Iscrizioni

Gli esoneri ed il laboratorio

1) Prova su shell scripting

2) Prova su system calls

Regole:

Ogni progetto presentato prende un voto in trentesimi

L'assegnazione avviene secondo i criteri descritti nel prossimo lucido

In caso di copiatura il voto è negativo!

Uso del laboratorio:

Potrete usare il Laboratorio piccolo nel seminterrato (Bessie o ex-Pentium) tutti i giorni feriali dalle 8:30 alle 13:30 e dalle 14:00 alle 19:00

Chi non avesse ancora l'utenza puo' rivolgersi alla sig. Gabriella Cavallo, portando un certificato di iscrizione.

Il laboratorio ha 7 postazioni di lavoro attrezzate con Linux e tutto il software necessario

Criteri di valutazione dei compiti
(esoneri e progetti)

Correttezza del codice: unico elemento di valutazione che può determinare la bocciatura

Gestione degli errori: fa parte della correttezza del codice!

Modularità e leggibilità del codice (divisione in funzioni, commenti,...)

Qualità della documentazione (manuale utente)

Numero dei componenti del gruppo (il voto decresce all'aumentare del numero, ovviamente)

Leggere bene il cap.4 della GFDL, per formulare correttamente lo statement sul copyright (bisogna citare i proff. Davoli e Montresor? Li informiamo che stiamo usando e modificando il loro materiale con un mail, per correttezza?)

Quale telefono e quale luogo per riceviemento indichiamo?

Alberto Montresor

2003-09-08T07:38:59

Alberto Montresor