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


Fondamenti di Informatica: Architettura di Von Neumann, Linguaggi e Sistemi Operativi - Pr, Sbobinature di Fondamenti di informatica

Una panoramica dei concetti fondamentali dell'informatica, partendo dall'architettura di von neumann e dai linguaggi di programmazione, fino ad arrivare ai sistemi operativi. Vengono descritte le componenti principali di un sistema di calcolo, i linguaggi di programmazione procedurali come python, e le funzioni dei sistemi operativi nella gestione dei processi, della memoria e delle periferiche. Si discute anche l'importanza dell'ambiente di programmazione e delle astrazioni di funzione e procedura. Infine, vengono introdotti i concetti di programmazione modulare e rappresentazione dei dati.

Tipologia: Sbobinature

2023/2024

In vendita dal 07/12/2025

federicablevee
federicablevee 🇮🇹

5 documenti

1 / 39

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
INFORMATICA GENERALE
Il mondo cambia:
- 1900 leggi di natura sono deterministiche e reversibili ed ormai tutte le leggi fisiche fondamentali
sono state scoperte
- Me 900 meccanica quantistica (fenomeni microscopici), un gene codifica un enzima, nulla sfugge
ad un buco nero
- Oggi fenomeni quantistici macroscopici, epigenetica, radiazioni di Hawking (sfugge ad un buco
nero), leggi fondamentali sono probabilistiche e solo alcune reversibili, molte leggi sono ancora da
scoprire
Le spiegazioni scientifiche sono quindi in continuo divenire e a volte ci sono innovazioni radicali che portano a
grandi cambiamenti.
Nel corso della storia si è passati da materia ad energia (XIX) ad informazione (XX).
Fin dalle origini, gli scienziati si sono occupati delle trasformazioni della materia. Nel XIX secolo hanno
compreso che il mondo non è fatto solo di materia, ma anche di energia. Nel XX secolo hanno compreso che il
mondo non è fatto solo di materia e di energia, ma anche di informazione.
INFORMAZIONE: si è cercato di darne un significato quantitativo, per esempio secondo Shannon (1948) si
misura in bit e poi tale bit viene trasmesso in un certo canale.
L’informazione è qualcosa di indipendente dal supporto materiale. Secondo alcuni l’informazione non è
un’entità fisica, nel corso del tempo si può notare come i vari pensieri siano mutati: 1500 l’universo =grande
orologio ad indicare la regolarità di questo 1800 con la termodinamica l’universo = grande machina a vapore
che si espande e si contrae a seconda di vari fattori1900 il mondo =un grande computer in cui poste alcune
condizioni iniziali seguono delle conseguenze oggi universo= grande computer quantistico.
L’informazione sembra quindi essere legata all’energia.
INFORMATICA: nell’informatica convergono vari filoni di ricerca. Alcuni identificano l’informatica con la
scienza dei calcolatori, mentre per altri non è cpsì, come per esempio per Dijikstra il quale afferma che
L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi”.
Le definizioni principali sono due:
- scienza che studia la rappresentazione, la memorizzazione e l’elaborazione dell’informazione
- studio sistematico degli algoritmi che descrivono e trasformano l’informazione.
LE ORIGINI DELL’INFORMATICA
- L’informatica nasce verso la metà del ‘900 dalla confluenza di diversi filoni di ricerca: supporto
meccanico al calcolo, supporto meccanico alla gestione di grandi quantità di dati, automazione del
pensiero
- Evoluzione tecnologica delle macchine: dapprima le macchine erano manuali, come per esempio
l’abaco (2000 a.c.), bacchette di Napier (1594), regolo calcolatore (1822)
- La prima macchina vera e propria è la pascalina (1645), che fa somme e sottrazioni e viene costruita
da Pascal per aiutare il padre negli affari
- Leibniz aggiunge all’invenzione di pascal lo svolgimento di moltiplicazioni e divisioni
- Anni 30: calcolatrice meccanica, anni 50 primo calcolatore elettronico, anni 70 calcolatore scientifico,
anni 80 microchip, anni 90 supercomputer, oggi computer quantistico
COMPUTER= colui che fa i conti, infatti i primi computer erano delle calcolatrici.
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27

Anteprima parziale del testo

Scarica Fondamenti di Informatica: Architettura di Von Neumann, Linguaggi e Sistemi Operativi - Pr e più Sbobinature in PDF di Fondamenti di informatica solo su Docsity!

INFORMATICA GENERALE

