Corso «Sistemi Operativi» AA 2018-2019

44
Corso «Sistemi Operativi» AA 2018-2019 Marco Tessarotto 1

Transcript of Corso «Sistemi Operativi» AA 2018-2019

Corso «Sistemi Operativi»AA 2018-2019

Marco Tessarotto

1

Comunicazioni

• Gruppo chiuso facebook «SistemiOperativi 2019 – units» per aggiornamento su orari, materiale didattico

• Email per comunicazioni: [email protected]• Due provette: 5/4/2019, 31/5/2019• Esercitazioni da svolgere in classe, portare il proprio pc portatile a

lezione• Esercizi da inviare tramite email entro le 24:00 del giorno precedente

la lezione successiva

2

Modalità di valutazione dell’esame

• Valutazione di 6 CFU- Due provette durante l’anno

– Se entrambe le provette sono >= 18 → media

– Possibilita' di aumentare il voto con tesina aggiuntiva

– Se una provetta è positiva e l'altra è negativa da 14/30 a 18/30 → orale sugli esercizi negativi

– Se una provetta è positiva e l'altra è negativa < 14/30 → orale o scritto su tutto il programma della provetta

– Se entrambe provette sono negative < 18/30 → altra modalità d'esame:

● Tesina/scritto/orale su tutto il programma

● Per chi ha 9 CFU: gli eventuali aggiuntivi 3 CFU vengono vautati con tesine● Per chi ha 9 CFU: Il voto finale si ottiene come media pesata del voto dei 6 CFU e

del voto dei 3 CFU3

Programma del corso (6 crediti)

• Programmazione di sistema e ambiente Linux• Concetti fondamentali del kernel Linux• Linguaggio di programmazione C• Interazione utente con OS attraverso la shell e strumenti command

line• Interazione di programmi con OS attraverso System Call API• Programmi che interagiscono con altri programmi attraverso OS• Interazione di programmi con altri programmi su sistemi diversi

4

Programma del corso più in dettaglio• Informazioni sull’esame e concetti preliminary• Cenni di architetture dei calcolatori• Linguaggio C• Aritmetica dei puntatori• Confronto tra linguaggio C e linguaggio Java• Traduzioni di programmi tra i due linguaggi• Struttura del file system di Linux file system di Linux• Identificazione utente, file, processi• Comandi fondamentali di Linux• Programmazione in Bash• Chiamate di sistema per la gestione dei file in Linux• Chiamate di sistema per la gestione dei processi in Linux• Chiamate di sistema per la gestione delle Inter Process Communication• Syncronizzazione tra processi in Linux• Problemi classici di sincronizzazione• Realizzazione di Shell in C• Introduzione ai Pthread 5

Obiettivi

• utilizzo strumenti “command line” standard di Linux• Scripting della shell• programmazione in C ed uso di OS System Call API• process life cycle• inter-process communication• utilizzo del file system da programma• utilizzare il networking da programma• process concurrency

6

Questionario di partenza!Trovate il link sul gruppo FB «SistemiOperativi 2019 – units”https://goo.gl/forms/mF5BRBnW2F3MbdsN2

Sistema operativo

• Un computer moderno è costituito da uno o più processori, memoriacentrale, dischi, stampanti, una tastiera, un mouse, un display, interfacce di rete e vari altri dispositivi di input / output.

• È un sistema complesso. Se ogni programmatore di applicazioni dovessecapire come tutte queste cose funzionano in dettaglio, nessun codicepotrebbe mai essere scritto.

• Inoltre, gestire tutti questi componenti e usarli in modo ottimale è un lavoro estremamente impegnativo. Per questo motivo, i computer sonodotati di uno strato di software chiamato sistema operativo, il cui compitoè quello di fornire ai programmi utente un modello migliore, più semplice, più chiaro del computer e di gestire tutte le risorse sopra menzionate.

8Modern Operating Systems, Tanenbaum

Sistema operativo

• Un sistema operativo è strettamente legato all'hardware del computer su cui gira.

• Estende il set di istruzioni del computer e gestisce le sue risorse. • Per funzionare, deve «sapere» molto sull'hardware, almeno su come

l'hardware appare al programmatore.• L'architettura (set di istruzioni, organizzazione della memoria, I / O e

struttura del bus) della maggior parte dei computer a livello di linguaggio macchina è primitiva e scomoda da programmare, specialmente per input / output.

