Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Introduzione all'informatica: Compressione dati, algoritmi, complessità e rete, Appunti di Elementi di Informatica

appunti su algoritmi, ricerca binaria/dicotomica, come si rappresenta un'informazione, digitalizzare un testo, immagini digitali, suono digitale, architettura di un computer, il funzionamento delle reti, ricerche web.

Tipologia: Appunti

2017/2018

Caricato il 12/10/2018

jasmineee14
jasmineee14 🇮🇹

1 documento

1 / 28

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA
Lo sviluppo tecnologico:
Paleolitico: sistemi per calcolo automatico (mani, calculi, abaco,...) '600: dispositivi meccanici per calcolo
automatico 1800/1840: primi dispositivi meccanici “a programma”: telai Jacquard, pianole, le macchine di
Babbage (sono i primi computer meccanici simili ai compuetr moderni). È una macchina analitica
programmabile tramite schede perforate avente un linguaggio di programmazione ma mai realizzata. 1843:
pubblicazione delle note di Ada Lovelace sulla analytical engine di Babbage, e nascita della programmazione
1896: Hollerith fonda la “Tabulating Machine Company” (poi IBM) che produce sistemi meccanografici a
schede. Dona il primo impiego produttivo di informazioni digitali; crea le schede perforate per il censimento
americano. 1930: prime macchine elettromeccaniche di grandi dimensioni (Zuse in Germania, Mark 1 ad
Harvard) 1946: ENIAC, elaboratore a valvole e a programma filato. È stato il primo computer elettronico
con 17.000 valvole. Era PRGRAMMATO per specifici problemi tramite cavi collegati su pannelli,
puramente hardware. 1950: prime macchine a programma memorizzato (von Neumann: ENIAC, IAS
Princeton). Dopo questi modelli nascono i transistor e i circuiti integrabili. Il transistor permette un basso
consumo, è affidabile e compatto. I circuiti integrati sono un insieme di transistor e connessioni fabbricati in
un unico chip. Stampa a strati.
PROCESSORE, MEMORIA E PROGRAMMI: un programma è un insieme di istruzioni (elementari) che
realizza un compito complesso. I computer digitali si basano su programmi scritti in memoria ed eseguiti dal
processore (CPU). Le istruzioni non sono più fisiche ma anche esse digitali (software) e ciò permette di
avere programmi sostituibili velocemente, caricando nuove istruzioni in memoria. I programmi sono più
complessi dato che il limite è segnato dalla memoria e non più dall’hardware.
SOFTWARE: fino agli anni 80 erano monolitici ora invece sono software a più livelli; vantaggi-> i
programmi di un livello, usano i livelli sottostanti e forniscono funzionalità a livelli sovrastanti; sviluppo
collaborativo di molti programmatori. Un Software è un insieme di programmi e istruzioni. I primi
interfaccia erano a riga di comando basate su monitor e tastiera poi quella grafica (xerox, gui-> windows,
icons; mouse con i Macintosh).
LEGGE DI MOORE.-> i transistor in un chip raddoppiano ogni 2 anni
Digitalizzazione dell’informazione: i dati vengono rappresentati da numeri ovvero numeri binari composti da
cifre 1 e 0. Con i dati digitali la copia delle informazioni è perfetta mentre quella con dati analogici si
modifica a causa del processo di conversione e del degrado del supporto (es. dischi in vinile)
Problema storico: esiste un procedimento per decidere se una “proposizione” è o meno conseguenza logica
di altre? Turing sostenne che esistono proposizioni indecidibili. Nasce così il concetto di algoritmo ovvero
una sequenza di operazioni elementari che compongono una procedura di calcolo; così venne creata la sua
macchina cioè una macchina in grado di calcolare ogni funzione (immaginaria). Tra le proposizioni
decidibili o le funzioni calcolabili o problemi risolvibili alcune sono più facili di altre: esistono diverse classi
di complessità, corrispondenti al tempo necessario per risolvere i problemi. Alcuni di questi problemi non
sono risolubili in pratica, perché possono essere risolti solo in tempi immensi (miliardi di anni). Chomsky
identificare 4 tipi di linguaggi formali, caratterizzati da diverse grammatiche, servono a classificare linguaggi
informatici e automi. Arriviamo a shannon con la teoria dell’infirmazione: pone basi per la progettazione di
circuiti digitali ovvero reti logiche costituiti da bit (binary digit), variabili che assumono solamente i valori
di 1 e 0. Esso fonda la teoria dell’informazione: si fonda sul fatto di ricostruire in maniera affidabile
informazioni trasmesse da un mittente e affette da rumore. Essa è la teoria alla base della costruzione di reti
di calcolo.
ALGORITMI indispensabili:
1. Compressione dei dati – Senza perdite (“lossless, es. zip), con perdite (“lossy”, es. mp3) – Possibilità
di trasmettere contenuti in rete
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c

Anteprima parziale del testo

Scarica Introduzione all'informatica: Compressione dati, algoritmi, complessità e rete e più Appunti in PDF di Elementi di Informatica solo su Docsity!

INFORMATICA

Lo sviluppo tecnologico:

Paleolitico: sistemi per calcolo automatico (mani, calculi, abaco,...) ●'600: dispositivi meccanici per calcolo automatico ●1800/1840: primi dispositivi meccanici “a programma”: telai Jacquard, pianole, le macchine di Babbage (sono i primi computer meccanici simili ai compuetr moderni). È una macchina analitica programmabile tramite schede perforate avente un linguaggio di programmazione ma mai realizzata. ●1843: pubblicazione delle note di Ada Lovelace sulla analytical engine di Babbage, e nascita della programmazione ●1896: Hollerith fonda la “Tabulating Machine Company” (poi IBM) che produce sistemi meccanografici a schede. Dona il primo impiego produttivo di informazioni digitali; crea le schede perforate per il censimento americano. ●1930: prime macchine elettromeccaniche di grandi dimensioni (Zuse in Germania, Mark 1 ad Harvard) ●1946: ENIAC, elaboratore a valvole e a programma filato. È stato il primo computer elettronico con 17.000 valvole. Era PRGRAMMATO per specifici problemi tramite cavi collegati su pannelli, puramente hardware. ●1950: prime macchine a programma memorizzato (von Neumann: ENIAC, IAS Princeton). Dopo questi modelli nascono i transistor e i circuiti integrabili. Il transistor permette un basso consumo, è affidabile e compatto. I circuiti integrati sono un insieme di transistor e connessioni fabbricati in un unico chip. Stampa a strati.

PROCESSORE, MEMORIA E PROGRAMMI: un programma è un insieme di istruzioni (elementari) che realizza un compito complesso. I computer digitali si basano su programmi scritti in memoria ed eseguiti dal processore (CPU). Le istruzioni non sono più fisiche ma anche esse digitali (software) e ciò permette di avere programmi sostituibili velocemente, caricando nuove istruzioni in memoria. I programmi sono più complessi dato che il limite è segnato dalla memoria e non più dall’hardware.

