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


informatica umanistica, Sintesi del corso di Fondamenti di informatica

Una panoramica sull'informatica, definendo il suo campo di applicazione e i suoi strumenti. Vengono inoltre spiegati i concetti di informazione, dato e conoscenza, e viene introdotto il concetto di linguaggio formale. Il documento si conclude con una descrizione delle attività di trattamento dell'informazione e dei passi che le compongono.

Tipologia: Sintesi del corso

2017/2018

In vendita dal 09/02/2022

Valentina_Sangalli
Valentina_Sangalli 🇮🇹

4.7

(20)

15 documenti

1 / 39

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Informatica
Capitolo 1: L’ informatica si occupa della progettazione e costruzione di macchine in
grado di trattare, elaborare in modo automatico l’informazione. Gli strumenti frutto
delle tecnologie informatiche di cui oggi disponiamo, primo fra tutti il calcolatore
elettronico rappresenta la realizzazione più o meno parziale del sogno coltivato
dall’uomo di disporre di elaboratori automatici, macchine in grado di compiere
autonomamente attività di elaborazione dell’informazione, di garantire i benefici
rispetto all’elaborazione condotta dall’uomo (riduzione dei tempi di elaborazione,
maggiore affidabilità…). Qualsiasi informazione si dà all’elaboratore da elaborare
riuscirà comunque ad arrivare al risultato. Le telecomunicazioni si occupano della
trasmissione dell’informazione a distanza. Nell’ambito dell’informatica e delle
discipline a essa collegate è importante mettere in relazione il significato di
informazione con quello di altri, tra cui dato e conoscenza. Un’informazione è un
insieme di dati con un risultato intrinseco (dato messo in relazione con la proprietà a
cui si riferisce). Un dato è un insieme di simboli tracciati su un supporto fisico,
rappresenta una proprietà di un oggetto nel mondo reale senza però contenere alcun
riferimento alla proprietà stessa. invece si parla di conoscenza quando si dispone di
regole che permettono di trarre vantaggio da tale informazione.
I linguaggi naturali sono tutti quei linguaggi che gli uomini hanno sviluppato nel corso
dei secoli per comunicare. Una caratteristica di tali linguaggi negativa è rappresentata
dalla loro inerente ambiguità cioè un qualsiasi costrutto formulato in tali linguaggi
è potenzialmente polisemico ovvero soggetto a una pluralità di sensi, di significati.
Invece i linguaggi formali vengono sviluppati e impiegati in tutti quegli ambiti come
l’informatica, la matematica, la logica in cui è importante evitare ambiguità. La
definizione di linguaggio formale prevede: individuazione di un alfabeto (elenco finito
di simboli), definizione di una grammatica formale, insieme di regole sintattiche che
specifichino come i simboli dell’alfabeto possano essere combinati tra loro per
costruire frasi ben formate all’interno del linguaggio. Le semantiche formali
consentono di attribuire un significato alle frasi in un linguaggio formale. La stessa
informazione può essere codificata con simboli e modalità diverse (ex. 1963 può
essere scritto in: numero, codifica romana, rappresentazione testuale).
Se consideriamo un alfabeto estremamente ridotto che contiene solo i simboli 0 e 1
un bit contrazione di binary digit (cifra binaria) è un simbolo scelto su tale alfabeto.
l’adozione dell’alfabeto binario per la codifica delle informazioni nei calcolatori è
determinata dalla semplicità con cui i suoi simboli possono essere rappresentati da
dispositivi bistabili, dispositivi fisici in grado di assumere due configurazioni
alternative e di permanere stabilmente nella configurazione loro assegnata, quali:
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 informatica umanistica e più Sintesi del corso in PDF di Fondamenti di informatica solo su Docsity!

Informatica

Capitolo 1: L’ informatica si occupa della progettazione e costruzione di macchine in grado di trattare, elaborare in modo automatico l’informazione. Gli strumenti frutto delle tecnologie informatiche di cui oggi disponiamo, primo fra tutti il calcolatore elettronico rappresenta la realizzazione più o meno parziale del sogno coltivato dall’uomo di disporre di elaboratori automatici, macchine in grado di compiere autonomamente attività di elaborazione dell’informazione, di garantire i benefici rispetto all’elaborazione condotta dall’uomo (riduzione dei tempi di elaborazione, maggiore affidabilità…). Qualsiasi informazione si dà all’elaboratore da elaborare riuscirà comunque ad arrivare al risultato. Le telecomunicazioni si occupano della trasmissione dell’informazione a distanza. Nell’ambito dell’informatica e delle discipline a essa collegate è importante mettere in relazione il significato di informazione con quello di altri, tra cui dato e conoscenza. Un’informazione è un insieme di dati con un risultato intrinseco (dato messo in relazione con la proprietà a cui si riferisce). Un dato è un insieme di simboli tracciati su un supporto fisico, rappresenta una proprietà di un oggetto nel mondo reale senza però contenere alcun riferimento alla proprietà stessa. invece si parla di conoscenza quando si dispone di regole che permettono di trarre vantaggio da tale informazione. I linguaggi naturali sono tutti quei linguaggi che gli uomini hanno sviluppato nel corso dei secoli per comunicare. Una caratteristica di tali linguaggi negativa è rappresentata dalla loro inerente ambiguità→ cioè un qualsiasi costrutto formulato in tali linguaggi è potenzialmente polisemico ovvero soggetto a una pluralità di sensi, di significati. Invece i linguaggi formali vengono sviluppati e impiegati in tutti quegli ambiti come l’informatica, la matematica, la logica in cui è importante evitare ambiguità. La definizione di linguaggio formale prevede: individuazione di un alfabeto (elenco finito di simboli), definizione di una grammatica formale, insieme di regole sintattiche che specifichino come i simboli dell’alfabeto possano essere combinati tra loro per costruire frasi ben formate all’interno del linguaggio. Le semantiche formali consentono di attribuire un significato alle frasi in un linguaggio formale. La stessa informazione può essere codificata con simboli e modalità diverse (ex. 1963 può essere scritto in: numero, codifica romana, rappresentazione testuale). Se consideriamo un alfabeto estremamente ridotto che contiene solo i simboli 0 e 1 un bit contrazione di binary digit (cifra binaria) è un simbolo scelto su tale alfabeto. l’adozione dell’alfabeto binario per la codifica delle informazioni nei calcolatori è determinata dalla semplicità con cui i suoi simboli possono essere rappresentati da dispositivi bistabili, dispositivi fisici in grado di assumere due configurazioni alternative e di permanere stabilmente nella configurazione loro assegnata, quali:

