Anteprima
Vedrai una selezione di 14 pagine su 65
Appunti di Informatica Pag. 1 Appunti di Informatica Pag. 2
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 6
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 11
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 16
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 21
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 26
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 31
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 36
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 41
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 46
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 51
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 56
Anteprima di 14 pagg. su 65.
Scarica il documento per vederlo tutto.
Appunti di Informatica Pag. 61
1 su 65
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

FUNZIONI E RICORSIONE

A cosa servono le funzioni: esse sono una soluzione al dry (do not repeat yourself) - sia nello stesso programma - che in altri programmi. Forzano una miglior struttura del codice.

I linguaggi che permettono di scomporre un algoritmo in funzioni si chiamano linguaggi procedurali, essi però si differenziano dai linguaggi funzionali (non confonderli). Il linguaggio C è un linguaggio procedurale; Matlab per come lo vediamo noi può anche essere considerato un linguaggio procedurale, anche se in realtà esso consente la programmazione a oggetti, una tecnica di scomposizione di algoritmi più avanzata.

Quindi una funzione rappresenta un modo di esprimere dei sotto-algoritmi. In Matlab le funzioni vanno scritte in file .m con lo stesso nome della funzione.

Function [output] = funzione_nome(input)

La prima riga corrisponde alla firma dell'algoritmo. In questo caso appunto output rappresenta un dato in uscita ed input uno in ingresso.

La funzione deve contenere una riga che assegna un valore al parametro in uscita. Quindi l'asintassi per dichiarare la funzione in Matlab è:

function [output] = funzione_nome(input) istruzioni varie end

Matlab consente alle funzioni di avere un numero arbitrario di parametri in ingresso che vanno separati da virgole nella firma della funzione. Una funzione con zero parametri non contiene nulla tra le parentesi tonde ().

In Matlab, le funzioni possono anche ritornare un numero arbitrario di parametri in uscita, che vanno messi tra parentesi quadre. Una funzione che non ritorna niente non contiene nulla tra le parentesi quadre.

Se la funzione ritorna un solo valore, le parentesi possono anche essere omesse, i parametri in uscita "valori" vengono anche chiamati di ritorno.

Una funzione, prima di completare la sua esecuzione e ritornare al chiamante, deve contenere delle istruzioni che assegnano un valore a ogni parametro in uscita.

Una funzione ritorna automaticamente al chiamante.

dopo avere eseguito l'ultima istruzione prima dell'end. In alternativa si può ritornare dalla funzione in ogni momento utilizzando la parola chiave return. Contrariamente al linguaggio C, return non consente di specificare un valore da ritornare, questo va eventualmente fatto ritornando un valore agli eventuali parametri di uscita. Come chiamare una funzione: a = nome_funzione(x); Il meccanismo di chiamata funzione: Quando una funzione ritorna, si dice che ritorna al chiamante, ma una funzione può essere chiamata più volte nel corso di un programma. Per questo motivo, per implementare correttamente la semantica di ritorno al chiamante, i linguaggi di programmazione usano internamente una struttura dati detta record di attivazione che contiene anche l'indirizzo di ritorno. All'atto di chiamata a funzione, viene salvato l'indirizzo di ritorno pari all'indirizzo dell'istruzione successiva alla chiamata a funzione. Il ritorno da una

funzione è un salto all'indirizzo di ritorno. Il problema in relazione è più complesso, poiché le funzioni possono chiamare a loro volta altre funzioni. Occorre quindi tenere traccia di tutta la catena di indirizzi di ritorno. Un solo record di attivazione non è sufficiente, ne serve uno per ogni chiamata a funzione in corso. I record di attivazione sono organizzati in una struttura dati detta pila (o stack in inglese). Quando si chiama una funzione, si impila un nuovo record di attivazione per memorizzare l'indirizzo di ritorno. Quando si ritorna da una funzione si spila il record di attivazione sulla cima della pila, che corrisponde all'ultima funzione chiamata, per capire dove ritornare.

Passaggio dei parametri: I parametri specificati quando si dichiara una funzione sono detti parametri formali. Essi esistono solo durante l'esecuzione della funzione (essi sarebbero input e output). Le variabili dichiarate dentro una funzione sono

dette variabili locali. Anche esse esistono solo durante l'esecuzione della funzione. I parametri specificati quando si chiama una funzione sono chiamati parametri attuali. (sarebbe il parametro al quale applico la funzione e che prima di essa dichiaro). Nel processo di chiamata a funzione i parametri attuali in ingresso vengono copiati in quelli formali. Al ritorno da una funzione, i valori di ritorno vengono copiati nei parametri attuali in uscita.

- ingresso: parametri attuali parametri formali

- uscita: parametri formali parametri attuali 45

I parametri formali sono separati da quelli attuali, anche se li si chiama con lo stesso nome!!

Funzioni e workspace

In Matlab la struttura dati di un record di attivazione è un workspace. Matlab ha quini uno stack di workspace. Come conseguenza di ciò le funzioni non possono accedere al workspace del chiamante, quindi contrariamente agli script, le funzioni non possono accedere alle variabili presenti nel