SOFTWARE: fino agli anni 80 erano monolitici ora invece sono software a più livelli; vantaggi-> i programmi di un livello, usano i livelli sottostanti e forniscono funzionalità a livelli sovrastanti; sviluppo collaborativo di molti programmatori. Un Software è un insieme di programmi e istruzioni. I primi interfaccia erano a riga di comando basate su monitor e tastiera poi quella grafica (xerox, gui-> windows, icons; mouse con i Macintosh).

LEGGE DI MOORE.-> i transistor in un chip raddoppiano ogni 2 anni

Digitalizzazione dell’informazione: i dati vengono rappresentati da numeri ovvero numeri binari composti da cifre 1 e 0. Con i dati digitali la copia delle informazioni è perfetta mentre quella con dati analogici si modifica a causa del processo di conversione e del degrado del supporto (es. dischi in vinile)

Problema storico: esiste un procedimento per decidere se una “proposizione” è o meno conseguenza logica di altre? Turing sostenne che esistono proposizioni indecidibili. Nasce così il concetto di algoritmo ovvero una sequenza di operazioni elementari che compongono una procedura di calcolo; così venne creata la sua macchina cioè una macchina in grado di calcolare ogni funzione (immaginaria). Tra le proposizioni decidibili o le funzioni calcolabili o problemi risolvibili alcune sono più facili di altre: esistono diverse classi di complessità, corrispondenti al tempo necessario per risolvere i problemi. Alcuni di questi problemi non sono risolubili in pratica, perché possono essere risolti solo in tempi immensi (miliardi di anni). Chomsky identificare 4 tipi di linguaggi formali, caratterizzati da diverse grammatiche, servono a classificare linguaggi informatici e automi. Arriviamo a shannon con la teoria dell’infirmazione: pone basi per la progettazione di circuiti digitali ovvero reti logiche costituiti da bit (binary digit), variabili che assumono solamente i valori di 1 e 0. Esso fonda la teoria dell’informazione: si fonda sul fatto di ricostruire in maniera affidabile informazioni trasmesse da un mittente e affette da rumore. Essa è la teoria alla base della costruzione di reti di calcolo.

ALGORITMI indispensabili:

  1. Compressione dei dati – Senza perdite (“lossless, es. zip), con perdite (“lossy”, es. mp3) – Possibilità di trasmettere contenuti in rete

● Indicizzazione nei motori di ricerca – Trovare pagine corrispondenti a una ricerca – Ordinarle per rilevanza (PageRank di Google)

● Crittografia (a “chiave pubblica”) – Comunicare in maniera sicura sulla rete

● Apprendimento automatico – Riconoscere volti, parlato, scrittura a mano, ...

  1. Algoritmo: descrizione di un metodo per la soluzione di un problema – Un problema è caratterizzato da un insieme di dati di partenza (input) – La soluzione del problema è rappresentata da un insieme di dati ottenuti al termine dell’algoritmo (output)

● Un algoritmo definisce tutti i passi (operazioni, istruzioni) necessari per calcolare un output a partire da un input

● Un computer può risolvere soltanto problemi computazionali per i quali sia noto un algoritmo

  1. Un programma è la traduzione di un algoritmo in un linguaggio di programmazione

● Ma non è necessario conoscere un linguaggio di programmazione per scrivere un algoritmo – Possiamo scriverlo in linguaggio umano (come faremo nei prossimi esempi)

Un algoritmo è determinabile (privo di ambiguità, ad ogni passo so quale sarà il prossimo), terminabile (arrivo alla conclusione dopo un certo numero di passi) ed efficace (ogni passo è eseguibile e chi lo crea deve saperlo svolgere).

Un computer può risolvere sol problemi che potrebbero essere risolti anche manualmente.

Es. di un algoritmo: Problema : Calcolare l’area di un triangolo: Input: base e altezza (ad es. base=6, altezza=2) – Output: area ● Algoritmo : “base per altezza diviso 2” 1.Moltiplicare base per altezza 2.Dividere per 2 il risultato dell’istruz. 1 – Output: il risultato dell’istruzione 2 ● Proprietà di un algoritmo: Non è ambiguo (2 istruzioni consecutive) – È eseguibile (sappiamo fare moltiplicazioni e divisioni) – Termina (dopo l'istruz. 2 si genera l'output)

PROBLEMA: somma in colonna; input i due addendi output è la loro somma. Algoritmo: fai la somma in colonna con tutti i suoi passaggi, formalizziamo i passi:

1.Considera la prima colonna da destra

2.Considera un riporto pari a 0

  • 3.Somma il riporto e le cifre dei due addendi nella colonna considerata
  • 4.Scrivi la prima cifra del risultato e riporta la seconda cifra del risultato nella colonna successiva -
  • 5.Spostati nella colonna successiva

6.Ripeti le istr3-5 finché almeno uno dei due addendi ha una cifra, altrimenti vai all'istr

7.Scrivi l'ultima cifra di riporto nell'ultima cifra del risultato

L'istruzione 6 definisce un ciclo: Ripetizione di un insieme di istruzioni fino a quando una certa condizione rimane vera, e passaggio all'istruzione successiva quando la condizione diventa falsa

● Proprietà di un algoritmo – Non è ambiguo (dopo ogni istruzione sappiamo qual è la successiva da eseguire) – È eseguibile (sappiamo fare la somma di due cifre decimali) – Termina perché gli addendi hanno un numero finito di cifre, quindi sicuramente il ciclo finisce.

-certi cicli non finiscono es. ti prendo a schiaffi a 2 a 2 finche non diventi dispari: infinito, non terminabile e quindi non è un algoritmo.

qualche pagina... ● La strategia 2 è intuitivamente migliore. Ipotesi implicita: le parole nel dizionario sono ordinate (scritte in ordine alfabetico) – Altrimenti la strategia 2 produrrebbe risultati casuali (a volte potrebbe funzionare, altre no)

IPOTESI: la lista è ordinata (il concetto di ordinato dipende dai dati: numeri naturali, lettere, ordine dei libri per autore ecc.) idea: parto dal centro (se è li sono fortunata senno vado o avanti o indietro)