Il mondo cambia:

  • 1900 → leggi di natura sono deterministiche e reversibili ed ormai tutte le leggi fisiche fondamentali sono state scoperte
  • Metà 900 → meccanica quantistica (fenomeni microscopici), un gene codifica un enzima, nulla sfugge ad un buco nero
  • Oggi→ fenomeni quantistici macroscopici, epigenetica, radiazioni di Hawking (sfugge ad un buco nero), leggi fondamentali sono probabilistiche e solo alcune reversibili, molte leggi sono ancora da scoprire Le spiegazioni scientifiche sono quindi in continuo divenire e a volte ci sono innovazioni radicali che portano a grandi cambiamenti. Nel corso della storia si è passati da materia ad energia (XIX) ad informazione (XX). Fin dalle origini, gli scienziati si sono occupati delle trasformazioni della materia. Nel XIX secolo hanno compreso che il mondo non è fatto solo di materia, ma anche di energia. Nel XX secolo hanno compreso che il mondo non è fatto solo di materia e di energia, ma anche di informazione. INFORMAZIONE : si è cercato di darne un significato quantitativo, per esempio secondo Shannon (1948) si misura in bit e poi tale bit viene trasmesso in un certo canale. L’informazione è qualcosa di indipendente dal supporto materiale. Secondo alcuni l’informazione non è un’entità fisica, nel corso del tempo si può notare come i vari pensieri siano mutati: 1500 l’universo =grande orologio ad indicare la regolarità di questo→ 1800 con la termodinamica l’universo = grande machina a vapore che si espande e si contrae a seconda di vari fattori→1900 il mondo =un grande computer in cui poste alcune condizioni iniziali seguono delle conseguenze → oggi universo= grande computer quantistico. L’informazione sembra quindi essere legata all’energia. INFORMATICA : nell’informatica convergono vari filoni di ricerca. Alcuni identificano l’informatica con la scienza dei calcolatori, mentre per altri non è cpsì, come per esempio per Dijikstra il quale afferma che “L'informatica non riguarda i computer più di quanto l'astronomia riguardi i telescopi”. Le definizioni principali sono due:
  • scienza che studia la rappresentazione, la memorizzazione e l’elaborazione dell’informazione
  • studio sistematico degli algoritmi che descrivono e trasformano l’informazione. LE ORIGINI DELL’INFORMATICA
  • L’informatica nasce verso la metà del ‘900 dalla confluenza di diversi filoni di ricerca: supporto meccanico al calcolo, supporto meccanico alla gestione di grandi quantità di dati, automazione del pensiero
  • Evoluzione tecnologica delle macchine: dapprima le macchine erano manuali, come per esempio l’abaco (2000 a.c.), bacchette di Napier (1594), regolo calcolatore (1822)
  • La prima macchina vera e propria è la pascalina (1645), che fa somme e sottrazioni e viene costruita da Pascal per aiutare il padre negli affari
  • Leibniz aggiunge all’invenzione di pascal lo svolgimento di moltiplicazioni e divisioni
  • Anni 30: calcolatrice meccanica, anni 50 primo calcolatore elettronico, anni 70 calcolatore scientifico, anni 80 microchip, anni 90 supercomputer, oggi computer quantistico COMPUTER = colui che fa i conti, infatti i primi computer erano delle calcolatrici.

I computer c’erano anche prima ma erano umani→ macchine calcolatrici umane : la parola "computer" è nata per descrivere le attività di esseri umani impiegati per eseguire calcoli. Le macchine del calcolo hanno dei vantaggi ovvero suddividere un calcolo complesso in tante attività più semplici. Un esempio di tali calcoli che si devono eseguire è la cometa di Halley , ogni 70 anni sembrava ci fosse la stessa cometa, con 3 squadre di persone iniziano a fare dei conti astronomici confrontando ogni 2 ore i calcoli fatti e verificando che siano corretti, altrimenti si torna indietro di 2 ore→ nel corso di qualche mese si sono calcolate l’orbita di tale cometa → questi erano dei computer. Un altro esempio è il Progetto Manhattan. Spesso i computer umani vengono usati per calcolare le orbite (film, il diritto di contare), sono poi arrivati i computer ma affinchè questi funzionassero bisognava trovare l’algoritmo giusto per permettere al computer di calcolare le orbite (ruolo dei programmatori). Grazie ai computer si può gestire un numero enormi di dati (memoria). Hollerith nel 1890 elabora il censimento dei dati degli USA, cosa che prima si faceva manualmente. Egli disegna la prima macchina elettromeccanica per gestire i dati di tale censimento, per memorizzare i dati usa le schede perforate (ogni scheda è una persona). Queste schede erano già usate nei telai meccanici a fine 700. Hollerith fonda quindi le Tabulating machines corp, oggi chiamate IBM. Tali macchine erano molte efficienti e sono state vendute in tutte il mondo, vengono poi usate per schedare gli ebrei dai tedeschi. LE LEGGI DEL PENSIERO: Lo sviluppo del computer non è solo tecnologia, ma vi è anche il contributo della ricerca scientifica Leibniz ispirava ad avere un sistema formale così potente da riuscire ad analizzare il mondo e fare dei calcoli → se ci sono dei dissensi tra nazioni si calcolano i vari scenari possibili e di guerra e di pace e si possono poi fare strategia per intervenire nel modo migliore. Cerca di prevedere le conseguenze delle nostre azioni→ idea dei caratteri universali , ci sono strutture del mondo che si ripetono da molte parti, nel mondo ci sono leggi generali e ci sono anche leggi del pensiero che sono generali. Vi sono delle regole generali alla base del mondo e questi sono i caratteri universali. Se riuscissimo a formalizzare tali regole in entità potremmo calcolare le conseguenze future e quindi agire correttamente. Se riesco ad astrarre il mondo lo posso analizzare matematicamente. George Boole semplifica un po le cose, egli limita la sua idea di essere umano a frasi non ambigue che abbiano solo due valori: o vere o false. Egli inventa quindi le proposizioni ed utilizza poi connettivi logici capaci di collegare proposizioni per farne delle altre. Egli ha una buona idea, ma non ha grandi conseguenze, manca una macchina che si basi su questa logica. Charles Babbage (1820, Inventore, economista e matematico e Lucasian professor a Cambridge) vuole automatizzare i conti e progetta una macchina che chiamo difference engine. Egli fa un progetto e gli vengono date 5 mila sterline per realizzare le sue idee e si rivolge agli orologiai per fare tali congegni di precisioni. Il progetto però fallisce, è complicatissimo, spende 17 mila sterline. Ci riesce poi un tipografo londinese nel 1854 su disegni di Babbage. Babbage abbandona questo primo progetto perché ne ha già un altro in mente che però non viene mai realizzato perché troppo complicato → L’analytical engine , macchina capace di calcolare tutto e anticipa in molte caratteristiche il moderno computer, ma la tecnologia necessaria è ancora di là da venire. Un giovane ingegnere di torino analizza bene tale progetto e fa un articolo su questo in francese. A questo punto interviene l’elemento mancante, il programmatore → prima programmatrice Ada Byron Lovelace , studiosa di matematica figlia di Lord Byron. Ada traduce l’articolo in inglese aggiungendo delle note in cui ci sono dei suggerimenti. Nel 900 poi si formalizza molto sui linguaggi dell’informazione, negli anni 30 poi si ha Turing con la Macchina di turing, ma anche intelligenza artificiale, morfogenesi, auto-organizzazione. Un altro importante personaggio è John von Neumann e si sviluppa la teoria dei giochi, fondamenti della meccanica quantistica e della matematica, automi cellulari,..