presenza/assenza di un foro in una scheda presenza/assenza di carica elettrica di una sostanza - > ssd (solid state disk) evoluzione dell’hard-disk passaggio/non passaggio di corrente in un cavo conduttore - > cavo usb, chiavetta, modem wi-fi (il modem passa informazioni) passaggio/non passaggio di luce in un cavo ottico-> cavo che passa il segnale audio, e i dati possono passare anche tramite la luce. Se un bit può assumere due configurazioni possibili 0 e 1, si considerino tutte le sequenze diverse che è possibile realizzare con 2 o più bit si ottiene: 2 bit: 4 (2 alla seconda), 3 bit: 8 (2 alla terza) … 8 bit: 256 (2 all’ottava). Regola generale: n bit: 2 alla n→ sequenze possibili. Si definisce byte una sequenza di 8 bit. In un calcolatore tutte le informazioni sono rappresentate in notazione binaria, sotto forma di sequenze di bit. B→ byte b→bit Prefissi per i multipli dell’unità di misura: kilo, mega, giga, tera, peta. Ex. 1 giga:1000 mega, 1 tera:1000 giga 3 mega:3000kilo ↘ 0,003 giga Con l’espressione elaborazione dell’informazione o trattamento dell’informazione si indica qualsiasi attività condotta sull’informazione stessa, comprendendo almeno le seguenti: creazione, modifica (anche eliminazione), confronto (fra 2 informazioni), conservazione (comunicazione a distanza nel tempo), trasmissione (comunicazione a distanza nello spazio) a soggetti specifici (ex: mail) o a soggetti non predeterminati (ex: internet). Una qualsiasi attività di trattamento dell’informazione può essere ricondotta a uno schema che prevede i passi di seguito delineati: 1: l’informazione viene codificata in 0 e 1 e tracciati su un supporto fisico (hard-disk) 2: il supporto viene sottoposto a una trasformazione fisica che genera nuovi dati, nuove sequenze di simboli. 3: i dati generati dal passo n°2 vengono decodificati e apportano nuova informazione. La trasmissione dell’informazione rientra in tale schema quando per trasformazione fisica del supporto si intenda il suo trasferimento dal mittente al destinatario, per la memorizzazione dell’informazione la trasformazione consiste, nella sua conservazione nel tempo senza che ne siano apportate modifiche. L’informazione in ingresso all’elaborazione è detta input quella invece prodotta in uscita dall’elaborazione viene detta output. Vista l’inerente ambiguità del linguaggio

affidabili con l’impiego dei circuiti integrati (microchip), circuiti elettronici miniaturizzati, che hanno portato all’introduzione del microprocessore. L’architettura di John von Neumann: caratteristiche principali:

  1. obiettivo è la realizzazione di un calcolatore universale
  2. introduzione della memoria in cui è possibile rappresentare i dati e le informazioni
  3. utilizzo dell’aritmetica binaria (0,1)
  4. separazione netta tra dispositivo di memorizzazione (memoria) e dispositivo di elaborazione (cpu) Il calcolatore è composto da→ la cpu riceve un segnale dall’esterno (input) la cpu chiede le informazioni e i dati alla memoria tramite il bus la memoria li restituisce sempre mediante il bus i dati e le informazioni richieste per essere rielaborati dalla cpu che li rispedisce all’esterno (output). (vedere disegno sul quaderno). Quando si progetta una cpu è necessario identificare le operazioni elementari che è in grado di compiere, l’insieme di tutte le istruzioni in binario per la cpu è detto linguaggio macchina. Due calcolatori sono detti compatibili quando adottano un linguaggio macchina uguale. Un difetto dell’architettura di von Neumann è noto come il collo di bottiglia di von Neumann→ cpu riesce a elaborare i dati più velocemente rispetto al bus che deve trasferirli. Software: la parte virtuale del computer (ex. excel, word). Hardware: parte fisica del computer che si può toccare. Il processore: la cpu ha il compito di eseguire istruzioni codificate in binario, all’ interno della memoria centrale, che è costituita da un insieme di unità elementari di memorizzazione (celle), ciascuna delle quali può contenere un dato/ istruzione ed è identificata da un indirizzo numerico, la cpu, tramite il bus legge o scrive in una cella di memoria specificandone l’indirizzo. Per lo svolgimento delle sue attività, si avvale di alcuni registri, piccole unità di memorizzazione interne e caratterizzate da una notevole velocità di lettura/scrittura. Dall’accensione allo spegnimento del calcolatore la cpu continua a iterare su un ciclo composto di 4 attività: letteratura della memoria (fetch) decodifica, esecuzione, scrittura. Nella fase di fetch la cpu legge un’istruzione dalla memoria centrale e la memorizza nel registro IR. Il program counter che mantiene l’indirizzo della cella di memoria contenente la prossima istruzione da eseguire. Nella fase di decodifica, all’interno dall’istruzione viene identificata: 1) la parte che specifica l’operazione da eseguire. 2) le altre parti che identificano gli operandi, i dati cui tale operazione deve essere applicata.