ALGORITMO:

  • Sottolista da esaminare = tutta la lista;
  • (( Finché (elemento non trovato) E (sottolista non è vuota)
  • (^) Elemento in esame = el. intermedio della sottolista;
  • Se (elemento in esame = elemento cercato) elemento trovato;
  • Altrimenti se (è minore dell'elemento cercato) nuova sottolista = 2a metà della precedente;
  • Altrimenti nuova sottolista = 1a metà della precedente; ))
  • Se (sottolista è vuota) Elemento non trovato (output: FALSO); Altrimenti elemento trovato (output: VERO);

per la ricerca dicotomica: se vogio trovare kafa apro il libro a metà e lo trovo (caso ottimo); caso pessimo: se voglio trovare wells e parto da metà per spostarmi nella seconda metà; ripeto il procedimento, parto da metà ed esamino fino a che non lo trovo usando l’algoritmo di prima (caso pessimo visto che l’elemento era l’ultimo) altro caso pessimo: elemento non trovato. Caso medio con metà dei riscontri del caso pessimo.

Riassunto: algoritmi e linguaggi ● Abbiamo scritto algoritmi in “pseudocodice” – Descrizione informale di un algoritmo che usa le convenzioni di un linguaggio di programmazione ma è pensata per essere letta da un umano e non da una macchina. ● Abbiamo visto diverse tipologie di istruzioni 1.Istruzioni “semplici” (operazioni base): somma, confronta, inizializza, ecc. 2.Cicli: Finché (condizione vera) esegui istruzioni 3.Decisioni: Se (condizione vera) esegui istruzioni - Altrimenti esegui altre istruzioni

QUAL È IL TEMPO DI ESECUZIONE (T) di un algoritmo? Bisogna fare delle ipotesi per rispondere; la stessa sequenza di istruzioni eseguita su stessi dati da due cmputer diversi impiega tempi diversi (diversi processori, sistemi operativi, però le operazioni base hanno tutte lo stesso tempo di esecuzione (circa su un particolare computer)

Definizione: il tempo di esecuzione T di un algoritmo è il numero di operazioni base eseguite – Quindi non è un tempo in secondi, è un numero – Definizione indipendente dal computer su cui si esegue l'algoritmo.

Modello di costo: Il tempo di esecuzione di un algoritmo dipende da: N° di operazioni base eseguite, il quale a loro volta dipende da: 1 dimensione dei dati da elaborare, 2 valore dei dati da elaborare (es. l’elemento cercato coincide con il primo della lista). VOGLIAMO STIMARE UNA FUNZIONE T(n) che descrive il tempo di esecuzione T unicamente in funzione della dimensione n dei dati (1).

COME TENERE CONTO DEL VALORE DEI DATI: Di solito si stima T(n) per eccesso, ovvero nel caso pessimo del valore dei dati: A seconda del problema, la definizione di “caso pessimo” assume significati diversi. – Ad es. per algoritmo di ricerca: caso in cui il valore cercato non è presente nell'insieme. ● Si possono anche fare stime di – caso ottimo – caso medio (con ipotesi statistiche, ad es. lista di numeri e numero da cercare generati in maniera casuale)

Ripasso di semplici funzioni: Tempo di esecuzione: T(n), funzione di n ● Esempi rilevanti – Logaritmico: T(n) = log2(n) – Lineare: T(n) = n – Quadratico: T(n) = n2 – Polinomiale: T(n) = nk ● (k

numero intero) – Esponenziale: T(n) = 2n ● NB: in informatica si usa quasi sempre la base 2 – Logaritmo ed esponenziale. Ci interessa sapere quando n è molto grande, Perché per n piccolo tutti gli algoritmi sono veloci.

L’ esponenziale è il raddoppio del numero precedente. IL LOGARITMO è l’inverso dell’esponenziale. L = log(b piccolo) a. b è la base, a è l’argomento. L è l’esponente da dare alla base B per ottenere l’argomento A. A = B (L esponente) es. L = log (2) 16 = 2(4) =16 quindi: L = log(2) 16 =4. 4 è L.

Es. logaritmo: 256 = 2(8). Cioè 8=log(2) 256. Divisibile per due 8 voltr: 128, 64 … 1. Un numero N=2(k esponente) è divisibile per due esattamente K = log base 2 (n) volte; per i numeri non potenza di due si usa la divisione intera.

PRESTAZIONI RICERCA LINEARE: dimensione problema: N elementi nella lista, contiamo le operazioni base in questo caso, confrontiamo gli elementi tra loro. Nel caso pessimo l’elemento non è presente. Allora la nostra funzione è Tn = On ovvero che tn è all’incirca proporzionale a N. PRESTAZIONE RICERCA BINARIA: contiamo confronti nel caso pessimo di elementi non presente in lista di N elementi. Dopo ogni confronto rimane da esaminare la metà degli elementi precedenti – Confronto 1: lista di n elementi – Confronto 2: sottolista di n/2 elementi – Confronto 3: sottolista di n/4 elementi … – Dopo k confronti: sottolista di 1 elemento – Quindi numero k di confronti è il numero di volte in cui n è divisibile per due. Ardhaccheda!! T(n) = O(log2 n)

Classi di compkessità-> Definizione: un algoritmo è – efficiente se le sue prestazioni (caso pessimo) sono al più polinomiali, ovvero O(log2 n), O(n), O(n2), O(n3), ... O(nk), ... – inefficiente se le sue prestazioni (caso pessimo) sono almeno esponenziali, ovvero O(2n), O(nn), ...

● Definizione: un problema algoritmico è – trattabile se la sua complessità è al più polinomiale – intrattabile se la sua complessità è almeno esponenziale

Classi Definizione: la complessità di un problema è data dalle prestazioni del più veloce algoritmo (noto) in grado di risolverlo – Esempio: la complessità del problema della ricerca è O(log2 n) ● Perché queste sono le prestazioni dell'algoritmo di ricerca binaria – Esempio: la complessità del problema dell'ordinamento è O(n · log2 n)

Slide 3 finale

Per rappresentare informazione si può usare in insieme di simboli qualsiasi ad esempio un simbolo sul tastierino per rappresentare 10 cifre; quando sappiamo cosa un certo dato rappresenta, allora abbiamo informazione. L’informazione è costituita da un insieme di dati espressi mediante una rappresentazione simbolica. INFORMAZIONE luce accesa-> rappresentazioni di vario genere (on, lampadina, parole, bottone…) in informatica per rappresentare qualsiasi informazione e si usano solo due simboli perché due

CONVERSIONE DA BASE 10 A BASE 2: come si scrive il numero millenovecento diciasette in base 10? per capire che cifre scrivere nelle varie posizioni, ci dobbiamo chiedere quante volte la base 10 rientra nel numero da rappresentare-> 1917 10 per trovare le cifre in base 10-> il 10 nel 1917 ci sta 191 resto 7, quindi 10 volte 191 più 7 unità quindi la rappresentazione finisce con 7. 191/ 10= 19 resto 1 (seconda cifra decimale). Divido 1/10 resto 1= 1917. DA NUMERO ASTRATTO A RAPPRESENTAZIONE IN BASE 10.

Conversione base 10 a base 2 ES. 100 10 in base 2: 100/2 = 50 resto 0; 50 /2= 25 resto 0 25/2= 12 resto 1, 12/2 6 resto 0 fino a 1/2= 0 resto 1= 1100100 2.

SOMMA DI NUMERI IN BASE 2: si fa la somma tra i singoli bit usando le regole della somma in colonna: come per quella in base 10. 0+0 = 0; 0+1= 1; 1+1 = 0 con il riporto di 1; 1+1+1 (di riporto) =1, con il riporto di 1.

Errore di trabocco: un computer usa un numero predefinito N di BIT per rappresentare numeri o altro. Quindi c’è un limite ai numeri rappresentabili es. 2 alla 32. Se il risultato di una somma è più grande del limite il pc commette un errore di trabocco. Numeri rappresentati con n=4 bit. Si possono rappresentare 2 alla 4= 16 numeri da 0 a 15. La somma avrebbe bisogno di un quinto BIT per il riporto: es. 1101 + 1001

Numeri binari: a volte si usa la notazione posizionale in base 16, esadecimale o hex.

Notare che 16= 2 4 , comoda per rappresentare numeri binari con poche cifre. Usare la base 16 vuol dire che dobbiamo avere 16 simboli per rappresentare le cifre-> 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F.-> 16 simboli.

Es. C1A0 16 =C16 3 +116 2 + A16 1 +016 0 = 49568

CONVERSIONE TRA BASE 2 A BASE 16-> Una sequenza di 4 bit corrisponde a una cifra esadecimale.

DIGITALIZZARE un TESTO =

Caratteri e cosidic-> Idea semplice: a ogni carattere testuale da rappresentare si assegna un codice numerico: es. decido che il carattere A ha il codice 65 (cioè 100001base 2) ; B il 66 ecc. PROBLEMA: quanti caratteri voglio codificare? Quindi l’insieme di valori da rappresentare.

Es. carattere punteggiatura, numerico ecc., di spazio, simboli matematici, non latini.

CODICE ASCII: rappresenta l’alfabeto anglosassone: 128 simboli (maiuscole, minuscole, cifee, punteggiatura, parenti ecc. standardizzare tale alfabeto permettere di comunicare. Per la codifica allora bastano solo 7 BIT. Perché danno 2 (7) = 128 codici diversi. I limiti di ascii però non contiene lettere nordeuropee o lingue diverse dall’inglese. Da o a 32 sono tutti i caratteri non stampabili o speciali (in relazione alle associazioni dei simboli in questo codice). Come interpretare la tabella (slide4)riga: 37

(decimale) 25 (hex) % (char). Il carattere % ha il codce ASCII 37 (decimale ovvero base 10) ovvero il codice ASCII 25 (hex, overo base 16) infatti 25 16 =5*16^0 … = 37 quindi ha il codice ASCII 0100101 base 2.

CODIFICARE IL codice ascii: CIAO! Cioè 5 caratteri -> codifichiamo caratteri in 8 BIT (anche ASCII se è a a 7 bit) perché usiamo BYTE. Uso 8 bit perché con il computer uso BYTE e questo numero finale è sempre 0

In questo caso ha usato il codice ascii 67 ovvero numero base 10 e poi ha convertito il numero in base 2. Per decodificare un testo ASCII,occorre ripercorrere il processo contrario alla codifica:

  • separo il codice in gruppi di 8 bit,
  • converto in base 10 il codice in base 2
  • dal codice in base 10 cerco in tabella il numero associato sostituisco il termine caratteristico in ASCII.

ASCII esteso: proposto inizialmente da DEC e IBM, primi ’80; è un codice a 8 BIT (1 byte) quindi 2 8 = 256 caratteri, il doppio di ASCII; è diventato strandard internazionale ISO-8859-1, spesso indicato con il nome latin-1. Include i caratteri di molte lingue non solo quindi anglosassoni. La tabella è come su libro ovvero ci sono sequenze di 4 bit su due colonne; come per incrocio, il carattere in tabella avrà il codice ASCII esteso corrispondente delle due sequenze da 4 bit o sottocodici per colonna e riga. I primi 128 codici sono uguali di ASCII per compatibilità.

Codice unicode: codice universale; proposto da APPLE e Xerox- 87. inizialmente 2 byte (16 bit) per ciascun carattere (2 16 = 65536 codici disponibili). Dopo aggiunta di byte; Oggi sono disponibili 136755 caratteri codificati (tutti quelli umani e di diverse lingue morte), i primi 256 codici coincidono con Extended ASCII, per compatibilità. Più AUMENTI I BYTE, Più HAI BIT PER POTR AVERE MAGGIORI CODICI DA CREARE E QUINDI RAPPRESENTARE Più CARATTERI. La tabella di unicode, una sua sezione va da 037016 a 03ff. un carattere ha il codice unicode 03b4 base 16 ottenuto componendo i due sottocodici di 4 e 1 cifra esadecimale a inizio colonna e riga. Da codice in base 16 converto in base 10 e poi base 2.

UTF- 8-> unicode translation format 8, codifica a lunghezza variabile di caratteri, una delle più usate codifiche di unicode ad esempio sul web.

Codice ridondante per trasmissione via radio (alfabeto NATO). Lettere intelligibili anche in presenza di rumore. Lettera dell’alfabeto-> codice (in questo caso una parola). A-> alpha; B-> bravo ecc.

Codice a barre: 7 bit per codificare cifre da 0 a 9 ridondante., bit rappresentati con righe nere 1 e bianche 0, inizio e fine: sequenza di controllo 101, a metà sequenza di controllo 01010, lo scanner capisce se ha letto al

  • 352 qual è la sua potenza -> per rappresentare questi caratteri faccio 2 elevamento a potenza-> 2 alla 9 però è in base 16 quindi i bit sono raggruppati 4 a 4 quindi ho bisogno di 3 cifre esadecimali

-> 4 4 4

-Date le porzioni in un file, quanti byte occupano se la codifica è UTF-8?

  • Computer science suscks! = 23 caratteri quindi, stanno tutti in aski alla quale assegna a tutti 1 byte quindi 23
  • (p greco) = 3.14 = il P occupa 2 byte quindi 9 byte -> è un codice di unicode che sta nella porzione di 16 bit
  • sapendo che il codice ASCII della lettera A maiuscola è 65 base 10; decodificare-> divido i bit in gruppi di 8 bit e convertendo il numero in numero calcolo poi da 65 il numero in progressivo-> ovvero 65 A, 66 B ecc. raggruppo in base 8 perché ho la base 10. Se fosse stato in base 16 converso il numero in base 10 e faccio lo stesso calcolo fatto prima.

Rappresentare l’informazione multimediale:

MULTIMEDIA -> definizione: contenuto che usa varie forme di contenuto (testo, audio, immagini, animazione, video ecc.). esiste il multimedia lineare: La presentazione del contenuto procede in maniera lineare, senza controllo di navigazione da parte dell'utente – Ad esempio: cinema

e non lineare (la fruizione del contenuto è interattiva e non predeterminata ed. iper-testo; la prestazione del contenuto viene controllata in maniera interattiva, altro esempio: videogiochi.

Informazione multimediale-> vogliamo capire come un computer rappresenta e memorizza un video, colore, immagine, canzone ecc. tutto questo è un BIT infatti attraverso essi abbiamo le rappresentazioni digitali.

IMMAGINI DIGITALI: 2 principali formati di rappresentazione: formato BITMAP O RASTER: immagine divisa in punti di colore. Raster: funzionamento come di un monitor a tubo catodico. È a formato vettoriale, immagine codificata come un insieme di linee e figure geometriche.

immagini raster, rappresentazione : l’immagine è rappresentata come un insieme di punti di colore; L’immagine viene suddivisa per mezzo di una griglia in sottopozioni, dette pixel – Raster va bene per immagini complesse o irregolari (vettoriale per immagini regolari, es. grafici), un pixel è una unità elementare che compone un’immagine o un monitor. Un computer o monitor visualizza un’immagine riproducendo i pixel che la compongono. Più pixel ho maggiore sarà la mia qualità dell’immagine.

Pixel= unità elementare che compone un’immagine o un monitor. Nell’immagine digitale, ogni pixel ha il proprio colore, si nota soprattutto quando si zooma. La risoluzione di quell’immagine è il numero di pixel che la compone in cui è divisa. Di solito la risoluzione la si dà in riferimento alla geometrica dell’immagine ovvero un’immagine è fatta da 800 per 600 pixel. Numero totale è la moltiplicazione tra i due numeri (indicata con divisioni verticali e orizzontali es. immagine con risoluzione 800*600 = ha 480000 pixel). 10 alla 6.

Fotocamera: unità di misura megapixel ; Monitor: unità di misura densità di pixel

La risoluzione è solo un aspetto, la cosa importante è quanti pixel ha per unità di superficie. Ovvero PPI o DPI pixel per inch o dots per inch DPI (numero di pixel per unità di superficie) -> è un migliore indicatore di qualità. ES. Monitor 15 pollici con risoluzione 1024 * 768 quindi la diagonale della lunghezza è 15 (quindi lati 12*9 pollici) quindi orizzontalmente ci sono 1024 e verticale. -> 1024/12 = 768/9 =85 PPI.

PIXEL E BIT-> per tradurre un’immagine in bit occorre pensare a ogni pixel come a un punto di colore. Rappresento i pixel dal basso in alto da sinistra a destra. SE associamo a ogni colore una codifica binaria, ogni pixel corrisponde a una sequenza di BIT.

Parto da una immagine bianco e nero-> ogni pixel può avere solo due colori, basta quindi 1 solo BIT per ogni pixel-> 0 significa bianco, 1 nero es.

Immagine su di una griglia di pixel 1,2,3 ecc salendo. SLIDE per vedere; risoluzione 7*4 (griglia)-> digitalizzata la forma cambia sulla griglia-> i pixel neri sono associati la valore 1; bianchi 0 (convenzione) - scrivo tutta la sequenza di bit da 1 a X in base a bianco e nero della figura; dal basso a sinistra fino alla fine.

RAPPRESENTAZIONE DEI COLORI-> colori primari: combinabili per produrre una vasta gamma di colori. Combinare vuol dire o combinarli in maniera additiva (sorgenti luminose che combinate sommano i propri effetti) o sottrattiva. 3 colori primari additivi sono RGB = red green blue = con questa combinazione si ottengono svariate combinazioni (insieme o con combinazioni a due a due). Variando la luminosità, si ottiene un’ampia gamma di colori. A piena luminosità avrò= tutti e tre i colori combinati il bianco; r + g= giallo, g +b= ciano e r+b il magenta. In un programma di grafica tipico ho i miei colori associati a numeri esadecimali.

Monitor a cristalli liquidi -> la matrice attiva crea dei subpixel che sono gruppi di 3 elementi (3 luci rgb) , ognuno di questi ha i 3 colori primari il quale combinandole insieme, producono vari colori.

CODIFICA DI COLORI RGB-> Per ognuno dei 3 colori (subpixel) si possono avere 256 livelli di luminosità. (0 spento 255 acceso è una convenzione). Quindi la luminosità di un subpixel è codificata in byte (8 bit, 2 alla 8 = 256 combinazioni) il numero dei colori diversi è 256 alla terza ovvero 16.7 milioni. Es. per un pixel bianco sarà 255 255 255 per rosso verde e blu accesi al massimo. Ciascun bit aggiunge metà della luminosità dei bit alla sua sinistra. (grafico anche su libro)

RGB esempio di scala di grigi-> modificare intensità di un colore es.-> il punto di colore dell’immagine è descritto da 3 byte (i 3 colori primari visti prima e quindi 1 bit a testa). Aumentare la luminosità significa aggiungere la stessa quantità a ciascuno dei 3 bit. (di tutti i pixel o punti di colore) -> ho un grigio ancora più chiaro. Ovviamente non si può superare il 255.

Modificare un’immagine vuol dire avere lo stesso colore; aumentare il contrasto vuol dire altro, variare solo delle cose; pixel scuri devono rimanere invariati mentre quelli chiari devono progressivamente schiarirsi. Es. intervallo 38-239 -> deve diventare 38-255. (processo di stiramento della scala dei grigi). Es. di aggiunta di colori -> modifichiamo in maniera differenziata pixel di luminosità diverse. Es. definiamo luci il 25% più chiaro dei pixel, ombre il 25% più scuro, mezzitoni il resto (50%). (prima classifico e vedo la loro disposizione ovvero quella riportata sopra). Voglio cambiare il colore-> aggiungo ad esempio un po’ di rosso

Esempio: – Occhio umano poco sensibile a piccole variazioni di colore su un'area ampia – Allora se c'è un area con pixel di colori “quasi uguali” (cioè diversi solo nei primi bit), scelgo un solo colore rappresentativo di tutti – Se esagero si nota la “quantizzazione” dei colori. Gradi di compressione: immagine da 300*200-> originalee 202 kb, compresso 10:1 20 kb, compresso 20:1 10 kb compresso 25:1 8 kb.

Grafica vettoriale: Utile per immagini “regolari” – Invece di informazioni di colore dei pixel si specifica ogni elemento geometrico “primitivo” – Immagini costruite a partire dalla descrizione di questi elementi mediante linguaggio testuale o formule geometriche – Spesso meno spazio occupato rispetto a bitmap. Esempio di disegno del dinosauro: la risoluzione è data dal numeri di punti dell’oggetto che si vogliono rappresentare. VIDEO cenno-> sequenza di immagini statiche almeno 25 frame per secondo. Codificare un filmato vuol dire codificare i fotogrammmi; formati AVI o MOV. Compressione -> MPEG; frame compresso con JPEG. Frame consecutivi sono molto simili → si codifica differenza tra frame successivi.

RAPPRESENTAZIONE DIGITALE DEL SUONO-> cos’è il suono?

Un oggetto vibrante (corda, tamburo) fa vibrare l’aria attorno a sé, la vibrazione ovvero onde di pressione che si trasmettono all’orecchio e fanno vibrare il timpano. Intensità: dipende da ampiezza dell’onda sonora e frequenza: numero di vibrazioni al secondo.

Per rappresentare il suono bisogna prima campionarlo a intervallo costante così da misurare il valore dell’onda sonora: Campionamento ● Misurazione a intervalli regolari dell'ampiezza dell'onda sonora ● Definizione: campione [equivalente audio di pixel] – Valore dell'ampiezza dell'onda misurato in un istante di campionamento ● Definizione: frequenza di campionamento – Numero di campioni misurati in un secondo (in Hertz, Hz) ● Due domande 1)Quale frequenza di campionamento? 2)Come rappresentare il valore di un campione? Ovvero quanti bit uso per rappresentare un valore (campioni sono nel tempo) diamo un valore ad un campione che ne rappresenta valore e impressione sonora. Quanti bit dare per rappresentare questo campione? 8 16 bit ecc.

Quale frequenza di campionamento? – Più è alta, meglio è (maggiore qualità, come per la risoluzione nelle immagini) ● Teorema del campionamento di Nyquist: La frequenza di campionamento deve essere almeno doppia della più alta frequenza sonora che si vuole registrare ● Esempio: frequenze presenti nel parlato (vocali) arrivano al massimo a 4 KHz (4000 Hz) – Allora nelle trasmissioni telefoniche si usa una frequenza di campionamento di 8 KHz (8000 campioni al secondo)

In generale l'uomo è in grado di percepire frequenze fino a 20 KHz, Oltre si parla di ultrasuoni; Curve “equal-loudness” ● Siamo più sensibili alle frequenze medie, sentiamo poco le basse e le alte ● Allora in generale serve freq. di campionamento di almeno 40 KHz – Le frequenze standard usate sono leggermente più alte: 44.1 KHz (standard CD), 48 KHz.

Valore di un campione; Rappresentazione binaria-> si associa a un campione una sequenza di bit che rappresenta il valore dell’ampiezza dell’onda. Quanti bit da destinare per un campione? Molti se vogliamo essere accurati. Esempio: 3 bit dove si comprende anche il segno sono minori di 4; con questi campiono un’ampiezza dell’onda minore ma più volte->

Digitalizzare e riprodurre audio digitale-> il suono viene rilevato da microfono che traduce onda acustica in onda elettrica. Il segnale elettrico campionato dal convertitore analogico-digitale, come lo scanner per le immagini ed eventualmente il suono viene compresso e associato/trasformato in bit. La riproduzione segue il cammino inverso-> il suono viene decompresso, passa per il convertitore digitale- analogico e alla fine il segnale elettrico è riprodotto da un altoparlante (cuffie ecc.) ---------

Quanto occupa un suono? Per capirlo bisogna Sapere i parametri->

  • Quanti byte per campione? 2,3,4, byte, valori tipici dipende dalla scelta che è stata fatta
  • quale frequenza di campionamento? Es. 8 khz oppure 44.1 khz o 48 khz
  • (^) quanti canali? Es. 2 canali per una tipica canzone registrata

Quindi un file audio occupa -> N. BYTE PER CAMPIONE * N. CANALI * N. CAMPIONI e il numero di campioni è dato da (freq. Di campionamento * durata di secondi) qui non ho avuto nessun tipo di compressione.

Es. Qualità cd -> il tipico standard di rappresentazione dell’audio da 16 bit o 2 byte per campione, segnali stereo, 2 canali , 44.1 hertz. Quindi un file audio qualità cd occupa -> (2 byte per 2 canali) 4 byte * 44100 * durata in secondi.

Da Khz a Hz la trasformazione è * 1000.

DEFINIZIONE BITRATE-> bit al secondo, ovvero numero di bit necessari per codificare/trasmettere un secondo audio. Es 1 bit/sec

Qualità CD bitrate -> 16 bit * 2 canali * 44100 campioni ( frequenza * 1 secondo ) = 1.41 mbit/s. il mio file occupa 1. 41 bitrate ovvero 1( circa) bit al secondo.

1 minuto è composto da 60 secondi; 1 ora da 60 minuti quindi-> un’ora di musica in qualità CD = 1.41 mbit/ s * 60 * 60 = 5076 Mbit bitrate all’ora che servono = 635 mbyte. È proprio la capacità di memoria dei vecchi cd.

AUDIO DI Qualità CS OCCUPA MOLTO SPAZIO -> formato wave (.wav) non compresso, esistono tecniche di compressione -> meno bit per la memorizzazione o trasmissione. Compressione senza perdita (lossless) ES. FLAC O ALAC O MONKEY’S AUDIO. Compressione con perdita (lossy) ES. formato MPEG-1 layer 3 (.mp3)

FORMATO MP3-> inventato da ISO standardizzato nel 1991. Formato con perdita di informazione lossy. Il grado di compressione può essere regolato dall’utente che può scegliere-> frequenza di campionamento ad es. 44.1 hertz o bitrate (in kbit al secondo) ad es. 192 kbit/s. si possono raggiungere livelli di compressione

400 bit = 120000 bit. 120000 pixel * 1 bit = 120000 bit-> Da quanti fotogrammi è composta? 10 al secondo e lungo 20 quindi 200 fotogrammi. Moltiplico 200 frame * 120000 bit = 24000000

Quanto spazio occupa un suono della durata di 10 secondi campionato con frequenza di campionamento 100 hz, in cui ogni campione occupa 4 byte? -> 1 campione 4 byte, 1 secondo ci stanno 100 campioni, 10 secondi 1000 campioni. 1 secondo occupa 100 * 4 byte = 4 KB

Architettura di un computer->

Architettura: elementi hardware fisici (cap. 7) di un computer con le loro funzioni e connessioni; quasi tutti i computer, laptop, tablet ecc. hanno architettura simile.

Architettura di un computer ->

  1. LA CPU o processore o unità di elaborazione centrale-> dove risiede l’intelligenza del computer e dove si fanno i calcoli
  2. La memoria dove risiedono i dati e dove si memorizzano anche istruzioni (non solo dati). Questa si divide in 2 blocchi di memoria ovvero primaria e secondaria
  3. Input e output sono elementi che permettono di comunicare con il pc e verso il mondo (output tipo il monitor dove i dati escono, input invece tastiera)

Il modello di VON NEUMANN-> autore del primo documento che descrive una macchina elettronica nella cui memoria vengono registrati dati e programma: l’architettura dei moderni computer è molto simile a quella descritta nel documento -> sono dette quindi macchine di von Neumann.

Il modello di von Neumann-> 4 blocchi connessi da un canale di scambio di informazione:

MEMORIA DI MASSA, PERIFERICHE DI I/Q, UNITA’ ARITMETICO- LOGICA O ALU E UNITA’ DI CONTROLLO (racchiuse nella unità centrale di elaborazione ossa la CPU) attraverso i BUSS DI COMUNICSZIONE CHE PERMETTE LE COMPONENTI DI PARLARE TRA DI LORO (SONO LE FRECCETTE) comunicano grazie a questi canali con la memoria centrale scambiando informazioni. Il buss degli indirizzi serve a reperire dati e scriverli. MODELLO SU SLIDE.

Cpu o unità centrale di elaborazione è il cuore del computer spesso definita processore. Individue ed Esegue istruzioni di un programma e più programmi che sono in esecuzione (soprattutto del sistema operativo) essa esegue istruzioni grazie alla presenza della unità aritmetico-logico, ed effettua elaborazioni quindi aritmetiche logiche. Per fare Queste operazioni prende i dati dalla memoria o da un dispositivo di input. La cpu è costituita da uno o più chip (ovvero miliardi di transistor interconnessi)

La CPU è composta in primis da una UNITA’ DI CONTROLLO il quale governa il funzionamento della stessa e da una UNITA’ ARITMETICO-LOGICA che svolge le operazioni aritmetiche logiche il quale, operando insieme gestiscono un insieme di registri di memoria; i registri sono pezzetti di memoria (temporanee dato che i valori sono cambiati quando la cpu opera particolari istruzioni) contengono le istruzioni ma anche i dati (accesso ad essi molto veloce).

L’unità di controllo è fondamentale perché esegue le istruzioni dei programmi, controlla la comunicazione tra cpu e memoria, coordina le attività del computer e le coordina spedendo segnali di controllo alle componenti dando dei comandi per eseguire le istruzioni in maniera SINCRONIZZATA, è un funzionamento ciclico scandito dall’orologio di sistema (clock) = frequenza di clock-> ad es. 1.8GHz (giga hertz) quindi 1. miliardi di cicli al secondo. Quindi ogni segnale è sparato ogni miliardesimo di secondo.

Come la CPU funziona? Tutto ciò è eseguito in un miliardesimo di secondo. La cpu esegue le istruzioni di tutti i programmi in esecuzione del computer (una istruzione alla volta secondo una scansione governata dall’unità di controllo e dal clock. La cpu guarda l’istruzione, la carica, la decodifica e una volta capito cosa fare la esegue -> fetch-secode-execute) esempio del procedimento:

  1. Fetch dell’istruzione 2) Decodifica dell’istruzione 3) Fetch dei dati 4) Esecuzione dell’istruzione 5) Restituzione dei dati. Di seguito la spiegazione:
  2. Accesso (fetch): istruzione presa dalla memoria e memorizzata in un registro ● Decodifica (decode): istruzione letta e compresa ● Esecuzione (execute): istruzione eseguita, eventualmente utilizzando dati e restituendo risultato – Esempio: somma di due addendi