CALCOLO SCIENTIFICO

Metodologia triangolare : La scienza si basava da tempo su una ricca e complessa interazione fra teoria ed esperimento → esperimenti non spiegati "chiamano" spiegazioni teoriche e nuove teorie suggeriscono nuovi esperimenti. Oggi la relazione diventa triangolare in quanto si aggiunge la simulazione che viene confrontata con la teoria, se poi questa combacia con quanto elaborato nella tesi allora procedo all’esperimento. Calcolo scientifico altri esempi: Ricerca del minimo o del massimo di una funzione di molte variabili, Ricerca delle soluzioni di un sistema di equazioni, Calcoli geometrici (aree, volumi…), Calcolo di integrali, Simulazione dinamica Simulazione dinamica: Le equazioni della fisica classica sono equazioni differenziali che mettono in relazione alcune derivate coi valori delle variabili e le equazioni di Newton (leggi della meccanica) sono deterministiche ovvero, dati i valori iniziali di posizioni e velocità di tutti i corpi interagenti, le conseguenze sono determinate. Spesso però non è facile calcolare integrali di equazioni differenziali che dovremmo risolvere Il caso più semplice è quello di equazioni del primo ordine dx /dt = f (x) T= tempo che scorre, x è la variabile che voglio scoprire in questo momento in alcuni casi si può risolvere esattamente con "carta e penna” (soluzione “analitica”) p.es. equazione lineare Se ho la soluzione analitica e conosco il valore dei parametri A e k, posso sapere il valore della variabile ad ogni istante. Dalla conoscenza della soluzione posso scoprire come si comporta il sistema al variare del valore di uno o più parametri → crescita esponenziale se k>0  tende a zero se k< Ci sono delle volte che però non conosco la soluzione analitica, ad esempio Cosa posso allora fare? Posso avere una descrizione approssimata: la derivata è il limite del rapporto incrementale Il computer però non riesce a calcolare il limite per Dt→ 0 Allora possiamo fare dei calcoli approssimati fidandomi del rapporto incrementale: ➔ Continuo un passo alla volta costruendo così l’orbita ed in particolare più è piccolo il Dt più sarò preciso (con un Dt molto basso devo fare moltissimi passi ma avrò una eccellente approssimazione). Questo metodo di approssimazione è chiamata formula di Newton (approssimazione con una retta). Esistono però anche altri metodi approssimativi, per esempio invece che usare rette uso parabole. Questi calcoli approssimati si possono fare anche a mano, ma si impiegano moltissimi anni→ Adams e Le Verrier. Abbiamo considerato, sistemi del primo ordine, in cui compaiono solo derivate dx/dt o differenze del tipo f(t+1)-f(t)  sistemi con derivate (o differenze) di ordine superiore possono essere trasformati in sistemi del primo ordine “aggiungendo variabili” p.es. velocità

limiti del calcolo numerico: Una soluzione numerica è relativa ad una particolare condizione analitica e insieme di valori dei parametri, se queste informazioni non sono note con precisione, per farmi un’idea del comportamento complessivo del sistema devo eseguire diverse simulazioni EVOLUZIONE DEI COMPUTER:

  1. I primi computer sono molto grandi e possono essere posseduti o dallo stato o da banche (centri di calcolo). Con il tempo poi essi svolgono sempre più funzioni, in quanto diminuiscono le dimensioni ed i prezzi. Vi sono quindi nuove applicazioni: Sistemi informativi aziendali, nei primi tempi, soprattutto contabilità e "paghe e stipendi"; in seguito, sistemi sempre più integrati (ERM), vendite, produzione, gestione dei magazzini, Finanza
  2. Anni 70→ minicomputer che richiedono un gruppo di programmatori/operatori ma sono più semplici e meno costosi dei grandi mainframe (Vax, HP). Sono disponibili per i diversi settori dell'azienda o per i singoli dipartimenti universitari o per aziende di dimensioni inferiori
  3. Anni 80 si diffondono i computer domestici di modeste dimensioni, poi anche tablet, smartphones,…
  4. Anni 90 nasce il web, servizio di diffusione dei documenti, nasce dal CERN; il web è il servizio, mentre internet è la rete fisica.
  5. Oggi il cloud computing: es Google drive→ invii/elabori dei dati e li mandi in un posto che non si conosce, poi tali dati immagazzinati si possono recuperare quando si vuole
  6. Oggi pervasive computing→ anche la tv oggi ha un chip, anche il frigorifero,… ogni oggetto ha un po di intelligenza Tutto questo è reso possibile dal fatto che i chip sono sempre più veloci e più piccoli. LEGGE DI MOORE: CRESCITA ESPONENZIALE I chip più passa il tempo più sono meno costosi, ogni anno i prezzi diventano una volta e mezza più massi e la memoria è una volta e mezzo più grandi e i chip diventano una volta e mezzo più veloci→ moore si è messo a fare una ricerca con la scala logaritmica sulle y e la pendenza della retta da il coefficiente di K e nota che K è costante e vale tra 1,5, e 2. Egli ha fatto delle previsioni ed ha notato che tale regolarità si verifica nel tempo. Questa regola diventa una sorta di profezia→ l’anno prossimo creo aspettativa in quanto devo avere ogni anno u chip che è il doppio più veloce e abbia il prezzo più basso, questo stimola la ricerca sempre di più. Le aziende spendono tantissimi soldi per riuscire a soddisfare tale legge ogni anni. Il chip è più piccolo quindi l’elettrone impiega meno tempo e quindi il chip è più veloce. COSA FACCIAMO CON IL COMPUTER:
  • Diffusione esplosiva → Cambiamento di "significato" dell'artefatto, diventa anche strumento di comunicazione!
  • Elaborazione di testi: da number cruncher a macchina da scrivere!
  • Fogli elettronici: relazioni fra i dati → la contabilità e il budget sulla scrivania
  • Può elaborare tipi diversi di informazione: immagini, musica. Può elaborare anche simboli Oggi una delle questioni più diffuse è se il computer sia una macchina intelligente (capace di pensare)
  1. TEST DI TOURING : è un test comportamentale C’è un organizzazione con regole interne che ha degli input in ricezione e risponde a questi con un output. Supponiamo di produrre algoritmi abbastanza evoluti per svolgere con la macchina una conversazione simile a quella umana. Ci poniamo quindi in una stanza chiusa ed aldilà c’è qualcuno con cui posso comunicare e bisogna capire se al di la c’è una macchina o una persona. Si pongono quindi delle domande trabochetto alle quali il computer non sa rispondere. Se quindi riceviamo una risposta deduciamo che stiamo svolgendo una conversazione con u esere umano, altrimenti ci dovrà essere una macchina Turing si chiede: 1-si può distinguere un essere umano da un’intelligenza artificiale→ la risposta è no