L’esecuzione è per lo più demandata all’unità aritmetico-logica, un sottoinsieme della cpu contenente i circuiti per eseguire le operazioni elementari. Nella fase finale, il risultato dell’esecuzione è trascritto in uno dei registri interni alla cpu oppure all’interno della memoria centrale. Il linguaggio macchina di ogni cpu prevede anche istruzioni di salto (jump). Modificano esplicitamente il valore del program counter per consentire di modificare il flusso di esecuzione, delle istruzioni, di realizzare iterazioni o esecuzioni condizionate dal verificarsi di particolari condizioni. All’interno di un calcolatore è presente un particolare dispositivo detto clock che scandisce le operazioni all’interno di tutti i circuiti elettronici del calcolatore, tra cui la cpu, e li sincronizza. La frequenza di un clock è misurata in hertz determina la velocità massima con cui la cpu è in grado di operare. Nei pc e nei server odierni spesso si impiegano processori multi-core chip che integrano due o più cpu ciascuna delle quali è in grado di operare in parallelo alle altre a una frequenza che tipicamente si aggira intorno ad alcuni gigahertz (GHz). Memoria centrale: (ram) è il dispositivo di memorizzazione con cui la cpu interagisce, tramite il bus, per leggere e scrivere istruzioni/dati. Consiste in un insieme di unità elementari di memorizzazione (celle) ciascuna costituita da alcuni dispositivi bistabili, organizzati in gruppi di 8, può contenere un’istruzione/dato ed è identificata da un indirizzo numerico. La ram si caratterizza per la sua volatilità la sua capacità di memorizzazione richiede un continuo flusso di alimentazione elettrica. Un qualsiasi dispositivo di memoria costituito da celle di memorizzazione può supportare uno dei tipi di accesso:

  1. accesso sequenziale: prima di poter leggere una cella è necessario leggere quella precedente.
  2. accesso diretto: dato l’indirizzo di una cella, né possibile l’accesso immediato.
  3. accesso misto: accesso diretto al blocco di celle all’interno del quale la singola cella viene ricercata con un accesso sequenziale.
  4. accesso associativo: l’accesso a una cella non è guidato dal suo indirizzo ma dal suo contenuto. ogni calcolatore dispone di una memoria aggiuntiva la rom si tratta di una memoria di sola lettura, contiene le istruzioni per l’avvio del calcolatore. Memoria di massa (memoria secondaria): hanno come funzione principale quella di garantire la persistenza dei dati. Sono in grado di offrire una maggiore capacità. Alcune memorie di massa si basano su supporti removibili per la cui lettura e scrittura il calcolatore deve essere dotato di un apposito dispositivo, denominato drive, può essere integrato all’interno della chassis del calcolatore connesso con un cavo USB. I