la CPU -> il leggere ed eseguire e dove andare a leggere è specificato nel program counter (pc del pc). Il program counter è un registro speciale della cpu; ogni istruzione ha un indirizzo ossia un indirizzo della locazione di memoria in cui è scritta. Il registro contiene l’indirizzo della prossima istruzione in memoria da eseguire. Es. nella fase di fetch viene letta in memoria l’istruzione il cui indirizzo è contenuto nel pc. Esso si incrementa in base alla lunghezza delle istruzioni e dagli indirizzi. Le istruzioni sono byte es. istruzioni a 32 bit, il pc si incrementa di 4 byte. Se gli indirizzi di memoria contano i bit e sono lunghi 32 bit il pc ogni indirizzo si incrementa di 4 byte. Non è detto che si incrementi di questa quantità perché le istruzioni possono prevedere dei salti.

I programmi eseguiti della cpu sono composti da istruzioni macchina; esse sono istruzioni elementari, che in sequenza possono far svolgere al computer compiti diversi e complessi es fare somma di addendi. Queste possono avere vari formati. Le istruzioni e il linguaggio capito è diverso dagli script java. Es. istruzione a 32 bit con diverse porzioni di bit che hanno significati diversi: es codice istruzione: argomenti 1 e 2 (su cosa operare); sono un insieme piccoli di possibilità di istruzioni (es. salto delle istruzioni se è vero, addizione …)