• i veri clienti del sistema operativo sono i programmi applicativi (ovviamente tramite i programmatori dell'applicazione). Sono quelli che si occupano direttamente del sistema operativo e delle sue astrazioni.

9Modern Operating Systems, Tanenbaum

Sistema operativo

• Il termine sistema operativo è comunemente usato con due diversi significati:

• Per indicare l'intero pacchetto costituito dal software centrale che gestisce le risorse di un computer e tutti gli strumenti software standard di accompagnamento, come interpreti di riga di comando, interfacce utente grafiche, utilità di file ed editor.

• «kernel»: più strettamente, fa riferimento al software centrale che gestisce e alloca le risorse del computer (ad es. CPU, RAM e dispositivi).

• Sebbene sia possibile eseguire programmi su un computer senza un kernel, la presenza di un kernel semplifica enormemente la scrittura e l'uso di altri programmi e aumenta la potenza e la flessibilità a disposizione dei programmatori. Il kernel fa ciò fornendo un livello software per gestire le risorse limitate di un computer.

10The Linux Programming Interface, Michael Kerrisk

11

hardware

Linux kernel

GNU C library (glibc), X11, gcc …

Applicazioni (web browser, email, editor, …)

Kernel space

User space

Sistema operativo

Esempio: OS Linux

https://commons.wikimedia.org/wiki/File:Linux_kernel_System_Call_Interface_and_glibc.svg

Panoramica dei componenti principali di un OS• L'hardware è costituito da chip, schede, dischi, una tastiera, un monitor e

oggetti fisici simili. In cima all'hardware c'è il software. • La maggior parte dei computer ha due modalità operative: la modalità

kernel («kernel mode», chiamata anche modalità supervisore) e la modalità utente («user mode»).

• Modalità kernel: ha accesso completo a tutto l'hardware e può eseguire qualsiasi istruzione che la macchina sia in grado di eseguire.

• Il resto del software viene eseguito in modalità utente, in cui è disponibile solo un sottoinsieme delle istruzioni della macchina. In particolare, quelle istruzioni che influenzano il controllo della macchina o I / O (Input / Output) sono vietate ai programmi di usermode.

13Modern Operating Systems, Tanenbaum

Compiti eseguiti dal kernel: Process scheduling

• Pianificazione dei processi: un computer ha una o più unità di elaborazione centrale (CPU), che eseguono le istruzioni deiprogrammi.

• Come altri sistemi UNIX, Linux è un sistema operativo multitasking preemptive, Multitasking significa che più processi (ad esempio, programmi in esecuzione) possono risiedere simultaneamente in memoria e ognuno può ricevere l'uso della/e CPU.

• Preemptive significa che le regole che governano quali processiricevono l'uso della CPU e per quanto tempo sono determinate dalloscheduler del processo del kernel (piuttosto che dai processi stessi).

14The Linux Programming Interface, Michael Kerrisk

Compiti eseguiti dal kernel: Memory management

• Gestione della memoria: mentre le memorie dei computer sono enormi per gli standard di un decennio o due fa, anchela dimensione del software è cresciuta in modocorrispondente, cosicché la memoria fisica (RAM) rimaneuna risorsa limitata che il kernel deve condividere traprocessi in modo equo ed efficiente moda.

• Come la maggior parte dei sistemi operativi moderni, Linux utilizza la gestione della memoria virtuale

15The Linux Programming Interface, Michael Kerrisk

Memory management/2• I processi sono isolati l'uno dall'altro e dal kernel, in modo che un processo non possa leggere o modificare la memoria di un altroprocesso o del kernel.• Solo una parte di un processo deve essere conservata in memoria, riducendo così i requisiti di memoria di ogni processo e consentendo di tenere più processi contemporaneamente nellaRAM. Questo porta a un migliore utilizzo della CPU, poichéaumenta la probabilità che, in qualsiasi momento nel tempo, ci siaalmeno un processo che le CPU possono eseguire.

Compiti eseguiti dal kernel: Provision of a file system

• Fornitura di un file system: il kernel fornisce un file system sudisco, consentendo di creare, recuperare, aggiornare, eliminare e così via i file.

17The Linux Programming Interface, Michael Kerrisk

Compiti eseguiti dal kernel: Creation and termination of processes

• Creazione e cessazione dei processi: Il kernel può caricare un nuovo programma in memoria, fornendogli le risorse (ad es. CPU, memoria e accesso ai file) di cui ha bisogno per funzionare. Tale istanza di un programma in esecuzione è definita un processo.

• Una volta che un processo ha completato l'esecuzione, ilkernel assicura che le risorse utilizzate vengano liberate per ilsuccessivo riutilizzo da programmi successivi.

18The Linux Programming Interface, Michael Kerrisk

Compiti eseguiti dal kernel: Access to devices

• Accesso ai dispositivi: i dispositivi (mouse, monitor, tastiere, unità disco e nastro e così via) collegati a un computer consentono la comunicazione di informazioni tra il computer e il mondo esterno, consentendo input, output o entrambi.

• Il kernel fornisce programmi con un'interfaccia chestandardizza e semplifica l'accesso ai dispositivi, mentre allostesso tempo determina l'accesso arbitrario da più processi a ciascun dispositivo.

19The Linux Programming Interface, Michael Kerrisk

Compiti eseguiti dal kernel: Networking

• Il kernel trasmette e riceve messaggi di rete (pacchetti) per conto dei processi dell'utente. Questa attività include ilrouting dei pacchetti di rete al sistema di destinazione.

20The Linux Programming Interface, Michael Kerrisk

Compiti eseguiti dal kernel: Provision of a system call application programming interface (API)

• I processi possono richiedere al kernel di eseguire varieattività utilizzando i punti di ingresso del kernel noti come chiamate di sistema (system calls). L'API di chiamata di sistema Linux è l'argomento principale di questo libro.

21The Linux Programming Interface, Michael Kerrisk

hardware

Kernel subsystems: process, memory management, ...

Device drivers

Linux kernel System Call Interface (SCI)

Application 1 Application 2 Application 3 User space

Kernel space

interrupts

UNIX

• Unix è un Sistema Operativo (OS) portabile, multitasking, multiuser, time-sharing sviluppato a partire dal 1969 da AT&T. Inizialmente Unix è stato programmato in assembly language ma fu riprogrammato in linguaggio C nel 1973.

• Unix è stato portato su più architetture di calcolatori di qualsiasi altro Sistema operativo

23

UNIX

24

multitasking multiuser

time-sharingportable

Strutture di Unix e Windows - schemi

Unix Windows NT25

26

27

Perché Linux?

• Il corso si basa sul S.O Linux• Linux si basa su un nucleo (kernel) che è utilizzato in moltissimi

Sistemi Operativi• I più popolari OS derivati da UNIX : • Mac OS (2001-2007), OS X (2009-2015), macOS (2016-2019),

FreeBSD, SuSe, OpenSuSe, Ubuntu e tutte le distribuzioni di Linux, Android …

• I kernel di Linux sono scaricabili gratuitamente dal sito web www.kernel.org

28

Perché Linux?

• Il kernel è stato scritto dal programmatore finlandese• Linus Torvald (1970) partendo dal Minix• Tesi di laurea magistrale (Helsinki-1991)• ‘Linux: A Portable Operating System’• Chiave di successo di Linux: il suo codice è pubblico, con

licenza d'uso che consente a chiunque la libera modifica del codice.

• Torvald coordina gli aggiornamenti del codice del kernel usando il sito www.kernel.org

29

LinuxVersioning

Una differenza tra Unix eLinux• Linux è strutturato in moduli per manutenzione, aggiornamento,

device driver

PerchéLinux?• I principi della programmazione di sistema condivisi da altri SO, ma

con diversa complessità• Per esempio, per gestire i processi:

Linux Windows

Creazione processi fork(), exec() CreateProcess, CreateProcessAsUser CreateProcessWithLogonW CreateProcessWithTokenW

Attesa e Cancellazione processi wait(), exit() TerminateProcess

Interprocess Communication Pipe, Fifo, Shared memory, socket

Clipboard, Data Copy, Dynamic Data Exchange (DDE),Component Object Model COM)File Mapping, Mailslots, Pipes, Remote Procedure Call (RPC), Sockets