protettiva, un’etichetta (che può essere stampata sulla vernice o cartacea incollata su di essa). Quando il supporto è inserito nel drive, mentre ruota la traccia viene illuminata da una luce laser che viene riflessa dallo strato riflettente, permettendo a una testina di lettura di ricostruire i dati così codificati. Alcuni supporti si configurano come memorie solo di lettura. Nei supporti scrivibili tra il substrato e lo strato riflettente è presente una vernice fotosensibile. Il masterizzatore può scrivere una sola volta, sul supporto con una luce laser in grado di modificare in modo puntuale il colore di tale vernice e simulare la presenza dei pit nella traccia. Nei supporti riscrivibili il contenuto informativo può essere scritto e modificato molte volte. La vernice fotosensibile è sostituita da uno strato di materiale in grado, sotto l’effetto di fenomeni termici di assumere due stati, amorfo e cristallino, con caratteristiche riflettenti diverse che possono simulare pit e land. I supporti ottici più diffusi sono i CD, DVD, BD (blu-ray disc). Memorie flash: tecnicamente una EEPROM è un supporto il cui contenuto informativo può essere scritto/cancellato, riprogrammato mediante processi elettronici. Non richiede alimentazione elettrica per conservare il suo contenuto e si configura come non volatile. Queste memorie a fronte di un costo molto ridotto sono in grado di offrire una capacità intermedia tra quelle tipiche della RAM e del disco rigido. L’assenza di componenti meccanici garantisce inoltre un ridottissimo consumo di energia elettrica, una rumorosità praticamente nulla, una buona resistenza agli urti, alle temperature estreme, persino all’immersione nell’acqua. La loro veloce diffusione nei formati in cui si presentano più comunemente a livello commerciale: memory card, drive USB, drive a stato solido. Le memory card si presentano come piccole schede rimovibili, impiegate come supporto di memoria in pda, tablet, smartphone… i formati standard più comuni sono PC Card, CompactFlash, Secure Digital card (SD), miniSD, microSD. Un drive USB integra una memoria flash e un’interfaccia USB in un dispositivo di dimensioni simili a quelle di un portachiavi. La sua connessione a una porta USB di un calcolatore ne consente l’accesso in lettura, scrittura rendendolo particolarmente adatto allo scambio di dati tra calcolatori e al backup in ambiente domestico. I drive a stato solido sono impiegati in sostituzione dei dischi rigidi. Le memorie flash presentano un limite rappresentato dal massimo numero di cicli di cancellazione-scrittura cui possono essere sottoposte prima di comprometterne l’affidabilità. Gerarchie di memoria: una CPU moderna quando le sono richieste elaborazioni semplici su grosse quantità di dati, si trova spesso a perdere tempo prezioso nell’attesa che un dato sia letto o scritto in memoria. Un approccio adottato per

ridurre gli effetti negatici da ciò derivanti si basa sul principio di località che si esprime in due diverse forme: località temporale località spaziale oltre alla memoria centrale e alle memorie di massa, un calcolatore moderno dispone di una più articolata gerarchia di memorie in cui i livelli più vicini alla CPU si caratterizzano per maggior velocità e minore capacità secondo il seguente schema. Registri della CPU: garantiscono la massima velocità a fronte di una capacità di alcune centinaia di byte. Cache di livello 1: garantisce la capacità di una decina di kilobyte Cache di livello 2: garantisce una capacità di 512 kilobyte o più Cache di livello 3: garantisce una capacità di 2 megabyte o più Memoria centrale Dischi interni Dischi esterni Capitolo 2: Il software: grazie ad esso il calcolatore è una macchina estremamente flessibile, rivelandosi in grado di risolvere/supportare l’uomo nella risoluzione di problemi molto diversi tra loro nei più svariati ambiti applicativi. (è il sistema operativo) L’algoritmo è una sequenza di passi finita, non ambigua al fine di raggiungere il risultato voluto. Sta alla base del software. Un algoritmo presuppone la presenza di qualcuno in grado di eseguirlo che definiamo esecutore (in informatica è un calcolatore), viene letto dall’esecutore, e partendo dai dati di input esegue le istruzioni riportate seguendo un ordine preciso, giungendo al termine a ottenere i dati di output, deve essere formulato in un linguaggio comprensibile all’esecutore; deve prevedere soltanto istruzioni elementari, che richiedono all’esecutore la conduzione di operazioni elementari, (operazioni che egli sa compiere senza bisogno di ulteriori specificazioni). deve essere formulato in un linguaggio non ambiguo, deve essere formulato in un numero finito di istruzioni; deve essere deterministico cioè eseguendo lo stesso algoritmo più volte sugli stessi dati di input, l’esecutore deve generare sempre gli stessi dati di output; un algoritmo parametrico è un algoritmo che facendo riferimento ai dati di input, è in grado di risolvere non un solo problema ma una classe di essi.

La macchina di Turing: Alan Mathinson Turing (1912-1954), matematico, logico e criptoanalista britannico, è considerato il padre della moderna informatica. Egli creò la macchina di Turing (MdT), un dispositivo per l’elaborazione dell’informazione che, pur nella sua semplicità, si dimostra in realtà molto potente. Tale macchina non è pensata per essere realizzata praticamente ma piuttosto studiata come entità astratta, perché lo studio delle sue proprietà aiuta a comprendere i concetti, le proprietà e gli eventuali limiti connessi all’elaborazione automatica dell’informazione, agli algoritmi e alla complessità. Si può descrivere così la macchina di Turing: Un alfabeto, insieme finito di simboli contenente il simbolo speciale blank e uno o più altri simboli. Un nastro suddiviso in celle, ognuna delle quali contiene un simbolo tratto dall’alfabeto. Una testina che è sempre posizionata su una cella del nastro (cella corrente) ed è in grado di leggere il simbolo contenuto in essa, scrivervi un simbolo, spostarsi nella cella adiacente in uno dei versi del nastro (destra o sinistra). Un insieme finito di stati contenente uno stato iniziale e uno o più altri stati alcuni dei quali sono individuati come stati finali; Un registro di stato che memorizza, in qualsiasi momento, lo stato corrente scelto nell’insieme degli stati. Una tabella delle azioni o funzione di transizione una tabella con 5 colonne e un numero finito di righe in cui, per ciascuna riga, sono indicati uno stato corrente, un simbolo finito di righe in cui, per ciascuna riga, sono indicati uno stato corrente, un simbolo presente nella cella corrente del nastro, un simbolo da scrivere nella cella corrente, il verso, destra o sinistra, in cui la testina deve spostarsi, il nuovo stato da memorizzare nel registro di stato. La MdT rappresenta un sistema automatico per l’elaborazione dell’informazione nel quale: 1) il nastro è il supporto fisico su cui è inizialmente codificata, con i simboli dell’alfabeto l’informazione in input; 2) la testina è incaricata di muoversi lungo il nastro leggendone e modificandone il contenuto e operando quindi la trasformazione fisica che porta progressivamente a rappresentare, sul nastro medesimo, l’informazione di output; 3) il registro degli stati costituisce una memoria interna del sistema che, in ogni momento, tiene traccia dello stato di avanzamento dell’elaborazione. Quando la MdT viene attivata, essa inizia a iterare su un ciclo che prevede, a ogni passo, l’esecuzione di queste operazioni: 1) lettura del simbolo contenuto nella cella corrente; 2) individuazione, nella tabella delle azioni, della riga in cui i primi due elementi sono rispettivamente lo stato corrente e il simbolo contenuto nella cella corrente; essa riporterà a lato il simbolo X,