Ogni tipo di processore è in grado di eseguire un numero limitato di istruzioni, che costituiscono un particolare linguaggio macchina. Es processori motorola. Processori della stessa famiglia conoscono lo stesso linguaggio macchina ● Processori di famiglie diverse non possono eseguire gli stessi programmi scritti in linguaggio macchina (perché le istruzioni che “capiscono” sono diverse)

Es. istruzione di somma ADD 4000, 2000, 2080 (istruzione non in linguaggio macchina perché questa è rappresentante in formato binario). L’istruzine significa-> Somma i numeri contenuti nelle celle di memoria 2000 e 2080, memorizza il risultato nella cella di memoria 4000. In questo modo l’istruzione può fare calcoli diversi a seconda du quello che c’è in memoria nelle celle. SLIDE 7.2 esempio di istruzione.

MEMORIA PRIMARIA E SECONDARIA-> entrambi immagazzinano dati e istruzioni (sequenze di bit) ma con ruoli diversi. La memoria è suddivisa in celle ciascuna delle quali ha un indirizzo. La lettura della cella avviene attraverso questo singolo indirizzo (numeri interi progressivi). Ogn cella contiene un nuemro predefintio di bit ( 8 bit ovvero 1 byte di memoria). Di solito le istruzioni e i dati occupano più di 1 byte infatti si usano gruppi di celle contingue (parole) per rappresentrae un dato o una istruzione; l’indirizzo di una parola è l’indirizzo del suo primo byte es parole da 4 byte: gli idirizzi delle parole si incrementano di 4 volte. Dentro una memoria ci sono dati numerici, caratteri, suoni e istruzioni macchina che spesso occuoano 4 byte. Le operazioni che si eseguono sulla memoria sia primaria che secondaria sono operazioni di lettura e scrittura.