da un bancomat arabo → bisogna codificare l’algoritmo ovvero usare un linguaggio che l’operatore comprenda. In informatica l’esecutore è un calcolatore elettronico e l’algoritmo è tradotto in un programma. CARATTERISTICHE ALGORITMO :

  • Eseguibilità : ogni azione deve essere eseguibile da parte dell’esecutore dell’algoritmo in un tempo finito
  • Non-ambiguità : ogni azione deve essere univocamente interpretabile dall’esecutore
  • Terminazione : il numero totale di azioni da eseguire, per ogni insieme di dati di ingresso, deve essere finito. Quindi, l’algoritmo deve essere: applicabile a qualsiasi insieme di dati di ingresso appartenenti al dominio di definizione dell’algoritmo; costituito da operazioni appartenenti ad un determinato insieme di operazioni fondamentali; costituito da regole non ambigue, cioè interpretabili in modo univoco qualunque sia l’esecutore (persona o “macchina”) che le legge. Un algoritmo è una descrizione dettagliata, per passi elementari successivi, di una strategia utile per risolvere un determinato problema. Ogni algoritmo è un insieme finito di passi e deve terminare dopo un numero finito di iterazioni. La rappresentazione delle informazioni deve essere: efficiente (senza sprechi inutili) ed efficace (non si deve perdere traccia di dati importanti). D’altra parte, l’algoritmo deve essere: efficiente (pervenire alla soluzione nel modo più veloce possibile e/o usando la minima quantità di risorse fisiche) e corretto (pervenire alla soluzione senza difettare di passi fondamentali). Due algoritmi si dicono equivalenti quando hanno lo stesso dominio di ingresso, hanno lo stesso dominio di uscita in corrispondenza degli stessi valori nel dominio di ingresso producono gli stessi valori nel dominio di uscita, possono però avere una diversa efficienza. IN SINTESI: ALGORITMO : Sequenza finita di mosse che risolve in un tempo finito una classe di problemi (Ogni algoritmo prevede uno STOP!) CODIFICA o IMPLEMENTAZIONE : Fase di scrittura di un algoritmo attraverso un insieme ordinato di frasi (“istruzioni”), scritte in un linguaggio di programmazione, che specificano le azioni da compiere in modo formale interpretabile dal computer PROGRAMMA : Testo scritto secondo la sintassi (alfabeto + regole grammaticali) e la semantica di un linguaggio di programmazione. Deve essere quindi comprensibile dal calcolatore PROGRAMMAZIONE : È l'attività con cui si predispone l'elaboratore ad eseguire un particolare insieme di azioni su particolari dati, allo scopo di risolvere un problema. Ogni elaboratore è una macchina in grado di eseguire azioni elementari su dati. L'esecuzione delle azioni elementari è richiesta all'elaboratore tramite comandi chiamati istruzioni. Le istruzioni sono espresse attraverso frasi di un opportuno linguaggio di programmazione. Un programma non è altro che la formulazione testuale di un algoritmo in un linguaggio di programmazione.

PROGRAMMA

SINTASSI: Insieme di regole formali per la scrittura di programmi in un linguaggio, che dettano le modalità per costruire istruzioni corrette nel linguaggio stesso SEMANTICA: L’insieme dei significati da attribuire alle istruzioni (sintatticamente corrette) costruite nel linguaggio UN PROGRAMMA PUO’ ESSERE SINTATTICAMENTE CORRETTO MA NON AVER SIGNIFICATO Un linguaggio di programmazione è costituito, come ogni altro tipo di linguaggio, da un alfabeto con cui viene costruito un insieme di parole chiave (il vocabolario) ed un insieme di regole sintattiche (la grammatica) per l'uso corretto delle parole del linguaggio. I microprocessori presenti all'interno della macchina sono stati progettati per riconoscere ed eseguire un insieme piuttosto ristretto di istruzioni; tali istruzioni costituiscono il cosiddetto linguaggio macchina. Il linguaggio macchina è basato su una codifica estremamente compatta (scritto in un modo che è legato al chip, è adatto per quel determinato chip) e poco intuitiva. l linguaggio macchina è il linguaggio direttamente eseguibile dall'elaboratore, senza alcuna intermediazione. Ogni istruzione è una sequenza di bit:

  • unità elementare dell'informazione trattata da un elaboratore
  • unità di definizione di uno stato logico. Rappresentazione logica del bit: {0, 1} Computer con architetture interne (CPU) differenti hanno linguaggi macchina differenti Pertanto, un programma scritto nel linguaggio macchina di un computer non è eseguibile su di un computer con un’architettura differente (Non è portabile!) Codificare un programma utilizzando il linguaggio macchina è assai arduo e richiede una conoscenza approfondita del funzionamento di un particolare calcolatore (o meglio: del microprocessore che costituisce la CPU della macchina). Per ovviare a questo problema, che ha costituito per molti anni un grosso limite alla diffusione della programmazione e quindi anche dell'uso dei calcolatori, sono stati sviluppati dei linguaggi di programmazione più evoluti, che si pongono a metà strada fra il nostro linguaggio naturale ed il linguaggio macchina. Sono semplici e poveri (poche parole chiave, poche regole), ma privi di qualsiasi ambiguità. In informatica si parla di programmazione a basso livello quando si utilizza un linguaggio molto vicino alla macchina, al suo funzionamento interno. Si parla invece di programmazione ad alto livello quando si utilizzano linguaggi più sofisticati ed astratti, slegati dal funzionamento fisico della macchina. Si viene così a creare una gerarchia di linguaggi , dai meno evoluti (il linguaggio macchina e l'assembler) a quelli più evoluti (Pascal, Fortran, Cobol, Perl, Java). La programmazione a basso livello è più ardua e meno intuitiva, ma consente di sviluppare programmi efficienti. Ad alto livello la programmazione è più "naturale" e rapida, ma è possibile che non consenta di produrre software efficiente LINGUAGGI AD ALTO LIVELLO : Si basano su una “macchina” le cui “mosse” non sono quelle della macchina hardware → realizzano una “macchina virtuale” Evitano di dover conoscere le caratteristiche specifiche della CPU. Supportano concetti ed astrazioni. Promuovono metodologie per agevolare lo sviluppo del software da parte del programmatore. Hanno capacità espressive molto superiori rispetto a quelle del linguaggio macchina. Per ogni CPU deve esistere il relativo traduttore del linguaggio