Funzioni senza valori di ritorno Una funzione che non produce valori di ritorno può avere svariati vantaggi infatti in tutti i casi in cui occorre eseguire molte operazioni come postprocessing o formatting e queste operazioni devono essere eseguite allo stesso modo su dati diversi, una funzione torna molto utile. Ricorsione Si parla di ricorsione quando si ha un ciclo nella catena di chiamate a funzione. - ricorsione diretta = una funzione f chiama se stessa; - ricorsione indiretta = una funzione f chiama una funzione g che a sua volta chiama la funzione f. Essa è una tecnica di programmazione molto potente infatti: - se usata bene permette di risolvere in maniera elegante dei problemi complessi; - Se usata male porta però a programmi incomprensibili; 46 esempio fattoriale funzionamento Per risolvere un problema mediante ricorsione bisogna individuare: - Almeno un caso base in cui ci può risolvere il problema senza fare uso di ricorsione; - Un caso generale

in cui si usa la ricorsione per ricondurre il problema ad uno più semplice, raggiungendo prima o poi un caso base. La presenza di un caso base è fondamentale perché termina la catena di chiamate ricorsive.

47 SISTEMI OPERATIVI

Un sistema operativo è un programma che gira permanentemente nel calcolatore; è il primo programma che si avvia quando accendo il calcolatore e l'ultimo presente quando lo spengo.

Perché serve

È un intermediario fra i programmi e i componenti fisici (hardware) del calcolatore. Finora abbiamo visto i programmi che abbiamo scritto come se avessero tutto il calcolatore a disposizione, ma in realtà i programmi che abbiamo scritto girano in dei processi, un'astrazione creata dal sistema operativo per poter avere più programmi in esecuzione contemporaneamente.

Concorrenza e sincronizzazione

Fra i concetti principali che si incontrano nell'ambito dei sistemi operativi vi sono:

- concorrenza = è

La caratteristica di un insieme di funzioni/algoritmi/applicazioni che potenzialmente possono essere eseguite contemporaneamente. Non implica parallelismo effettivo.

Sincronizzazione è l'insieme di tecniche utilizzate per ordinare temporalmente le operazioni; necessario quando più operazioni concorrenti necessitano di accedere alla stessa risorsa.

Funzioni di un sistema operativo

Il sistema operativo ha il compito di gestire e astrarre le risorse di calcolo, rendendole disponibili alle applicazioni.

  • Gestire: prevenire / risolvere conflitti nell'accesso alle risorse;
  • Astrarre: rendere possibile la scrittura di codice indipendentemente dall'hardware.

Tra le funzioni principali ricordiamo:

  • Gestione della memoria;
  • Gestione della CPU;
  • Gestione del filesystem;
  • Gestione delle reti di comunicazione;
  • Gestione delle periferiche;

L'astrazione dei processi 'calcolatore

Un processo è un ambiente di esecuzione di programmi, un virtuale'.

All'interno di un processo viene eseguito un solo programma. Un programma installato su un calcolatore, ma non caricato in nessun processo viene detto non in esecuzione. Il sistema operativo mette a disposizione all'utente modi di eseguire programmi, tramite interfacce grafiche e/o testuali.

Un singolo programma può essere lanciato più volte in processi diversi. In questo caso il codice che viene eseguito è lo stesso e viene copiato nella memoria dei vari processi. I dati sono separati, quindi le due istanze del programma possono operare su dati diversi.

L'astrazione dei processi

Un processo ha della memoria RAM assegnatagli dal sistema operativo per il codice del programma e per i dati. Il sistema operativo, tramite supporto hardware, garantisce la protezione della memoria: un processo non può accedere né alla memoria degli altri processi, né a quella del sistema operativo (gestione della memoria).

Un processo viene eseguito in time

Il tuo compito è formattare il testo fornito utilizzando tag html.

ATTENZIONE: non modificare il testo in altro modo, NON aggiungere commenti, NON utilizzare tag h1;

sharing su uno o più core presenti nella macchina. Il sistema operativo ha un componente, lo scheduler che assegna e toglie i processi dalla CPU, anche centinaia di volte al secondo, dando l'impressione che un numero di processi maggiori del numero di core possa eseguire contemporaneamente (gestione della CPU).

Ogni accesso alle periferiche da parte dei processi deve passare attraverso il sistema operativo (gestione periferiche).

Possiamo distinguere alcune parti fondamentali di questa struttura dati in memoria:

I processi possono creare altri processi, creando una struttura ad albero:

Il primo processo eseguito dal pc in fase di boot è il processo init. 49

Scheduling

Ogni core della CPU viene condiviso nel tempo ai vari processi del sistema.

Supponiamo per semplicità di avere due processi e una CPU con un solo core. Il sistema operativo assegnerà il processore ad intervalli alterni:

Il cambio di assegnamento della CPU tra i processi si chiama cambio di contesto;

può durare migliaia di cicli di clock e quindi viene scelto basandosi su un compromesso. Più è frequente il cambio di contesto, meno tempo di CPU è utilizzabile per eseguire i processi. Meno è frequente il cambio di contesto, e più è apparente che l'esecuzione dei processi non è contemporanea. Stati di un processo: Quando un processo non è in esecuzione può essere: - 'pronto': in stato di se in attesa della CPU dallo scheduler, oppure - 'in attesa': se ha richiesto qualche operazione alle periferiche. Accesso alle periferiche: Quando un programma deve accedere a una risorsa (e.g. video o tastiera) esegue una cosiddetta chiamata al sistema operativo o system call. Questa si effettua usando una particolare istruzione della CPU che interrompe l'esecuzione del processo corrente e passa il controllo al sistema operativo. Effettivamente, il pro
Dettagli
A.A. 2021-2022
65 pagine
SSD Scienze matematiche e informatiche INF/01 Informatica

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher mattia_galesi11 di informazioni apprese con la frequenza delle lezioni di Informatica e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Politecnico di Milano o del prof Terraneo Federico.