PerchéLinux?• Negli ultimi anni, si sono diffuse molte schedine basate sul processore

ARM• Queste schede hanno:

• Piccole dimensioni• Basso consumo• Alte prestazioni• Basso costo• Schema interno pubblicato su internet• Linux come sistema operativo (perché gratuito)

• Vengono utilizzate o realizzate da molte aziende

bibliografia

• Modern Operating Systems, Tanenbaum• The Linux Programming Interface, Michael Kerrisk• Understanding the Linux Kernel, Daniel Bovet & Marco Cesati

34

Ambiente di lavoro

• Debian 9.7• Virtualbox 6• Eclipse IDE for C/C++ Developers (richiede JRE)• https://www.eclipse.org/downloads/packages/release/2018-

12/r/eclipse-ide-cc-developers

35

Concetto di Processo: istanza di un programma in esecuzione

• Processi concorrenti non possono interferire• Esempio: due programmi indipendenti: fattoriale e determinare se un intero è primo

• Sequenze di istruzioni del primo:• per input 5: [k=1] [k=1*1] [k=1*2] [k=2*3] [k= 6*4] [k=24*5]

• Sequenze di istruzioni (diverse per ogni input):• per input 17: [if(17==1)] [if(17==2)] [if(17%2)] [d=3] [if(17%3)] [d=4] [if(17%4)] [true]• per input 13: [if(13==1)] [if(13==2)] [if(13%2)] [d=3] [if(13%3)] [true]