La memoria PRIMARIA o centrale si distingue dalla secondaria per un aspetto di velocità, la primaria è veloce in tempi di accesso, a leggere un dato o scrivere un dato sulla stessa memoria. È la più vicina al processore e ha bisogno di caricare dati nella maniera più veloce, più è veloce più è costosa. 2 tipi principali di memoria-> RAM (memoria ad eccesso casuale) e ROM (memoria di sola lettura). La memoria è fatta del materiale del processore ovvero chip di silicio che contengono transistor collegati da circuiti che permettono operazioni logiche. I transistor rappresentano dati ovvero bit. Di solito le istruzioni e di dati occupano più di 1 byte.

MEMORIA RAM-> consente sia la lettura che scrittura dei dati e dei programmi in essa contenuti. È volatile perché perde i dati quando si spegne il pc (ha bisogno di elettricità). È veloce dato che contiene dati in fase di modifica e programmi che devono essere disponibili alla cpu. Funziona ad accesso casuale signifca che il tempo per acedere a una cella non dipoende dalla sua posizione (indirizzo). La RAM comunica direttamente con la cpu.

GERARCHIA DI MEMORIA-> memoria sul processore (registri) è la memoria più piccola e parte della cpu 1 ciclo, 1 segnale di clock e capacità di 1 kb;. 2) RAM veloce e poi RAM LENTA 3) MEMORIA SECONDARIA, flash drive e hard disk, questa ha un tempo di access di 10ms e una caapcità di 1 TB.