il verso V, e lo stato S. 3)scrittura di X nella cella corrente. 4) spostamento della testina nella cella adiacente nel verso V; 5) impostazione di S nel registro di stato. L’interazione si conclude quando lo stato corrente risulta essere uno degli stati finali. Una MdT si comporta come un calcolatore in grado di eseguire un ben preciso e fisso algoritmo, quello espresso dalla relativa tabella delle azioni. Turing definì macchina di Turing universale una macchina in grado di simulare il funzionamento di qualsiasi altra macchina di Turing e ne descrisse in dettaglio una possibile realizzazione. Per simulare il funzionamento di una MdT M che elabora un nastro contenente la stringa di simboli s, alla MdT dovrà essere fornito un nastro suddiviso in 2 parti: nella parte sinistra sarà opportunamente codificata la tabella delle azioni di M, nella parte destra sarà contenuta la stringa di simboli s. la UTM è in grado di decodificare la tabella delle azioni di M e di applicarla su s simulando il funzionamento di M stessa. Sono molti a ritenere che la UTM abbia originato una delle caratteristiche più importanti dell’architettura di Von Neumann: l’impiego di un dispositivo di memoria unico per contenere le istruzioni e i dati. Del lavoro di Turing è importante menzionare anche la tesi di Church-Turing formulata indipendentemente, ma con contenuto sostanzialmente equivalente, a distanza di pochi mesi dapprima dal matematico e logico statunitense Alonzo Church e poi da Turing. Essa afferma che se una funzione è intuitivamente considerata calcolabile, allora esiste una macchina di Turing in grado di calcolarla. L’importanza della tesi di Church-Turing è che afferma che il modello espresso dalla MdT esprime compiutamente il concetto di algoritmo, è determinata da 2 conseguenze dirette: 1) le proprietà degli algoritmi possono essere studiate più facilmente sulle MdT, un modello di calcolo semplice ma potente come qualsiasi altro modello di calcolo; 2) se si costruisce un nuovo modello di calcolo, dimostrando che esso è in grado di simulare il funzionamento della UTM, lo si potrà ritenere potente almeno quanto tutti i modelli di calcolo esistenti. Poiché è possibile scrivere un programma che consenta a un calcolatore costruito secondo l’architettura di Von Neumann di simulare la macchina di Turing universale, si può dire che l’architettura di Von Neumann è Turing equivalente e quindi, per la tesi di Church-Turing, potente almeno quanto tutti i modelli di calcolo esistenti, in grado di calcolare tutte le funzioni intuitivamente considerate calcolabili. L’ingegneria del software: i software tipicamente utilizzati ai giorni nostri sono molto articolati e la loro progettazione e realizzazione è affidata, in genere, a gruppi di professionisti con diverse specializzazioni e una buona organizzazione interna. Si è quindi sviluppata l’ingegneria del software, una branca dell’ingegneria che si occupa secondo i criteri comunemente adottati in essa, di sviluppare approcci sistematici e disciplinati allo sviluppo, alla messa in opera e alla manutenzione del software a livello industriale. Le metodologie proposte dall’ingegneria del software per lo sviluppo di un nuovo