• Programmazione concorrente: esecuzione concorrente con 2 core dei due processi:• [k=1] [k=1*1] [k=1*2] [k=2*3] [k= 6*4] [k=24*5]• [if(13==1)] [if(13==2)] [if(13%2)] [d=3] [if(13%3)] [true]

static boolean isPrime(int number) { if (number == 1)return false;if (number == 2)return true;if (number % 2 == 0)return false;for (int d=3; d<=(int)Math.sqrt(number); d++){

if (number % d == 0)return false;}return true;

}

int Fatt(int n) {int k=1;for (i=1; i <= n; i++)

k = k* i;return(f);

}

Concetto diprocesso• Programmazione concorrente: esecuzione concorrente con 2 core dei due

processi:• [k=1] [k=1*1] [k=1*2] [k=2*3] [k= 6*4] [k=24*5]• [if(13==1)] [if(13==2)] [if(13%2)] [d=3] [if(13%3)] [true]

• Quasi concorrenza (con 1 core):[k=1] [k=1*1] [k=1*2] [k=2*3] [k= 6*4] [k=24*5]

[if(13==1)] [if(13==2)] [if(13%2)] [d=3]

• Ad un processo sono associati:• Uno o più segmenti di ’codice eseguibile’.• Uno o più segmenti di memoria dati.• I descrittori di eventuali risorse in uso (file, finestre, periferiche, ecc.)• Uno o più thread.

• Queste informazioni sono contenute nel PCB (Process Control Block)

Componenti di un processo

Codice

variabili globali (DATI)

Program Counter

Alcuni Registri della CPU

Variabili locali di procedure (STACK)

Stato del processo | Identificativo processo | Program counter | registri CPU | puntatori alla memoria | risorse aperte | tempi di esecuzione

Descrittore di processo: Process Control Block PCB

Processo

Stati di unprocesso

Elaborazione Batch• Batch semplici

• sistema operativo residente in memoria (monitor)• assenza di interazione tra utente e job• scarsa efficienza:durante l’I/O del job corrente, la CPU

• Batch multiprogrammati

• schedulazione

40

Elaborazione time-sharing

41

Breve cronistoria dei SistemiOperativi

• 1964• 1965• 1968• 1969• 1977• 1978• 1979• 1981

OS/360: paginazione, batch, spooling, multiprog, milioni di righe ASMMultics: time-sharing, schedulazione, segmentazioneTHE (Technische Hogeschool Eindhoven): struttura Onion Skin, stalloUnix : monolitico, C, tre livelli (User,System,hw), time-sharingBSD (Berkeley Software Distribution): serie di patch a Unix per PDP-11VAX/VMS (Virtual Memory System): struttura Onion-SkinApple DOS 3.2: usato negli Apple IIMS-DOS: Disk OS, single-user, single-tasking, 640KB utente, 360 k sistema

Microsoft IBM

Breve cronistoria dei Sistemi Operativi(cont’d)

• 1982• 1984• 1985• 1987• 1990• 1991• 1992• 1993

SUN OSMacIntosh OS Microsoft Windows 1Minix, OS2 1.0 (IBM), Windows 2Windows 3Kernel Linux, OS2 1.3OS2 2.0, Windows 3, Solaris FreeBSD, NetBSD, Windows NT

Breve cronistoria dei Sistemi Operativi(cont’d)

• 1994• 1995• 1996• 1997• 1998• 2000• 2001• 2003

OS 2.11, RedHat LinuxOS/390, Windows 95 Debian GNU Linux Mac OSWindows 98Windows 2000, MacOS XWindows XP Windows Server 2003