Elementi di Informatica - Sistemi operativi

Sistemi operativi
Sommario
Sistemi operativi
Sommario
Macchine virtuali
Il software di base
Il sistema operativo
Avviamento del calcolatore
Gestione del processore
Gestione della memoria principale
Gestione della memoria di massa (file system)
Gestione delle periferiche
Interazione con l’utente
Strumenti per la programmazione
Compilatori e Interpreti
I programmi applicativi
Riprendiamo il discorso sull'architettura del calcolatore. Nella lezione sullo hardware abbiamo visto che
Un calcolatore è un insieme di circuiti elettronici (molto complicati) che alimentati si
scambiano ed elaborano dei segnali elettrici rappresentanti due valori, 0 e 1 (presenza e
assenza di tensione).
Compiendo un passo di astrazione, grazie al fatto che abbiamo studiato il ciclo di funzionamento della
CPU, possiamo anche affermare che
Un calcolatore è una macchina in grado di eseguire delle istruzioni rappresentate da
sequenze binarie (di “0” e “1”).
Dunque un calcolatore "nudo" non è utilizzabile dagli utenti, ma essendo programmabile, e può essere
equipaggiato con un insieme di programmi (software) che lo rendano utilizzabile (per fortuna!)
Il software deve permettere di:
astrarre dall’organizzazione fisica del calcolatore,
interagire in modo semplice con il calcolatore,
La parola chiave è astrazione: il sw deve realizzare una macchina virtuale (cioè che in realtà non esiste) a
partire da un calcolatore elettronico, astraendo dai dettagli dello hardware. L'utente interagisce con la
macchina virtuale e non con la macchina fisica. Astrarre (come "estrarre") vuol dire rimuovere dettagli.
Macchine virtuali
Una macchina è descritta dall’insieme delle funzioni che è in grado di svolgere.
Una macchina virtuale è una macchina in cui una parte delle sue funzioni sono realizzate da programmi.
Il termine “virtuale” sta proprio a indicare che tale macchina non esiste realmente, ma che una parte delle
sue funzioni è realizzata dal software.
Una macchina virtuale è organizzata in una struttura a più strati (a cipolla):
il nucleo più interno rappresenta l’hardware, gli altri strati rappresentano programmi che aggiungono
funzioni (sempre più astratte/complesse rispetto all’Hw) alla macchina virtuale.
Ogni strato aggiunge nuove funzioni utilizzando le funzioni realizzate dagli strati sottostanti
(nascondendole in parte, agli strati superiori),
Lo strato più esterno rappresenta le applicazioni utente.
Il software di base
È l’insieme dei programmi che realizzano la macchina virtuale utilizzabile dall’utente. Due classi di
programmi:
Sistema operativo (Operating System):
Si occupa della gestione delle risorse, dell'avviamento del calcolatore e della creazione dell’ambiente
(virtuale) dell’utente. In particolare, esso controlla:
la gestione del processore e dei processi
la gestione della memoria principale
la gestione delle periferiche
l'interazione tra utente e sistema
Strumenti per la programmazione:
traduzione tra linguaggi diversi (interpreti, compilatori)
ambienti per lo sviluppo software (IDE, Integrated Development Environment)
Il sistema operativo
È un insieme di programmi fondamentale per il buon funzionamento di un calcolatore. Ha lo scopo di:
gestire efficientemente il calcolatore e le sue periferiche
creare un ambiente per l’interazione tra l’uomo e la macchina
realizzato a livelli, ogni livello fornisce funzioni diverse:
I livelli bassi (vicino all’HW) si occupano della gestione efficiente di: processore, memoria principale,
periferiche
I livelli alti (vicino all’utente) si occupano dell'interazione con l’utente.
Funzioni di un sistema operativo:
Avviamento calcolatore (boot)
gestione dei processi
gestione della memoria (RAM) reale e virtuale
gestione memoria di massa e il file system
gestione delle periferche
interazione con l’utente
La parte più esterna del S.O., quella che implementa l'interazione con l'utente, prende anche il nome di
shell (guscio). Mentre la parte più interna, quella che comprende la gestione processi (ma non solo) si
chiama kernel (nucleo).
Numero di utenti
monoutente: elaboratori per uso personale
multiutente: utilizzabili da più utenti contemporaneamente
Modo di elaborazione
monoprogrammati: eseguono un solo programma alla volta (oltre al S.O). Il programma corrente
(in esecuzione) deve completare la propria esecuzione prima che ne possa essere eseguito un altro.
Un solo programma alla volta in memoria centrale (oltre al S.O).
multiprogrammati (multitasking): più programmi risiedono in memoria centrale e sono pronti per
essere eseguiti. Il programma in esecuzione può essere temporaneamente interrotto e sostituito da
un altro programma.
Esempi di sistemi operativi
Unix: sistema operativo multiutente e multitasking con implementazioni per molti processori e usato per
mini/micro computer, server, … . Ne esistono diversi dialetti Unix: BSD4.2, AT&T System V, Solaris,
Linux, HP/UX .
MacOs (ver. 7-9): sistema operativo monoutente e multitasking con interfaccia grafica integrata; esistono
implementazioni per Motorola 680x0 e PowerPc.
Mac OS X: dalla versione 10 il S.O. dei Mac è profondamente cambiato. Esso si ispira a NextStep, e si
basa su di un nucleo di Unix; ne esistono implementazioni per PowerPc e Intel.
Windows: sistema operativo monoutente e multitasking con interfaccia grafica ormai totalmente integrata
(non Windows 95 che si basa su MSDOS); ne esistono implementazioni per processori Intel e compatibili
(AMD).
Un SO implementa funzionalità che dipendono dalla sua tipologia, ma che non dipendono dal processore:
una architettura con processore Intel può supportare Windows, Linux e Mac OS X.
Avviamento del calcolatore
Il processo di avvio del sistema operativo da computer spento si chiama boot o bootstrap. Può essere
interessante capire come funziona nel dettaglio questa fase.
All’accensione del calcolatore il Program Counter viene "inizializzato" con un indirizzo della memoria
ROM (p.es. FFFF0, questo è cablato nel processore) dove inizia un programma chiamato BIOS (o Basic
Input / Output System). Grazie al fatto che la CPU inizia a compiere il suo ciclo fetch-execute, il BIOS
viene eseguito.
Il BIOS effettua vari controlli sull'hardware presente, ma soprattutto:
identifica il disco di avvio (di solito quello con il numero più basso)
carica in memoria da esso (da una posizione fissa corrispondente al primo settore del disco) un
programma chiamato boot loader;
esegue il boot loader, il quale si occupa di caricare in memoria (dal disco) e mandare in esecuzione
il sistema operativo.
Da quel momento in poi il controllo passa al sistema operativo. Man mano che il S. O. viene caricato,
diventano disponibili le varie funzioni; vengono identificate le risorse disponibili (periferiche, memoria
secondaria) e controllato il loro stato.
Gestione del processore
La gestione del processore, il componente più importante di un calcolatore, deve essere efficiente.
Nei sistemi monoprogrammati l’esecuzione di un programma avviene senza interruzioni. Si ha un uso
inefficiente del processore.
E.g., se il programma in esecuzione richiede un’operazione di I/O, esso deve aspettare il compimento di
tale operazione da parte della periferica, con spreco di tempo, mentre il processore è inutilizzato.
Nei sistemi multiprogrammati l’esecuzione di un programma può subire interruzioni. E.g., se il processo in
esecuzione richiede un’operazione di I/O, esso viene messo in attesa, il processore passa a eseguire un
processo pronto e in seguito al compimento dell’operazione di I/O il primo processo passerà dallo stato di
attesa a quello di pronto e così prima o poi la sua esecuzione sarà ripresa.
Convenienza della multiprogrammazione
La convenienza della multiprogrammazione è motivata dalla velocità delle periferiche, migliaia di volte più
lente del processore.
Il tempo di attesa (per il completamento di un'operazione I/O) di un programma è molto superiore rispetto
al suo tempo di esecuzione.
Questo spiega perché i sistemi monoprogrammati sono inefficienti: il processore è inattivo (idle) per lungo
tempo.
La multiprogrammazione produce i seguenti vantaggi pratici:
Nei sistemi monoutente si possono usare più applicazioni contemporaneamente, ad esempio:
un programma di elaborazione di testi e un programma di grafica per produrre un
documento contenente immagini.
nel caso di attivazione di un programma mentre si sta usando un’altra applicazione (e.g.
programma di grafica), l’attività dei due programmi viene svolta seguendo alternativamente
i due programmi per brevi periodi (decine di ms.). L’applicazione utente può continuare a
funzionare, con solo qualche rallentamento nel suo funzionamento.
Nei sistemi multiutente l’uso condiviso della CPU da parte di più processi di utenti diversi ad
intervalli regolari (decine di millisecondi) fa si che ogni utente creda di essere l’unico utente del
sistema e di avere a disposizione tutte le risorse. Questi sistemi sono detti a partizione di tempo (o
time sharing).
I processi
Un processo è un programma che può interrompere la propria esecuzione, assumendo (almeno) tre
possibili stati: pronto, esecuzione, attesa.
Nei calcolatori con un unico processore, un solo processo è in esecuzione, mentre possono esistere diversi
processi negli altri due stati.
La multiutenza è di solito creata con la partizione di tempo: il tempo del processore è suddiviso tra i
processi. La tecnica più semplice è quella "round robin" che assegna in modo ciclico ai processi pronti un
quanto di tempo (ad es. 30 millisecondi) del processore per la loro esecuzione.
In realtà i processi pronti possono essere in memoria centrale o in memoria di massa, e dunque il gestore
dei processi deve anche occuparsi di caricare e scaricarli dalla memoria di massa. Per ragioni di efficienza - infatti -- prima di essere messo in esecuzione un processo deve essere pronto in memoria centrale.
Gestione del multitasking
Il gestore dei processi in un sistema multiprogrammato dovrà dunque:
ricordare lo stato di ogni processo mediante una tabella dei processi che contiene l'immagine dei
processi, ovvero il loro codice e i relativi dati;
realizzare il cambio di contesto, cioè il cambio del processo in esecuzione;
eseguire lo scheduling del processore (scelta del processo da mandare in esecuzione);
coordinamento, sincronizzazione e mutua esclusione tra processi:
conflitti nella condivisione delle risorse,
scambio di dati tra processi.
I processi di sistema
In un S.O. multiprogrammato, i programmi del S.O. sono gestiti come i programmi utente, e sono quindi
dei processi a tutti gli effetti.
Possono essere sempre attivi e presenti in memoria principale (ad es. in Windows, sono visibili dal Task
Manager)
Vengono eseguiti non appena necessario (in seguito ad un segnale di interruzione o interrupt) e hanno una
priorità superiore a quella dei processi utente.
Gestione della memoria principale
In un S.O. multiprogrammato, i processi esistenti devono condividere la memoria principale, cioè il codice
dei processi deve essere caricato nella memoria principale, in modo che ad ogni cambio di contesto non sia
sempre necessario caricare/scaricare i programmi in memoria.
Si pone quindi il problema di non sovrapporre/danneggiare dati.
Questo vale anche per i processi di sistema (sempre esistenti) che devono essere protetti dai processi
utente.
È conveniente dare ai processi la visione di una memoria virtuale, anche se condivisa, più grande di quella
effettivamente installata.
Memoria reale e virtuale
La memoria reale è la memoria RAM, che viene suddivisa tra i processi con:
partizioni con allocazione continua
partizioni con allocazione non contigua
La memoria principale a disposizione di un processo dipende dal numero dei processi esistenti.
La memoria virtuale è la memoria che i processi credono di avere a disposizione. Essa è una memoria
fittizia, più estesa della memoria RAM, ed è simulata dal sistema operativo usando parti della memoria
secondaria e la memoria RAM assegnata ai processi.
Paginazione: una tecnica di memoria virtuale
La memoria è suddivisa in aree di uguali dimensioni (comprese tra 512 B e 64 KB, con valori tipici di 1-4
KB) dette pagine.
Ad ogni processo viene assegnato un certo numero di pagine di memoria centrale (pagine fisiche),
solitamente inferiore al numero necessario per mantenere il codice del processo (pagine logiche). Il
processo "vede" le pagine logiche come un blocco di memoria contigua, mentre le corrispondenti pagine
fisiche non necessariamente lo sono.
L'implementazione della memoria virtuale è basata sulle tecniche di swapping e page demanding.
Un processo che tenta di accedere a un indirizzo di una pagina non caricata in memoria (page fault):
libera dello spazio di memoria scaricando una o più pagine sul disco (page swapping),
oppure gli viene assegnata una pagina fisica libera su cui caricare la pagina mancante (page
demanding)..
Così, effettuando quando necessario una serie di trasferimenti tra memoria RAM e disco, ogni processo
può disporre di una memoria virtuale limitata solamente dalle dimensioni del disco rigido.
Gestione della memoria di massa (file system)
I supporti di memoria di massa memorizzano permanentemente dati e programmi e servono per
l'implementazione della memoria virtuale.
La memorizzazione permanente dei dati avviene tramite il file system, il modulo del sistema operativo che
gestisce le informazioni, organizzate in file (archivio).
I file
Un file raggruppa informazioni elementari in dati strutturati complessi ed è composto da una sequenza di
record.
Un record (registrazione) è un insieme di campi logicamente correlati che costituiscono una informazione
complessa.
Un campo è una singola informazione (numero, carattere, etc.).
Ad esempio, nome, cognome, data di nascita, stato civile, impiego costituiscono i campi di un record che
rappresenta i dati anagrafici di una persona
I record hanno lunghezza costante/variabile
I file sono strutturati se le registrazioni hanno un formato complesso.
I file di testo sono quelli "meno strutturati": un record è costituito da un unico campo di tipo carattere.
I file sono ad accesso sequenziale/casuale/indicizzato.
Ad ogni file è associato un nome, così non è necessario conoscere l’indirizzo della zona di memoria in cui
risiede.
Le operazioni tipiche sui file sono: creazione, distruzione, copia, visualizzazione, stampa,
lettura/modifica/scrittura, ridenominazione.
L’organizzazione del file system suddivide i file in gruppi, detti directory/folder/cartella.
Ogni cartella può contenere altre cartelle. In questo modo si gestiscono grandi quantità di file organizzati in
una gerarchia.
I file devono essere protetti: il proprietario deve avere l’accesso in lettura, scrittura ed esecuzione e solo lui
può concedere ad altri tali privilegi.
Molti S.O. organizzano il file system come un diagramma ramificato (albero) di directory e file (foglie).
Ogni directory contiene
dei file
un riferimento alla directory padre (quella da cui discende), indicata con “..”
un riferimento a sé stessa, indicata con “.”
un riferimento alle directory discendenti (figli)
Un file è identificato all’interno del file system dal suo pathname (percorso), ovvero dalla sequenza di
directory che si devono accedere per raggiungere il file a partire dalla radice del file system (percorso
assoluto) o da una specifica directory (percorso relativo).
Esempio di file system
apps/mdraw.exe è il percorso assoluto del file mdraw.exe
esami/iscrgen.doc è un percorso del file iscrgen.doc relativo alla directory didat
../bianchi/file1.jpg è un percorso del file file1.jpg relativo alla directory rossi
../../utenti/bianchi/file1.jpg è un percorso del file file1.jpg relativo alla directory esami
La cartella radice del file system, denominata root come nei sistemi Unix e Linux, è in Windows un disco
di nome, ad es. A: (floppy), C: , D: , …, etc
Organizzazione fisica dei file
Un file viene memorizzato in una serie di blocchi (settori), non necessariamente contigui, di memoria
secondaria.
I blocchi che memorizzano il contenuto di un file:
sono concatenati tra loro: ogni blocco contiene l’indirizzo del blocco seguente (Win)
sono reperibili attraverso una tabella (indice) contenente gli indirizzi dei blocchi (Unix)
La tabella di allocazione dei file (FAT - File Allocation Table) contiene in ogni riga le informazioni su un
file: nome, data, dimensione, proprietario, tipo, indirizzo del primo blocco/indirizzo dell’indice.
Gestione delle periferiche
Obiettivi:
fornire agli utenti una visione astratta delle periferiche, con comandi semplici,
razionalizzare l’uso dei dispositivi.
Esistono due tipi di dispositivi:
a controllo di programma: il S.O. accede alla memoria (piccola) del dispositivo
DMA (Direct Memory Access): leggono e scrivono direttamente in memoria
Il S.O. viene avvisato della richiesta di operazioni da un segnale di "interrupt" e manda in esecuzione il
driver del dispositivo. Quest'ultimo è un particolare programma che gestisce le peculiarità del dispositivo
stesso.
Interazione con l’utente
L’utente accede alle funzioni del S.O. tramite un’interfaccia utente, basata su un linguaggio di interazione
tra utente e sistema
interazione testuale: l’utente usa dei comandi testuali (codici) con una sintassi precisa
interazione grafica: l’utente accede ai comandi e ai dati tramite elementi grafici selezionabili con
dispositivi di puntamento video
Funzioni utente disponibili attraverso l’interfaccia di un S.O.
gestione dei file: operazioni sui file e sul file system
gestione delle periferiche: operazioni di stampa, funzionalità di tastiera e mouse
gestione dei programmi applicativi: memorizzazione nel file system, esecuzione dei programmi
accesso dei dati: visualizzazione dati
funzionalità di base per i programmi applicativi
Interfaccia testuale
È realizzata tramite un processo, detto interprete dei comandi (Command Line Interpreter), che viene
mandato in esecuzione all’avvio della macchina.
L'interprete dei comandi segnala la disponibilità ad accettare ed eseguire comandi visualizzando un
prompt (e.g. “>” ) sul monitor, l’utente digita nome e argomenti di un comando, poi preme return (invio).
L'interprete legge quanto è stato scritto e se è corretto esegue il comando, altrimenti segnala l’errore
all’utente; poi visualizza di nuovo il prompt e attende un nuovo comando da eseguire.
La sintassi dei comandi dipende dal S.O.
L'interazione testuale è sempre meno usata perché poco amichevole verso l’utente (non è user-friendly):
è necessario conoscere la sintassi dei comandi
ci sono delle facilitazioni: help on line, abbreviazioni
continua a essere usata dai tecnici (programmatori e sistemisti) perché l’esecuzione dei comandi è
molto veloce
si possono scrivere dei file contenenti delle sequenze di comandi (script): sono detti batch file (file
di testo eseguibili, con estensione .bat) in MS-DOS, shell script in Unix o Linux
Interfaccie grafiche
Le interfacce grafiche (Graphical user interface, GUI) sono state introdotte per superare i limiti delle
interfacce testuali e per favorire soprattutto gli utenti poco esperti. Sono state studiate dalla Xerox tra ‘70 e
‘80; utilizzate per la prima volta da Apple per Lisa e Macintosh.
In seguito, anche gli altri produttori di S.O. usarono le GUI: Windows, X-Windows, Amiga, NextStep ;
L’accesso al S.O. avviene tramite un video grafico con un dispositivo di puntamento (e.g. mouse).
Una metafora delle GUI: la scrivania
La metafora della scrivania (desktop) rappresenta fedelmente una GUI:
Il video rappresenta il piano di una scrivania, su cui appaiono degli oggetti, così come appaiono su
una scrivania reale
gli oggetti sono rappresentate da icone
i dati e i programmi sono considerati come oggetti e pertanto rappresentati da icone
si opera sugli oggetti della scrivania selezionandoli e applicandogli una particolare operazione o
strumento
Il file system è visto come uno schedario che contiene: i file di dati, rappresentati come documenti
sulla scrivania; le directory, rappresentate come cartelle dentro lo schedario; i programmi
applicativi (equivalenti agli strumenti che si trovano sulla scrivania, e. g. rubrica, penna, etc).
Elementi grafici di base (WIMP)
W - finestre: aree dello schermo che mostrano dati, programmi, icone, testo, grafica, etc. Hanno
bottoni per chiusura, spostamento, ridimensionamento. Caso speciale: finestre di dialogo
I - icone: una piccola immagine o un simbolo che serve come rappresentazione rapida ed intuitiva
di uno strumento software, funzione o un file di dati.
M - menù: lista di comandi che appare come risposta al click del mouse sul titolo del menù
P - puntatore: a forma di freccia, si sposta in conformità con il movimento del mouse
Vi sono poi
pulsanti: una volta premuti generano azioni immediate (button), per scelte mutuamente esclusive
(radio button), per selezionare opzioni (check box). La loro funzione è illustrata da una icona o da
un testo
controlli a scorrimento (slider): servono ad impostare un valore in un intervallo continuo.
Menu:
a tendina
pop-up
menu a cascata
scorciatoie (shortcut)
Funzioni standard
Nuovo
Apri
Chiudi
Salva (Salva con nome)
Stampa
Esci
Interazione
Apertura di icone: tramite selezione e doppio click col mouse, si lancia il programma o si apre un
file dati associato all’icona
Apertura/chiusura finestre: creazione e rimozione di una finestra
Cut & paste: eliminazione (cut) e copia in un’area di memoria temporanea (clipboard) di un
oggetto, da dove può essere ricopiato altrove (paste)
Drag & drop: trascinamento di un oggetto da un punto ad un altro della scrivania
Le differenze tra S.O. diversi sono minime: numero di click, posizione degli elementi grafici sulle finestre,
etc.
Strumenti per la programmazione
La programmazione nel linguaggio macchina di un processore è molto difficoltosa.
Occorre avere un linguaggio semplice per scrivere dei programmi applicativi che svolgano compiti anche
di notevole difficoltà.
Dobbiamo allora realizzare una macchina astratta (cioè che in realtà non esiste) a partire da un calcolatore
elettronico, che sia in grado di eseguire i programmi scritti in un linguaggio di programmazione.
I programmatori di applicazioni non scrivono programmi applicativi nel linguaggio macchina della CPU
ma utilizzano un “linguaggio ad alto livello”, più facile da usare che permette di scrivere programmi
in minor tempo
con meno errori (presenti anche nel prodotto finale)
modulari e in forma standardizzata, per facilitarne la riusabilità e la manutenzione
Il programmatore “vede” il calcolatore come una macchina astratta in grado di eseguire programmi in un
linguaggio evoluto
Compilatori e Interpreti
La macchina astratta che esegue un programma in un linguaggio ad alto livello (programma sorgente) è
realizzata tramite un programma (facente parte del software di base) che traduce il programma sorgente in
un programma equivalente nel linguaggio macchina del processore (codice oggetto o codice eseguibile). Il
codice oggetto sarà quindi eseguito dal processore.
Una macchina virtuale (che esegue programmi in un linguaggio ad alto livello L) è composta
dall'hardware, dal sistema operativo, e da un programma traduttore.
Linguaggi ad alto livello: C, C++, Pascal, Java, Javascript, Cobol, VisualBasic, PostScript, Lisp, ...
Programma Java per il calcolo dei numeri triangolari
class NumTriangolari {
public static void main (String[] args) {
System.out.println("inserire un intero");
int S=0, Y=0, X = IngressoDati.leggiInt();
while (Y <= X ) {
S = S + Y ;
Y++ ;
}
System.out.println(S);
}
}
Esempio di programma Assembler
; prog. che copia i valori negativi di un vettore vet1 di numeri interi
; nel vettore vet2. I numeri sono interi a 16 bit in complemento a 2.
lea vet1,A0
; indirizzo vet1 -> A0
lea vet2,A1
; indirizzo vet2 -> A1
move.w #4,D1
; n. elementi vet1 -1 -> D1
ciclo: move.w (A0)+,D0 ; vet1[i] -> D0
bge salta ; se D0≥
0 vai a salta
move.w D0,(A1)+
; D0 -> (A1) , A1+2 -> A1
salta: dbra D1, ciclo
; se ci sono altri elementi da elaborare vai a ciclo
jsr stop
; fine programma
vet1: dc.w 5,-3,4,-2,8 ; vettore 1
vet2: ds.w 5
; vettore 2
end
La traduzione è realizzabile in due modi diversi:
compilazione: un programma, il compilatore, traduce un programma sorgente P scritto in un
linguaggio L ad alto livello in un nuovo programma P’ nel linguaggio macchina del processore
interpretazione: un programma, l’interprete, legge ogni istruzione del programma sorgente P, la
traduce e la esegue direttamente
Un linguaggio si dice interpretato se sono prevalentemente disponibili degli interpreti di tale linguaggio,
altrimenti si dice compilato. Tale scelta dipende anche dalle caratteristiche del linguaggio
Il tempo di esecuzione del codice oggetto prodotto dalla compilazione di un programma P è molto inferiore
al tempo di esecuzione di P da parte di un interprete. Le normali applicazioni sono scritte in linguaggi
compilati: e.g. C, C++.
Un programma che viene modificato deve essere nuovamente compilato prima di essere eseguito
un interprete è più facilmente realizzabile di un compilatore
Riassumendo: la compilazione produce applicazioni più veloci, ma nello sviluppo di prototipi gli interpreti
sono preferiti perché più flessibili
In alcuni ambiti, la scelta di un linguaggio interpretato è però d’obbligo.
Uno di questi è il web: i linguaggi di scripting (JavaScipt, Visual Basic) usati per la costruzione di siti web
dinamici sono interpretati.
Un browser contiene al proprio interno l’interprete del linguaggio di scripting, così, al caricamento di una
pagina web, può eseguire gli script nella pagina.
La scelta di introdurre il (o un riferimento al) codice compilato all’interno di una pagina non funziona,
perché questo è scritto nel linguaggio macchina di un processore e non può essere eseguito da calcolatori
con processori diversi.
Quando siano disponibili sia un compilatore che un interprete di un linguaggio di programmazione, un
programma applicativo viene sviluppato usando preferibilmente un interprete e, una volta messo a punto,
viene compilato.
Il codice oggetto non è facilmente modificabile e/o riutilizzabile dall’utente: e.g. non è utilizzabile per
ricavare il programma sorgente.
I programmi applicativi
Sono programmi che forniscono funzionalità di alto livello agli utenti:
elaboratori di testi
fogli elettronici
basi di dati
programmi di grafica
statistica
I programmi applicativi si basano sul S.O. e sulla sua interfaccia:
ogni programma funziona sul S.O. specifico per cui è stato creato
bisogna farne una versione per ogni S.O.
Gli utenti di un sistema informatico si suddividono in tre categorie:
programmatori di sistema: realizzano i programmi applicativi utilizzando le funzioni del S.O.
amministratori di sistema: gestiscono il sistema, e.g., creando account per gli utenti, stabilendo i
diritti d’accesso al file system e ai dispositivi degli utenti, aggiornando il S.O., i programmi
applicativi e l’hardware, effettuando il salvataggio periodico dei dati (backup)
utenti applicativi: utilizzano i programmi applicativi e hanno una visione dell’intero sistema
limitata ad alcune componenti del S.O.
[Rielaborazione a cura di A. Fusiello degli appunti di S. Mazzanti.]