In pratica quasi tutti i componenti esaminati (CPU, memoria primaria con alloggiamenti di espansione, bus, porte per periferiche) stanno su una “scheda madre” (motherboard)

DISPOSITIVI DI INGRESSO E USCITA (I/0) -> una parte del computer deve comunicare con il mondo esterno. Le periferiche hanno questo ruolo e sono connesse al computer fisicamente con delle porte USB, FIREWIRE, HDMI, VGA, ETHERNET… portano i dati secondo un loro protocollo dati. Input es. tastiera, mouse e output: monitor, stampante, altoparlanti.

Connessione di rete: input e output-> scambio di dati con sistemi remoti. Diretta (alta velocità, con rete locale) o remota (velocità più bassa es. linea telefonica) cablata (es. ethernet) o senza fili (wirless). Nuovi dispositivi di in/output multimodale -> touchscreen, sensori di luce, output tattile.

LINGUAGGI DI PROGRAMMAZIONE-> le istruzioni formano un linguaggio macchina. Algoritmi e programmi sono scritti diversi da istruzioni macchina, come passiamo da un linguaggio all’altro? -> LA CPU parla solo in linguaggio macchina es. ADD 4000,2000,2080. MA I programmatori usano linguaggi “ad alto livello” ovvero per formulare istruzioni più complesse es. linguaggio JAVA.