versione sorgente. Tale prodotto può essere copiato e distribuito liberamente. Pur con alcune differenze tra i 2 tipi di licenza, il software libero (non confondere con il freeware) e il software open source sono entrambi distribuiti con la versione sorgente dal titolare del diritto d’autore che ne incoraggia l’uso, lo studio, le modifiche e la redistribuzione a titolo gratuito ma nel rispetto di alcune regole tra cui:

  1. le versioni modificate del software devono sempre menzionare gli autori delle versioni precedenti.
  2. non è possibile distribuire il software originario o modificato con licenze incompatibili con quella originaria.
  3. il software originario o modificato deve sempre essere distribuito anche in formato di sorgente. Il software applicativo: il software per i calcolatori viene normalmente classificato in 2 categorie:
  4. software applicativo: programmi detti applicazioni, che risolvono o supportano l’utente nella risoluzione di problemi specifici in determinati ambiti applicativi.
  5. software di base: programmi di utilizzo generale che consentono l’interazione dell’utente con il calcolatore, gestiscono le risorse in dotazione allo stesso e supportano l’esecuzione del software applicativo. Innumerevoli sono le applicazioni disponibili in ogni ambito applicativo. Tra quelle di uso più comune ci sono i software di produttività individuale (applicazioni d’automazione d’ufficio) spesso distribuiti in pacchetti (ex. Microsoft office, Apache OpenOffice).
  • applicazioni di videoscrittura (word processor): supportano la stesura di documenti di testo, la loro correzione, formattazione e stampa. Tra la fase di digitazione e quella di stampa c’è la fase intermedia di memorizzazione infatti ne semplifica la formattazione e revisione. (ex. Microsoft World)
  • applicazioni per la gestione di fogli elettronici (fogli di calcolo) : supportano l’effettuazione di calcoli, l’elaborazione di dati e la predisposizione di efficaci rappresentazioni grafiche mediante la gestione di tabelle composte da celle disposte su righe e colonne, in cui si possono inserire i dati, formule e grafici basati sul contenuto delle altre celle e ricalcolati automaticamente al variare di queste. (ex. Microsoft Excel).
  • applicazioni per la produzione di presentazioni multimediali basate su diapositive (slide) (ex. Microsoft PowerPoint).

•applicazioni di desktop publishing supportano la produzione di volantini e brochure, sono simili alle applicazioni di videoscrittura ma più orientate all’impostazione grafica della pagina. (ex. Microsoft Publisher)

  • semplici applicativi per la gestione di basi di dati supportano la raccolta e l’organizzazione di dati in tabelle e la creazione di finestre per la loro gestione. (ex. Microsoft Access). •semplici editor web applicativi per la realizzazione di piccoli siti web. (ex. Adobe Dreamweaver)
  • applicazioni grafiche e di ritocco supportano l’acquisizione, la manipolazione, l’archiviazione e la stampa di fotografie. (ex. Adobe Photoshop)
  • applicazioni per la realizzazione di diagrammi (ex. Microsoft Visio) •applicazioni per la gestione delle finanze individuali: supportano la gestione del bilancio personale o famigliare. (ex. Quicken)
  • organizer: sostituiscono l’agenda cartacea nella gestione della rubrica e degli appuntamenti (ex. Microsoft Outlook)
  • applicazioni di project management supportano la gestione della pianificazione temporale di un progetto o del monitoraggio del suo stato di avanzamento (ex. Microsoft Project) Con la diffusione di massa della connessione a internet in banda larga, sono divenute molto popolari le applicazioni per l’impiego di specifici servizi disponibili online: browser web, client di posta elettronica, client peer to peer, client di messaggistica istantanea, client FTP.
  • applicazioni OCR: per il riconoscimento dei caratteri all’interno delle immagini derivanti dall’acquisizione con scanner di pagine di testo.
  • applicazioni CAD: orientate al disegno tecnico, anche tridimensionale.
  • videogiochi
  • applicazioni per la fruizione ed eventuale manipolazione di materiale multimediale, come AUDIO PLAYER e applicazioni per la masterizzazione di supporti ottici. Sempre più popolari sono la mobile application (o mobile app o app), si tratta di applicazioni realizzate per smartphone, tablet, pda o altri dispositivi mobili, che mirano a fornire all’utente la possibilità di trarre i massimi benefici da alcune caratteristiche offerte da tali dispositivi, quali la mobilità, la connettività, la multimedialità, e la capacità di determinare la posizione geografica. Devono, fare i

richiedere direttamente l’esecuzione di tali istruzioni, sono costretti a rivolgersi alla macchina virtuale che, tramite la propria interfaccia, la rende indirettamente accessibili mantenendone il controllo. La combinazione di un calcolatore con un sistema operativo costituisce a sua volta una macchina virtuale, con un’interfaccia per i programmi applicativi, e una per l’utente umano, denominata piattaforma Wintel è la piattaforma costituita dalla combinazione delle CPU prodotte dalla ditta Intel con il sistema operativo Windows prodotto da Microsoft. La disponibilità dello stesso sistema operativo su hardware differenti consente all’utente di agire con le stesse modalità operative su calcolatori che in realtà possono essere molto diversi tra loro. Al contrario dato un calcolatore, i vari sistemi operativi o le differenti versioni dello stesso sistema operativo possono richiedere all’utente modalità d’interazione molto diverse e incidere notevolmente sulla disponibilità di applicazioni software. Alcuni dei sistemi operativi più comunemente impiegati: 1 ) Unix : sviluppato alla fine degli anni ’60 presentava dapprima un’interfaccia CLI, affiancata successivamente da un GUI; è impiegato, in varie versioni, su personal computer, workstation, minicomputer, supercomputer. 2) Linux : famiglia di sistemi operativi, brillante esempio di software free e open source che si rifà a Unix ed è disponibile su calcolatori embedded, PDA, notebook, personal computer, workstation, server, supercomputer. 3) Windows : prodotto dalla ditta Microsoft, è un sistema operativo per personal computer e server, per lo più con CPU Intel e compatibili, caratterizzato da una GUI basata su finestre. 4) Mac OS : prodotto della ditta Apple per i suoi personal computer Machintosh, presenta una GUI a finestre. 5) iOS : derivato da Mac OS è distribuito da Apple sugli smartphone iPhone e sui tablet iPad. 6) Android : basato su Linux è ora sviluppato da Google e distribuito da molti produttori sui propri smartphone e tablet. 7) Le famiglie di sistemi operativi Windows per calcolatori embedded, PDA, smartphone e tablet, sono proposti da Microsoft con una GUI che si rifà a quella di Windows. La gestione della CPU : i primi calcolatori elettronici (anni ’40) erano monoprogrammati, in grado cioè di mantenere in memoria centrale ed eseguire un solo programma per volta, non disponevano di un sistema operativo, il programmatore accedeva direttamente a tutte le istruzioni della CPU, alle periferiche mediante un programma in linguaggio macchina codificato in genere su schede perforate. I dati in ingresso dovevano essere forniti su schede perforate e in un’unica soluzione prima dell’esecuzione del programma. Anni ’50 con l’obiettivo di un migliore sfruttamento della risorsa più costosa del calcolatore, la CPU, si pensò di ridurne i tempi di inattività tra la terminazione dell’esecuzione di un programma, l’inizio dell’esecuzione del successivo. Si introdusse il monitor, una prima visione di sistema operativo in grado di automatizzare l’avvio dei programmi. Mediante un