IN SINTESI

ESECUTORE

È una macchina, costituita da circuiti elettronici digitali e da componenti elettromeccaniche, ottiche e magnetiche; è velocissimo, essendo una macchina elettronica è molto rapido nel compiere le operazioni per cui è stato progettato; è puntuale nell'applicare le regole che conosce (è preciso, ma non nel senso matematico del termine); è duttile e si adatta bene ad eseguire nuove tecniche, purché questo gli venga spiegato in modo dettagliato e privo di ambiguità; ha una buona memoria, estremamente ampia ed organizzata in modo razionale, ma parcellizzato; non è intelligente: qualunque sia l'accezione di questo termine, non è adatta a descrivere le caratteristiche di un computer; non è in grado di compiere deduzioni o ragionamenti di altro tipo in modo autonomo; non è in grado di capire un problema; non è in grado di capire la soluzione di un problema, né è in grado di capire in modo autonomo se il risultato raggiunto è la soluzione del problema. CAPACITA’ ESECUTORE: Sa memorizzare le informazioni, distinguere in modo pignolo tra informazioni di tipo numerico ed altri tipi di informazione (parole, immagini, ecc.); anche i numeri vengono trattati in modo differente a seconda dell'insieme a cui appartengono (naturali, relativi, razionali, ecc.), sa eseguire alcune operazioni elementari (addizione, sottrazione, prodotto e rapporto fra numeri, concatenazione di parole), sa eseguire il confronto fra informazioni dello stesso tipo ( confrontare numeri es.: a>b, a=b, a≠b), verificare l'uguaglianza fra due parole; sa leggere le informazioni dall'esterno (input); sa scrivere le informazioni all'esterno (output), sa memorizzare sequenze di istruzioni elementari (programma) e le sa eseguire secondo un ordine stabilito dal programma stesso COMPITI E COMPETENZE DEL PROGRAMMATORE: Analizzare il problema riducendolo in termini astratti, eliminando ogni componente non indispensabile e formulando un modello del problema Individuare una strategia risolutiva e ricondurla ad un algoritmo; codificare l'algoritmo in modo tale da renderlo comprensibile al calcolatore; analizzare il risultato dell'elaborazione evidenziando eventuali errori nella formulazione del problema, nella strategia risolutiva, nella codifica dell'algoritmo. Deve essere in grado di capire i problemi e schematizzarli, distinguendone le diverse componenti (dati in input, parametri del problema, dati in output); deve essere in grado di risolvere problemi mediante un approccio algoritmico, individuando gli aspetti del problema che possano essere risolti reiterando più volte operazioni simili; deve conoscere i metodi fondamentali di risoluzione dei problemi, gli approcci più comuni, le strade notoriamente meno convenienti; deve conoscere a fondo le caratteristiche e le capacità del calcolatore; deve essere in grado di comunicare con il calcolatore: ne deve conoscere il linguaggio. ALGORITMO 1 : PROBLEMA: stampare i primi 10 multipli di x Il problema è semplice e chiaro: un solo dato in input (un parametro che caratterizza l'istanza del problema): la "base" costituita dal numero x una costante del problema: il numero di multipli da stampare, 10.