Primi programmi: scritti in linguaggio macchina (bisognava un programmatore scrivere tutte le istruzioni e trascriverle in linguaggio macchina-> è una procedura soggetta ad errori e quindi a bug nella macchina). Il primo passo è stato passare da linguaggio macchina ad uno equivalente ma più facile per un programmatore umani in cui si assegnavano codici simboli alle operazioni-> da 000111… a ADD 4000… (per la somma) è già scritto con un codice simbolico e non macchina. È in corrispondenza con il codice macchina, è solo una traduzione. Furono sviluppati programmi che traducevano i codici simbolici in binari cioè i programmi assemblatori-> assembler; i linguaggi che usano codici simbolici. BUG indicano il malfunzionamento di dispositivi meccanici o elettrici poi per dire anche errori nei programmi.

Programmi assemblatori: ingresso, da un codice assembly come un FILE DI TESTO dato a un programma assemblatore, il quale butta fuori un altro file di codice macchina, codice eseguibile (che contiene 1 e 0). Problemi: istruzioni assembly uguali a istruzioni macchina, ne servono molte per eseguire operazioni semplici. Lo stesso programma per un altro CPU deve essere riscritto; lo stesso programma con processori diversi deve essere riscritto per essere compreso dato che il linguaggio macchina è diverso. (non c’è portabilità)

Si passa a linguaggi di alto livello il quale non ci si preoccupa del linguaggio macchina sottostante, es. java è un linguaggio ad alto livello, non ha nulla a che vedere con il linguaggio macchina che eseguirà l’istruzione. Queste operazioni sono più semplici e più capibili per un umano. Questi linguaggi sono sequenze di operazioni espresse a livello più astratto, per appunto, indipendenti da istruzioni macchina Es= while (sberle % 2 == 0) sberle = sberle +2; ci vogliono molte istruzioni macchina per esprimere questa sequenza di operazioni.

I programmi compilatori-> fanno la stessa operazione: da codice sorgente (un file) scritto con un certo linguaggio ad alto livello, il quale non dipende dalla CPU e dal suo linguaggio macchina, il programma compilatore (per CPU tipo un certo tipo) fa la traduzione e ridà un file eseguibile che contiene le istruzioni macchina relative a quella CPU. Il file eseguibile dipende dalla CPU ed è un codice macchina. Essa fa un lavoro molto più complesso-> da linguaggio ad alto livello in linguaggio macchina (molto diverso).

Quando si scrive un programma ad alto livello il processore su cui è eseguito non è un problema, ma se voglio eseguirlo si 2 macchine diverse devo avere due compilatori diversi-> due che fanno la traduzione (un compilatore) per ogni architettura. Il file che ne esce, IL CODICE ESEGUINILE (il codice di 1 e 0) è dipendente dalla CPU, occorre compilare con un diverso compilatore per ogni cpu su cui si vuole eseguire il codice. CODICE SORGENTE (codice in linguaggio di alto livello, non dipende dalla cpu e dal suo linguaggio macchina).

SISTEMA OPERATIVO -> come può essere suddiviso il software? 2 macro-> software di sistema e di

applicazioni. Applicazioni si parla dei programmi che realizzano certe funzionalità che non sono necessari al funzionamento del pc (es. word) o browser. Software Di sistema è l’insieme dei componenti dei programmi e processi che permettono al pc di funzionare. Il sistema operativo è un macro programma (contenuto nel software di sistema), che va in esecuzione quando la macchina viene accesa e che si preoccupa di gestire cosa succede nel pc e quindi la funzionalità delle compenti hardware. Questo software è diviso in 2 componenti:

  • KERNEL-> nocciolo del sistema operativo dove ci sono le funzionalità elementari.
  • SHELL-> riguarda l’interfaccia verso l’utente (es. finestre) fanno parte del sistema operativo.

Es. di sistema operativo-> MAC OS (poi basato su kernel UNIX), MS WINDOWS, LINUX, UNIX (IL primo), MS-DOS (utilizzato in personal computer IBM, realizzato da bill Gates), ANDROID (basato su Linux), IOS

Sistema operativo; Struttura-> a cipolla, insieme di livelli, l’utente conosce solo le operazioni del livello più alto e ignora quelle di tuti gli altri. Dall’interno vero l’esterno -> nucleo, gestione della memoria centrale, gestione delle periferiche, file system, interprete di comandi, programmi applicativi. Sotto il nucleo abbiamo il SISTEMA OPERATIVO. È fondamentale per il pc; esso è formato da programmi per gestire efficientemente computer e dispositivi e creare l’interfaccia con l’utente.

Le due componenti principali sono il 1) NUCLEO, ovvero il kernel, parte più interna il quale svolge funzioni base, gestione dalla memoria centrale. Esso contiene i driver delle periferiche per capire il protocollo delle diverse porte e periferiche (es. installo driver che comunica con un oggetto attaccato alla porta) e Gestisce il sistema di file (file system) nella memoria secondaria. 2) Shell (parte più esterna che si occupa dell’interfaccia con l’utente come es. interfaccia grafica.

OS multiutente-> il pc può essere usate da più utenti anche in contemporanea, ciascuno si logga con le proprie credenziali e accede ad una sua zona di memoria riservata. OS gestisce la memoria assegnando uno spazio diverso a ogni utente. Os stabilisce dei livelli di autorizzazione (permessi) per stabilire quali utenti possono accedere a file e programmi condivisi. Esso prevede utenti speciali amministrativi che possono gestire l’intero sistema. Uso con diversi terminal lo stesso sistema operativo.

Più legato al kernel -> sistemi operativi multitasking (multi processo) -> risale a unix. Sul pc dalla/ cpu, usiamo più programmi contemporaneamente (aperti). Un pc esegue tanti programmi grazie a questo sistema grazie al sistema operativo che si mette tra cpu e programmi che sta sopra. Questo media le funzioni tra i due punti. Il sistema operativo crea una politica di accesso gestendo la/e cpu in modo da dedicare una frazione del proprio tempo a ciascun processo. Ci sono programmi con proprietà diverse (dati anche dal sistema operativo) in cui do priorità maggiori ad alcuni o un programma. SUI COMPUTER ATTUALI CI SONO Più CPU (con più processori multicore)

FREE AND OPEN SOURCE SOFTWARE:

LINUX-> sistema operativo open source (caratteristica, gratuito) è un software di cui è disponibile il codice sorgente (posso modificarlo quindi). Il sistema operativo (è un programma) alternativo a Windows (stesso processore/architettura). OS multiutente, multitasking, con kernel, Shell e interfaccia grafica. Posso avere varie distribuzioni con lo stesso kernel, (aziende diverse dove le aziende hanno chiesto sistema ma modificato). Creato nel ’91 da Linus., basato sul OS UNIX.

UNIX-> Linus viene da unix. Anni 60, primo sistema operativo moderno, multiutente e multitasking da cui sono nati molti altri (alcuni proprietari e chiusi, per le aziende, e ne facevano profitto). Molti cloni da parte di varie aziende -> BSD e GNU.

GNU/FSF/GPL-> os cretao da Richard stallman (ideatore del movimento open source) il sistema unix venne riscritto e quindi il codice sorgente venne reso libero. Fondò la FSF che formalizza la filosofia la free software per poterlo rendere disponibile a tutti al suo accesso e modificabile. Su di questo ricade una licenza di tipo copyleft (protegge il software e costringe chi lo usa a stare a dei limiti es. no fini commerciali).