apposito linguaggio di comando, il Job Control Language (JCL) , si poteva predisporre un job, sorta di programma eseguito dal monitor per organizzare l’esecuzione in rapida successione. Poiché le schede perforate erano organizzate in lotti corrispondenti ai job, i calcolatori impiegati secondo tale modalità operativa vennero definiti sistemi batch. Anni ’60 per migliorare ulteriormente lo sfruttamento della CPU, si pensò di recuperarne i tempi di inattività corrispondenti all’attesa per le operazioni asincrone, gli accessi ai dispositivi di I/O, di memoria di massa lentissimi e fuori dal controllo della CPU. I calcolatori divennero sistemi multiprogrammati, in grado di tenere in RAM, contemporaneamente più programmi. La RAM era suddivisa in aree allocate a job diversi, in ogni istante, un solo job era in esecuzione. Quando questo richiedeva un’operazione asincrona, era messo in attesa per assegnare la CPU all’esecuzione di uno degli altri job. Sempre negli anni ’60 i videoterminali determinarono la progressiva scomparsa delle schede perforate introducendo la possibilità per il calcolatore di interagire con l’utente nel corso dell’esecuzione di un programma: l’input poteva essere inserito con la tastiera in funzione anche dell’output che il calcolatore esibiva a video. Nacquero applicazioni, rese possibili da questa interattività, e presto divenne popolare la classificazione in: 1) applicazioni I/O bound favoriscono lo spreco della risorsa CPU, costretta ad attendere inoperosamente l’input da tastiera. 2) applicazioni CPU bound richiedono in modo massiccio l’elaborazione da parte della CPU. Si collegarono allora più terminali allo stesso calcolatore che divenne un sistema timesharing o multitasking, in grado di offrire un parallelismo virtuale, di simulare per ciascun utente, la presenza di una CPU s lui dedicata. Per descrivere il funzionamento di un sistema timesharing, è necessario introdurre il concetto di processo un’entità dinamica in contrapposizione al programma che, in quanto insieme di istruzioni in linguaggio macchina, è un ‘entità statica. Quando è richiesta l’esecuzione di un programma, il sistema operativo crea un nuovo processo, in genere identificato con un numero univoco, e gli alloca in RAM lo spazio per le istruzioni del programma, un ulteriore spazio per i dati. Il processo si evolve nel corso dell’esecuzione del programma a esso associato e muore quando essa termina. Un singolo programma può essere eseguito da due o più processi: essi condividono lo spazio in RAM contenente il codice ma gestiscono i propri dati su spazi RAM distinti. In ogni istante, un processo si trova in uno dei seguenti stati: 1) pronto : il processo è inserito in una lista dei processi pronti, gestita da una componente detta scheduler e attende il suo turno per essere chiamato a transitare allo stato “in esecuzione”. 2) in esecuzione : il processo ha accesso alla CPU che ne esegue le istruzioni. 3) in attesa : il processo è in attesa del completamento di un’operazione asincrona e quindi di poter transitare allo stato “pronto”. Il processo viene posto in stato di “pronto” e inserito nella