La strategia risolutiva è la seguente: iniziando dal numero x letto in input, per 10 volte verrà calcolato e stampato il multiplo di x, • moltiplicando x per una variabile i • il cui valore verrà incrementato di una unità ad ogni passo. Possiamo ricondurre la strategia al seguente algoritmo:

  1. Leggi in input un numero e chiama x il numero letto →2. Assegna il valore 1 alla variabile i→ 3. Calcola x•i e assegna alla variabile y il risultato; →4. Stampa y; →5. Calcola i+1 e assegna alla variabile i il risultato→ 6. Se i≤10 allora vai al passo 3 altrimenti prosegui→ 7. Fermati. Il nostro studio e l'approccio che adotteremo è focalizzato sull'uso di un linguaggio procedurale (il Python). Questi linguaggi sono basati su sei istruzioni fondamentali: - Assegna: assegna ad una variabile (ad una locazione di memoria) il valore di una espressione - Leggi: legge in input dall'esterno un valore e lo memorizza in una variabile (locazione di memoria) - Scrivi: scrive in output il valore di una espressione o di una variabile (locazione di memoria) - Se … allora … altrimenti …: modifica il "flusso" del programma sulla base del valore di una espressione logica - Vai al passo …: modifica il "flusso" del programma incondizionatamente - Fermati: termina l'esecuzione del programma DIAGRAMMI DI FLUSSO: Per rappresentare in modo efficace un algoritmo sono stati sviluppati dei modelli grafici (i diagrammi di flusso) che associano alle istruzioni del programma dei simboli grafici: ALGORITMO 1 CON DIAGRAMMI DI FLUSSO
  2. Leggi in input un numero e chiama x il numero letto;
  3. Assegna il valore 1 alla variabile i;
  4. Calcola x•i e assegna alla variabile y il risultato;
  5. Stampa y;
  6. Calcola i+1 e assegna alla variabile i il risultato;
  7. Se i≤10 allora vai al passo 3 altrimenti prosegui;
  8. Fermati. STRUTTURA DI PROGRAMMAZIONE: I programmatori inesperti tendono ad "aggrovigliare" il programma introducendo numerosi salti privi di regole (spaghetti programming). È stato dimostrato (Teorema fondamentale della programmazione strutturata di Jacopini e Böhm) che ogni programma può essere codificato attenendosi esclusivamente a tre strutture fondamentali: Le tre strutture possono essere concatenate una di seguito all'altra oppure nidificate una dentro l'altra, ma non possono essere intrecciate o incavallate.

calcolatore questo corrisponde alla memorizzazione di un valore (che può essere il risultato di un calcolo) in una cella di memoria, e costituisce una delle operazioni fondamentali esprimibili nel linguaggio macchina e in tutti i linguaggi di programmazione. L’operazione indicata in un blocco di elaborazione viene eseguita in due fasi:

  1. si calcola il valore dell’espressione a destra del simbolo ←
  2. si associa tale valore all’identificatore Un’espressione che contiene identificatori (come (x + 3)/2) ha senso solo se a ciascuno di essi è già stato associato un valore. In particolare, un’operazione come c ← c + 1 corrisponde a incrementare di un’unità il valore associato all’identificatore c Blocco di selezione: È rappresentato da un rombo con due frecce uscenti. Esprime la scelta tra due sequenze alternative di operazioni, che l’esecutore effettuerà in base al verificarsi o meno di una data condizione. La condizione consiste di norma in un confronto tra due espressioni per mezzo degli operatori .<, ≤, =, ≠, >, ≥ Le frecce uscenti dal blocco di selezione sono associate ai simboli V e F indicanti il verificarsi (Vero) o meno (Falso) della condizione. Formulazione di algoritmi: Quando si formula un algoritmo, o se ne vuole verificare la correttezza, o se ne vuole comprendere il funzionamento (nel caso in cui sia stato formulato da altri), è spesso utile provare a eseguirlo (preferibilmente usando carta e matita) per alcuni possibili valori dei dati di ingresso. A questo scopo è conveniente tener traccia del valore corrente associato a ciascuno degli identificatori simbolici:
    • dopo ogni operazione di acquisizione o di elaborazione si aggiornerà il valore dell’identificatore corrispondente
    • se all’identificatore coinvolto era già associato un valore, questo sarà sostituito dal nuovo valore Quando l’algoritmo sarà tradotto in un programma ed eseguito da un calcolatore, i riquadri (ovvero gli identificatori) corrisponderanno alle celle di memoria nelle quali verranno memorizzati i dati d’ingresso e i risultati intermedi e finali.

IL COMPUTER

E’ un’astrazione dell’architettura di von Neumann. E’ dotato di:

  • un’unità CPU
  • una memoria centrale
  • un bus di comunicazione
  • un’unica unità di ingresso (detta standard input)
  • un’unica unità di uscita (detta standard output). EVOLUZIONE :
  • Anni ’30: primi calcolatori elettromeccanici. Erano in grado di svolgere un solo tipo di calcolo, per esempio: costruzione di tabelle di tiro per l’artiglieria, risoluzione di sistemi di equazioni lineari. Entrano i dati, esce il risultato.
  • Anni ’30: contributi dalla matematica analisi dei procedimenti di calcolo algoritmi idea di macchina esecutrice automatica di algoritmi, programmabile (calcolatore universale) organizzazione logica di un calcolatore programmabile. Da questa idea poi le cose vanno molto velocemente
  • Anni ’40: la tecnologia elettronica rende possibile la realizzazione di calcolatori programmabili. Alcuni dei primi calcolatori: Mark 1944 ed ENIAC nel 1946 ARCHITETTURA DI VON NEUMANN MEMORIA CENTRALE : Una sequenza di celle o parole identificate da un indirizzo numerico. Ciascuna cella memorizza un dato numero di bit. Funzione: memorizzare il programma in esecuzione e i dati da elaborare Unità di misura della capacità di memoria: byte (8 bit) e suoi multipli: kilobyte (KB), megabyte (MB), ecc CPU : Unità logico-aritmetica (ALU) Unità di controllo (CU) Tutte queste parti hanno una parte piccola di memoria. Vi sono poi anche dei registri:
  • program counter (PC): ricorda la prossima istruzione
  • current instruction register (CIR): ricorda l’istruzione che stiamo eseguendo
  • address register (AR)
  • data register (DR): arrivano i dati e li registrano

CONTROL UNIT (CU)

