Elementi del calcolatore: CPU Elementi del calcolatore: Memoria Elementi del calcolatore: Memoria Elementi del calcolatore: Hard Disk Antefatto Sistema Operativo Come il computer appare Il calcolatore elabora informazioni codificate in sequenze di bit I dispositivi si interfacciano con il calcolatore tramite complessi protocolli di comunicazione Il sistema operativo astrae questa complessità facilitando l uso e la gestione del calcolatore
Diagramma a cipolla 1. Astrazione dei dispositivi (driver) Consentire a che programmi e utenti interagiscano con i dispositivi in modo naturale Es. 1: Accedere al disco non con le coordinate (cil, trk, sec) ma tramite file Es. 2: Ottenere le coordinate del puntatore del mouse e non gli spostamenti dall ultimo aggiornamento 2. Gestione processi (programmi) Numerosi processi attivi nello stesso istante (come se fossero in parallelo) Politica time-sharing: il tempo diviso in slot e il S.O. assegna gli slot ai processi Sono necessarie ulteriori informazioni non accessibili agli utenti: aree di memoria protette, registri particolari Ogni calcolatore può funzionare in due modalità i. Modalità supervisore: accesso a istruzioni privilegiate che servono a gestire il sistema ii. Modalità utente: accesso proibito alle istruzioni privilegiate 3. Gestione risorse i. CPU: Assegnare gli slot temporali ai vari processi nel modo migliore possibile Esistono concetti di priorità Alcuni processi possono partire anche in mezzo agli slot temporali ii. Memoria centrale (memoria virtuale): La memoria centrale viene partizionata in pagine tutte di una data lunghezza Quando la memoria è totalmente occupata da pagine e ne serve un altra, una pagina in memoria viene spostata sul disco e lo spazio liberato riutilizzato (processo di SWAP) Problema inerentemente difficile da risolvere in maniera ottima Se mal realizzata la memoria virtuale porta ad alte inefficienze (vedi MSWindows)
iii. Gestione delle memorie di massa (file system) Permettere all utente di organizzare le informazioni in file e cartelle (folder, directory,.) Le cartelle contengono file o altre cartelle (struttura ad albero) Ogni file ha dei permessi, ovvero delle proprietà che determinano quali azioni gli utenti possono eseguire su di esso In UNIX ogni file ha un proprietario e un gruppo I permessi determinano cosa il proprietario, i membri del gruppo e tutti gli altri possono fare cpn quel file (leggere, scrivere, eseguire) File e cartelle hanno dei nomi alfanumerici (quasi) I file sono delle sequenza di byte che codificano delle informazioni Le informazioni sono identificate da Le estensioni: nome.jpg, nome.mp3, nome.f90, nome.txt Magic number: i primi bytes del file identificano il formato Struttura ad Albero del File System ROOT FILE CARTELLA Accedere al file system PATH (cammino) /home/server/utente1 (cartella) /home/server/utente1/prova.txt (file di testo) /bin/cp (comando per copiare dei file) In MS Windows si separano i nomi con \. identifica la cartella corrente,.. il livello superiore Accedere al file system Percorsi assoluti: quelli che iniziano con / /home/server/utente1/prova.txt Percorsi relativi: non iniziano con / Se si è all interno di /home/server/ per accedere a prova.txt a) utente1/prova.txt b)./utente1/prova.txt Diagramma: Architettura Software
Software di Base Comandi per gestire il file system e i processi a livello utente Creare un file (touch, >, ) (>, ) Creare una cartella (mkdir) (mkdir) Copiare un file (cp) (copy) Cancellare un file (rm) (del) Entrare in una cartella (cd) (cd) Help (man nomecomando!!! [ man man ]) Software di Base SHELL: programma principale di interfaccia con l utente per Eseguire comandi Lanciare programmi Eseguire script (Ogni shell ha associato un linguaggio che consente di specificare algoritmi) Software di Base Ancora Architettura Software Includono spesso Programmi di produttività Sviluppo software Multimedia Internet Software di base e software utente non sono categorie rigide (infatti sono sullo stesso livello) Software Utente Pacchetti applicativi utilizzati dall utente MSOffice, OpenOffice, Matlab, Autocad, Il software può essere proprietario Non modificabile e soggetto a licenze d uso Oppure Open Source Modificabile dall utente e ridistribuibile (licenza GPL) Linux e quasi tutti i suoi applicativi sono GPL!! Software Utente Software prodotto direttamente dall utente tramite Compilatori: ricevono un file di testo e producono il codice macchina per eseguire il programma Interpreti: un programma (parser) legge l input e esegue le istruzioni che vi sono scritte (shell, awk, perl, python ) Macchine virtuali: il programma è scritto per una macchina concettuale che viene simulata dal calcolatore (Java, molto usato in Internet)
Il Compilatore Il compilatore riceve in ingresso un programma specificato ad alto livello e restituisce lo stesso programma in linguaggio macchina Alto livello vuol dire in linguaggio simile a quello naturale (ma di fatto molto meno versatile) Lo stesso programma significa che la funzione calcolata dai due è la stessa (a meno di una codifica) Il Compilatore Il programma originale (codice sorgente) è scritto su un file di testo (un mero elenco di caratteri) Il compilatore procede attraverso alcune fasi 1. Analisi sintattica: vengono individuati i costrutti del linguaggio (parole chiave, variabili) e controllato il set di caratteri Rilevati errori sul set di caratteri 2. Analisi lessicale: vengono analizzate le istruzioni Es. 5+3*2 è legale, 5+-3*2 è illegale vengono comunicati i errori di sintassi Il Compilatore 3. Analisi semantica: il programma viene trasformato in un formato intermedio e vengono anche effettuate delle ottimizzazioni Le espressioni del linguaggio vengono tradotte in sequenze di istruzioni elementari Rilevati altri errori Questi tre passi (eventualmente ripetuti) generano il codice oggetto ovvero la sequenza di istruzioni macchina più alcune tabelle utili per la fase finale di link Il Linker Il codice oggetto non è un programma eseguibile Il programma manca di alcuni elementi che sono nelle librerie! Una libreria è un catalogo di funzioni e procedure (vedremo in futuro cosa sono esattamente) utilizzate dal programma Il Linker Se all interno del programma utilizziamo la funzione cos(x) o se stampiamo qualcosa sullo schermo (print) il compilatore produce un codice oggetto che chiama (CALL) queste funzioni Queste funzioni sono riposte in una libreria (nel caso di fortran nelle librerie runtime) Il linker produce il codice eseguibile che può essere caricato in memoria (fase di load (eseguita dal loader)) e eseguito Il Linker Il linker aggiunge al programma le funzioni di libreria utilizzate nel programma stesso Vengono aggiunte anche delle fasi di preambolo e postambolo che servono al programma per essere correttamente caricato in memoria e eseguito Non esiste solo la libreria di runtime, ma è possibile costruire nuove librerie con funzioni specifiche (alcune sono molto usate: BLAS, Lapack, FFTW, ) che vengono linkate ai programmi utenti
Il Compilatore Il compilatore, se non specificato altrimenti, esegui tutte queste fasi, anche la fase di link gfortran nome.f90 o nome )produce un eseguibile) gfortran nome.f90 c (non fa il link) gfortran nome.f90 S o nome.s (produce il codice assembly) Il compilatore può essere un programma complesso da usare quando i programmi diventano complessi Il Debugger Dopo che tutti gli errori sintattici (errori di compilazione) sono stati corretti, non è detto che il programma funzioni! Anzi! Possono verificarsi errori al runtime ( run è il verbo per indicare l esecuzione di un programma) che interrompono il programma Possono non verificarsi errori che interrompino il programma ma il programma stesso potrebbe non funzionare correttamente perché calcola la funzione sbagliata Il Debugger Un errore in un programma è chiamato bug Il debugger (gdb, ddd, dbx, ) è un programma che aiuta il programmatore a trovare gli errori Per usarlo servono i concetti di Breakpoint: il numero di riga di un file in cui il programma si deve interrompere Stepping: la possibilità di eseguire un programma passo-passo scorrendo le istruzioni di alto livello una a una Durante il processo possono essere stampati i valori delle variabili Si esegue con gdb programname (man gdb)