completa disposizione l’intera RAM. Il gestore suddivide la memoria centrale in pagine blocchi di dimensioni fisse. Quando un programma viene caricato nella RAM, senza che esso se ne accorga, viene rilocato: il suo codice e la sua area dati vengono suddivisi in pagine e posizionati nelle pagine libere della RAM grazie alla Memory Managment Unit (MMU), un dispositivo hardware che mantiene una tabella di corrispondenza e che consente poi la conversione tra gli indirizzi logici impiegati dal programma e quelli fisici nella RAM. Se i processi richiedono, l’occupazione di un numero di pagine maggiore di quello disponibile, il gestore, sulla base del già citato principio di località, provvede allo swapping, il trasferimento in un’apposita area (area di swap) su memoria di mass, di quelle il cui impiego, nell’immediato futuro, è meno probabile. La gestione delle periferiche: nei primi calcolatori elettronici, l’impiego di una periferica da parte di un programma richiedeva al programmatore una perfetta conoscenza delle sue modalità operative e della sua interfaccia di controllo. A partire dagli anni ’60 i sistemi operativi hanno cominciato a inglobare un gestore con lo scopo di consentire a ogni processo di lavorare su periferiche virtuali:

  1. il processo opera su una periferica come se essa fosse completamente a sua disposizione mentre il gestore si occupa di risolvere i conflitti allocando a turno la periferica fisica ai processi che ne fanno richiesta. 2) il processo opera su ciascuna periferica in condizioni di device independence, impiega cioè i comandi di alto livello appropriati al tipo di periferica mentre il gestore, supportato dal driver, trasforma tali comandi generici in istruzioni specifiche per la periferica fisica e si occupa di tutti i dettagli relativi alla sincronizzazione, agli indirizzamenti. L’impiego di una data periferica su un calcolatore con un determinato sistema operativo è subordinato alla disponibilità del driver specifico per la periferica e per il sistema operativo; un software che fornisce al sistema operativo l’indicazione di dettaglio delle modalità operative per interagire con la periferica. Ogni sistema operativo è distribuito con i driver per le periferiche più comuni, gli altri sono in genere forniti dal produttore della periferica a corredo della stessa. Molti sistemi operativi su personal computer supportano il Plug and Play (PnP): quando il calcolatore, all’accensione o durante la sua attività, rileva la presenza di una nuova periferica, è in grado, di riconoscere il driver appropriato per essa, installarlo e configurarlo. La gestione dei file: il file system è il componente del sistema operativo che si occupa, della gestione delle memorie di massa, al cui interno i dati sono organizzati in file, contenitori logici di dati o istruzioni, unità base per la memorizzazione persistente su memoria di massa. Anche il file system si prodiga per consentire a utenti e programmi di operare in condizioni di device independence, di agire con successo sui dispositivi di memoria di massa senza conoscerne i dettagli tecnologici e realizzativi. Spesso esso costruisce, all’interno di un supporto di memoria di massa, una struttura logica gerarchica che

supportando gli utenti nell’organizzazione dei file in base al loro contenuto, ne facilita la successiva ricerca. In un supporto di memoria viene creata una cartella denominata radice. Essa può contenere file e/o cartelle che a loro volta, ricorsivamente, possono contenere file e/o cartelle dando origine a una struttura ad albero. Ogni file e ogni cartella sono identificati da un nome e un panthname la descrizione del percorso più breve per raggiungerli partendo dalla radice ed elencando i nomi di tutte le cartelle incontrate lungo il percorso stesso. Molti file system supportano la possibilità di sovrapporre alla struttura ad albero dei riferimenti che, consentono di simulare, all’interno di una cartella, la presenza di un’altra cartella o di un file ubicati in realtà altrove all’interno della gerarchia. Per ogni file o cartella, il file system memorizza e gestisce un insieme di proprietà tra cui: 1) il formato, indicazione del tipo di dati in esso contenuti e dell’applicazione che può essere impiegata per gestirli; 2) le dimensioni; 3) la data e ora di creazione; 4) la data e ora dell’ultima modifica; 5) le autorizzazioni, indicazione delle operazioni consentite ai singoli utenti o a gruppi di essi. Per file e cartelle, il file system deve consentire, a utenti o programmi autorizzati, varie operazioni tra cui: creazione, lettura del contenuto, modifica del contenuto, eliminazione, ridenominazione, spostamento all’interno dell’albero delle cartelle, backup. La gestione della rete: i moderni sistemi operativi integrano un componente importante il cui compito è la gestione della connessione in rete. Sono spesso definiti sistemi operativi di rete (NOS Network Operating System) perché progettati assumendo come praticamente obbligatoria la connessione del calcolatore in rete. Al livello di astrazione più basso, il gestore della rete si occupa di garantire la device independence grazie alla quale gli utenti e le applicazioni usufruiscono dei servizi disponibili in rete ignari dei dettagli relativi a mezzi fisici, indirizzi di rete, protocolli di comunicazione. A un livello più astratto, risulta importante la corretta gestione delle autorizzazioni all’accesso. Si ritiene qui interessante evidenziare differenti modalità di interazione tra utenti e calcolatori nell’ambito di una rete. 1) interazione uomo-calcolatore locale: è l’interazione tradizionale tra un utente e un’applicazione in esecuzione sul calcolatore locale, senza alcun impiego della connessione di rete. 2) interazione uomo-calcolatore remoto: tramite un’applicazione (client) in esecuzione sul calcolatore locale, l’utente interagisce con un’altra applicazione (server) in esecuzione sul calcolatore remoto connesso in rete e che, a sua volta può avvalersi di servizi resi da altri server. 3) interazioni tra uomini mediata da calcolatori: tramite un client in esecuzione sul calcolatore locale, l’utente interagisce, eventualmente per il tramite di uno o più server, con un altro utente che a sua volta impiega un client in esecuzione sul suo calcolatore. L’interfaccia con l’utente: l’interprete dei comandi (interfaccia uomo/macchina) è il componente del sistema operativo che gestisce direttamente l’interazione con l’utente; esso consente