Il 0% ha trovato utile questo documento (0 voti)
30 visualizzazioni34 pagine

INFORMATICA2

Caricato da

peraemilio1
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato DOCX, PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
30 visualizzazioni34 pagine

INFORMATICA2

Caricato da

peraemilio1
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato DOCX, PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 34

INFORMATICA

Programmare significa...
Scrivere programmi1 in un linguaggio artificiale2, rigoroso e comprensibile ad un esecutore3, con i
quali implementiamo4 gli algoritmi5 che riteniamo6 risolvano i problemi di cui abbiamo creato un
modello7

(1) collezioni di istruzioni (2) in questo corso: il C (3) in questo corso: la macchina astratta C (4)
realizziamo, codifichiamo, traduciamo, … (5) sequenze finite di passi elementari (6) nel caso
generale, NON ci sono garanzie! (7) opportuna “semplificazione” (astrazione) dei problemi reali
Programmare è un atto creativo

SCRIVERE UN PROGRAMMA in C: 6 FASI (dopo aver steso lo pseudocodice ed averlo


sviluppato top-down per affinamenti successivi)
1. VIDEOSCRITTURA: tramite un programma di videoscrittura (editor) il programmatore
procede all’editing, ovvero a scrivere in linguaggio c (alto) il programma. Si ottiene il file
programma sorgente. (XXX.c)
2. PRE-COMPILAZIONE: in c, il pre-processor rimuove tutte le indicazioni scritte nel
programma sorgente inutili alla macchina (es. i commenti); poi valuta le prime istruzioni
come: #include <stdio.h> (implementazione di libreria) o #define … (introduzione di
costanti globali, in questo modo non occupano spazio RAM)
3. COMPILAZIONE: il compilatore procede alla traduzione in linguaggio macchina (binario,
basso); tutte le istruzioni e le info messe nel programma sorgente vengono tradotte in
assembly: l’assembler crea il file programma oggetto (file in codice binario; XXX.obj);
rimangono degli spazi vuoti che vengono riempiti dal linker.
1. IMPORTANTE: essendo C un linguaggio compilato durante questa fase avviene
anche la diagnostica di quanto editato. Per questo il compilatore, in caso di errore
sintattico, lo segnala al programmatore (indicando, genere di errore e la sua
locazione). Sta al programmatore valutare la semantica di quanto scritto
4. LINKING: tramite linker (collegatore) al file programma oggetto viene unito ai
sottoprogrammi utilizzati nel programma stesso (i quali vengono estratti dalle librerie
precedentemente dichiarate tramite #include , la più comune ‘’stdio.h’’). Avvenuto il
collegamento si ottiene il file programma eseguibile (XXX.exe). TUTTAVIA il programma
sarà veramente eseguibile una volta solo caricato nella memoria centrale (il sistema
operativo si occupa di questo)
5. CARICAMENTO: il loader individua una porzione di memoria libera e ci copia il
programma.exe
6. ESECUZIONE: il programma e’ pronto a funzionare, inserendo i dati richiesti dal
calcolatore (input) ai quali verrà risposto con un output
1. si possono verificare degli errori run-time (infatti il programma puo’ essere
sintatticamente corretto, ma non avendo senso), si presentano quindi:
1. errori di calcolo
2. calcoli impossibili
3. loop infiniti (per esempio se non si e’ valutata bene la variabile di iterazione)
4. errori di concezione dell’algoritmo

MACCHINA di VON NEUMANN

 L’Unità Centrale (CPU)


 La Memoria Centrale (RAM)
 La Memoria di Massa (MM)
 Il Bus di Sistema (BUS)
 Le Unità Periferiche (UPi)

ARCHITETTURA DEL COMPILATORE


CPU: unità centrale di processamento, elabora e trasferisce i dati; esegue ed interpreta i
programmi e le loro istruzioni.
INFORMATICA

 CU: central unit, decodifica e esegue le istruzioni


 CLOCK: scandisce il ritmo, permette la sincronizzazione del compilatore mediante
temporizzazione
 ALU (unita aritmetico-logica) esegue senza possibilità di scelta ciò che la CU le comanda,
fornendo calcoli aritmetici di base o ragionamenti di logica booleana
 registri: piccoli spazi di memoria interni alla CPU utili per memorizzare risultati parziali o
dati di controllo (molto costosi)
o l'insieme di tutti i registri (coi vari valori) in un dato istante e’ definito contesto
(parallelismo con gli STATI dell’algoritmo)
o REGISTRO DATI
o REGISTRO INDIRIZZI
o REGISTRO CONTATORE PROGRAMMA
o R. ISTRUZIONE PROGRAMMA CORRENTE
o R. STATO

MEMORIA di MASSA: unita di stoccaggio delle informazioni, file, programmi…


 può avere dimensioni molto grandi (dimensioni di centinaia di GIGA, ma oggi anche di
qualche TERA)
 il tempo di accesso alle informazioni è relativamente lento (ordine di decine di millisecondi)
 la MM è permanente: ciò che viene salvato in essa rimane tale anche dopo averle tolto la
alimentazione

MEMORIA CENTRALE: E’ un insieme ordinato di parole (celle), la capacità di indirizzamento è


definita dalla dimensione del bus di indirizzi e dell’AD. Da essa passano tutti i dati necessari
all’elaborazione della CPU.(in altre parole, contiene i dati che la CPU può utilizzare)
 ha dimensioni ridotte rispetto alla MM (ordine di decine di GIGA)
 il tempo di accesso e’ rapido (ordine dei nanosecondi)
 e’ una memoria volatile (si resetta al momento dell’accensione, dati persi scollegando
l’alimentazione)
o RAM: random-access-memory; le celle sono ordinabili in un ordine qualunque
(accesso diretto), il tempo di accesso non dipende dalla cella
o ROM: read-only-memory; sono contenute i programmi protetti (intoccabili e
necessarie)
 BIOS: basic input/output system: carica in memoria il sistema operativo
quando la macchina viene accesa

BUS DI SISTEMA: connettori che trasmettono i bit di informazione tra un’unità e l’altra. I
trasferimenti sono gestiti dalla CPU (modello master/slave)
 Bus Dati
o trasferisce dati da master a slave e viceversa
 Bus Indirizzi
o trasferisce indirizzi, per esempio l’indirizzo di un dato dal registro indirizzi alla
memoria, per accedere al dato stesso
 Bus di Controllo
o da master a slave: codice dell’istruzione da eseguire (es. lettura da disco)
o da slave a master: informazioni sul successo dell’operazione

CICLO CPU = CICLO ESTRAI ED ESEGUI


 Prelievo (o Fetch):
o il registro Program Counter(PC) contiene l’indirizzo della prossima istruzione
o acquisizione prossima istruzione da memoria(che viene scritta nel Registro
Istruzione Corrente, CIR)
o incremento del registro PC
 Decodifica: interpretazione codice operativo
 Esecuzione: attivazione esecuzione pertinente all’operazione
INFORMATICA

o operazioni ALU su operandi (indirizzi)


o operazione di salto (modifica PC)

Operazione di lettura da memoria centrale (LOAD):


–la CPU carica nel registro indirizzi l’indirizzo della parola di memoria e lo trasmette alla memoria
via bus indirizzi
–la CPU invia il comando di Read Memory sul Bus di controllo
–la memoria trasmette sul bus dati il contenuto della parola verso il registro dati
–la memoria segnala al processore sul bus di controllo che l’operazione è stata completata con
successo: il dato si trova nel registro dati

Architettura del Calcolatore


 Componenti hardware > componenti fisiche
o Unità Centrale (CPU: Central Processing Unit, o processore)
o Memoria Centrale (spesso tecnologia RAM: Random Access Memory)
o Memoria di Massa (dischi, chiavette, nastri, …)
o Bus di Sistema (canale di comunicazione)
o Unità Periferiche (monitor, casse, tastiera, …)
 Software di sistema
o Il sistema operativo > Programma di grandi dimensioni e notevole complessità, che
permette all’utente di interagire con il calcolatore
o I sistemi di gestione di basi di dati
o Il software di rete •
o Gli ambienti di programmazione: – editor, compilatori, assemblatori, traduttori,
collegatori, debugger, … strumenti CASE (Computer-Aided Software Enginering),
IDE (Integrated Development Environment), …
o Gli strumenti di produttività: – videoscrittura, fogli elettronici, strumenti per la
produzione di “slide”, strumenti per la produzione di ipertesti, …
 Software applicativo
o Gestionale – sistemi informativi aziendali, elaborazione paghe, fatturazione,
automazione del terziario, automazione d’ufficio, ...
o • Applicazioni numeriche – meteorologia, applicazioni statistiche, … •
o Telematico – terminali bancari, prenotazioni aeree, Internet, ... •
o Automazione industriale – CAD/CAM, CAE, robotica, CIM, …
o • Controllo di processi – Impianti chimici, centrali elettriche e nucleari, traffico aereo,
…•
o Realtà virtuale, interfacce utente, software multimediale

VANTAGGI DEI SOTTOPROGRAMMI


 • Chiarezza del programma principale – Tutti i dettagli sono descritti nei sottoprogrammi – Il
programma principale descrive la struttura di controllo generale
 • Si evitano ripetizioni – Alcuni sottoproblemi devono essere affrontati più volte nella
soluzione di un problema principale – il sottoprogramma può essere richiamato tutte le
volte che sia necessario
 • Disponibilità di "sottoprogrammi" prefabbricati – Sottoproblemi ricorrenti già sviluppati da
programmatori esperti, raccolti nelle cosiddette "librerie" di sottoprogrammi

COMPONENTI DEL LINGUAGGIO


 Vocabolario: parole chiave che costituiscono il linguaggio – riconosciute dal parser
(analizzatore lessicale)
 • Sintassi: regole per comporre i simboli del vocabolario – Il controllo della sintassi avviene
tramite l’analizzatore sintattico
INFORMATICA

 • Semantica: significato delle espressioni – Il controllo della semantica è il più difficile – Un


errore semantico si può rilevare, in genere, solo a tempo di esecuzione

VARIABILI e TIPI DI DATO


• Tutte le variabili devono essere dichiarate, specificandone il tipo
• La dichiarazione deve precedere l’uso
 riservo uno spazio (diverso, più o meni grande) in memoria, per poterla utilizzare dopo
• Il tipo è un concetto astratto che esprime:
 – L’allocazione di spazio per la variabile
 – Le operazioni permesse sulla variabile
 il valore possibile di quella variabile
o IL COMPILATORE PUO’ CONTROLLARE, segnalando in caso in modo specifico
l’errore
• Perché dichiarare? – per poter controllare il programma in compilazione
DOUBLE: dimensione doppia di memoria rispetto al FLOAT (numeri più grandi o con più cifre
decimali)
dichiarare le CONST non è efficiente, riservo spazio per qualcosa che non è modificabile; per le
costanti globali (quelle che non cambieranno mai in tutto il programma) è meglio dichiararle
mediante #define all’inizio del programma
 in questo caso non occupano spazio di RAM in quanto è il pre-processore ad occuparsene

char
char a;
char b, c = 'Q'; /* Le costanti di tipo carattere si indicano con ‘’ */
const char d = 'q'; /* OK: d non sarà più modificato */
a = "q"; /* KO: "q" è una stringa, anche se di un solo carattere */
a = '\n'; /* OK: i caratteri di escape sono caratteri a tutti gli effetti */ b = "ps"; /* KO: non si possono
assegnare stringhe ai char */ c = 'ps'; /* KO: 'ps' non è una costante valida, non ha senso */ a =
‘7’; /* Che cosa succede? */ a = 7; /* Che cosa succede? */ a = ‘g’; a = a+1; /* La var a contiene ‘h’
(= ‘g’ + 1) */ a = ‘a’+1; /* La var a contiene ‘b’ (= ‘a’ + 1) */

I caratteri hanno un indice partendo da 0


 prima le lettere maiscole in ordine alfabetico
 poi le minuscole
 se metto le virgolette semplici (‘a’) il suo successivo sarà (‘b’); se è (‘7’) il successivo è (‘8’);
se dichiaro char a = 7, il carattere a non vale 7, ma il carattere associato al valore 7 nella
tabella di conversione

L’algoritmo è la risoluzione del problema, il programma è la trasposizione in un linguaggio +


comprensibile per la macchina

ISTRUZIONI INPUT/OUTPUT (I/O)


 printf O
 scanf I
per usare i caratteri di controllo come caratteri normali, bisogna precederli dal “backslash” (\’, \%)

ISTRUZIONI CONDIZIONALI
Valore o vero o falso
espressi con valori
 LOGICI: AND, OR, NOT
o AND = &&
o OR = ||
o NOT = !
 RELAZIONALI: INDICA le relazioni tra due variabili
o <, >, <=, >=
o uguale (==)
INFORMATICA

o diverso (!=)

VERIFICA DEI DATI DI INGRESSO (sempre)


 – Consiste nell'intercettare valori inaccettabili e nel segnalare il motivo per cui sono tali
o tramite condizioni: sia logiche che relazionali
 – Fa parte della gestione dell’interazione con l’utente
 – A volte risulta più complicata o onerosa dell’algoritmo che risolve il problema vero e
proprio
 e’ uno sviluppo per top-down successivi, quindi e’ consigliabile partire da un algoritmo
generale a uno sempre piu’ preciso

OCCORRE PROGETTARE CON CRITERIO IL DIALOGO INPUT/ OUTPUT


 – far precedere sempre un input da un output di richiesta ("prompt")
 – È buona norma non procedere nell’esecuzione finché non si sia esplicitamente verificato
che tutti i dati letti soddisfano le ipotesi per il funzionamento corretto del programma
o • L’utente umano è il più debole degli anelli, è difficilmente controllabile, ed è prono
agli errori

ITERAZIONE
 verificare che iteri e che ci possa uscire
o VERIFICO LA CONDIZIONE

COMPILATORE IN C QUALSIASI (guardo webeep)

28-09-23
VANTAGGI del CONCETTO di TIPO di VARIABILE
definisce lo spazio di memoria RAM e la corrispondeza diretta con il valore, purchè contenibile
nello spazio predisposto
 posso anche mettere il massimo valore di variabile inseribile (un intervallo)
o comodo per la verifica o per far si che il programma sia sempre corretto
o C è fortemete tipizzato, ma permette di confrontare variabili di tipi diversi e
convertirle
 vuole sempre la definizione di variabile
 ma nel caso del confronto (assegno un intero ad un float) il cambio avviene
automaticamente *cast implicito*
 es: int 1; float f;
per fare i + f, converte in float i
risultato in float, poi convertito in base alla variabile a cui viene assegnato
CONVERSIONE (copio slide 110, 116)

int n, m; float x;
x = n + x; (n è convertito in “float” e poi sommato a x)
n = x; (x è troncato della parte decimale, ne sopravvive la parte intera)
x = n; (n da “int” è convertito in (promosso a) “float”, aggiunte cifre decimali (0))
n = n / m; (il risultato della divisione è un intero troncato)
n = n / x; (n è convertito in “float”, poi si esegue la divisione,
e infine il risultato è troncato a “int”)
x = n / x; (come sopra ma il risultato resta “float”)
x = n / m; (attenzione: la divisione tra int tronca (quoziente))

CAST ESPLICITO:
int n, m;
float x;
x= (float) n/m; → solo per questo passaggio la divisione tra interi, n si comporta da float, la parte
decimale non viene troncata
INFORMATICA

 il tipo della variabile rimane sempre uguale (la variazione avviene e permane solo durante il
cast)

Si converte l'operando “meno ricco” nel tipo di quello “più ricco” (o “più largo”, o “più preciso”)
 il tipo più preciso domina nella conversione

Il cast (implicito o esplicito che sia) non modifica il tipo della variabile o delle variabili
coinvolte, ma solo il tipo associato al valore dell'espressione

VALORE DELLE ESPRESSIONI (slide 113)

VARIABILE INT
 dominio degli interi
 una parola (di solito 16-32 bit, ma cambia a secondo del sistema operativo)
o long int (32bit), short int (
o per spazi piccoli si possono usare anche i char con vaslori nell’intervallo -27<= val
>27
o unsigned solo +
o signed + e -
FLOAT E DOUBLE (spazio di memoria doppio rispetto al float)
 numeri razionali (con virgola)
o 313.456
o 3,7 E-5 (notazione scientifica)
 sono infiniti, le equivalenze potrebbero non risultare perche’ il calcolatore approssima
o mai condizioni con eguaglianze con tipo float
o per sostituire il confronto, sostituire la condizione in una disuguaglianza

TIPO CARATTERE (CHAR)


 8 bit in ram
 tabella ASCII: codice per associare i caratteri
o si possono fare queste condizioni: ‘1’ < ‘A’
 c’e’ una somiglianza tra INT e CHAR (converisone diretta)

Prima del while sempre interazione con l’utente, poi riporto la stessa condizione

VARIABILI ENUMERATIVE: che assume solo pochi valori (quindi li scrivo tutti)
 risparmio memoria RAM
es: enum {QUI, QUO, QUA} papero;
papero = QUA → papero = 2;
enum {gennaio, febbraio, marzo, aprile, maggio, giugno, luglio, agosto, settembre, ottobre,
novembre, dicembre} mese;
mese = aprile → mese = 3;
 se faccio printf(“%d”, giugno); mi dara’ 5
 tra {} sono etichette, NON VARIABILI
Si puo’ cambiare il primo valore dell’enumerazione
enum {sufficiente = 6, buono, distinto, ottimo, eccelso} voto;
 enumerazione parte da 6

VARIABILE COSTANTE
const int modelloauto = 159 (quello spazio di memoria avra’ sempre quel valore)
const float pigreco = 3.14159265
 cosi’ facendo spreco memoria
 meglio usare direttive al preprocessore
o #define PIGRECO 3.141592; prima dell’int main
poi nel programma scrivero’ l’etichetta PIGRECO
INFORMATICA

o il tipo viene definito implicitamente


o es #PIGRECO 3.1415
#AREACERCHIO(x) PIGRECO*(x)*(x)
area = AREACERCHIO(4)
area = PIGRECO * 4 * 4
 per togliere l’etichetta da un certo punto in poi del programma
o #undef PIGRECO

PROGRAMMARE IN C si puo’ fare in molti modi (esistono megliori e peggiori)


ISTRUZIONI DI CONTROLLO
CICLO WHILE
printf(“\nInserisci intero positivo: ");
scanf("%d", &valore);
while (valore <= 0) {
printf(“\nInserisci intero positivo: ");
scanf("%d", &valore);}
 ho scritto due volte la stessa cosa, per non ripetermi USO

CICLO DO-WHILE (comodo per valutare l’input dell’utente)


do { istruzioni1, istr2…
istrN}
while (cond);
 l’istruzione viene valutata dopo, e serve il ; dopo il while

Iterazioni con contatore (migliore CICLO WHILE)


int contatore = 1;
while (contatore <= N) {
…;
contatore++;
}

In ciclo do-while CON RIPETIZIONE *che scheefee*


do {
if (cond) {
istruz.1
...
istruz.N
}
} while (cond);

ciclo con sentinella (ripeto le istruzioni)


printf("prompt");
scanf("%…", valore);
while(valore != sentinella) {
elabora valore;
printf("prompt");
scanf("%…", valore);
}
INFORMATICA

con do-while (ripeto le condizioni)


do{
printf("prompt");
scanf("%…", valore);
if (valore != sentinella) {
elabora valore;
}
} while(valore != sentinella);

ITERAZIONE CICLO FOR (solo per iterazioni con contatore)


for(exp.iniz; cond; exp.incr){
istruzioni;
}

QUANDO CI SONO PIU’ CONDIZIONI ANNIDATE CONTROLLARE SEMPRE INSIEME

ISTRUZIONI CONDIZIONALI: if e if-else vanno sempre bene


sintassi switch (non usarla, molto complicata), stesso vale per le istruzioni break, goto e
continue (fanno fare i salti, altera la sequenza quindi il PROGRAM COUNTER della cpu)

Conoscenza del linguaggio e


stile di programmazione
 È necessario scrivere i programmi pensando alla loro leggibilità
 Conviene evitare di usare caratteristiche del linguaggio che sono legali, ma deprecabili
o Esempio: condizioni e espressioni la cui interpretazione dipenda fortemente
dall’ordine di valutazione delle sotto-espressioni
Consigli
 Fare in modo che il flusso di controllo sia poco intricato (evitare goto)
 Usare cicli for quando il numero di iterazioni è noto a priori
 Attenzione a non dimenticare i break in uno switch
 In uno switch mettere il caso di default come ultimo
o In questo caso non necessita di break
 Usare MOLTO parsimoniosamente break e continue nei cicli
 Esaminare SEMPRE con attenzione le condizioni di inizializzazione e terminazione dei cicli
 Capita che erroneamente si scrivano cicli infiniti!
o (rivedere il ragionamento fatto per l'algoritmo di Euclide per il MCD)

ARRAY e STRINGHE DI CARATTERI


ARRAY: insieme di variabili omogenee (variabili dello stesso tipo raggruppate); devo specificare il
nome e le posizioni dei vari elementi
Dichiarazione: int v[12]; nomearray[posizione]
COMODO: usare la define per mettere la lunghezza dell’array (limite max): PARAMETRIZZARE

In testa al programma: #define LUNG_SEQ 100

• Il preprocessore sostituisce testualmente LUNG_SEQ con 100

Si parte da indice 0, gli altri si ottengono per somma diretta al primo indice
 Da 0 a n-1
Array: vettori di elementi indicizzati, omogenei, memorizzati in celle di memoria consecutive
INFORMATICA

Per inserire tutti gli elementi dell’array posso usare un ciclo iterativo, poi ogni elemento può essere
trattato come una variabile indipendente
 Posso usare normalmente i comandi di printf e scanf
l’array può essere completamente pieno o incompleto(in questo caso serve una variabile che
ponga il limite di utilizzo); le sue dimensioni sono finite
Quando dichiaro un array, in RAM vengono riservati n celle per lo stesso tipo di variabile
int a[100]; – alloca memoria per 100 elementi interi, a partire da un certo indirizzo di memoria • la
dimensione deve essere nota al compilatore • deve essere una espressione costante • Per
accedere all' i-esimo elemento di a – calcola l'indice i (può essere un'espressione) – all’indirizzo
della prima cella di a somma il numero di celle pari allo spazio occupato da i elementi • ottiene così
l'indirizzo dell'elemento cercato

INIZIALIZZAZIONE DI UN ARRAY
Sintassi compatta:
int n[5] = {1, 2, 3, 4, 5};
Inizializzazione parziale: gli elementi più a destra sono posti a 0 int n[5] = {13}; n[0]=13, tutti gli
altri elementi sono posti a 0
Il MODO MIGLIORE per INIZIALIZZARE è usare un ciclo FOR
for (i = 0; i < 20; i++) /* int i; all’inizio */
a[i] = 0;

Oppure (lettura da terminale):

for (i = 0; i < 20; i++) { printf("Scrivi un intero: "); scanf("%d", &a[i]); }

ESEMPIO

Ricerca del massimo: max = a[0]; for (i = 1; i <= 19; i++) if (a[i] > max) max = a[i];

ESAMINARE SEMPRE IL VALORE FINALE DELL’INDICE AUMENTATO PRIMA DI RILEGGERE L’ARRAY

Per copiare gli elementi da un array all’altro devo operare sui singoli elementi (sempre iterazioni)

for (i = 0; i < 10; i++) { array2[i] = array1[i]; }

ARRAY A Più DIMENSIONI

Gli array a 1D realizzano i vettori,

quelli a 2D realizzano le matrici, …

• Dichiarazione: int A[20][30]; A è una matrice di 20 × 30 elementi interi (600 variabili distinte)

float F[20][20][30]; F è una matrice 3D di 20×20×30 variabili di tipo float (12.000!)


INFORMATICA

LE MATRICI

In matematica, una matrice è uno schieramento rettangolare di oggetti; le matrici di maggiore interesse
sono costituite da numeri appartenenti ad un campo. • Le matrici servono principalmente a descrivere
valori che dipendono da due parametri, e per questo motivo sono ampiamente usate in matematica e in
tutte le scienze.

Le righe orizzontali di una matrice sono chiamate righe, mentre quelle verticali sono le colonne. Ad
esempio, la matrice mostrata sopra ha tre righe e quattro colonne. In generale, una matrice è una matrice
con m righe e n colonne, dove m e n sono interi positivi fissati. Una matrice generica è descritta solitamente
indicando con aij l'elemento posizionato alla riga i-esima e alla colonna j-esima.

• I vettori possono essere considerati matrici molto semplici, aventi una sola riga o una sola colonna. Più
precisamente, una matrice con una sola riga, di dimensione, è detta vettore riga, mentre una matrice con
una sola colonna, di dimensione, è detta vettore colonna

SOMMA= somma degli elementi nella stessa posizione

MOLTIPLICAZIONE SCALARE: tutti i valori della matrice moltiplicati per il numero N

MOLTIPLICAZIONE PER MATRICE: solo se il numero di colonne della prima è uguale a quello di righe della
seconda

Risultato C11= somma di A11 per B11, B12, B13

Matrici quadrate

• Una matrice si dice quadrata se ha lo stesso numero di righe e colonne.

• Una matrice quadrata ha una diagonale principale, quella formata da tutti gli elementi ai,i con indici
uguali. La somma di questi elementi è chiamata traccia. L'operazione di trasposizione trasforma una matrice
quadrata A nella matrice At ottenuta scambiando ogni ai,j con aj,i , in altre parole ribaltando la matrice
intorno alla sua diagonale principale.

• Una matrice tale che ai,j = aj,i è una matrice simmetrica. In altre parole, A è simmetrica se A = At . Se tutti
gli elementi che non stanno nella diagonale principale sono nulli, la matrice è detta diagonale.

STRINGHE DI CARATTERE

Array di carattere con aggiunto alla fine il carattere terminatore

Funzioni: strcpy: copia le stringhe; strlen: lunghezza stringa

Scanf di stringhe (non serve la &); questo perché il nome dell’array da subito l’indirizzo del primo elemento

Comparazione tra stringhe: strcmp(str1,str2)

 Se 0, le stringhe sono uguali


 Se <0 o >0, stringhe diverse
INFORMATICA

STRUTTURE DATI: Struct


Aggregazione di variabili disomogenee (record)

struct {

char via[20]; /∗ 1o campo: stringa ∗/

int numero; /∗ 2o campo: intero ∗/

int CAP; /∗ 3o campo: intero ∗/

char citta[20]; /∗ 4o campo: stringa ∗/

} indirizzo;

per accedere al dato via, devo riferirmi a indirizzo.via

Tipi di dati astratti

Typedef int intero;

Intero numero;

equivale a: int numero;

CODIFICA BINARIA delle INFORMAZIONI

Associazione a simboli dei concetti; l’opposto della codifica è l’interpretazione.

Codifica ideale = legame biunivoco.

 Codifica ridondante: più simboli per un concetto


 Codifica ambigua: allo stesso simbolo sono legati due o più significati (problematiche)

Come si realizza la codifica:


1. Scegliere l’insieme dei simboli (alfabeto)
2. Legarli ai concetti in maniera non ambigua
Codificare i numeri:
 Scegliere le cifre (il numero di cifre è la Base)
o Sempre specificare la base
 Legarle al valore
o Es. base decimale (0 – 9), notazione posizionale: il significato della cifra dipende
dalla posizione che essa occupa nel numero
o 912: es 9 = 9x10^2=900; 1: 1x10^1=10; 2x10^0=2
o Valore cifra C(n) in base B: CxB^n-1

BASE BINARIA: Alfabeto:{0,1}; Base: 2; sempre notazione posizionale (potenze di 2)


INFORMATICA

 BIT = BInary digIT


 Venne scelta per i sistemi digitali perché posso legare a due valori distinti due valori distinti
di tensione
o 0: bassa tensione
o 1: alta tensione

Es: 8bit = 2^8 significati


00000000 binario = 0 decimale
00001000 binario = 1x2^3=8 decimale
11111111 binario = 1x2^8-1 = 255 decimale
Conversione da decimale in binario: METODO DEI RESTI

29/2 = 14 e resto 1
14/2 = 7 e resto 0
7/2 = 3 e resto 1
3/2 = 1 e resto 1
1/2 = 0 e resto 1
29 decimale = 11101 binario

MOLTIPLICARE PER 2 in base binaria vuol dire aggiungere uno 0 a destra:


 38 = 19 x 2 = 100110 dove 100110 binario è 19decimale
CONVERISONE RAPIDA PER ESPONENTI GROSSI

Errore di approssimazione < del 10%


INFORMATICA

AUMENTO e RIDUZIONE DI BIT


Se aggiungo a sinistra uno o più 0 il numero non cambia; se lo aggiungo a destra, il numero
raddoppia
 Per ridurre il numero di bit bisogna togliere partendo da sx uno 0 alla volta, fermandomi al
primo bit =1
La RAM è uno spazio fisico finito, non posso registrare numeri con più cifre di quante registrabili
nella cella
NUMERI INTERI in MODULO e SEGNO (m&s)
Codifica binaria classica con un bit riservato per il segno
 0 = +; 1 = -
 Quindi: se ho 20 bit disponibili, 19 sono utilizzati per le cifre (2^19 numeri decimali), 1 bit
invece è per il segno (il bit più a SX)
INFORMATICA

o La codifica (m&s) è ridondante (caso dello 0 decimale, ha due rappresentazioni


equivalenti)
Migliore
CODIFICA COMPLEMENTO A DUE: l’ultimo bit (bit di segno) a sx fa comunque parte del numero,
ma ha segno negativo
 Lo zero è considerato positivo -0 = 0
INVERTIRE UN NUMERO (in complemento due)

Se il numero è negativo, posso estenderlo senza variarlo aggiungendo a SX serie di 1; per numeri
positivi devo aggiungere serie di 0

OVERFLOW: risultato dell’addizione eccede il potere di rappresentazione dei bit disponibili; nelle
addizioni in base binaria se ho riporto perduto, è overflow; in complemento 2 no vale la regola del
riporto perduto
INFORMATICA

In C2:
 Somma di numeri discordi, non overflow
 Se addendi concordi se il risultato è discorde
o Addendi negativi, risultato positivo
o Addendi positivi, risultato negativo

Da numeri in esadecimale/ottale in numeri binari è comodo passare per il decimale associato

NUMERI FRAZIONARI (tra due interi ne ho infiniti, non posso rappresentarli tutti in modo preciso;
al massimo in modo approssimato)

MATHLAB/OCTAVE
Strumento per il calcolo numerico, serve per i corsi futuri. Aiuta a fare grafici e studi matematici
Programma interpretato: la trasformazione da linguaggio MathLab a codifica in linguaggio
macchina avviene mentre si esegue
 Si possono eseguire le singole istruzioni, mentre si codifica
 Non c’è il compilatore che aiuta alla correzione sintattica
 I programmi interpretati sono più “lenti” in esecuzione: ad ogni esecuzione c’è la traduzione
in linguaggio macchina
DICHIARAZIONE DI VARIABILI
 Non necessaria la dichiarazione, appena introdotte vengono definite
 Si possono successivamente cambiare di tipologia
 ARRAY: si possono cambiare dinamicamente, no definire la definizione
precompilazione
o L’ARRAY è la base di Mathlab
 1x1: scalari
 1xn o nx1 sono i vettori
 A due dimensioni sono matrici
 Con più di due dimensioni: matrici multidimensionali
DIRECTORY CORRENTE
STORIA DEI COMANDI
FINESTRA DEI COMANDI
WORKSPACE: mostra le variabili usate
INFORMATICA

COMANDI: da scrivere dopo il prompt “>>”


 a = 10; assegnamento del valore alla variabile a (se a è la prima volta che si usa, viene
creata)
o messa nel workspace, fino a che non si ripulisce o si spegne il pc
 help: richiama la guida in linea
 who, whos: serve per descrivere una variabile (dà tutte +le info di una variabile)
 save e load: per salvare/caricare tutte le variabili e valori associati su/da file
 clear: cancella tutte le variabili
 OGNI ISTRUZIONE TERMINA CON IL ; se non si mette viene analizzato (visualizzato) il
risultato, programma più lento (non è necessario ;, senza il programma gira)

Quando si fa un’operazione senza assegnarla ad una variabile, mathlab la assegna ad una


variabile di default ANS
Eps: la più piccola differenza rappresentabile
Numeri complessi: unità immaginari “j”
Confronti: == uguale; ~= diverso
 1 vero
 0 falso
ARRAY: a = [1 2; 3 4] (matrice 2x2);
 X(5) array di cinque elementi, conteggio elementi parte da 1; elementi non assegnati pari a
0
o Trasposta di una matrice = invertire righe e colonne rispetto alla diagonale
 Comando: se a è una matrice, la trasposta sarà: b = a’
 a = [ ], array vuoto
INFORMATICA

 x = 1:5, produce vettori numerici con passo 1


o per modificare il passo y = 0:pi/4:pi passo di pigreco/4
o sin (y), porta i valori del seno per i valori contenuti in y
 si possono costruire array formati dalla combinazione di due array
PRODUZIONE DI DIAGRAMMI a DUE DIMENSIONE
Funzione: >>plot(x,y)
Sempre titolare gli assi uso comando >>xlabel(‘’) e >>ylabel(‘’), titolo: >>title(‘’)

Comando “hold on” serve per mettere i due grafici sullo stesso piano cartesiano
COMMENTI: precedere il commento: >>%commento (tutto ciò che è posto dopo il % è un
commento)
INFORMATICA

ARRAY: definiti
sempre in DOUBLE (si possono memorizzare numeri reali, immaginari, complessi)
STRINGHE: chiuse tra ‘ ’
INFORMATICA

QUALSIASI FUNZIONE è GIA’ PRESENTE IN MATHLAB, non bisogna includere delle librerie

Se nel vettore ci sono valori maggiori dell’indice max del vettore stesso e viene usato come valore
indice da: ERRORE
INFORMATICA

OPERAZIONE CON SCALARI e ARRAY


 SCALARI: somma, sottrazione, prodotto, divisione, potenza
INFORMATICA

 MATRICI: prodotto possibile solo se

le colonne di b sono
uguali alle righe di a
 %d
 %f
 %e
 %g
o Operatore puntato: (solo per matrici quadrate), operazione di moltiplicazione
elemento per elemento
INFORMATICA

SE è POSSIBILE EVITARE UN CICLO, EVITARE IL CICLO


PER OTEENERE IL MINIMO delle riga usare il comando min ma sulla trasposta

INPUT/OUTPUT
 Funzione input: a = input (‘inserisci un valore’)
o Si può inserire uno scalare, un vettore (tra [ ]) o una stringa (tra ‘ ’)
 Funzione output:
o Non metto il ;
o >>disp (visualizza solo caratteri); se ho valori numerici bisogna associarlo al
comando >>num2str


o >>fprintf (uguale a C)

%d (interi), %e (formato esponenziale), %f (virgola mobile), %g (il più corto tra il formato esponenziale e
quello in virgola mobile)

SALVARE/CARICARE su/da FILE: comandi SAVE e LOAD


O usando file proprietari di MatLab (.mat), o un file di testo ascii
 SAVE:
o File matlab (.mat): il file viene salvato direttamente in formato .mat; letto solo da
matlab/octave
 >>save filename (salvo sul file tutte le variabili sul workplaces)
INFORMATICA

 >>save filename array1 array2 (salva sul file solo le variabili di array1 e
array 2)
o File ascii: bisogna nominarlo e mettere l’estensione
 >>save -ascii filename.dat x;
 LOAD:
o File matlab (.mat): >>load filename (estensione implicita .mat); si possono
specificare alcune variabili del file (postporle dopo il nome del file)
o File ascii: >>load filename.dat

SCRIPT (m-file)
E’ un file di testo che contiene una sequenza di comandi Matlab; il file deve avere
un’estensione .m; i comandi vengono eseguiti sequenzialmente
 Lo script non è un programma!!!
o Non accetta input e non genera output, agisce solo su variabili scritte nello script o
nel workspace
 Bisogna usare un editor di testo puro (non usare word)


INFORMATICA


INFORMATICA

STRUTTURE DI CONTROLLO in MATLAB/OCTAVE

Strutture che servono per costruire qualsiasi algoritmo, comandi di selezione o iterazione che
hanno come risultati o vero o falso.
 Falso = 0
 Vero = 1(o tutto tranne che 0)
Valori logici: true e false
 Dimensione di 1 byte
 Tipo logico
OPERATORI RELAZIONALI: uguali come in C
 ==; ~=; >; <; <=; >=
 Si applicano su scalari, ma anche su array in generale (ma con dimensioni uguali): il
confronto avviene elemento per elemento, nella stessa posizione
 I numeri razionali viene sempre rappresentato in maniera approssimata (non è sicuro usare
comandi di uguaglianza con valori razionali)
APPLICAZIONE su ARRAY
Il risultato logico viene posto in un una matrice di uguali dimensione
Lo stesso vale per le stringhe (confrontati caratteri)

OPERATORI LOGICI: ordine di esecuzione uguale per C


 NOT
 OR (|| o |)
 AND (&& o &)
 XOR: se concordi falso; se discordi vero
o FF = F
o FT = T
o TF = T
o TT = T
INFORMATICA

Doppi simboli di AND e OR si applica solo agli scalari: valuta inizialmente solo il primo operando,
se il primo operando basta a determinare il valore logico dell’espressione, non viene valutato il
secondo

Il singolo simbolo, invece, si applica SEMPRE agli array e valuta entrambi gli operandi (si può
applicare anche agli scalari)

SI POSSNO USARE VETTORI LOGICI per SELEZIONARE gli ELEMENTI dell’array di partenza
 Si può applicare anche alle matrici
o Confronto tra singoli elementi
o Confronto elemento e costante
 Si ottiene un vettore con all’interno gli elementi che verificano l’espressione logica
o N.S.: matlab legge scorrendo per colonne

I confronti tra metrici/vettori si possono applicare direttamente all’interno di funzioni di calcolo


FUNZIONE DI SELEZIONE: FIND
 Trova gli indice degli elementi che mi interessano
 Se confronto due vettori con & se gli elementi confrontati sono diversi da zero ottengo 1

FUNZIONI LOGICHE
INFORMATICA

COSTRUTTO IF
Uguale in C; non ci sono parentesi graffe. Per chiudere il blocco si usa la parola “end”
COSTRUTTO SWITCH

ITERAZIONI (non si usa il ciclo DO)


CICLO WHILE
Uguale in C: while (espressione) ramo di istruzioni “end” (chiusura blocco)
CICLO FOR: opera come in c, ma non si mettono valori di partenza, limite e incremento, ma si
crea un vettore con i valori che si andranno ad utilizzare
For n = 1:7
Number(n) = input(‘enter value’);
end

LE ITERAZIONI IN MATLAB bisogna usarle il meno possibile, sono già implementate delle
funzione di matlab
--- VETTORIZZAZIONE ---
Si usano i sottoarray
Es.1
b = a>5
a(b) = sqrt(a(b));
es.2
INFORMATICA

n = 1:100;
square(n) = n.^2;

LE STRUCT in matlab e ARRAY di STRUCT


Due modi:
1. Analogo a c
2. Elemento per elemento
 Facendo così: dopo aver completato la struct per primo elemento,
iniziando a completare la struct per il secondo elemento l’elemento 2
avrà tutti campi generati per 1, ma inizializzati come array vuoti

FUNZIONI
TEXTREAD: legge file ASCII organizzati in tabelle
Serve per importare dati generati con altre applicazioni
INFORMATICA

FUNZIONE APERTURA FILE


Fopen con due campi
- Nome file
- Modalità di apertura
o Il file deve esistere in apertura
o Se non esiste, viene creato in modalità di apertura “scrittura”
 [fid, msg] = fopen(“”,””)
o Fid: intero per identificare il file
o Msg: messaggio diagnostico (non obbligatorio)

FUNZIONE DI CHIUSURA FILE:


status= fclose(fid)
se status = 0, la chiusura ha avuto successo, se -1 ci sono stati problemi
fclose(all), chiude tutti i file
FUNZIONE DI SCRITTURA NEI FILE
fwrite,
fprintf,
fread,
fscanf

FUNZIONI in MATLAB
Particolari sequenze di istruzioni che facilitano la stesura del programma (MODULARIETA’),
rendono più leggibile il programma stesso permettendo un’astrazione maggiore (ASTRAZIONE)
In più tramite queste istruzioni è possibile condividere il “programma” che risolve un determinato
problema a persone terze (RIUSABILITA’) (come script? No, le funzioni lavorano in un ambiente
separato rispetto al programma principale, ma richiamandole si collegano i due ambienti SENZA
CHE LE VARIBILI VADANO IN CONFLITTO TRA LORO)
STRUTTURA di UNA FUNZIONE
 NOME SPECIFICO
INFORMATICA

 Può essere invocata


 Ricevere parametri (input) che influenzano la sua esecuzione
o I parametri presenti nel workspace che si volgiono utilizzare nella funzione devono
essere importati
o Se più input bisogna separarli da virgole (facendo attenzione all’ordine)
 Produrre e assegnare un valore risultato (output)
o Metterle tra parentesi quadre (viene generato un array contente i valori in output)

COME SCRIVERE UNA FUNZIONE (nell’editor di matlab)


1. Nella prima riga bisogna scrivere la TESTATA, composta da: “function” seguita da i
parametri output, = ‘nome della funzione (con la quale verrà invocata) e tra () le variabili
input
2. Nelle righe successive bisogna mettere dei commenti: verranno visualizzati se si utilizza la
funzione help(nome funzione)
a. NB: vengono visualizzati i commenti in righe adiacenti a partire dalla seconda riga
fino alla prima riga di istruzioni (esclusa, tutti gli altri commenti esclusi)
b. In questi commenti bisogna mettere sinteticamente il funzionamento della funzione
i. Dire cosa fa, quanti valori input e in che ordine sono richiesti, quanti valori
output vengono dati e il loro ordine
3. Segue il CORPO DELLA FUNZIONE
a. Serie di istruzioni, è la parte eseguibile
b. Deve terminare con end
4. SALVATAGGIO FILE FUNZIONE
a. File: nomefunzione.m
b. Deve trovarsi nel PATH di MATHLAB

Le variabili (output/input) presenti nel file della funzione sono dette “parametri formali”
 Sono usati per definire la funzione
Quando la funzione è invocata in un programma, ai parametri formali bisogna assegnare i valori
presenti nel workspace (definiti “parametri istantanei”)
 Assegnando i valori bisogna stare attenti all’ordine con cui vengono assegnati
QUANDO VIENE INVOCATA LA FUNZIONE
 Il programma si interrompe e aspetta che si eseguita totalmente la funzione;
 Per fare questo è necessario controllare l’ordine delle istruzioni (sempre ciclo PRELEVA ed
ESEGUI)
o Viene associato il RECORD di ATTIVAZIONE che contiene:
 I dati relativi all’ambiente del sottoprogramma
 L’indirizzo di ritorno nel programma chiamante
 Questo perché: a ogni chiamata a funzione richiede allocazione di spazio di
memoria per le sue variabili locali
I record di attivazione sono impilati in uno STACK di RAM (pila) secondo il concetto LIFO: last
input first output
 Quando la funzione è terminata, non è più chiamata il RDA viene eliminato
 Lo scorrere lungo lo STACK è controllato dal PUNTATORE (Stack Pointer)
o Registro che contiene l’indirizzo della parola di memoria da leggere nella PILA
INFORMATICA

 Operazione di inserimento: - incremento SP - scrittura in parola di memoria


indirizzata da SP
 Operazione di estrazione: - lettura da parola di memoria indirizzata da SP -
decremento SP
Funzioni possono chiamare altre funzioni o chiamare se stesse (ricorsione)
QUANDO SI CHIAMA UNA FUNZIONE:
 Chiamata la funzione inserendo le variabili attuali
 Creato il RDA della funzione chiamata
 Assegnate ai parametri input formali il valore delle variabili attuali (collegate per locazione)
 Eseguito il corpo della funzione
 Assegnati i valori output ai parametri formali output
 Copiati i valori formali output in quelli attuali
 La funzione non è più chiamata, il RDA viene eliminato

SE NEL FILE di UNA FUNZIONE sono definite altre funzioni, quest’ultime possono essere
utilizzate dalla FUNZIONE primaria, ma non sono visibili all’esterno (non possono essere chiamate
in autonomia)

FUNZIONI RICORSIVE: funzioni che si richiamano (DA SAPERE SOLO dal POV TEORICO)
A ogni chiamata viene creato un nuovo record di attivazione, quello precedente viene congelato
fino a quando l’ultimo RDA non viene eliminato (perché la sua chiamata corrispettiva è terminata):
a questo punto il RDA chiamante riprende da dove si era bloccato
INFORMATICA

Per evitare le RICORSIONI INFINITE bisogna rispettare le condizioni per la ricorsione


CONDIZIONI per RICORSIONE:

Se la si cade in una RICORSIONE INFINITA il programma si interrompe perché la memoria RAM è


completa; ma lo stesso problema può capitare anche se la ricorsione è scritta in maniera corretta
LA RICORSIONE NON SFRUTTA IN MANIERA EFFICIENTE LA RAM
L’iterazione è migliore quando la soluzione iterativa è semplice da stendere

Ogni soluzione ricorsiva può essere trasformata in una soluzione iterativa


INFORMATICA

SISTEMA OPERATIVO
Funziona come una macchina virtuale, nasconde agli utenti i dettagli dell’architettura hardware
Fornisce funzionalità di alto livello che facilitano l’accesso alle risorse
 MONOUTENTE MONOPROGRAMMATO
 MONOUTENTE MULTIPROGRAMMATO
 MULTIUTENTE
SISTEMA OPERATIVO: struttura strati
Il cuore (kernel) sono tre funzionalità principali
1. Gestione periferiche
a. Sono meccanismi software a cui è affidato il compito di trasferire dati da e verso le
periferiche  Consentono ai programmi applicativi di leggere o scrivere i dati con primitive
di alto livello che nascondono la struttura fisica delle periferiche (e.g. nel sistema Unix le
periferiche sono viste come file speciali)  Si distingue generalmente fra: Driver fisici, che
vengono utilizzati dal gestore delle interruzioni per il trasferimento dei dati Driver logici, che
fanno parte del sistema operativo e forniscono una gerarchia di memorie
2. Gestione memoria
a. PAGINAZIONE: aree contigue di uguali dimensioni (fissata); ogni pagina è formata
da celle di memoria contigue; dati e programmi possono essere allocati in diverse
pagine non necessariamente contigue
b. SEGMENTAZIONE: il programma viene diviso in frammenti quando compilato
i. Partizione logica
ii. Si possono caricare frammenti in maniera indipendente
iii. Frammenti di lunghezza variabile
3. Gestione processi
a.  Il SO si occupa di gestire l’esecuzione concorrente di più programmi utente  L’uso della
CPU del calcolatore (o delle CPU nei sistemi multiprocessore) deve essere distribuito in
maniera opportuna fra i programmi da eseguire  Ogni programma eseguito ha a
disposizione una macchina virtuale realizzata dal SO che ne consente l’esecuzione come se
la CPU del calcolatore fosse interamente dedicata ad esso

GESTIONE del FILE SYSTEM: il so gestisce i file sulla memoria di massa


 Creare file
 Nominarli
 Collocazione
 Accesso in scrittura e lettura
 File organizzati ad albero nel direttorio

GESTIONE INTERFACCIA DELL’UTENTE


Consente l’inserimento di diversi comandi
GRAFICA o TESTUALE
INFORMATICA

GESTIONE DEI PROCESSI


Un processo non è un programma;

PROCESSO = Rappresenta un’istanza di un programma composta da: codice eseguibile (il programma
stesso) dati del programma informazioni relative al suo funzionamento (stato)

STATO INTERNO: insieme dei valori delle variabili e dei registri utilizzati in un dato istante
STATO ESTERNO: indica la relazione con gli altri processi
 IN ATTESA: attesa di un input/output, ogni volta che si ha una comunicazione con una
periferica
 IN ESECUZIONE:
 PRONTO: può essere eseguito, ma non avviene perché c’è una singola CPU (fisica) che si
divide per i vari processi in intervalli di tempo
Le risorse fisiche sono o DIVISIBILI o MENO
 Se DIVISIBILE (es. RAM) viene divisa in blocchi per i diversi processi
 Se non lo è: viene condivisa a rotazione tra i vari processi (es. CPU)
Il SO ha un’esecuzione privilegiata : è il supervisor che permette di controllare gli altri processi
(decidere quale processo ha priorità maggiore)

A ogni processo viene dato un QUANTO di tempo; al termine del quanto viene rivalutato dal
SUPERVISOR

PROCESSO LANCIATO = PROCESSO PRONTO


 Il supervisor decide chi ha priorità
Il supervisor porta un processo in ESECUZIONE (per il quanto di tempo)
Se termina il quanto, ma non la sua esecuzione il processo ritorna alla stato di pronto e si rivaluta
la sua priorità)
Il processo può uscire dello stato di esecuzione per un’interruzione interna (e passa allo stato di
attesa, fino a che non avviene un determinato evento esterno)
 Dopo l’evento esterno il processo in attesa torna allo stato di pronto e viene valutata la sua
priorità
LA GESTIONE IN QUANTI DI TEMPO permette di rendere il programma totale più efficiente; infatti
le risorse non divisibili vengono condivise per tot tempo ai vari processi vedendo chi ha priorità
maggiore; così sembra che il vengano gestisti più processi contemporaneamente quando in realtà
ne viene gestito uno per un lasso di tempo determinato e poi si passa ad un successivo a priorità
maggiore e quello precedente è “congelato” in stato di pronto

Potrebbero piacerti anche