



Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Una panoramica introduttiva sul concetto di algoritmo e il ruolo del software in relazione ai computer. Esplora la distinzione tra software di sistema e applicativo, il ruolo dei driver, il kernel e l'interfaccia utente. Inoltre, tratta il concetto di gestione della memoria e la compressione dei file.
Tipologia: Appunti
1 / 7
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!




Software Algoritmi e programmi Il software è quella parte immateriale del computer che permette al calcolatore di svolgere un determinato compito. Per comprenderne il significato, bisogna individuarne 3 componenti: ● un software deve svolgere un compito, ossia risolvere un problema: un problema deve specificare la tipologia dei dati in ingresso (input) e dei dati in uscita (output); ● un algoritmo è una procedura automatica che risolve un determinato problema: specifica la sequenza di istruzioni da compiere sui dati in input per ottenere come output la soluzione corretta del problema; ● gli algoritmi sono la base dell’informatica, che si occupa di creare procedure automatiche per risolvere problemi in maniera affidabile, e preferibilmente rapida ed efficiente. ● un programma, o software, è la trascrizione (o implementazione) di un algoritmo in un linguaggio di programmazione, ossia un linguaggio che permette di esprimere delle istruzioni che un computer è in grado di eseguire; ● il compito del programmatore è scrivere questi programmi usando uno dei moltissimi linguaggi di programmazione esistenti. Il concetto di algoritmo non è per forza legato ai computer : uno dei più antichi è quello di Euclide. Software e computer Un utente non accede direttamente all’hardware di un computer, ma passa attraverso il software, ossia i programmi salvati sulla memoria secondaria. Questi sono formati da istruzioni che, eseguite attraverso l’hardware del computer, permettono di svolgere un determinato compito. Il software è diviso in due tipologie: ● Software di sistema (il sistema operativo e le sue componenti); ● Software applicativo (i programmi installati dall’utente). Gli utenti interagiscono con il computer attraverso applicativi (o applicazioni, o software applicativi) che a loro volta comunicano con il software di sistema, che si occupa della gestione dell’hardware. ● anche quando si pensa di interagire col sistema operativo, in buona parta dei casi si sta utilizzando un applicativo, messo a disposizione dagli sviluppatori del sistema operativo. Software di sistema Il software di sistema si presenta come intermediario tra i programmi applicativi e l’hardware, fornendo ai primi una rappresentazione astratta dell’hardware. ● In questo modo i programmi applicativi possono essere scritti riferendosi alla rappresentazione astratta, e non devono essere riscritti per poter interagire con ogni possibile hardware differente! ● Dato che ogni sistema operativo è differente, ognuno mette a disposizione dei comandi diversi per interagire con l’hardware: per questo motivo, un applicativo creato per funzionare su un certo sistema operativo non funziona se viene fatto girare su di un altro! Il software di sistema è composto da: ● Driver; ● Sistema operativo, a sua volta composto da: ● Kernel; ● Interfaccia utente (grafica o da linea di comando). Software di sistema: driver Un driver è un software che permette al sistema operativo di utilizzare un dispositivo hardware, dialogandoci attraverso un'interfaccia standard che astrae dall'implementazione dell'hardware e che ne considera solo il funzionamento logico:
● un driver è una specie di “libretto di istruzioni” dell’hardware, scritto in un linguaggio che può essere compreso dal sistema operativo; ● in questo modo hardware diverso costruito da produttori diversi può essere utilizzato in modo intercambiabile, basta avere i driver corretti! ● un driver è specifico sia dal punto di vista dell'hardware che pilota (ossia ogni dispositivo ha un driver dedicato), sia dal punto di vista del sistema operativo per cui è scritto (quindi un driver scritto per un sistema operativo, ad esempio per Windows, non funziona se utilizzato su un altro, per esempio su MacOS). Solitamente è creato dal produttore dell’hardware. Per far funzionare un componente hardware (ad esempio una scheda video) sul computer, bisogna utilizzare i driver corretti del componente per il sistema operativo che si sta utilizzando. Se lo si vuole cambiare, basta sostituire fisicamente il componente, e caricare i nuovi driver specifici per il nuovo componente. ● I sistemi operativi moderni hanno un archivio di driver, quindi scaricano automaticamente i driver adatti all’hardware montato sul computer. Il sistema operativo Il sistema operativo è il software fondamentale presente su un computer: si occupa di gestire l’hardware, i programmi applicativi e la loro interazione con gli utenti. Ne esistono tanti, di diversi produttori; alcuni sono specifici per un certo tipo di dispositivi (ad esempio per smartphone). Ogni Sistema operativo è composto da: ● Kernel; ● Interfaccia utente (grafica o da linea di comando). Il kernel Il kernel costituisce il nucleo (o nocciolo) di un sistema operativo: è quella parte del sistema operativo che si occupa di fornire ai processi (i programmi in esecuzione sul processore) un accesso sicuro e controllato all'hardware. Le funzioni principali del kernel sono:
nome, inserire o modificare informazioni in un file, leggerne il contenuto, visualizzarne le caratteristiche; ● proteggere i propri file in un sistema multi-utente, per impedire ad altri utenti di leggerli, scriverli o cancellarli; ● avere la possibilità di organizzare un insieme di file in sottoinsiemi secondo le loro caratteristiche, per avere una visione ordinata e strutturata delle informazioni sul disco. Fisicamente, i file sono memorizzati nei blocchi che compongono la memoria secondaria, ma logicamente sono organizzati in una struttura ad albero che ne consente l’organizzazione e suddivisione logica (e non rispecchia per forza la loro collocazione fisica sulla memoria secondaria). Directory (cartella) Il numero di file che devono essere memorizzati su un disco può essere molto elevato: si ha quindi la necessità di mantenere i file in una forma ordinata. Un unico spazio (contenitore) di file è scomodo, perché non è possibile avere due file con lo stesso nome nello stesso contenitore. La soluzione è quella di raggruppare i file in sottoinsiemi, memorizzati all’interno di contenitori dette cartelle (directory), creando una struttura ad albero. Il file system deve permettere di poter compiere operazioni sulle cartelle, ossia: creazione, rimozione, rinomina, visualizzazione del contenuto, copia o spostamento di file tra cartelle. Pathname Nel caso di un’organizzazione gerarchica a più livelli, il solo nome del file (o della directory) non è più sufficiente ad identificarlo univocamente, perché file con lo stesso nome possono essere presenti in cartelle diverse. Ci sono due modi per individuare un file o directory in modo univoco: ● specificare l’intera sequenza di directory che lo contengono, a partire dalla radice dell’albero (pathname assoluto); ● specificare l’intera sequenza di directory che lo contengono, a partire dalla posizione corrente (pathname relativo); Compressione dei file Comprimere file e cartelle consiste nell’utilizzare appositi algoritmi (implementati da programmi) per ridurre lo spazio che le informazioni occupano (senza intaccare il contenuto):
● navigare nel file system per modificare file e cartelle; ● eseguire (lanciare) i programmi applicativi installati sul computer. L’interfaccia utente può essere di due tipi: testuale o grafica. Interfaccia testuale In un’interfaccia testuale, l’utente si ritrova davanti ad uno schermo nero. L’unico modo per interagire col computer è attraverso la tastiera, impartendo alla macchina comandi testuali. Era la modalità standard fino alla fine degli anni ‘80; successivamente tutti i sistemi operativi si sono dotati di interfaccia grafica (ma permettono ancora di usare un’interfaccia testuale, che rimane utile per alcune operazioni). Interfaccia grafica Nel caso di interfaccia grafica, o GUI (Graphical User Interface), l’utente impartisce buona parte degli ordini al computer attraverso l’uso del mouse. Gli applicativi installati dovranno mostrare a schermo una serie di pulsanti e menu utilizzabili mediante il puntatore del mouse, limitando l’uso della tastiera al solo inserimento del testo. A sua volta, il sistema operativo dovrà offrire degli applicativi per gestire l’interazione con l’utente. Il clic del mouse su un’icona o pulsante viene tradotto dall’applicazione in una opportuna sequenza di istruzioni, che saranno trasmesse al kernel ed il computer eseguirà (se possibile) per soddisfare la richiesta dell’utente. Funzioni dell'interfaccia utente L’interfaccia utente (sia grafica che testuale) deve permettere di: ● Gestire il sistema operativo: ● installare nuovi programmi, e disinstallare (rimuovere) i programmi installati; ● configurare il sistema. ● Gestire l’interazione tra utente e computer, permettendo all’utente di: ● mandare in esecuzione (lanciare) un programma (ossia cercarlo sulla memoria secondaria, copiarlo sulla memoria principale ed eseguirlo sulla CPU); ● tramite un programma (od un comando), creare nuovi documenti o modificare documenti esistenti; ● manipolare il file system: eliminare documenti, riorganizzare la disposizione dei documenti, rinominare documenti esistenti, … ; ● accedere alle periferiche. Tutte queste operazioni devono poter essere svolte in maniera semplice e rapida da parte dell’utente: ● i diversi sistemi operativi si differenziano nei modi in cui consentono agli utenti di interfacciarsi al computer, e nel tipo di algoritmi e strutture dati che utilizzano “dietro le quinte” per svolgere questi compiti. Software applicativo I Software applicativi sono programmi opzionali, installati sul computer dall’utente o dal sistema operativo per svolgere funzioni specifiche, come: ● elaboratori di testo (word); fogli elettronici (excel); browser (chrome, firefox); visualizzatori file pdf (acrobat reader) e immagini; videogiochi, ... Un applicativo per poter funzionare deve essere compatibile col sistema operativo sul quale viene installato. Gli applicativi (ma in generale il software) possono essere di due tipi: ● con copyright o software proprietario: è coperto da diritti d'autore, pertanto una volta acquistato non è possibile (dal punto di vista legale) copiarlo, modificarlo, rivenderlo. Si divide in tre sotto- categorie:
● È utile per aumentare l’efficienza, perché un componente hardware costruito ad hoc sarà (tendenzialmente) più rapido del software che esegue lo stesso compito. Esempio: le schede di espansione. Questa idea è molto utilizzata nell’accezione di software come algoritmo: si crea un chip (microprocessore) che traduce in hardware un singolo algoritmo, in modo da rendere molto veloce lo svolgimento di quel compito. Da hardware a software Tramite software è possibile replicare il funzionamento di componenti hardware. È utile per: ● studiare il comportamento di un nuovo componente hardware che si sta progettando; ● testare il software da rilasciare su una macchina senza doverla necessariamente possedere (ad esempio, sviluppo app per smartphone); ● utilizzare software rilasciato su altri dispositivi o sistemi operativi. Questi concetti hanno portato allo sviluppo di: ● Emulatori; ● Macchine virtuali (Virtual Machine, VM); ● Container (macchine virtuali leggere). Emulazione Un emulatore è un software che replica il funzionamento di un sistema, ossia il suo hardware, su un altro sistema differente. Un emulatore riproduce attraverso software la circuiteria elettronica (l’hardware) di un altra macchina, e pertanto permette di eseguire il software del sistema emulato. ● Visto che riproduce solamente l’hardware, un emulatore è inutile se non si possiede anche il software del sistema emulato! ● Per poter funzionare in maniera efficace, la macchina emulata deve essere meno potente della macchina su cui viene eseguito l’emulatore! Da non confondere con simulatore, un software che replica il comportamento di un sistema. Un simulatore riscrive completamente il codice del programma da simulare, che in origine gira su una macchina, per farlo eseguire su una macchina differente, ma in modo che appaia come nella macchina originaria. Macchina virtuale Una macchina virtuale (virtual machine, VM) è un emulatore particolare che crea un ambiente virtuale che riproduce l’hardware di un computer, su cui è possibile installare un sistema operativo e degli applicativi. ● I due programmi più noti per la gestione di VM sono Vmware Workstation e Virtualbox. In ambito commerciale, ora si utilizzano molto delle versioni “leggere” di macchine virtuali, chiamate container, che emulano solo alcune componenti di un computer. ● Ogni container si comporta come se fosse un computer a sé stante: se un applicativo eseguito in un container ha dei problemi, non influisce sugli altri container. ● Il gestore di container più noto è Docker.