L'unità di controllo di un computer è dove si verifica il ciclo di recupero/esecuzione. Il suo circuito preleva un'istruzione dalla memoria ed esegue le altre operazioni del ciclo di recupero/esecuzione su di essa ARITHMETIC/LOGIC UNIT (ALU) =“Fa i conti” Un circuito nell'ALU può sommare due numeri Il circuito utilizza porte logiche o circuiti più semplici che implementano operazioni come AND e OR. Ci sono anche circuiti per moltiplicare, confrontare due numeri, ecc. L'ALU esegue ogni istruzione macchina con un circuito separato ISTRUZIONI DI MACCHINA : Le istruzioni del computer sono più primitive di quelle digitate dai programmatori Es: ADD 4000, 2000, 2080. Comanda al computer di aggiungere i numeri memorizzati nelle posizioni di memoria 2000 e 2080 e quindi memorizzarli nella posizione di memoria 4000. Le istruzioni del computer codificano gli indirizzi di memoria, non i numeri stessi Riferimento indiretto: riferirsi a un valore facendo riferimento all'indirizzo in memoria. Qualsiasi siano i numeri memorizzati nelle posizioni di memoria 2000 e 2080, vengono sommati e il risultato viene archiviato nella posizione 400 INSTRUCTION DECODE (ID): Il decodificatore trova l'indirizzo di memoria dei dati dell'istruzione (operandi sorgente). La maggior parte delle istruzioni opera su due valori di dati archiviati in memoria (come ADD), quindi la maggior parte delle istruzioni ha indirizzi per due operandi sorgente Questi indirizzi vengono passati al circuito che li recupera dalla memoria durante il passaggio successivo Il decodificatore trova l'indirizzo di destinazione e inserisce l'indirizzo nel circuito RR (Return Result).

Il decodificatore determina quale operazione eseguirà l'ALU (nel caso precedente, «aggiungi») e configura l’ALU (ALU è impostato per l'operazione) DATA FETCH (DF): I valori dei dati su cui operare vengono recuperati dalla memoria. I bit in posizioni di memoria specificate vengono copiati in posizioni nel circuito ALU. I valori dei dati rimangono in memoria (non vengono distrutti) ISTRUCTION EXECUTION (EX) : Per questa istruzione ADD, il circuito di addizione somma i due operandi sorgente per produrre la loro somma. La somma è contenuta nel circuito ALU RETURN RESULT (RR): RR restituisce il risultato di EX nella posizione di memoria specificata dall'indirizzo di destinazione Una volta memorizzato il risultato, il ciclo ricomincia CLOCK DEL COMPUTER: I computer sono motori di esecuzione delle istruzioni. Poiché in linea di principio il computer esegue un'istruzione per ciclo, la velocità di un computer dipende dal numero di cicli di recupero/esecuzione che completa al secondo. La velocità del ciclo di recupero/esecuzione è determinata dall'orologio del computer e viene misurata in gigahertz o miliardi (giga) di cicli al secondo (hertz). Un computer con un clock a 1 GHz ha un miliardesimo di secondo, un nanosecondo, tra due scatti (tick) di clock per eseguire il ciclo di recupero/esecuzione. Un semplice processore utilizza cinque tick per completare un'istruzione (cinque passaggi). EVOLUZIONE DEI CALCOLATORI: Evoluzione della tecnologia elettronica: valvole termoioniche (1945–1955)→ transistor (1955–1965)→ circuiti integrati (1965–1980)→ circuiti ad alta densità di integrazione (1980–oggi) Conseguenze: diminuzione delle dimensioni, del consumo energetico, del costo di fabbricazione dei calcolatori; incremento del numero di transistor per unità di superficie, della velocità di elaborazione, della capacità dei dispositivi di memoria; estensione dei campi di applicazione dei calcolator; chip si scalda velocemente (impianto di raffreddamento) EVOLUZIONE DELL’ARCHITETTURA DI VON NEUMANN: L’architettura di von Neumann ha subìto nel corso degli anni diverse modifiche, legate all’evoluzione dei calcolatori e all’esigenza di incrementare le loro prestazioni. Le sue limitazioni principali sono le seguenti:

  • esecuzione sequenziale delle istruzioni di un programma, anche se alcune di esse potrebbero essere eseguite in parallelo
  • necessità di prelevare le istruzioni (e i dati da elaborare) dalla memoria centrale: tale operazione richiede tempi superiori rispetto all’esecuzione di un’istruzione logico-aritmetica La velocità di elaborazione dei calcolatori dipende (anche) da: frequenza dell’orologio di sistema, complessità delle istruzioni del linguaggio macchina, ampiezza dei registri, del bus dati e del bus indirizzi, capacità di memoria e tempo d’accesso alla memoria. Principali modifiche all’architettura di von Neumann:
  • introduzione di diversi dispositivi di memoria (con varie gerarchie di memoria= CACHE)
  • modifica della struttura della CPU per consentire l’esecuzione parallela di più istruzioni
  • uso di più CPU in grado di eseguire istruzioni in parallelo SISTEMA DI MEMORIA: Nessun dispositivo fisico può raggiungere un compromesso accettabile tra le diverse caratteristiche (capacità, costo per bit, tempo di accesso, dimensioni consumo di energia, memorizzazione permanente o meno dei dati, possibilità di trasporto tra diversi calcolatori). Come soluzione a questo problema si introducono diversi dispositivi di memoria caratterizzati da un compromesso tra tempo di accesso, costo e capacità.

Esiste una grande quantità di sistemi operativi diversi: UNIX, Ubuntu GNU/Linux, Mac OS X, Windows Vista MODELLO STRATIFICATO : un sistema operativo è tipicamente organizzato in modo stratificato (a buccia di cipolla)

  • lo strato più esterno fa riferimento alle funzionalità messe a disposizione dagli strati più interni
  • il kernel (o nucleo) è lo strato più interno e fa riferimento diretto al BIOS (schermo azzurro quando accendo il computer).
  • l’approccio modulare allo sviluppo dei sistemi operativi tende a ridurre le funzionalità del kernel al minimo indispensabile ed integrare le funzionalità ulteriori tramite moduli (e.g. per la gestione delle periferiche. La struttura è nata per essere flessibile. BIOS: Basic Input-Output System Caricamento del sistema operativo (insieme di programmi che permette il normale funzionamento di un calcolatore). Il sistema operativo risiede su memoria di massa (tipicamente un hard-disk), e deve essere caricato in memoria centrale per poter essere utilizzato. All’atto dell’accensione del calcolatore, è necessario in qualche modo avviare il caricamento in memoria centrale del sistema operativo → Tale operazione viene eseguita dal BIOS. IL bios quindi controlla che tutto quanto funzioni→Il BIOS è un piccolo programma che si occupa di inizializzare il calcolatore all’accensione:
  1. esegue dei test diagnostici per verificare l’hardware presente e il suo corretto funzionamento (interrompendosi con messaggi di errore se necessario)
  2. inizializza l’hardware e gestisce i dettagli di basso livello del suo utilizzo (interfacciandolo con il sistema operativo)
  3. localizza il sistema operativo (andando a cercare in una zona predefinita dell’hard disk) e lo carica in memoria
  4. cede il controllo della macchina al SO stesso. Il computer quindi inizia ad eseguire il sistema operativo Il BIOS è scritto su una memoria EEPROM o flash, ossia una memoria di sola lettura ma riprogrammabile, contenuta nella scheda madre (non cancellabile). Se il BIOS viene cancellato il computer non funziona. Funzioni del sistema operativo :
  • Esecuzione applicazioni ovvero gli applicativi che ho caricato come excel,… Abbiamo detto che qualunque programma per essere eseguito dalla CPU deve stare in memoria centrale. Quando viene richiesta l’esecuzione di un programma (ad esempio aprendo un editor di testi tipo open office), il SO si occupa di caricare tale programma in memoria centrale, ed avviarne l’esecuzione. Un programma caricato in memoria centrale diventa un processo. La CPU quindi esegue le istruzioni di processi, che sono programmi caricati in memoria. Un programma che viene eseguito è una cosa dinamica che a partire da condizioni iniziali fa o delle cose o delle altre, questo è un processo→ programmi= processi
  • Accesso dispositivi di Input/Output L’interazione tra il calcolatore e l’utente avviene tramite dei dispositivi di input-output detti periferiche (tastiera, schermo, stampante, etc). I dettagli del funzionamento di tali periferiche dipendono dalle loro caratteristiche specifiche (e.g. tensione della tastiera, segnale da associare alla pressione di un tasto, etc). Il SO si occupa di mascherare tali dettagli di basso livello, e fornire le funzionalità delle periferiche tramite istruzioni astratte (lettura/scrittura). Questo semplifica notevolmente l’interazione dell’utente, ma anche dei programmi applicativi, con tali periferiche.
  • Archiviazione dati e programmi Dati e programmi vengono archiviati in memorie di massa, quali l’hard disk, che a differenza della memoria centrale non sono volatili. Tale informazione viene tipicamente organizzata logicamente per poterla reperire in maniera efficiente, suddividendola in una struttura gerarchica di cartelle (directory) e files. Il SO si occupa di gestire tale struttura tramite il file system, e di rendere trasparenti i dettagli della lettura e scrittura dell’informazione dai supporti hardware. Ha quindi la funzione di data base. Tutte le interfacce sono piene di metafore→ i dati in un disco rigido sono archiviati come se fosse una biblioteca (cartelle di cartelle) / l’interfaccia home, come una casa è fatta di tante stanze così i siti hanno una pagina di accesso (anticamera della casa) che poi mi da accesso ad una serie di altre pagine (parti specializzate). Esistono anche SO non basate sull’organizzazione a cartelle
  • Controllo di accesso Nei sistemi condivisi da più utenti, è necessario fornire dei meccanismi di protezione che impediscano ad un utente di modificare dati e programmi di un altro utente. Tali meccanismi vengono implementati dal sistema operativo mediante un sistema di permessi che stabilisce cosa un certo utente può e non può fare. Tipicamente tali permessi servono anche ad evitare che l’utente inavvertitamente (o maliziosamente) modifichi o danneggi elementi del sistema operativo, file di configurazione, etc, modificando o compromettendo il funzionamento della macchina. Tali meccanismi sono sempre più necessari in un contesto in cui i computer sono connessi alla rete Internet e quindi facilmente raggiungibili. Ogni utente ha i suoi privilegi (cose che può vedere o non vedere, fare o non fare). C’è una gerarchia di utenti, il principale è chiamato administrator.
  • Gestione malfunzionamenti I malfunzionamenti sono parte inevitabile del funzionamento di un calcolatore, dovuti a guasti hardware (e.g. cali di tensione), situazioni di eccezione (e.g. fine carta nella stampante), o operazioni scorrette compiute da un’applicazione (scrivere in una parte di memoria riservata al SO). Il SO si occupa di rilevare tali problemi, risolvendoli in maniera trasparente ove possibile (e.g. re-inviando un segnale, terminando un processo che ha fatto un’operazione scorretta) o segnalando il problema (e.g. manca carta nella stampante). Il SO evita così che tali malfunzionamenti possano compromettere il funzionamento complessivo del sistema. COMPONENTI SISTEMA OPERATIVO
  • gestione dei processi: gestisce i programmi in esecuzione (processi) pianificando il loro utilizzo della CPU
  • gestione della memoria: controlla l’allocazione della memoria ai diversi programmi in esecuzione, garantendo a ciascuno l’accesso ad un’area riservata
  • gestione delle periferiche: garantisce l’accesso ai dispositivi di I/O mascherandone i dettagli fisici (tramite i drivers) e risolvendo gli eventuali conflitti per richieste concorrenti
  • gestione dei file: (file system) gestisce archiviazione e recupero dei dati nelle memorie di massa
  • interprete di comandi: si interfaccia direttamente agli utenti permettendo di accedere alle funzionalità del sistema (e.g. shell UNIX o interfacce utente grafiche). RIASSUMENDO :
  • un processo (task) è un programma in esecuzione sul calcolatore
  • un programma è un oggetto statico (una sequenza di istruzioni)
  • un processo è dinamico nel senso che è dotato di uno stato interno che cambia nel tempo
  • Lo stato di un processo è formato dai valori dei dati contenuti in memoria e nei registri della CPU (in particolare il program counter che contiene l’indirizzo della prossima istruzione da eseguire)
  • Lo stesso programma piò essere associato a più processi distintI